Skip to content

Commit

Permalink
refactor NamedResource and User class
Browse files Browse the repository at this point in the history
* check type of .name attribute
* test User.name is read-only

Signed-off-by: flashdagger <flashdagger@googlemail.com>
  • Loading branch information
flashdagger committed Mar 11, 2024
1 parent a40bc01 commit 2ae44e9
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 13 deletions.
5 changes: 3 additions & 2 deletions tests/test_types_objects.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,16 @@
reveal_type(client.roles) # N: Revealed type is "zammadoo.roles.Roles"
role = client.roles(0)
reveal_type(role.name) # N: Revealed type is "builtins.str"
reveal_type(role.permissions) # N: Revealed type is "builtins.list[builtins.str]"
reveal_type(role.update()) # N: Revealed type is "zammadoo.roles.Role"
reveal_type(client.organizations) # N: Revealed type is "zammadoo.organizations.Organizations"
reveal_type(
client.organizations.create("")) # N: Revealed type is "zammadoo.organizations.Organization"
reveal_type(
client.organizations(0).update() # N: Revealed type is "zammadoo.organizations.Organization"
)
client.organizations(0).update()) # N: Revealed type is "zammadoo.organizations.Organization"
reveal_type(client.tags) # N: Revealed type is "zammadoo.tags.Tags"
reveal_type(iter(client.tags)) # N: Revealed type is "typing.Iterator[TypedDict('zammadoo.utils.TypedTag', {'id': builtins.int, 'name': builtins.str, 'count': Union[builtins.int, None]})]"
Expand Down
8 changes: 8 additions & 0 deletions tests/test_users.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,20 @@
# -*- coding: UTF-8 -*-
from datetime import datetime

import pytest


def test_user_name_attribute(client):
user = client.users(123, info={"id": 123, "login": "someone@pytest"})
assert user.name == "someone@pytest"


def test_user_name_attribute_is_readonly(client):
user = client.users(123, info={"id": 123, "login": "someone@pytest"})
with pytest.raises(AttributeError, match="read-only"):
user.name = ""


def test_user_fullname_attribute_given_firstname_only(client):
user = client.users(123, info={"id": 123, "firstname": "Max", "lastname": None})
assert user.fullname == user.firstname == "Max"
Expand Down
8 changes: 2 additions & 6 deletions zammadoo/resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from typing import TYPE_CHECKING, Any, Optional

from .resources import ResourcesT, _T_co
from .utils import fromisoformat, info_cast
from .utils import fromisoformat

if TYPE_CHECKING:
from .users import User
Expand Down Expand Up @@ -153,9 +153,5 @@ def delete(self) -> None:

class NamedResource(MutableResource):
active: bool #:
name: str #:
note: Optional[str] #:

@property
def name(self) -> str:
self._initialize()
return info_cast(self._info)["name"]
11 changes: 8 additions & 3 deletions zammadoo/users.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from datetime import datetime
from functools import cached_property
from typing import TYPE_CHECKING, Dict, List, Optional, Union

from .groups import Group
from .resource import NamedResource
from .resources import CreatableT, SearchableT
from .utils import fromisoformat, info_cast
from .utils import fromisoformat

if TYPE_CHECKING:
from .client import Client
Expand Down Expand Up @@ -51,8 +52,12 @@ def longname(self) -> str:
@property
def name(self) -> str:
"""alias for :attr:`login`"""
self._initialize()
return info_cast(self._info)["login"]
return self.login

@name.setter
# dummy setter to keep mypy happy
# value setting is prevented by Resource.__setattr__()
def name(self, _value) -> None: ...

@property
def groups(self) -> List[Group]:
Expand Down
2 changes: 0 additions & 2 deletions zammadoo/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@ class TypedInfo(TypedDict, total=False):
create_article_sender: str
create_article_type: str
id: int
name: str
login: str
page: int
parent_id: Optional[int]
per_page: int
Expand Down

0 comments on commit 2ae44e9

Please sign in to comment.