You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 line
1.1KB

  1. import logging
  2. from dataclasses import dataclass
  3. from typing import Optional
  4. from .packages import Package
  5. logger = logging.getLogger(__name__)
  6. @dataclass
  7. class Plugin:
  8. id: str
  9. version: Optional[str]
  10. @property
  11. def gradle_spec(self):
  12. return f'id("{self.id}") version "{self.version}"' if self.version else self.id
  13. @property
  14. def package(self):
  15. return Package(self.id, self.id + '.gradle.plugin', self.version)
  16. def __str__(self):
  17. return f'{self.id}:{self.version}' if self.version else self.id
  18. def __hash__(self):
  19. return hash((self.id, self.version))
  20. def handle_plugins(section: dict[str, str | list[str] | None]) -> list[Plugin]:
  21. result = []
  22. for entry in section:
  23. versions = section[entry]
  24. if isinstance(versions, str):
  25. result.append(Plugin(entry, versions))
  26. elif isinstance(versions, list):
  27. result.extend([Plugin(entry, v) for v in versions])
  28. elif versions is None:
  29. result.append(Plugin(entry, None))
  30. else:
  31. logger.warning(f'Invalid plugin version "{versions}" for {entry}')
  32. return result