- Remove unncessary
package_data
from setup.py (#243) - Use a custom logger when logging exceptions, not root
- Use importlib.resources instead of pkg_resources.
- Upgrade to jsonschema 4.
- Fix reversed Result Either type (#227).
- Documentation.
- Add to FAQ.
- Update readme and documentation.
- Internal function
compose
has been replaced with a better one.
- Update readme and setup.py, minor adjustments.
A complete rebuild, with a few important usage changes.
See a post explaining the changes at https://composed.blog/jsonrpcserver-5-changes.
Read the full version 5 documentation at jsonrpcserver.com.
- Methods must now return a Result (Success or Error).
- The dispatch function now returns a string.
- Methods collection is now a simple dict, the Methods class has been removed.
- Changed all classes (Request, Response, Methods, etc) to namedtuples.
- Logging removed. User can log instead.
- Config file removed. Configure with arguments to dispatch.
- Removed "trim log values" and "convert camel case" options.
- Removed the custom exceptions, replaced with one JsonRpcError exception.
- Add ability to use custom serializer and deserializer (#125)
- Add ability to use custom method name (#127)
- Deny additional parameters in json-rpc request (#128)
Thanks to deptyped.
- In the case of a method returning a non-serializable value, return a JSON-RPC error response. It was previously erroring server-side without responding to the client. (#119)
- Fix for Python 3.8 - ensures the same exceptions will be raised in 3.8 and pre-3.8. (#122)
- Fix the egg-info directory in package.
- Fix file permission on all files.
- Add InvalidParamsError exception, for input validation. Previously the
advice was to
assert
on input values. However, AssertionError was too generic an exception. Instead, raise InvalidParamsError. Noteassert
will still work but will be removed in the next major release (5.0). - Add an ApiError exception; raise it to send an application defined error response. This covers the line in the JSON-RPC spec, "The remainder of the space is available for application defined errors."
- A KeyError raised inside methods will no longer send a "method not found" response.
- Uncaught exceptions raised inside methods will now be logged. We've been simply responding to the client with a Server Error. Now the traceback will also be logged server-side.
- Fix a deprecation warning related to collections.abc.
- Add py.typed to indicate this package supports typing. (PEP 561)
Thanks to steinymity for his work on this release.
- Include license in package.
- Use faster method of jsonschema validation
- Use inspect from stdlib, removing the need for funcsigs
- Update dependencies to allow jsonschema version 3.x
- Support Python 3.8
- Fix to allow passing context when no parameters are passed.
- Include exception in ExceptionResponse. Closes #74.
The 4.x releases will support Python 3.6+ only.
- Dispatch now works only with
Methods
object. No longer accepts a dictionary or list. dispatch
no longer requires a "methods" argument. If not passed, uses the global methods object.- Methods initialiser has a simpler api - Methods(func1, func2, ...) or Methods(name1=func1, name2=func2, ...).
- No more jsonrpcserver exceptions. Calling code will always get a valid
JSON-RPC response from
dispatch
. The oldInvalidParamsError
is gone- instead do a regular
assert
on arguments.
- instead do a regular
response.is_notification
renamed toresponse.wanted
, which is the opposite of is_notification. This means the original request was not a notification, it had an id, and does expect a response.- Removed "respond to notification errors" option, which broke the specification. We still respond to invalid json/json-rpc requests, in which case it's not possible to know if the request is a notification.
- Removed the "config" module. Added external config file,
.jsonrpcserverrc
. (alternatively configure with arguments to dispatch) - Removed the "six" dependency, no longer needed.
- Configure logging Pythonically.
- Add type hints
- Move tests to pytest
- Passing a context object to dispatch now sets it as the first positional
argument to the method.
def fruits(ctx, color):
- Check params with regular asserts.
- Add trim_log_values dispatch param. (#65)
- Fix a missing import
- Rewrite of dispatch(), adding parameters to configure the dispatch that were
previously configured by modifying the
config
module. That module is now deprecated and will be removed in 4.0.
- Refactoring
- Allow requests to have any non-None id
- Refactor for Request subclassing
- Include context data in regular (synchronous) methods.dispatch
- Pass some context data through dispatch to the methods.
- Fix not calling notifications in batch requests.
- Fix AttributeError on batch responses
- Add
Response.is_notification
attribute
- Fix
convert_camel_case
with array params
- Disable logging in config
- Performance improved
- Fix async batch requests
- Added asyncio support. (Python 3.5+)
- Added a methods object to the jsonrpcserver module (so you can import jsonrpcserver.methods, rather than instantiating your own).
- Added methods.dispatch().
- Fix Methods.serve_forever in python 2 (thanks @bplower)
- Updated method of logging exception (thanks @bplower)
- Pass Methods named args onto MutableMapping
- Remove unused logger
- Allow passing dict to Methods constructor
- A basic HTTP server has been added.