linter_params.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import argparse
  2. import json
  3. from dataclasses import dataclass
  4. from typing import Optional
  5. @dataclass
  6. class LinterArgs:
  7. source_root: str
  8. project_path: str
  9. output_path: str
  10. lint_name: str
  11. depends: dict[str, str]
  12. global_resources: dict[str, str]
  13. configs: list[str]
  14. extra_params: dict[str, str]
  15. report_file: str
  16. files: list[str]
  17. def get_params(raw_args: Optional[list[str]] = None) -> LinterArgs:
  18. parser = argparse.ArgumentParser()
  19. parser.add_argument("--params")
  20. parser.add_argument("--source-root")
  21. parser.add_argument("--project-path")
  22. parser.add_argument("--output-path")
  23. parser.add_argument("--lint-name", default="")
  24. parser.add_argument("--depends", action="append")
  25. parser.add_argument("--global-resource", action="append", dest="global_resources")
  26. parser.add_argument("--config", action="append", dest="configs")
  27. parser.add_argument("--extra-param", action="append", dest="extra_params")
  28. parser.add_argument("--report-file", default="-")
  29. parser.add_argument("files", nargs="*")
  30. args = parser.parse_args(raw_args)
  31. if args.params:
  32. with open(args.params) as f:
  33. params = json.load(f)
  34. source_root = params["source_root"]
  35. project_path = params["project_path"]
  36. output_path = params["output_path"]
  37. lint_name = params.get("lint_name", "")
  38. depends = params.get("depends", {})
  39. global_resources = params.get("global_resources", {})
  40. configs = params.get("configs", [])
  41. extra_params = params.get("extra_params", {})
  42. report_file = params["report_file"]
  43. files = params["files"]
  44. else:
  45. source_root = args.source_root
  46. project_path = args.project_path
  47. output_path = args.output_path
  48. lint_name = args.lint_name
  49. depends = _parse_kv_arg(args.depends, ":")
  50. global_resources = _parse_kv_arg(args.global_resources, ":")
  51. configs = args.configs if args.configs else []
  52. extra_params = _parse_kv_arg(args.extra_params, "=")
  53. report_file = args.report_file
  54. files = args.files
  55. return LinterArgs(
  56. source_root=source_root,
  57. project_path=project_path,
  58. output_path=output_path,
  59. lint_name=lint_name,
  60. depends=depends,
  61. global_resources=global_resources,
  62. configs=configs,
  63. extra_params=extra_params,
  64. report_file=report_file,
  65. files=files,
  66. )
  67. def _parse_kv_arg(arg, sep):
  68. result = {}
  69. if arg:
  70. for item in arg:
  71. var, val = item.split(sep, 1)
  72. result[var] = val
  73. return result