parent
998a495669
commit
8a98083a29
@ -1,82 +0,0 @@
|
|||||||
from calculate.utils.package import PackageAtomParser
|
|
||||||
from pyparsing import Regex, Literal, LineEnd, restOfLine, LineStart
|
|
||||||
|
|
||||||
|
|
||||||
ADD, REMOVE, MOVE = range(0, 3)
|
|
||||||
|
|
||||||
|
|
||||||
def parse_add(parse_result):
|
|
||||||
target = parse_result.asDict()['target']
|
|
||||||
path = parse_result.asDict()['path']
|
|
||||||
return {'action': ADD, 'target': target, 'path': path}
|
|
||||||
|
|
||||||
|
|
||||||
def parse_remove(parse_result):
|
|
||||||
target = parse_result.asDict()['target']
|
|
||||||
path = parse_result.asDict()['path']
|
|
||||||
return {'action': REMOVE, 'target': target, 'path': path}
|
|
||||||
|
|
||||||
|
|
||||||
def parse_move(parse_result):
|
|
||||||
source = parse_result.asDict()['source']
|
|
||||||
target = parse_result.asDict()['target']
|
|
||||||
path = parse_result.asDict()['path']
|
|
||||||
return {'action': MOVE, 'source': source, 'target': target, 'path': path}
|
|
||||||
|
|
||||||
|
|
||||||
def parse_skip(parse_result):
|
|
||||||
print('skip:', parse_result)
|
|
||||||
return [None]
|
|
||||||
|
|
||||||
|
|
||||||
def parse_unexpected(parse_result):
|
|
||||||
print('unexpected')
|
|
||||||
result = parse_result[0]
|
|
||||||
if not result:
|
|
||||||
return [None]
|
|
||||||
else:
|
|
||||||
return {'unexpected': result}
|
|
||||||
|
|
||||||
|
|
||||||
atom = Regex(PackageAtomParser.atom_regex)
|
|
||||||
remove_symbol = Literal('!')
|
|
||||||
path = Regex(r'\S+')
|
|
||||||
|
|
||||||
add_parser = atom('target') + path('path') + LineEnd().suppress()
|
|
||||||
add_parser.setParseAction(parse_add)
|
|
||||||
|
|
||||||
move_parser = (atom('source') + Literal(',').suppress() + atom('target')
|
|
||||||
+ path('path') + LineEnd().suppress())
|
|
||||||
move_parser.setParseAction(parse_move)
|
|
||||||
|
|
||||||
remove_parser = (remove_symbol.suppress() + atom('target') + path('path')
|
|
||||||
+ LineEnd().suppress())
|
|
||||||
remove_parser.setParseAction(parse_remove)
|
|
||||||
|
|
||||||
empty_line = LineStart().suppress() + LineEnd().suppress()
|
|
||||||
empty_line.setParseAction(parse_skip)
|
|
||||||
|
|
||||||
comment = Literal('#') + restOfLine + LineEnd().suppress()
|
|
||||||
comment.setParseAction(parse_skip)
|
|
||||||
|
|
||||||
unexpected = restOfLine + LineEnd().suppress()
|
|
||||||
unexpected.setParseAction(parse_unexpected)
|
|
||||||
|
|
||||||
|
|
||||||
template_parser = (move_parser | remove_parser | add_parser | comment
|
|
||||||
| empty_line | unexpected)
|
|
||||||
|
|
||||||
text = '''dev-lang/python-3.6[abi_x86_64,ssl] /usr/dir/file
|
|
||||||
|
|
||||||
# comment
|
|
||||||
!sys-fs/udisks-1.0.5-r1 /usr/bin/file
|
|
||||||
|
|
||||||
ll
|
|
||||||
dev-lang/python-3.6[abi_x86_64,ssl], sys-fs/udisks-1.0.5-r1 /usr/bin/file
|
|
||||||
|
|
||||||
'''
|
|
||||||
|
|
||||||
for tokens, start, end in template_parser.scanString(text):
|
|
||||||
result = tokens[0]
|
|
||||||
if result is not None:
|
|
||||||
print(result)
|
|
Loading…
Reference in new issue