You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

29 lines
1.0 KiB

import os
import re
import calculate.utils.fs as fs
class ProfileWalker:
"""
Объект обходящий все директории профиля через parent файлы
"""
def __init__(self, filename, repositories):
self.repositories = repositories
self.filename = filename
self.reReppath = re.compile("^(%s)+:"%"|".join(self.repositories.keys()))
def interpolate(self, path):
def subfunc(m):
return "%s/profiles/" % self.repositories.get(m.group(1))
return self.reReppath.sub(subfunc, path)
def find(self, directory):
parent = os.path.join(directory, "parent")
for line in (x for x in fs.readFileLines(parent) if x.strip()):
parentdir = os.path.normpath(
os.path.join(directory, self.interpolate(line)))
if fs.exists(parentdir):
yield from self.find(parentdir)
findfile = os.path.normpath(os.path.join(directory, self.filename))
if fs.exists(findfile):
yield findfile