python-brisa CHANGES

    Release 0.9 - (2009-05-30)

  • Implented WSGI server adapters for cherrypy, circuits.web and paste
  • Webserver is now WSGI with pluggable server adapters
  • Implemented ServiceBuilder that builds the service object from a scpd.xml
  • Implemented two ways of creating a service: with a scpd.xml file or by specifying service parameters through code - and the framework generates the scpd.xml
  • Reactor infrastructure added
  • Webserver is not a singleton anymore
  • Arrangement for device abstracts the user from a lot of things, such as the webserver
  • Implemented Gtk2Reactor, Glib2Reactor, EcoreReactor, SelectReactor (default)
  • Plugin architecture refactored
  • Log messages are a bit more cleaner now. Most log messages were for debug purposes, so, changed most of them to DEBUG. INFO level now should be only used for informing the user high-level events, such as "New device", "Device is gone", "Publishing device", and so on.
  • Control point objects are now reusable (they weren't). They can now be stopped, and started again.
  • Closure procedure is now chained. Some classes (such as ssdp msearch) now have these 3 methods: start(), stop(), destroy(). start() - starts the class, stop() - stops the class, but it can be start()'ed again later and destroy() - stops the class DEFINITELY, clean references to help with garbage collection, makes the class unusable. For a more clearer view, take a look at upnp/control_point/control_point.py. You will notice that these three methods are chained.
  • Device webserver publishing is now chained and transparent to the user. Added some options to brisa for customizing device/service build (and these options have default values for making everything work as automatic as possible)
  • Packages created:
    • core: framework core stuff
    • core.reactors: reactors implementations
    • upnp.control_point: API for writing control points
    • upnp.device: API for writing devices
    • upnp.services: general services implemented by us (ConnectionManager, ContentDirectory)
    • upnp.services.xmls: XML folder for the services of the item above
  • Removed lots of threads: most are now integrated with the main loop (fd's and sleeps)
  • Implemented UPnP eventing API on the device side
  • Removed deprecated modules: utils.sqlite, threading
  • Packages moves (from -> to):
    • utils.network -> core.network
    • utils.network_listeners -> core.network_listeners
    • utils.network_senders -> core.network_senders
    • utils.system -> core.system
    • utils.failure -> core.failure
    • threading.threaded_call -> core.threaded_call
    • log -> core.log
    • config -> core.config
    • control_point -> upnp.control_point
    • xml_descriptions -> upnp.services.xmls
    • services.web_server -> core.webserver
  • Fixed looping call bug when the parameter "now" is False
  • Fixed arguments parsing bug (was not parsing arguments properly)
  • Fixed examples XML files

    Release 0.8 - (2008-09-30)

  • Major cleanup on the framework (old/unused modules removed)
  • Fixed PEP8 errors and files/methods/variables with wrong naming convention
  • Split between framework and applications
  • Separate documentation for developers and users
  • Various bug-fixes on the framework and applicationss
  • Thread management improvements (assured control over threads)
  • Better programmatic control over the control point
  • Better support for multiple instances of BRisa
  • Configuration API stabilized, using cPickle
  • Logging with more information (file, line, time)
  • DIDL completely refactored and now uses cElementTree
  • Added a simple command line tool for configuring (brisa-conf)
  • UPnP A/V specifics moved out from python-brisa
  • Added simple watch API for objects and SQLite databases
  • Improved debian packaging
  • Installation script (setup.py) enhanced
  • Added more examples to the directory
  • #2980: didl_lite using parse_xml incorrectly
  • #3242: difficulties in control point start/stop
  • #3244, #3270, #3273: ThreadObject problem with blocking run()'s fixed with interruption mechanism
  • #3247: attributes moved to object scope
  • #3271: run_async_call() performing the call even when cancelled
  • #3273: ThreadManager.stop_all using list dangerously
  • #3274: webserver does not remove itself from ThreadManager list
  • #3288: service XML is never parsed
  • #3289: control point event not sending changed_vars
  • #3291: some UPnP devices sending empty controlURL
  • #3306: default number of trials and intervals of url_fetch should be configurable
  • #3306: device which failed to download XML is being ignored forever by SSDPSearch
  • #3371: instances of ThreadObject not being garbage-collected

    Release 0.7 - (2008-09-30)

  • Written documentation for users and developers
  • Control Point API cleaned, added event support
  • Framework reorganized with lots of fixes and cleanups
  • Removed Twisted dependency
  • Removed sqlite2 dependency (now uses sqlite3 which comes with python)
  • Replaced pymad, libmad and pyid3 dependencies with mutagen
  • New implementation of XML DIDLLite
  • Implementation of the maemo multimedia and Canola 1 plugins
  • Added an initial implementation of the UPnP-UP (User Profile) concept
  • Reimplementation of the filesystem plugin persistence (because sqlobject was removed)
  • Added Cherrypy as dependency for providing the web server
  • SVN completely restructured
  • Improvements on the Control Point API with asynchronous device creation
  • Implemented a thread management architecture
  • Generated APIDoc for all framework
  • Added a configuration tool in GTK
  • Refactored media server and media render code for better organization

    Release 0.6 - (2007-08-20)

  • Many improvements on the SQLObject usage for the Filesystem plug-in
  • New implementation of XML DIDLite generation
  • Reimplementation of the content directory service browsing
  • Now the content directory is responsible to generate the DIDL response
  • Support of namespace:id in the id field of XML DIDL
  • Call specific browser method according to the namespace (which represents a plugin identifier)
  • A completely reimplementation of the plug-in architecture of the Media Server
  • The plugin manager becomes a singleton and now the it supports load and unload of plug-ins according to the plug-ins priority field
  • The usage flag of plug-ins can be controlled through programming (although the default value is read from brisa.conf file)
  • The plugins now support the implementation of a specific browse method
  • Implementation of YouTube plug-in
  • Many improvements on the SHOUTcast and FlickR plugins
  • Completely separation of the persistence layer and filesystem plug-ins
  • Many improvements on the UPnP API
  • Now there is just on webserver instance shared between UPnP devices

    Release 0.5 - (2007)

  • Many improvements on the SQLObject usage for the Filesystem plug-in
  • New implementation of XML DIDLite generation
  • Reimplementation of the content directory service browsing:
  • Now the content directory is responsible to generate the DIDL response
  • Support of namespace:id in the id field of XML DIDL
  • Call specific browser method according to the namespace (which represents a plugin identifier)
  • A completely reimplementation of the plug-in architecture of the Media Server
  • The plugin manager becomes a singleton and now the it supports load and unload of plug-ins according to the plug-ins priority field
  • The usage flag of plug-ins can be controlled through programming (although the default value is read from brisa.conf file)
  • The plugins now support the implementation of a specific browse method.
  • Implementation of YouTube plug-in
  • Many improvements on the SHOUTcast and FlickR plugins
  • Completely separation of the persistence layer and filesystem plug-ins
  • Many improvements on the UPnP API:
  • Now there is just on webserver instance shared between UPnP devices

    Release 0.4 - (2007-05-15)

  • Implementation of feature request listen in #765
  • In previous brisa version the database were always erased and recreated every media server startup
  • Use of filesize and filepath to reconized a "already stored media file"
  • Automatic map between genre id and genre names, which made the server ID3 compliant
  • Support for addition of new file at media server runtime
  • In previous brisa version, the user must to restart the server in order to make media server recognize new files
  • Implementation of server watcher using pyinotify to identify and store new files information added to any shared directory
  • Improvement of the brisaserver.py code, which have many mixed (incorrect) use of plugin manager, twisted, etc
  • The main method was simplified, many steps was transformed into other methods and the code become more clear
  • Some code listened into plugin manager was reorganized and distributed between plugin.py and brisaserver.py in a more interest manner
  • Improvement in plugin load, now it is loaded in a thread way, which allow the startup of the media server more fast
  • Implementation of template method and observer design patterns to load the plugin and be notified when it is finished
  • Improvement of file_system_plugin.py code. It was removed the relation between plugins and twisted web server resource. Now, the plugin doesn't know the resource of the twisted web server. The right place is brisaserver.py, where it is known and where it is managed the content web server
  • Twisted web now see the brisa database as its filesystem to access content (creation of a specific twisted.web.resource)
  • Improvement of the plugin architecture
  • Creation of a plugin interface for third-party plugin implementors
  • Some PEP8 fixes for the files modified by this commit
  • The server now support unicode in response to the browsing. From now, special chars, such as ç, ã, é and so on is now supported
  • In the earlier version of file_system_plugins, they accepted title, album and artist as a blank string. Now it is mandatory any string in these fields
  • Load web server content on the fly. The file system of the media server web server is now the database. No more /content directory is loaded into the memory, instand it is loaded on the fly by quering the database
  • Improvement of brisa.conf syntax, making in more uniform between similar [sections] and other minor changes. The name of albums defined in section [image], which until brisa =< 0.3 was called photoalbum, is now defined into a .album_name file located in the respective image path, which a user can create and put the name of the album in the first line of the file. If it is necessary, in future release it can be changed to a ini format file. Since the only parameter is the name, the team define just to put a single string inside the file. For more details, refer to the brisa.conf itself
  • option output was added to [logging] section. The user can specify if he/she wants the log to stdout or to the file
  • option watch was added to filesystem sections in order to inform if the dirs option need to be monitorized for changes
  • dir option no it is dirs
  • Get parameter as a list
  • In the brisa_config module was created a method get_parameter_as_list, which the developer can get the read parameter as a python list, which is splited by a specified token. If no token is specified, : is used
  • brisa_config now is using standard python config module and it was transformed into a singleton
  • Improvements of DIDL handles
  • Improvements of web interface for configure media server

    back