Files
project-manager/project_manager/manager.py
T
2023-03-14 23:59:58 +03:00

40 lines
1.2 KiB
Python

import logging
from collections import Counter
from pathlib import Path
from typing import Dict, Iterable
from .entry import Entry, EntryCommandNotImplementedError
from .nodejs.entry import NodejsEntry
from .python.entry import PythonEntry
from .resolver import EntryDetector, EntryResolver
__all__ = ("ProjectManager",)
logger = logging.getLogger("project")
class ProjectManager:
_logger = logger
def __init__(self, basepath: Path):
self._basepaht = basepath
self._resolver = EntryResolver(EntryDetector(PythonEntry, NodejsEntry))
def _iter_entries(self) -> Iterable[Entry]:
return self._resolver.resolve(self._basepaht)
def run_command(self, command: str) -> Dict[str, int]:
counter = Counter()
for entry in self._iter_entries():
try:
getattr(entry, command)()
counter["success"] += 1
except EntryCommandNotImplementedError:
self._logger.warn(f"{command} {entry}")
counter["skipped"] += 1
except Exception:
self._logger.exception(entry)
counter["failed"] += 1
self._logger.info(f"result {dict(counter)}")
return counter