36 lines
873 B
Python
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
|