Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

83 řádky
2.4KB

  1. from typing import Optional
  2. import yaml
  3. import logging
  4. from dataclasses import dataclass
  5. from pathlib import Path
  6. from .plugins import Plugin, handle_plugins
  7. from .packages import Package, handle_packages
  8. logger = logging.getLogger(__name__)
  9. @dataclass
  10. class Configuration:
  11. kotlin_version: str
  12. gradle_version: Optional[str]
  13. plugins: list[Plugin]
  14. packages: list[Package]
  15. @dataclass
  16. class MavenMirrors:
  17. package_mirrors: list[str]
  18. plugin_mirrors: list[str]
  19. @dataclass
  20. class Config:
  21. configurations: list[Configuration]
  22. mirrors: MavenMirrors
  23. def parse_config(path: Path) -> Optional[Config]:
  24. with path.open('r') as f:
  25. data = yaml.safe_load(f)
  26. error: list[str] = []
  27. configurations: dict[tuple[str, str], tuple[list[Plugin], list[Package]]] = {}
  28. for i, section in enumerate(data.get('configurations')):
  29. if (kotlin_versions := section.get('kotlin-version')) is None:
  30. error.append(f"Configuration {i} is missing 'kotlin-version'")
  31. if not isinstance(kotlin_versions, list):
  32. kotlin_versions = [kotlin_versions]
  33. gradle_versions = section.get('gradle-version')
  34. if not isinstance(gradle_versions, list):
  35. gradle_versions = [gradle_versions]
  36. plugins = handle_plugins(section.get('plugins', {}))
  37. packages = handle_packages(section.get('packages', {}))
  38. for kotlin in kotlin_versions:
  39. for gradle in gradle_versions:
  40. key = (kotlin, gradle)
  41. if key in configurations:
  42. configurations[key] = (
  43. configurations[key][0] + plugins,
  44. configurations[key][1] + packages,
  45. )
  46. else:
  47. configurations[key] = (plugins, packages)
  48. if error:
  49. for msg in error:
  50. logger.error(msg)
  51. return None
  52. else:
  53. return Config(
  54. [
  55. Configuration(kotlin, gradle, plugins, packages)
  56. for (kotlin, gradle), (plugins, packages) in configurations.items()
  57. ],
  58. MavenMirrors(
  59. data.get('maven', {}).get('package-mirrors', []),
  60. data.get('maven', {}).get('plugin-mirrors', []),
  61. ),
  62. )