Added get_child_items to Item class.

This commit is contained in:
2025-11-08 10:33:02 +01:00
parent 086618fe72
commit 6588313fa1

View File

@@ -32,11 +32,15 @@ def auto_properties(mapping: dict[str,str]):
self.get_auto_properties() self.get_auto_properties()
return getattr(self, private_var) 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): def from_args(self, **kwargs):
for name in 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)) setattr(self, f"_{name}", kwargs.get(name, None))
def from_json(self, json_data: dict): def from_json(self, json_data: dict):
@@ -207,18 +211,8 @@ class Repository():
def items(self): def items(self):
log.debug(f"Fetching items for repository '{self.name}'", extra={"repository_name": self.name}) log.debug(f"Fetching items for repository '{self.name}'", extra={"repository_name": self.name})
if not hasattr(self, "_items"): if not hasattr(self, "_items"):
objects = self._project.organization.get_path( root = Item(repository=self, path="/", git_object_type="tree")
path=f"{self._project.id}/_apis/git/repositories/{self.id}/items", self._items = root.get_child_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)
return self._items return self._items
@@ -257,21 +251,31 @@ class Item():
def path(self): def path(self):
return self._path return self._path
# @property def get_child_items(self) -> list[Item]:
# def children(self): """Get child items if this item is a folder."""
# """List items under this item if it is a folder.""" if self.git_object_type != "tree":
# if self.git_object_type == "tree": raise ValueError("Child items can only be fetched for folder items.")
# return self._entities(
# entity_class=Item, # Fetch child objects
# key_name="path", objects = self._repository._project.organization.get_path(
# list_url=f"{self._repository._project.id}/_apis/git/repositories/{self._repository.id}/items", path=f"{self._repository._project.id}/_apis/git/repositories/{self._repository.id}/items",
# params={ params={
# "scopePath": self._path, "scopePath": self.path,
# "recursionLevel": "oneLevel" "recursionLevel": "oneLevel"
# } }
# ) ).get("value", [])
# else: child_items = []
# raise ValueError("Items can only be listed for folder 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): 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})"