1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-12-29 11:16:14 +01:00

Add obs_api.Person class

This commit is contained in:
Daniel Mach 2024-03-05 14:25:54 +01:00
parent 36dd0401ee
commit 149c7f799f
8 changed files with 137 additions and 0 deletions

View File

@ -1,4 +1,5 @@
from .package import Package
from .package_sources import PackageSources
from .person import Person
from .project import Project
from .request import Request

View File

@ -7,6 +7,11 @@ class BlockModes(str, Enum):
NEVER = "never"
class BoolString(str, Enum):
TRUE = "true"
FALSE = "false"
class BuildArch(str, Enum):
NOARCH = "noarch"
AARCH64 = "aarch64"

71
osc/obs_api/person.py Normal file
View File

@ -0,0 +1,71 @@
from ..util.models import * # pylint: disable=wildcard-import,unused-wildcard-import
from .enums import BoolString
from .person_owner import PersonOwner
from .person_watchlist import PersonWatchlist
class Person(XmlModel):
XML_TAG = "person"
login: str = Field(
)
email: Optional[str] = Field(
)
realname: Optional[str] = Field(
)
owner: Optional[PersonOwner] = Field(
)
state: Optional[str] = Field(
)
globalrole_list: Optional[List[str]] = Field(
xml_name="globalrole",
)
watchlist: Optional[PersonWatchlist] = Field(
)
ignore_auth_services: Optional[BoolString] = Field(
)
@classmethod
def from_api(cls, apiurl: str, username: str):
url_path = ["person", username]
url_query = {}
response = cls.xml_request("GET", apiurl, url_path, url_query)
return cls.from_file(response, apiurl=apiurl)
@classmethod
def search(
cls,
apiurl: str,
login: Optional[str] = None,
email: Optional[str] = None,
realname: Optional[str] = None,
state: Optional[str] = None,
**kwargs,
) -> List["Person"]:
from xml.etree import ElementTree as ET
from ..util.xpath import XPathQuery as Q
url_path = ["search", "person"]
url_query = {
"match": Q(
login=login,
email=email,
realname=realname,
state=state,
**kwargs,
),
}
response = cls.xml_request("GET", apiurl, url_path, url_query)
root = ET.parse(response).getroot()
assert root.tag == "collection"
result = []
for node in root:
result.append(cls.from_xml(node, apiurl=apiurl))
return result

View File

@ -0,0 +1,9 @@
from ..util.models import * # pylint: disable=wildcard-import,unused-wildcard-import
class PersonOwner(XmlModel):
XML_TAG = "owner"
userid: str = Field(
xml_attribute=True,
)

View File

@ -0,0 +1,20 @@
from ..util.models import * # pylint: disable=wildcard-import,unused-wildcard-import
from .person_watchlist_package import PersonWatchlistPackage
from .person_watchlist_project import PersonWatchlistProject
from .person_watchlist_request import PersonWatchlistRequest
class PersonWatchlist(XmlModel):
XML_TAG = "watchlist"
project_list: Optional[List[PersonWatchlistProject]] = Field(
xml_name="project",
)
package_list: Optional[List[PersonWatchlistPackage]] = Field(
xml_name="package",
)
request_list: Optional[List[PersonWatchlistRequest]] = Field(
xml_name="request",
)

View File

@ -0,0 +1,13 @@
from ..util.models import * # pylint: disable=wildcard-import,unused-wildcard-import
class PersonWatchlistPackage(XmlModel):
XML_TAG = "package"
name: str = Field(
xml_attribute=True,
)
project: str = Field(
xml_attribute=True,
)

View File

@ -0,0 +1,9 @@
from ..util.models import * # pylint: disable=wildcard-import,unused-wildcard-import
class PersonWatchlistProject(XmlModel):
XML_TAG = "project"
name: str = Field(
xml_attribute=True,
)

View File

@ -0,0 +1,9 @@
from ..util.models import * # pylint: disable=wildcard-import,unused-wildcard-import
class PersonWatchlistRequest(XmlModel):
XML_TAG = "request"
number: str = Field(
xml_attribute=True,
)