8000 feat/0.8.0: plugin entry points + strict CI by dominicusin · Pull Request #73 · dominicusin/package-maximizer · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,16 @@ jobs:
run: |
flake8 package_maximizer/ tests/ --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics

# Blocking checks — no || true (CI must catch regressions)
# Safe: these commands have no user-controlled input
- name: Type check with mypy
run: mypy package_maximizer/ --ignore-missing-imports || true
run: mypy package_maximizer/core/ package_maximizer/solvers/ package_maximizer/adapters/ --ignore-missing-imports

- name: Check formatting with black
run: black --check package_maximizer/ tests/ || true
run: black --check package_maximizer/ tests/

- name: Check imports with isort
run: isort --check-only package_maximizer/ tests/ || true
run: isort --check-only package_maximizer/ tests/

# ─── Tests across matrix ────────────────────────────────────
test:
Expand Down
103 changes: 47 additions & 56 deletions package_maximizer/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"""

try:
from importlib.metadata import PackageNotFoundError, version as _dist_version
from importlib.metadata import PackageNotFoundError
from importlib.metadata import version as _dist_version

try:
__version__ = _dist_version("package-maximizer")
Expand All @@ -17,85 +18,81 @@
__email__ = "team@package-maximizer.dev"
__license__ = "MIT"

# Analyzers
from .analyzers import ANALYZER_REGISTRY, ResultAnalyzer, get_analyzer

# CLI
from .cli import (
benchmark,
check_updates,
cli,
from_file,
info,
list_installed,
list_parsers,
list_solvers,
maximize,
search,
system_info,
version,
)
from .core.constraints import (
ConflictConstraint,
ConstraintParser,
DependencyConstraint,
VersionConstraint,
)

# Core components
from .core.enums import PackageManagerType, SolverType, PackageStatus
from .core.interfaces import ConstraintSolver, PackageParser, ResultAnalyzer
from .core.enums import PackageManagerType, PackageStatus, SolverType
from .core.interfaces import ConstraintSolver, PackageParser
from .core.interfaces import ResultAnalyzer as ResultAnalyzerInterface
from .core.maximizer import PackageMaximizer
from .core.package import Package, PackageConstraint
from .core.constraints import VersionConstraint, DependencyConstraint, ConflictConstraint, ConstraintParser

# Solvers
from .solvers import (
GreedySolver,
Z3Solver,
PulPSolver,
ORToolsSolver,
MaxSatSolver,
MiniSatSolver,
EnhancedGreedySolver,
get_solver,
SOLVER_REGISTRY,
)
# Integrations
from .integrations import RealRepoIntegration

# Parsers
from .parsers import (
PARSER_REGISTRY,
APTParser,
PacmanParser,
DNFParser,
BrewParser,
DNFParser,
PacmanParser,
get_parser,
PARSER_REGISTRY,
)

# Analyzers
from .analyzers import (
ResultAnalyzer,
get_analyzer,
ANALYZER_REGISTRY,
# Solvers
from .solvers import (
SOLVER_REGISTRY,
EnhancedGreedySolver,
GreedySolver,
MaxSatSolver,
MiniSatSolver,
ORToolsSolver,
PulPSolver,
Z3Solver,
get_solver,
)

# Utilities
from .utils import (
CacheManager,
BenchmarkRunner,
)

# Integrations
from .integrations import RealRepoIntegration

# CLI
from .cli import (
cli,
maximize,
list_solvers,
list_parsers,
version,
from_file,
benchmark,
list_installed,
search,
info,
check_updates,
system_info,
)
from .utils import BenchmarkRunner, CacheManager

__all__ = [
# Version info
"__version__",
"__author__",
"__email__",
"__license__",

# Enums
"PackageManagerType",
"SolverType",
"PackageStatus",

# Interfaces
"ConstraintSolver",
"PackageParser",
"ResultAnalyzer",

# Core classes
"Package",
"PackageConstraint",
Expand All @@ -104,7 +101,6 @@
"ConflictConstraint",
"ConstraintParser",
"PackageMaximizer",

# Solvers
"GreedySolver",
"Z3Solver",
Expand All @@ -115,27 +111,22 @@
"EnhancedGreedySolver",
"get_solver",
"SOLVER_REGISTRY",

# Parsers
"APTParser",
"PacmanParser",
"DNFParser",
"BrewParser",
"get_parser",
"PARSER_REGISTRY",

# Analyzers
"ResultAnalyzer",
"get_analyzer",
"ANALYZER_REGISTRY",

# Utilities
"CacheManager",
"BenchmarkRunner",

# Integrations
"RealRepoIntegration",

# CLI
"cli",
"maximize",
Expand Down
10 changes: 6 additions & 4 deletions package_maximizer/analyzers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,20 @@
def get_analyzer(analyzer_name: str):
"""
Получение экземпляра анализатора по имени.

Args:
analyzer_name: Имя анализатора (регистронезависимое)

Returns:
Экземпляр анализатора

Raises:
ValueError: Если анализатор не найден
"""
analyzer_name = analyzer_name.lower()
if analyzer_name not in ANALYZER_REGISTRY:
available = ", ".join(ANALYZER_REGISTRY.keys())
raise ValueError(f"Analyzer '{analyzer_name}' not found. Available: {available}")
raise ValueError(
f"Analyzer '{analyzer_name}' not found. Available: {available}"
)
return ANALYZER_REGISTRY[analyzer_name]()
Loading
Loading
0