diff --git a/app/generator.py b/app/generator.py index 2235ab4..84d5942 100644 --- a/app/generator.py +++ b/app/generator.py @@ -5,6 +5,7 @@ from abc import ABC, abstractmethod from dependency_injector.wiring import Provide, inject from app.dependencies import ApiContainer + class Generator(ABC): _api: api.Api | None @@ -80,7 +81,7 @@ class ContributorsGenerator(Generator): Generates a contributor file for each repository in the config: - contributors/.json: Contributors of the repository. """ - + _api: api.Api @inject @@ -124,7 +125,7 @@ class TeamGenerator(Generator): Generates a team file containing the members of the organization: - team.json: Members of the organization. """ - + _api: api.Api @inject @@ -224,49 +225,15 @@ class RemoveAnnouncementGenerator(Generator): # TODO: Implement this pass -class GeneratorProvider: - """ - Provides a way to get a generator by name. - """ - _generators = {} - def __init__(self, generators: list[Generator]): - """ - Args: - generators (list[Generator]): A list of generators. - """ - for generator in generators: - self._generators[generator.name] = generator - - def get(self, name: str) -> Generator | None: - """ - Gets a generator by name. - - Args: - name (str): The name of the generator. - - Returns: - Generator | None: The generator if found, otherwise None. - """ - return self._generators[name] if name in self._generators else None - -class DefaultGeneratorProvider(GeneratorProvider): - def __init__(self): - super().__init__( - [ - ReleasesGenerator(), - ContributorsGenerator(), - TeamGenerator(), - ConnectionsGenerator(), - DonationsGenerator() - ] - ) - -class AnnouncementsGeneratorProvider(GeneratorProvider): - def __init__(self): - super().__init__( - [ - AnnouncementGenerator(), - RemoveAnnouncementGenerator() - ] - ) \ No newline at end of file +generators = { + generator.name: generator for generator in [ + ReleasesGenerator(), + ContributorsGenerator(), + TeamGenerator(), + ConnectionsGenerator(), + DonationsGenerator(), + AnnouncementGenerator(), + RemoveAnnouncementGenerator() + ] +} diff --git a/main.py b/main.py index 2f7681c..d63707e 100644 --- a/main.py +++ b/main.py @@ -4,33 +4,41 @@ import os import shutil from app.config import load_config from app.dependencies import wire_dependencies -from app.generator import DefaultGeneratorProvider +from app.generator import generators + def main(): config = load_config() - for path in config["purge"]: + purge(config["purge"]) + + generate(config) + + +def generate(config): + loop = asyncio.get_event_loop() + tasks = [] + + output = config["output"] + for generator_config in config["configs"]: + for generator_name in generator_config["generators"]: + generator = generators[generator_name] if generator_name in generators else None + + tasks.append( + loop.create_task(generator.generate(generator_config, output)) + ) if generator is not None else print(f"Generator {generator_name} not found.") + + loop.run_until_complete(asyncio.wait(tasks)) + loop.close() + + +def purge(paths): + for path in paths: if isdir(path): shutil.rmtree(path) elif isfile(path): os.remove(path) - output = config["output"] - generator_provider = DefaultGeneratorProvider() - - loop = asyncio.get_event_loop() - tasks = [] - - for generator_config in config["configs"]: - for generator_name in generator_config["generators"]: - generator = generator_provider.get(generator_name) - - tasks.append( - loop.create_task(generator.generate(generator_config, output)) - ) if generator is not None else print(f"Generator {generator_name} not found.") - - loop.run_until_complete(asyncio.wait(tasks)) - loop.close() if __name__ == "__main__": wire_dependencies()