mirror of
https://github.com/openSUSE/osc.git
synced 2025-01-12 00:46:14 +01:00
128 lines
3.1 KiB
Python
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(
|
|
)
|