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.
31 lines
1.1 KiB
31 lines
1.1 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("^({0})+:".format(
|
|
"|".join(self.repositories.keys())))
|
|
|
|
def interpolate(self, path):
|
|
def subfunc(m):
|
|
return "{0}/profiles/".format(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
|