From ec57e67133695d566296d426f1b9e91558b3f293 Mon Sep 17 00:00:00 2001 From: Rustam Zaitov Date: Tue, 29 Oct 2013 02:14:09 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20=D1=81=D0=BE=D0=B7?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B1=D1=8D=D0=BA=D0=B0=D0=BF?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - scripts/UnitTests/BackupParser/__init__.py | 1 + .../BackupParser/test_createBackupParser.py | 13 +++++++++ .../BackupParser/CreateBackupArguments.py | 3 ++ .../parser/BackupParser/CreateBackupParser.py | 29 +++++++++++++++++++ scripts/parser/BackupParser/__init__.py | 1 + scripts/parser/CopyParser/CopyLineParser.py | 8 ----- scripts/parser/LineParser.py | 10 ++++++- 8 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 scripts/UnitTests/BackupParser/__init__.py create mode 100644 scripts/UnitTests/BackupParser/test_createBackupParser.py create mode 100644 scripts/parser/BackupParser/CreateBackupArguments.py create mode 100644 scripts/parser/BackupParser/CreateBackupParser.py create mode 100644 scripts/parser/BackupParser/__init__.py diff --git a/.gitignore b/.gitignore index 36a62c6..217ce48 100644 --- a/.gitignore +++ b/.gitignore @@ -168,7 +168,6 @@ Generated_Code #added for RIA/Silverlight projects # Backup & report files from converting an old project file to a newer # Visual Studio version. Backup files are not needed, because we have git ;-) _UpgradeReport_Files/ -Backup*/ UpgradeLog*.XML diff --git a/scripts/UnitTests/BackupParser/__init__.py b/scripts/UnitTests/BackupParser/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/UnitTests/BackupParser/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' diff --git a/scripts/UnitTests/BackupParser/test_createBackupParser.py b/scripts/UnitTests/BackupParser/test_createBackupParser.py new file mode 100644 index 0000000..8b5b199 --- /dev/null +++ b/scripts/UnitTests/BackupParser/test_createBackupParser.py @@ -0,0 +1,13 @@ +import unittest +from parser.BackupParser.CreateBackupParser import CreateBackupParser + + +class TestCreateBackupParser(unittest.TestCase): + def setUp(self): + self.__parser = CreateBackupParser() + + def test_validInput(self): + line = "create backup for 'SomeFolder'" + createBackupArgs = self.__parser.parseLine(line) + + self.assertEqual('SomeFolder', createBackupArgs.folderName) \ No newline at end of file diff --git a/scripts/parser/BackupParser/CreateBackupArguments.py b/scripts/parser/BackupParser/CreateBackupArguments.py new file mode 100644 index 0000000..0a43b19 --- /dev/null +++ b/scripts/parser/BackupParser/CreateBackupArguments.py @@ -0,0 +1,3 @@ +class CreateBackupArguments: + def __init__(self): + self.folderName = None diff --git a/scripts/parser/BackupParser/CreateBackupParser.py b/scripts/parser/BackupParser/CreateBackupParser.py new file mode 100644 index 0000000..2e897f6 --- /dev/null +++ b/scripts/parser/BackupParser/CreateBackupParser.py @@ -0,0 +1,29 @@ +from parser.BackupParser.CreateBackupArguments import CreateBackupArguments +from parser.LineParser import LineParser +import re + +class CreateBackupParser(LineParser): + def __init__(self): + self.__createBackupArguments = CreateBackupArguments() + + def parseLine(self, line): + assert line is not None + + folderNameRegexp = r"'(?P[^']+)'$" + + regexpSource = self.startsWithKeywordToken('create backup for') + folderNameRegexp + regexp = re.compile(regexpSource, re.UNICODE) + + match = regexp.match(line) + self._guardMatch(match, line, regexpSource) + + folderName = match.group('folder') + self.__createBackupArguments.folderName = folderName + + return self.__createBackupArguments + + def isValidLine(self, line): + assert line is not None + + isValid = line.startswith('create backup') + return isValid diff --git a/scripts/parser/BackupParser/__init__.py b/scripts/parser/BackupParser/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/parser/BackupParser/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' diff --git a/scripts/parser/CopyParser/CopyLineParser.py b/scripts/parser/CopyParser/CopyLineParser.py index 6e9c81e..6166b2f 100644 --- a/scripts/parser/CopyParser/CopyLineParser.py +++ b/scripts/parser/CopyParser/CopyLineParser.py @@ -24,14 +24,6 @@ class CopyLineParser(LineParser): self.__copyArguments.setArguments(src, dst) return self.__copyArguments - def keywordToken(self, keyword): - assert keyword is not None - return r'\s+' + keyword + r'\s+' - - def startsWithKeywordToken(self, keyword): - assert keyword is not None - return r'^' + keyword + r'\s+' - def isValidLine(self, line): assert line is not None diff --git a/scripts/parser/LineParser.py b/scripts/parser/LineParser.py index 3a077bc..014c94c 100644 --- a/scripts/parser/LineParser.py +++ b/scripts/parser/LineParser.py @@ -7,9 +7,17 @@ class LineParser: assert line is not None return False + def keywordToken(self, keyword): + assert keyword is not None + return r'\s+' + keyword + r'\s+' + + def startsWithKeywordToken(self, keyword): + assert keyword is not None + return r'^' + keyword + r'\s+' + def _guardMatch(self, match_object, source, regexpSource = None): if match_object is None: - msg = 'Recognition exception: {0} for {1}'.format(source, regexpSource) + msg = 'Recognition exception: "{0}" for "{1}"'.format(source, regexpSource) raise Exception(msg)