piexel-indexer/filerule.py
2017-05-27 18:03:47 +02:00

36 lines
873 B
Python

import re
def match_rules(filename, rules):
for r in rules:
match = r.apply(filename)
if match:
return r, match
return None
class FileRule:
def __init__(self, rule, conf):
# trouve les marqueurs dans la règle
reg = re.compile(r'#(.+?)#')
self.patterns = reg.findall(rule)
rg = reg.sub(lambda m:self.regFor(match=m, conf=conf), rule)
self.rule = re.compile(rg)
print(self.patterns, self.rule)
@staticmethod
def regFor(match, conf):
name = match.group(0)
if name == '#EXT#':
return '('+'|'.join(conf.extensions)+')'
return '([^/]+)'
def apply(self, filename):
# applique la règle à un objet file
match = self.rule.match(filename)
if not match:
return None
# trouve les différents marqueurs de règle
patterns = {}
for i in range(len(self.patterns)):
patterns[self.patterns[i]] = match.group(i+1)
return patterns