Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

33 righe
1.5 KiB

Questo file contiene caratteri Unicode ambigui!

Questo file contiene caratteri Unicode ambigui che possono essere confusi con altri nella tua localizzazione attuale. Se il tuo caso di utilizzo è intenzionale e legittimo, puoi tranquillamente ignorare questo avviso. Usa il pulsante Escape per evidenziare questi caratteri.

import os
import re
from typing import Dict
from calculate.utils.files import read_file_lines
class ProfileWalker:
'''Объект обходящий все директории профиля через parent файлы.'''
def __init__(self, filename: str, repositories: Dict[str, str]):
self.repositories: Dict[str, str] = repositories
self.filename: str = filename
self.re_reppath: re.Pattern = re.compile("^({0})+:".format(
"|".join(self.repositories.keys())))
def interpolate(self, path: str):
def subfunc(m):
return "{0}/profiles/".format(self.repositories.get(m.group(1)))
return self.re_reppath.sub(subfunc, path)
def find(self, directory: str):
'''Метод для поиска по профилю всех файлов с именем, указанным в
self.filename.'''
parent_file_path = os.path.join(directory, "parent")
for line in (parent_line for parent_line in
read_file_lines(parent_file_path) if parent_line.strip()):
parent_directory = os.path.normpath(
os.path.join(directory, self.interpolate(line)))
if os.path.exists(parent_directory):
yield from self.find(parent_directory)
findfile = os.path.normpath(os.path.join(directory, self.filename))
if os.path.exists(findfile):
yield findfile