1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-01-12 08:56:13 +01:00
github.com_openSUSE_osc/osc/obs_api/person.py

128 lines
3.1 KiB
Python

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
from .status import Status
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(
)
def to_human_readable_string(self) -> str:
"""
Render the object as a human readable string.
"""
from ..output import KeyValueTable
table = KeyValueTable()
table.add("Login", self.login, color="bold")
table.add("Real name", self.realname)
table.add("Email", self.email)
table.add("State", self.state)
return f"{table}"
@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
@classmethod
def cmd_register(
cls,
apiurl: str,
*,
login: str,
realname: str,
email: str,
password: str,
note: Optional[str] = None,
state: Optional[str] = "confirmed",
):
person = UnregisteredPerson(login=login, realname=realname, email=email, password=password, note=note, state=state)
url_path = ["person"]
url_query = {
"cmd": "register",
}
response = cls.xml_request("POST", apiurl, url_path, url_query, data=person.to_string())
return Status.from_file(response, apiurl=apiurl)
class UnregisteredPerson(XmlModel):
XML_TAG = "unregisteredperson"
login: str = Field(
)
realname: str = Field(
)
email: str = Field(
)
password: str = Field(
)
note: Optional[str] = Field(
)
state: Optional[str] = Field(
)