Untitled

 avatar
unknown
plain_text
5 months ago
1.6 kB
3
Indexable
Class File:
    def __init__(self, name, size, timestamp, isDirectory, files):
        self.name=name
        self.size=size
        self.timestamp=timestamp
        self.isDirectory=isDirectory
        self.files = files if isDirectory and files else []

class Condition:
    def matches(self, entity: File):
        pass


# Criterion to check if the filename contains a given substring
class NameContainsCriterion(Condition):
    def __init__(self, substring: str):
        self.substring = substring

    def matches(self, entity: File) -> bool:
        return self.substring in entity.get_name()

# Criterion to filter files by minimum size
class MinSizeCriterion(Condition):
    def __init__(self, min_size: int):
        self.min_size = min_size

    def matches(self, entity: File) -> bool:
        return entity.get_size() >= self.min_size

def find(directory: File, conditions: List[Condition]) -> List[File]:
    matching_files = []
    # Check if the current directory or file matches the criterion
    if not directory.isDirectory and matchesAll(conditions,directory):
        matching_files.append(directory)

    # If this is a directory, recursively search through its files
    if directory.isDirectory:
        for file in directory.files():
            res=find(file, criterion)
            if not res: #not empty, then add
                matching_files = matching_files + find(file, criterion)
    return matching_files

def matchesAll(criterion: List[Condition], entity:File):
    for criteria in criterion:
        if not criteria.matches(file):
            return False
    return True
Editor is loading...
Leave a Comment