nirum-wsgi 0.3.0
Nirum services as WSGI apps
License: MIT license

Nirum services as WSGI apps
===========================

.. image:: https://travis-ci.org/spoqa/nirum-python-wsgi.svg?branch=master
   :target: https://travis-ci.org/spoqa/nirum-python-wsgi
   :alt: Build status

.. image:: https://badge.fury.io/py/nirum-wsgi.svg
   :target: https://pypi.org/project/nirum-wsgi/
   :alt: Latest PyPI version

This package provides ``nirum_wsgi.WsgiApp`` class which adapts a given
Nirum service to a WSGI application:

.. code-block:: python

   from yourservice import YourService
   from nirum_wsgi import WsgiApp

   class YourServiceImpl(YourService):
       ...

   app = WsgiApp(YourServiceImpl())

There's a development-purpose CLI launcher named ``nirum-server`` as well:

.. code-block:: bash

   nirum-server -H 0.0.0.0 -p 8080 --debug 'yourserviceimpl:YourServiceImpl()'

Changelog
=========

Version 0.3.0
-------------

Released on May 25, 2018.

- Became ready for the `Nirum 0.4.0`__ compiler.  Instances of service classes
  generated by the compiler older than the version 0.4.0 is supported through
  ``LegacyWsgiApp``.  Note that the constructor of ``WsgiApp`` detects
  which version of compiler is the given service object generated from,
  and if it's older than 0.4.0 automatically returns an instance of
  ``LegacyWsgiApp`` instead of ``WsgiApp``, for backward compatibility.

- An ``400 Bad Request`` error response for invalid method arguments became
  to have a more field named ``errors`` which contains one or more errors.
  Its format is like:

  .. code-block:: json

     {
       "message": "There are invalid arguments.",
       "errors": [
         {"path": ".author.name", "message": "Expected a string."},
         {"path": ".tags", "message": "Expected an array."}
       ]
     }

- ``WsgiApp`` had been an old-style class in Python 2.  It's now a new-style
  class.  No change on Python 3 (since there's no old-style class in Python 3.)

- Added ``MethodArgumentError`` to store multiple errors during
  deserialization of method arguments.

- ``WsgiApp.error()`` and ``WsgiApp.make_error_response()`` methods became able
  to take extra keyword arguments to extend the result JSON object.

__ https://github.com/spoqa/nirum/releases/tag/0.4.0


Version 0.2.2
-------------

Released on March 20, 2018.

- Fixed a runtime ``TypeError`` that had been raised when a parameter
  corresponding to a variable for a query string in ``@http-resource``
  annotation's path has an optional type.  [`#251`_ by Chang-soo Han]

.. _#251: https://github.com/spoqa/nirum/issues/251


Version 0.2.1
-------------

Released on March 20, 2018.

- Fixed a runtime ``re.error`` (``sre_constants.error``) that had been raised
  when a variable name for a query string has one or more hyphens
  in ``@http-resource`` annotation's ``path``.  [`#250`_ by Chang-soo Han]

.. _#250: https://github.com/spoqa/nirum/issues/250


Version 0.2.0
-------------

Released on February 4, 2018.

- Made parameters having an optional type possible to be omitted. [`#205`_]
- Added method dispatching by querystring pattern
  e.g., ``@http-resource(method="GET", path="/users?from={from}&to={to}")``.
  [`#130`_]
- Added basic method dispatching by path pattern (URI template) through
  ``http-resource`` annotation, e.g.,
  ``@http-resource(method="GET", path="/users/{login}/works/{work-id}/")``.
  [`#130`_]
- Added ``allowed_origins`` and ``allowed_headers`` options for CORS_ to
  ``WsgiApp`` constructor.  It supports simple wildcard (``*``) pattern syntax
  as well.
- Added ``AnnotationError``, ``NoJsonError``, and ``ServiceMethodError``
  exceptions.
- Since returning a disallowed value which does not match to the return type
  is the fault the server-side made, the HTTP status code for the case became
  ``500 Internal Server Error`` instead of ``400 Bad Request``.
  Also now it writes logs using ``logging`` module.
- For the mistakes returning ``None`` from a method having non-null return type,
  now it became to show a more readable and debug-friendly message with a proper
  response instead of uncaught Python exception.
- ``WsgiApp.url_map`` attribute was gone.
- ``/ping/`` resource was gone.
- Fixed ``nirum-server`` command able to import a Python module/package from
  the current working directory (``.``; CWD).

.. _#205: https://github.com/spoqa/nirum/issues/205
.. _#130: https://github.com/spoqa/nirum/issues/130
.. _CORS: https://www.w3.org/TR/cors/


Version 0.1.0
-------------

Released on July 10, 2017.