diff --git a/src/linkahead/common/administration.py b/src/linkahead/common/administration.py index 417081b0dad19ce15049b8ce05aeef8cc86607f7..92129a4d4918a5f8ac25c80d7e7107431b227557 100644 --- a/src/linkahead/common/administration.py +++ b/src/linkahead/common/administration.py @@ -23,7 +23,7 @@ # # ** end header # - +from __future__ import annotations """missing docstring.""" import random @@ -38,8 +38,12 @@ from ..exceptions import (EntityDoesNotExistError, HTTPClientError, ServerConfigurationException) from .utils import xml2str +from typing import Dict, Optional, TYPE_CHECKING +if TYPE_CHECKING: + from ..common.models import Entity + -def set_server_property(key, value): +def set_server_property(key: str, value: str): """set_server_property. Set a server property. @@ -65,7 +69,7 @@ def set_server_property(key, value): "Debug mode in server is probably disabled.") from None -def get_server_properties(): +def get_server_properties() -> Dict[str, Optional[str]]: """get_server_properties. Get all server properties as a dict. @@ -84,7 +88,7 @@ def get_server_properties(): "Debug mode in server is probably disabled.") from None xml = etree.parse(body) - props = dict() + props: Dict[str, Optional[str]] = dict() for elem in xml.getroot(): props[elem.tag] = elem.text @@ -92,7 +96,7 @@ def get_server_properties(): return props -def get_server_property(key): +def get_server_property(key: str) -> Optional[str]: """get_server_property. Get a server property. @@ -149,7 +153,7 @@ def generate_password(length: int): return password -def _retrieve_user(name, realm=None, **kwargs): +def _retrieve_user(name: str, realm: Optional[str] = None, **kwargs): con = get_connection() try: return con._http_request(method="GET", path="User/" + (realm + "/" + name if realm is not None else name), **kwargs).read() @@ -161,7 +165,7 @@ def _retrieve_user(name, realm=None, **kwargs): raise -def _delete_user(name, **kwargs): +def _delete_user(name: str, **kwargs): con = get_connection() try: return con._http_request(method="DELETE", path="User/" + name, **kwargs).read() @@ -173,10 +177,14 @@ def _delete_user(name, **kwargs): raise -def _update_user(name, realm=None, password=None, status=None, - email=None, entity=None, **kwargs): +def _update_user(name: str, + realm: Optional[str] = None, + password: Optional[str] = None, + status: Optional[str] = None, + email: Optional[str] = None, + entity: Optional[Entity] = None, **kwargs): con = get_connection() - params = {} + params: Dict[str, Optional[str]] = {} if password is not None: params["password"] = password @@ -204,7 +212,11 @@ def _update_user(name, realm=None, password=None, status=None, raise -def _insert_user(name, password=None, status=None, email=None, entity=None, **kwargs): +def _insert_user(name: str, + password: Optional[str] = None, + status: Optional[str] = None, + email: Optional[str] = None, + entity: Optional[Entity] = None, **kwargs): con = get_connection() params = {"username": name} @@ -394,15 +406,15 @@ priority : bool, optional """ @staticmethod - def _parse_boolean(bstr): + def _parse_boolean(bstr) -> bool: return str(bstr) in ["True", "true", "TRUE", "yes"] - def __init__(self, action, permission, priority=False): + def __init__(self, action: str, permission: str, priority: bool = False): self._action = action self._permission = permission self._priority = PermissionRule._parse_boolean(priority) - def _to_xml(self): + def _to_xml(self) -> etree._Element: xml = etree.Element(self._action) xml.set("permission", self._permission) @@ -412,12 +424,15 @@ priority : bool, optional return xml @staticmethod - def _parse_element(elem): - return PermissionRule(elem.tag, elem.get( - "permission"), elem.get("priority")) + def _parse_element(elem: etree._Element): + permission = elem.get("permission") + if permission is None: + raise ValueError(f"Permission is missing in PermissionRule xml: {etree.tostring(elem)}") + priority = PermissionRule._parse_boolean(elem.get("priority")) + return PermissionRule(elem.tag, permission, priority if priority is not None else False) @staticmethod - def _parse_body(body): + def _parse_body(body: str): xml = etree.fromstring(body) ret = set()