25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

83 satır
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. )