Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

83 linhas
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. )