refactor: Simplify code

This commit is contained in:
oSumAtrIX 2023-11-03 22:37:30 +01:00
parent 16c7ca4668
commit 915d96d79d
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4
2 changed files with 40 additions and 65 deletions

View File

@ -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
@ -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()
]
)
generators = {
generator.name: generator for generator in [
ReleasesGenerator(),
ContributorsGenerator(),
TeamGenerator(),
ConnectionsGenerator(),
DonationsGenerator(),
AnnouncementGenerator(),
RemoveAnnouncementGenerator()
]
}

26
main.py
View File

@ -4,26 +4,25 @@ 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"]:
if isdir(path):
shutil.rmtree(path)
elif isfile(path):
os.remove(path)
purge(config["purge"])
output = config["output"]
generator_provider = DefaultGeneratorProvider()
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 = generator_provider.get(generator_name)
generator = generators[generator_name] if generator_name in generators else None
tasks.append(
loop.create_task(generator.generate(generator_config, output))
@ -32,6 +31,15 @@ def main():
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)
if __name__ == "__main__":
wire_dependencies()
main()