= Extending Indico = Indico takes advantage of the `setuptools` entry point mechanism in order to allow other packages to contribute with their own features. The idea is that other packages can specify their own plugins and plugin types, using the `indico.ext` and `indico.ext_types` entry points respectively. == Example == By default, Indico declares only the entry points for the plugins that come bundled with it (Room Booking, Collaboration, EPayment and LiveSync). === indico/setup.py === {{{ # all Indico plugins go here [indico.ext_types] Collaboration = MaKaC.plugins.Collaboration InstantMessaging = MaKaC.plugins.InstantMessaging RoomBooking = MaKaC.plugins.RoomBooking EPayment = MaKaC.plugins.EPayment livesync = indico.ext.livesync [indico.ext] Collaboration.EVO = MaKaC.plugins.Collaboration.EVO # ... livesync.invenio = indico.ext.livesync.invenio livesync.cern_search = indico.ext.livesync.cern_search }}} A `cern_extras` separate package could declare its own indico plugin from its own `setup.py`. It should only need to specify where it is, under `indico_ext`. === cern_extras/setup.py === {{{ [console_scripts] indico_foundationSync = indico_cern_extras.scripts.FoundationSync:main [indico.ext] EPayment.yellowPay = indico_cern_extras.plugins.yellowPay }}} Notice how the package also declares a console script that will be accessible from the `PATH`. Same for a hypothetical `fermi_extras` package, that could contain its own plugin. === fermi_extras/setup.py === {{{ [indico.ext] Collaboration.WebEx = indico_fermi_extras.plugins.WebEx }}} Like this, packages can declare themselves to Indico without the slightest change of config file, or complicated setup processes. == Advantages == * Packages are independent, one can be upgraded without touching the other ones; * Packages can be in any namespace, no need to be under `indico.ext` or anything like that; * No need to copy plugin files to the Indico package before running the Indico setup script; * Packages can declare also console scripts, which are automatically added by setuptools to the path; == Disadvantages == * Need to maintain the list of plugins bundled with Indico - However, this list won't probably grow much more, and we can even in the future bundle collaboration and room booking (and others) apart from the main package;