Skip to content

Commit

Permalink
add issues_assigned and issues_authored relations (issue #317)
Browse files Browse the repository at this point in the history
  • Loading branch information
maxtepkeev committed Mar 2, 2024
1 parent 68e56e1 commit b595d0b
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 4 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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 <https://github.com/maxtepkeev/python-redmine/issues/317>`__)
- *Pro Edition:* Added support for RedmineUP DealCategory ``create()``, ``update()``, ``delete()`` operations
(see `docs <https://python-redmine.com/resources/deal_category.html#create-methods>`__ for details)
- *Pro Edition:* RedmineUP CrmQuery resource now supports ``invoices`` and ``expenses`` relation attributes
Expand Down
15 changes: 15 additions & 0 deletions docs/resources/issue.rst
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,21 @@ filter
>>> project.issues
<redminelib.resultsets.ResourceSet object with Issue resources>
.. 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
<redminelib.resultsets.ResourceSet object with Issue resources>
>>> user.issues_assigned
<redminelib.resultsets.ResourceSet object with Issue resources>
>>> user.issues_authored
<redminelib.resultsets.ResourceSet object with Issue resources>
Update methods
--------------

Expand Down
4 changes: 3 additions & 1 deletion docs/resources/user.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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 <https://www.redmineup.com/pages/plugins/crm>`_)
* contacts (requires Pro Edition and `CRM plugin <https://www.redmineup.com/pages/plugins/crm>`_)
* invoices (requires Pro Edition and `Invoices plugin <https://www.redmineup.com/pages/plugins/invoices>`_
Expand Down
12 changes: 9 additions & 3 deletions redminelib/resources/standard.py
Original file line number Diff line number Diff line change
Expand Up @@ -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']
Expand All @@ -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
Expand Down
2 changes: 2 additions & 0 deletions tests/test_resources_standard.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down

0 comments on commit b595d0b

Please sign in to comment.