Реализовал парсер команды создания бэкапа

This commit is contained in:
Rustam Zaitov 2013-10-29 02:14:09 +04:00
parent bb01973963
commit ec57e67133
8 changed files with 56 additions and 10 deletions

1
.gitignore vendored
View File

@ -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

View File

@ -0,0 +1 @@
__author__ = 'rzaitov'

View File

@ -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)

View File

@ -0,0 +1,3 @@
class CreateBackupArguments:
def __init__(self):
self.folderName = None

View File

@ -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<folder>[^']+)'$"
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

View File

@ -0,0 +1 @@
__author__ = 'rzaitov'

View File

@ -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

View File

@ -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)