Renamed _get_attributes to _get and implemented for Item.
This commit is contained in:
32
devops.py
32
devops.py
@@ -20,7 +20,7 @@ def auto_properties(mapping: dict[str,str] | None = None):
|
||||
pass
|
||||
|
||||
# Fetch repository details from the API if it is set to None or not existing
|
||||
self._get_attributes()
|
||||
self._get()
|
||||
return getattr(self, private_var)
|
||||
|
||||
return property(fget=getter)
|
||||
@@ -76,10 +76,10 @@ class DevOps():
|
||||
r.raise_for_status() # Ensure we raise an error for bad responses
|
||||
return r
|
||||
|
||||
def _get_entity_attributes(self, key_name: str, get_url: str, params: dict = {}) -> object:
|
||||
def _get_entity(self, key_name: str, get_url: str, params: dict = {}) -> object:
|
||||
"""
|
||||
Each entity class can use this method to populate its attributes, by defining
|
||||
its own _get_attributes method that calls this one with the key name,
|
||||
its own _get method that calls this one with the key name,
|
||||
and the URL.
|
||||
"""
|
||||
r = self._get_url_path(get_url, params=params) # Fetch the object data from the URL
|
||||
@@ -121,8 +121,8 @@ class Organization(DevOps):
|
||||
"description": "description"
|
||||
})
|
||||
class Project(DevOps):
|
||||
def _get_attributes(self):
|
||||
self._get_entity_attributes(
|
||||
def _get(self):
|
||||
self._get_entity(
|
||||
key_name="id",
|
||||
get_url=f"_apis/projects/{self._id}"
|
||||
)
|
||||
@@ -162,8 +162,8 @@ class Project(DevOps):
|
||||
"web_url": "webUrl"
|
||||
})
|
||||
class Repository(DevOps):
|
||||
def _get_attributes(self):
|
||||
self._get_entity_attributes(
|
||||
def _get(self):
|
||||
self._get_entity(
|
||||
key_name="id",
|
||||
get_url=f"{self._project.id}/_apis/git/repositories/{self._id}"
|
||||
)
|
||||
@@ -177,7 +177,7 @@ class Repository(DevOps):
|
||||
UUID(id) # Check if it's a valid UUID
|
||||
except ValueError:
|
||||
# Called with a repository name, fetch by name
|
||||
self._get_attributes()
|
||||
self._get()
|
||||
if kwargs:
|
||||
raise ValueError("Automatic properties cannot be set when retrieving by name.")
|
||||
return
|
||||
@@ -189,6 +189,10 @@ class Repository(DevOps):
|
||||
def id(self):
|
||||
return self._id
|
||||
|
||||
@property
|
||||
def project(self):
|
||||
return self._project
|
||||
|
||||
def __str__(self):
|
||||
return f"Repository(name={self.name}, id={self._id})"
|
||||
|
||||
@@ -219,6 +223,16 @@ class Item(DevOps):
|
||||
self._path = path
|
||||
self.set_auto_properties(**kwargs) # set properties defined in decorator
|
||||
|
||||
def _get(self):
|
||||
self._get_entity(
|
||||
key_name="path",
|
||||
get_url=f"{self._repository._project.id}/_apis/git/repositories/{self._repository.id}/items",
|
||||
params={
|
||||
"path": self._path,
|
||||
"$format": "json"
|
||||
}
|
||||
)
|
||||
|
||||
@property
|
||||
def path(self):
|
||||
return self._path
|
||||
return self._path
|
||||
|
||||
10
harvester.py
10
harvester.py
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from devops import Organization, Project, Repository, DEVOPS_SCOPE
|
||||
from devops import Organization, Project, Repository, Item, DEVOPS_SCOPE
|
||||
from azure.identity import DefaultAzureCredential
|
||||
from json import dumps
|
||||
|
||||
@@ -30,3 +30,11 @@ print(f"Listing items in the {repo.name} repository:")
|
||||
for item in repo.items:
|
||||
print(f"{item.path} ({item.git_object_type}): {item.commit_id}")
|
||||
print()
|
||||
|
||||
print("Getting specific item details:")
|
||||
item = Item(repo, path="/generate-pat.py")
|
||||
print(f"Item path: {item.path}")
|
||||
print(f"Item type: {item.git_object_type}")
|
||||
print(f"Item commit ID: {item.commit_id}")
|
||||
print(f"Item URL: {item.url}")
|
||||
print()
|
||||
|
||||
Reference in New Issue
Block a user