A service-oriented component model framework
iPOPO : A component model for Python
This is iPOPO, a component model framework for Python based on SOA principles. It is based on Pelix, an SOA framework.
See http://ipopo.coderxpress.net for documentation and more information.
Feel free to send feedback on your experience of Pelix/iPOPO, via the mailing lists :
- User list : http://groups.google.com/group/ipopo-users
- Development list : http://groups.google.com/group/ipopo-dev
More information at http://ipopo.coderxpress.net/
The package has been tested with:
- Python 2.6, 2.7, 3.1 and 3.2
- Pypy 1.8, 1.9
To work with Python 2.6, the importlib module back-port must be installed. It is available on PyPI.
- New get_factory_details(name) method in the iPOPO service, acting like get_instance_details(name) but for factories. It returns a dictionary describing the given factory.
- New factory shell command, which describes a component factory: properties, requirements, provided services, …
- Servlet exceptions are now both sent to the client and logged locally
- Data read from the servlets or sockets are now properly converted from bytes to string before being parsed (Python 3 compatibility).
- Exceptions are now printed using str(ex) instead of ex.message (Python 3 compatibility).
- The shell output is now flushed, both by the shell I/O handler and the text console. The remote console was already flushing its output. This allows to run the Pelix shell correctly inside Eclipse.
- An error is now logged if a class is manipulated twice. Decorators executed after the first manipulation, i.e. upon @ComponentFactory(), are ignored.
- New servlet binding parameters:
- http.name : Name of HTTP service. The name of component instance in the case of the basic implementation.
- http.extra : Extra properties of the HTTP service. In the basic implementation, this the content of the http.extra property of the HTTP server component
- New method accept_binding(path, params) in servlets. This allows to refuse the binding with a server before to test the availability of the registration path, thus to avoid raising a meaningless exception.
- End points are stored according to their framework
- Added a method lost_framework(uid) in the registry of imported services, which unregisters all the services provided by the given framework.
- Shell help command now accepts a command name to print a specific documentation
- Better handling of inherited and overridden methods: a decorated method can now be overridden in a child class, with the name, without warnings.
- Better error logs, with indication of the error source file and line
- The remote shell now provides a service, pelix.shell.remote, with a get_access() method that returns the (host, port) tuple where the remote shell is waiting for clients.
- The HTTP service now supports the update of servlet services properties. A servlet service can now update its registration path property after having been bound to a HTTP service.
- A 500 server error page containing an exception trace is now generated when a servlet fails.
- Bundle.update() now logs the SyntaxError exception that be raised in Python 3.
- Fixed the threads command that wasn’t working on Python 3.
- The bound_to() method of a servlet is called only after the HTTP service is ready to accept clients.
- BundleContext.install_bundle() now returns the Bundle object instead of the bundle ID. BundleContext.get_bundle() has been updated to accept both IDs and Bundle objects in order to keep a bit of compatibility
- Framework.get_symbolic_name() now returns pelix.framework instead of org.psem2m.pelix
- ServiceEvent.get_type() is renamed get_kind(). The other name is still available but is declared deprecated (a warning is logged on its first use).
- Shell command methods now take an IOHandler object in parameter instead of input and output file-like streams. This hides the compatibility tricks between Python 2 and 3 and simplifies the output formatting.
- Added this “release notes” page to the web site
- BundleContext.install_visiting(path, visitor):
- Visits the given path and installs the found modules if the visitor accepts them
- BundleContext.install_package(path) (experimental):
- Installs all the modules found in the package at the given path
- Based on install_visiting()
- Components with a pelix.ipopo.auto_restart property set to True are automatically re-instantiated after their bundle has been updated.
- Remote Services: use services of a distant Pelix instance
- Multicast discovery
- XML-RPC transport (not fully usable)
- JSON-RPC transport (based on a patched version of jsonrpclib)
- EventAdmin: send events (a)synchronously
Version 0.4 fixes many bugs and provides new features:
- create_framework() utility method
- The framework has been refactored, allowing more efficient services and events handling
- A component can provide multiple services
- A service controller can be injected for each provided service, to activate or deactivate its registration
- Dependency injection and service providing mechanisms have been refactored, using a basic handler concept.
- Added a HTTP service component, using the concept of servlet
- Added an extensible shell, interactive and remote, simplifying the usage of a framework instance
Packages have been renamed. As the project goes public, it may not have relations to isandlaTech projects anymore.
|Previous name||New name|
Version 0.2 is the first public release, under GPLv3 license (see LICENSE).