**Release date: 2023-01-03**
After months of work, the 1.0 milestone is a major refactoring of the library. Many parts of the project have been
modernized to improve readability and robustness, and a few issues were fixed.
Improvements
- Type hinting is now supported in RPC methods. Auto-generated documentation will use it when it is defined.
Old-style "doctypes" are still supported.
- Dependency to `six` have been completely removed
Breaking Changes
- When an authentication error is raised, the returned status code is now 200 instead of 403 for consistency with
batch and system.multicall requests (35)
- Django < 2.1 and Python < 3.5 support have been dropped.
Other API changes
- A new `modernrpc.core.Protocol` enum has been introduced to enforce correct protocol value when needed. (29, 30).
This new class replaces `modernrpc.core.JSONRPC_PROTOCOL` and `modernrpc.core.XMLRPC_PROTOCOL` but aliases were
created for backward compatibility.
- `RPCUnknownMethod` exception has been renamed to `RPCMethodNotFound`. An alias has been created
for backward compatibility
Fixes
- Initialization process updated: exceptions are now raised on startup for invalid RPC modules. In addition, Django
check system is used to notify common errors. This was requested multiple times (2, 13, 34).
- JSON-RPC notification behavior has been fixed to respect standard. Requests without `id` are handled as
notifications but requests with null `id` are considered invalid and will return an error
- Batch request behavior has been fixed when one or more results failed to be serialized
- Builtin `system.methodSignature` behavior have been updated to respect standard. It now returns a list of
list and unknown types are returned as "undef" (see http://xmlrpc-c.sourceforge.net/introspection.html)
Misc
- Added support for Python 3.9, 3.10 and 3.11
- Added support for Django 3.2, 4.0 and 4.1
- Documentation tree was completely reworked for clarity and simplicity. A new theme (Book) is now used to improve
readability. See <https://django-modern-rpc.rtfd.io>.
- Poetry is now used to configure project dependencies and build distributions. The new `pyproject.toml` file
replaces `setup.py`, `setup.cfg`, `MANIFEST.in` and `requirements.txt` to centralize all dependencies,
external tools settings (pytest, flake8, etc.) and packaging configuration
- Black is now used to automatically format code
- Mypy is now used to verify type hints consistency
- Tox configuration now includes pylama, mypy, pylint and black environments
- All tests have been rewritten to have a strong separation between unit and functional tests. Test classes where
created to group tests by similarities. Many fixtures have been added, with more parameterization, resulting in
about 350 tests executed covering more than 95% of the code.