**Deprecations**:
- Requests version required >= 2.28.2
- Removed Python 2.7, 3.5, 3.6 support as it's not supported by Requests anymore
- Removed support for ``python setup.py test`` as it became deprecated by setuptools
**New Features**:
- *Pro Edition:* RedmineUP [Helpdesk plugin](https://www.redmineup.com/pages/plugins/helpdesk) support (Issue #116)
- *Pro Edition:* RedmineUP [Invoices plugin](https://www.redmineup.com/pages/plugins/invoices) support (Issue #301)
- Timezone support (see [docs](https://python-redmine.com/configuration.html#timezone) for details) (Issue 271)
**Improvements**:
- Added support for Python 3.10, 3.11 and latest PyPy
- Added support for `allowed_statuses` to ``include`` param and on demand includes for Issue resource (requires Redmine >= 5.0.0)
- Added support for `issue_custom_fields` to ``include`` param and on demand includes for Project resource (requires Redmine >= 4.2.0)
- Added support for `comments` and `attachments` to ``include`` param and on demand includes for News resource (requires Redmine >= 4.1.0)
- *Pro Edition:* Added support for RedmineUP Contact `projects` to ``include`` param and on demand includes for ``all()`` and ``filter()`` operations
- *Pro Edition:* Added support for RedmineUP Note ``create()``, ``update()``, ``delete()`` operations (see [docs](https://python-redmine.com/resources/note.html#create-methods) for details)
- Added support for Project ``close()``, ``reopen()``, ``archive()``, ``unarchive()`` operations (see [docs](https://python-redmine.com/resources/project.html#additional-methods) for details, requires Redmine >= 5.0.0)
- Added support for updating and deleting issue journals (see [docs](https://python-redmine.com/resources/issue.html#journals) for details, requires Redmine >= 5.0.0)
**Changes**:
- *Backwards Incompatible:* Switched to pytest instead of nose as nose project is dead (Issue 312)
- *Backwards Incompatible:* Removed usage of distutils.LooseVersion internally since it became deprecated and caused warnings, because of that all version info internally is now being represented as tuples and not strings as before
**Bugfixes**:
- Stop raising `ResourceAttrError` for attributes that actually exist, but their value is `None` (Issue 261)
- *Pro Edition:* RedmineUP Deal resource ``related_contacts`` attribute was returned as a list instead of being converted to ResourceSet object
- Project resource ``default_assignee`` attribute was returned as a dict instead of being converted to Resource object
- Project resource ``time_entry_activities`` attribute was returned as a list instead of being converted to ResourceSet object
**Documentation**:
- Document requirement of `project_id` param for `query_id` filter (Issue 285) (thanks to [Doezer](https://github.com/Doezer))
- Mentioned support for ``user_id`` in TimeEntry's resource create/update (Issue 298)
- Mentioned support for additional scopes for Search API