working on implementing write_budget_markdown
[utils.git] / src / budget_sync / config.py
index 1bebca1211b754f512b9e20639c0e066053362ac..8a490b5ea61f4df3e50a3d6d3cf9a62275b09c04 100644 (file)
@@ -13,10 +13,12 @@ class Person:
     email: Optional[str]
 
     def __init__(self, config: "Config", identifier: str,
+                 output_markdown_file: str,
                  aliases: Optional[Set[str]] = None,
                  email: Optional[str] = None):
         self.config = config
         self.identifier = identifier
+        self.output_markdown_file = output_markdown_file
         if aliases is None:
             aliases = set()
         self.aliases = aliases
@@ -35,8 +37,9 @@ class Person:
         return hash(self.identifier)
 
     def __repr__(self):
-        return f"Person(config=..., identifier={self.identifier!r}, " \
-            f"aliases={self.aliases!r}, email={self.email!r})"
+        return (f"Person(config=..., identifier={self.identifier!r}, "
+                f"output_markdown_file={self.output_markdown_file!r}, "
+                f"aliases={self.aliases!r}, email={self.email!r})")
 
 
 class Milestone:
@@ -70,6 +73,10 @@ class Config:
             f"people={self.people!r}, " \
             f"milestones={self.milestones!r})"
 
+    @cached_property
+    def bugzilla_url_stripped(self):
+        return self.bugzilla_url.rstrip('/')
+
     @cached_property
     def all_names(self) -> Dict[str, Person]:
         # also checks for any name clashes and raises
@@ -124,6 +131,7 @@ class Config:
                 f"person entry for {identifier!r} must be a table")
         aliases = set()
         email = None
+        output_markdown_file = None
         for k, v in value.items():
             assert isinstance(k, str)
             if k == "aliases":
@@ -144,10 +152,20 @@ class Config:
                         f"`email` field in person entry for {identifier!r} "
                         f"must be a string")
                 email = v
+            elif k == "output_markdown_file":
+                if not isinstance(v, str):
+                    raise ConfigParseError(
+                        f"`output_markdown_file` field in person entry for "
+                        f"{identifier!r} must be a string")
+                output_markdown_file = v
             else:
                 raise ConfigParseError(
                     f"unknown field in person entry for {identifier!r}: `{k}`")
+        if output_markdown_file is None:
+            raise ConfigParseError(f"`output_markdown_file` field is missing in "
+                                   f"person entry for {identifier!r}")
         return Person(config=self, identifier=identifier,
+                      output_markdown_file=output_markdown_file,
                       aliases=aliases, email=email)
 
     def _parse_people(self, people: Any):