From 6588313fa1b0e04ab55a1b7ebdec079219532c74 Mon Sep 17 00:00:00 2001 From: Slawomir Koszewski Date: Sat, 8 Nov 2025 10:33:02 +0100 Subject: [PATCH] Added get_child_items to Item class. --- sk/devops.py | 64 ++++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/sk/devops.py b/sk/devops.py index 5b54c66..39364c9 100644 --- a/sk/devops.py +++ b/sk/devops.py @@ -32,11 +32,15 @@ def auto_properties(mapping: dict[str,str]): self.get_auto_properties() return getattr(self, private_var) - return property(fget=getter) + def setter(self, value): + setattr(self, private_var, value) + + return property(fget=getter, fset=setter) def from_args(self, **kwargs): for name in kwargs: - if name in self.__class__.__auto_properties__.values(): + if name in self.__class__.__auto_properties__: + log.debug(f"Setting property '{name}' for {self.__class__.__name__} from args", extra={"property_name": name}) setattr(self, f"_{name}", kwargs.get(name, None)) def from_json(self, json_data: dict): @@ -207,18 +211,8 @@ class Repository(): def items(self): log.debug(f"Fetching items for repository '{self.name}'", extra={"repository_name": self.name}) if not hasattr(self, "_items"): - objects = self._project.organization.get_path( - path=f"{self._project.id}/_apis/git/repositories/{self.id}/items", - params={ - "scopePath": "/", - "recursionLevel": "oneLevel" - } - ).get("value", []) - self._items = [] - for obj in objects: - i = Item(repository=self, path=obj.get("path")) - i.from_json(obj) - self._items.append(i) + root = Item(repository=self, path="/", git_object_type="tree") + self._items = root.get_child_items() return self._items @@ -257,21 +251,31 @@ class Item(): def path(self): return self._path - # @property - # def children(self): - # """List items under this item if it is a folder.""" - # if self.git_object_type == "tree": - # return self._entities( - # entity_class=Item, - # key_name="path", - # list_url=f"{self._repository._project.id}/_apis/git/repositories/{self._repository.id}/items", - # params={ - # "scopePath": self._path, - # "recursionLevel": "oneLevel" - # } - # ) - # else: - # raise ValueError("Items can only be listed for folder items.") + def get_child_items(self) -> list[Item]: + """Get child items if this item is a folder.""" + if self.git_object_type != "tree": + raise ValueError("Child items can only be fetched for folder items.") + + # Fetch child objects + objects = self._repository._project.organization.get_path( + path=f"{self._repository._project.id}/_apis/git/repositories/{self._repository.id}/items", + params={ + "scopePath": self.path, + "recursionLevel": "oneLevel" + } + ).get("value", []) + child_items = [] + for obj in objects: + i = Item(repository=self._repository, path=obj.get("path")) + i.from_json(obj) + child_items.append(i) + return child_items + + @property + def children(self): + if not hasattr(self, "_children"): + self._children = self.get_child_items() + return self._children def __str__(self): - return f"Item(path=\"{self._path}\" type={self.git_object_type} commit_id={self.commit_id})" + return f"Item(path=\"{self._path}\" type={self.git_object_type})"