import logging from dataclasses import dataclass from typing import Optional from .packages import Package logger = logging.getLogger(__name__) @dataclass class Plugin: id: str version: Optional[str] @property def gradle_spec(self): return f'id("{self.id}") version "{self.version}"' if self.version else self.id @property def package(self): return Package(self.id, self.id + '.gradle.plugin', self.version) def __str__(self): return f'{self.id}:{self.version}' if self.version else self.id def __hash__(self): return hash((self.id, self.version)) def handle_plugins(section: dict[str, str | list[str] | None]) -> list[Plugin]: result = [] for entry in section: versions = section[entry] if isinstance(versions, str): result.append(Plugin(entry, versions)) elif isinstance(versions, list): result.extend([Plugin(entry, v) for v in versions]) elif versions is None: result.append(Plugin(entry, None)) else: logger.warning(f'Invalid plugin version "{versions}" for {entry}') return result