diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6f3417f..6a328ae 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,8 @@ Changelog - Migrated CI to GitHub Actions, also we now test not only on Linux, but on macOS and Windows as well - ``dir(resource)`` and ``list(resource)`` now also show properties of an object +- Support for ``issues_assigned`` and ``issues_authored`` relations in User object + (`Issue #317 `__) - *Pro Edition:* Added support for RedmineUP DealCategory ``create()``, ``update()``, ``delete()`` operations (see `docs `__ for details) - *Pro Edition:* RedmineUP CrmQuery resource now supports ``invoices`` and ``expenses`` relation attributes diff --git a/docs/resources/issue.rst b/docs/resources/issue.rst index aab4d82..41869e3 100644 --- a/docs/resources/issue.rst +++ b/docs/resources/issue.rst @@ -287,6 +287,21 @@ filter >>> project.issues + .. versionadded:: 2.5.0 + + Apart from ``issues`` relation a User resource object provides ``issues_assigned`` which is an alias + to ``issues`` relation and ``issues_authored`` relation which returns Issue objects authored by a user: + + .. code-block:: python + + >>> user = redmine.user.get(9) + >>> user.issues + + >>> user.issues_assigned + + >>> user.issues_authored + + Update methods -------------- diff --git a/docs/resources/user.rst b/docs/resources/user.rst index 6c963c6..2ca0578 100644 --- a/docs/resources/user.rst +++ b/docs/resources/user.rst @@ -154,8 +154,10 @@ get resource objects wrapped in a :ref:`ResourceSet` which are somehow related to a User resource object. The relations provided by the User resource object are: - * issues * time_entries + * issues (alias to issues_assigned) + * issues_assigned (requires Python-Redmine v2.5.0) + * issues_authored (requires Python-Redmine v2.5.0) * deals (requires Pro Edition and `CRM plugin `_) * contacts (requires Pro Edition and `CRM plugin `_) * invoices (requires Pro Edition and `Invoices plugin `_ diff --git a/redminelib/resources/standard.py b/redminelib/resources/standard.py index 07baaa9..92f195c 100644 --- a/redminelib/resources/standard.py +++ b/redminelib/resources/standard.py @@ -419,7 +419,7 @@ class User(BaseResource): _repr = [['id', 'firstname', 'lastname'], ['id', 'name']] _includes = ['memberships', 'groups'] - _relations = ['issues', 'time_entries'] + _relations = ['issues', 'issues_assigned', 'issues_authored', 'time_entries'] _relations_name = 'assigned_to' _unconvertible = ['status'] _create_readonly = BaseResource._create_readonly + ['api_key', 'last_login_on'] @@ -429,12 +429,18 @@ class User(BaseResource): 'groups': 'Group', 'memberships': 'ProjectMembership', 'issues': 'Issue', + 'issues_assigned': 'Issue', + 'issues_authored': 'Issue', 'time_entries': 'TimeEntry', } def __getattr__(self, attr): - if attr == 'time_entries' and attr not in self._encoded_attrs: - self._relations_name = 'user' + if attr in self._relations and attr not in self._encoded_attrs: + if attr == 'issues_authored': + self._relations_name = 'author' + elif attr == 'time_entries': + self._relations_name = 'user' + value = super().__getattr__(attr) self._relations_name = 'assigned_to' return value diff --git a/tests/test_resources_standard.py b/tests/test_resources_standard.py index 46c7a1d..ee87d34 100644 --- a/tests/test_resources_standard.py +++ b/tests/test_resources_standard.py @@ -1409,6 +1409,8 @@ def test_user_relations(self): self.response.json.return_value = responses['user']['get'] user = self.redmine.user.get(1) self.assertIsInstance(user.issues, resultsets.ResourceSet) + self.assertIsInstance(user.issues_assigned, resultsets.ResourceSet) + self.assertIsInstance(user.issues_authored, resultsets.ResourceSet) self.assertIsInstance(user.time_entries, resultsets.ResourceSet) def test_user_includes(self):