***********
Project
=======
* Project documentation migrated to
`Read The Docs <https://ipopo.readthedocs.io/>`_ as the previous documentation
server crashed.
All references to the previous server (``coderxpress.net``) have been removed.
* The documentation is being completely rewritten while it is converted from
Dokuwiki to Sphinx.
* Removed Pypy 3 from Travis-CI/Tox tests, as it is not compatible with pip.
* Added tests to ensure that all services and utilities are used at least once
in all tests environments. This will ease regression detection, especially
when following updates of third-party libraries.
* Added ``mypy`` type hints in important places of the framework
Pelix
=====
* Added support for `Service Factories (75) <https://github.com/tcalmant/ipopo/issues/75>`_.
``PrototypeServiceFactory`` are not supported.
* The Framework now adds the ``service.bundleid`` and ``service.scope``
properties to services.
* The import path normalization now ensures that the full path of the initial
working directory is stored in the path, and that the current working
directory marker (empty string) is kept as the first entry of the Python path.
* Merged `pull request 65 <https://github.com/tcalmant/ipopo/pull/65>`_,
to ignore import errors when normalizing the Python path.
* Merged `pull request 68 <https://github.com/tcalmant/ipopo/pull/68>`_,
correcting the behaviour of the thread pool.
* Merged `pull request 77 <https://github.com/tcalmant/ipopo/pull/77>`_,
which fixes the growing of ``sys.path`` in ``normalize_path()``.
iPOPO
=====
* The ``Validate`` method of components is now always called after the bundle
activator has returned. (`66 <https://github.com/tcalmant/ipopo/issues/66>`_)
* Added a ``get_instance(name)`` method to access to the component instance
object by its name. (`74 <https://github.com/tcalmant/ipopo/issues/74>`_)
* Merged `pull request 79 <https://github.com/tcalmant/ipopo/pull/79>`_,
which allows the use of ``__qualname__`` to automatically name the interface
provided by a component according to its class name.
HTTP
====
* Added some utility methods to ``HttpServletRequest``:
* ``get_command()``: get the HTTP command of the request
* ``get_prefix_path()``: get the servlet prefix path
* ``get_sub_path()``: get the part of the path corresponding to the servlet
(*i.e.* without the prefix path)
* ``get_servlet()`` now returns the servlet prefix along with the servlet and
the server parameters.
* Added a ``pelix.https`` service property and an ``is_https()`` service method
to indicate that the server uses HTTPS.
* Added a utility module, ``pelix.http.routing``, which eases the routing of
HTTP requests with decorators like ``Http``, ``HttpGet``...
* Merged `pull request 70 <https://github.com/tcalmant/ipopo/pull/70>`_,
avoiding remote HTTP servlets to be used by the local HTTP server.
* Fixed the way servlet are found according to their path
Remote Services
===============
* JSON-RPC and XML-RPC transports providers now support HTTPS.
* Added a `Redis <https://redis.io/>`_-based discovery provider, working with
all HTTP-based transport providers.
* Added a `ZooKeeper <https://zookeeper.apache.org/>`_-based discovery provider,
working with all HTTP-based transport providers.
* Better detection of the loss of a framework with the mDNS discovery
* mDNS discovery is now based on the PyPI-available ``zeroconf`` package.
Shell
=====
* Added the *Configuration Handler*, which allows to give a JSON file to set
the initial configuration of a framework: properties, bundles, instances, ...
* Console, Remote and XMPP shell now share some common arguments.
This allows to use the *Configuration Handler* arguments in all these scripts.
Miscellaneous
=============
* The Log Service is now a Service Factory.
Utilities
=========
* Added a ``remove_duplicates()`` method, which allows to filter out duplicates
from lists, keeping the original order.
* Added the ``is_bytes()`` method.