{
"info": {
"author": "Thomas Calmant",
"author_email": "thomas.calmant@gmail.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Topic :: Software Development :: Libraries :: Application Frameworks"
],
"description": ".. image:: https://ipopo.readthedocs.io/en/latest/_images/logo_texte_200.png\n :alt: iPOPO logo\n :width: 200px\n :align: center\n :target: https://ipopo.readthedocs.io/\n\niPOPO: A Service-Oriented Component Model for Python\n####################################################\n\n.. image:: https://badges.gitter.im/Join%20Chat.svg\n :alt: Join the chat at https://gitter.im/tcalmant/ipopo\n :target: https://gitter.im/tcalmant/ipopo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n\n.. image:: https://img.shields.io/pypi/v/ipopo.svg\n :target: https://pypi.python.org/pypi/ipopo/\n :alt: Latest Version\n\n.. image:: https://img.shields.io/pypi/l/ipopo.svg\n :target: https://pypi.python.org/pypi/ipopo/\n :alt: License\n\n.. image:: https://travis-ci.org/tcalmant/ipopo.svg?branch=master\n :target: https://travis-ci.org/tcalmant/ipopo\n :alt: Travis-CI status\n\n.. image:: https://coveralls.io/repos/github/tcalmant/ipopo/badge.svg?branch=master\n :target: https://coveralls.io/github/tcalmant/ipopo?branch=master\n :alt: Coveralls status\n\n`iPOPO `_ is a Python-based Service-Oriented\nComponent Model (SOCM) based on Pelix, a dynamic service platform.\nThey are inspired on two popular Java technologies for the development of\nlong-lived applications: the\n`iPOJO `_\ncomponent model and the `OSGi `_ Service Platform.\niPOPO enables to conceive long-running and modular IT services.\n\nSee https://ipopo.readthedocs.io/ for documentation and more information.\n\n\nUsage survey\n============\n\nIn order to gain insight from the iPOPO community, I've put a\n`really short survey `_\non Google Forms (no login required).\n\nPlease, feel free to answer it, the more answers, the better.\nAll feedback is really appreciated.\n\n.. contents::\n\nInstall\n#######\n\nOption 1: Using pip\n===================\n\niPOPO is available on `PyPI `_ and can be\ninstalled using ``pip``:\n\n.. code-block:: bash\n\n # Install system-wide\n $ sudo pip install iPOPO\n\n # ... or user-wide installation\n $ pip install --user iPOPO\n\n\nOption 2: From source\n=====================\n\n.. code-block:: bash\n\n $ git clone https://github.com/tcalmant/ipopo.git\n $ cd ipopo\n $ python setup.py install\n\n\nCheck install\n=============\n\nTo check if Pelix is installed correctly, run the following command:\n\n.. code-block:: bash\n\n $ python -m pelix.shell --version\n Pelix 0.8.0 from /home/tcalmant/git/ipopo/pelix/framework.py\n\nConcepts\n########\n\nPelix brings the concept of *bundle* in Python.\nA bundle is a module with a life cycle: it can be installed, started, stopped,\nupdated and *uninstalled*.\n\nA bundle can declare a class acting as bundle activator, using the\n``@BundleActivator`` decorator.\nThis class will be instantiated by the framework and its ``start()`` and\n``stop()`` method will be called to notify the bundle about its activation and\ndeactivation.\n\nWhen it is active, a bundle can register services.\nA service is an object implementing a specification and associated to a set of\nproperties.\nA component will then be able to select and consume a service according to the\nspecification(s) it provides and to its properties.\n\nThe components are a concept brought by iPOPO.\nA component, or component instance, is an object managed by a container.\nThe container handles the interactions between the component and the Pelix\nframework.\nThat way, the component contains only the code required for its task, not for\nits bindings with the framework.\nA component is an instance of a component factory, a class `manipulated `_\nby iPOPO `decorators `_.\n\nFor more information, see the `concepts page `_\non the wiki.\n\n\nSample\n######\n\nThis sample gives a quick overview of the usage of iPOPO.\nFor more information, take a look at `iPOPO in 10 minutes `_.\n\n\nService provider\n================\n\nThe following code defines a component factory (a class) which instances will\nprovide a ``sample.hello`` service.\n\n.. code-block:: python\n\n # iPOPO decorators\n from pelix.ipopo.decorators import ComponentFactory, Provides, Instantiate\n\n # Manipulates the class and sets its (unique) factory name\n @ComponentFactory(\"hello-provider-factory\")\n # Indicate that the components will provide a service\n @Provides(\"sample.hello\")\n # Tell iPOPO to instantiate a component instance as soon as the file is loaded\n @Instantiate(\"hello-provider-auto\")\n # A component class must always inherit from object (new-style class)\n class HelloProvider(object):\n \"\"\"\n A sample service provider\n \"\"\"\n def hello(self, name=\"world\"):\n \"\"\"\n Says hello\n \"\"\"\n print(\"Hello,\", name, \"!\")\n\n def bye(self, name=\"cruel world\"):\n \"\"\"\n Says bye\n \"\"\"\n print(\"Bye,\", name, \"!\")\n\nWhen the bundle providing this component factory will be started, iPOPO will\nautomatically instantiate a component, due to the ``@Instantiate`` decorator.\nIt is also possible to instantiate a component using shell commands.\n\nEach component instance will provide a ``sample.hello`` service, which can be\nconsumed by any bundle or any other component.\n\n\nService consumer\n================\n\nThe following code defines a component factory (a class) which instances will\nconsume a ``sample.hello`` service. If multiple services are available, iPOPO\nwill select the one with the highest rank and the lowest service ID\n(*i.e.* the oldest service).\n\n.. code-block:: python\n\n # iPOPO decorators\n from pelix.ipopo.decorators import ComponentFactory, Requires, Instantiate, \\\n Validate, Invalidate\n\n # Manipulates the class and sets its (unique) factory name\n @ComponentFactory(\"hello-consumer-factory\")\n # Indicate that the components require a sample.hello service to work\n # and to inject the found service in the _svc field\n @Requires('_svc', \"sample.hello\")\n # Tell iPOPO to instantiate a component instance as soon as the file is loaded\n @Instantiate(\"hello-consumer-auto\")\n # A component class must always inherit from object (new-style class)\n class HelloConsumer(object):\n \"\"\"\n A sample service consumer\n \"\"\"\n def __init__(self):\n \"\"\"\n Defines (injected) members\n \"\"\"\n self._svc = None\n\n @Validate\n def validate(self, context):\n \"\"\"\n Component validated: all its requirements have been injected\n \"\"\"\n self._svc.hello(\"Consumer\")\n\n @Invalidate\n def invalidate(self, context):\n \"\"\"\n Component invalidated: one of its requirements is going away\n \"\"\"\n self._svc.bye(\"Consumer\")\n\nWhen the bundle providing this component factory will be started, iPOPO will\nautomatically instantiate a component, due to the ``@Instantiate`` decorator.\n\nEach component instance will require a ``sample.hello`` service. Once iPOPO\nhas injected all the required services (here, a single ``sample.hello`` service)\nin a component instance, this instance will be considered *valid* and iPOPO\nwill call its method decorated by ``@Validate``.\nThere, the component can consume its dependencies, start threads, etc..\nIt is recommended for this method to start threads and to return quickly, as it\nblocks iPOPO and the Pelix framework.\n\nWhen a required service is unregistered by its provider, the component\ninstances consuming it are invalidated.\nWhen the method decorated by ``@Invalidate`` is called, the service is still\ninjected and should be usable (except for special cases, like remote services).\n\n\nRun!\n====\n\nTo run this sample, you'll need to copy the snippets above in different files:\n\n* copy the *Service provider* snippet in a file called *provider.py*\n* copy the *Service consumer* snippet in a file called *consumer.py*\n\nThen, run a Pelix shell in the same folder as those files, and execute the\ncommands listed in this trace:\n\n.. code-block:: bash\n\n $ python -m pelix.shell\n ** Pelix Shell prompt **\n $ # Install the bundles\n $ install provider\n Bundle ID: 11\n $ install consumer\n Bundle ID: 12\n $ # Start the bundles (the order isn't important here)\n $ start 11 12\n Starting bundle 11 (provider)...\n Starting bundle 12 (consumer)...\n Hello, Consumer !\n $ # View iPOPO instances\n $ instances\n +----------------------+------------------------------+-------+\n | Name | Factory | State |\n +======================+==============================+=======+\n | hello-consumer-auto | hello-consumer-factory | VALID |\n +----------------------+------------------------------+-------+\n | hello-provider-auto | hello-provider-factory | VALID |\n +----------------------+------------------------------+-------+\n | ipopo-shell-commands | ipopo-shell-commands-factory | VALID |\n +----------------------+------------------------------+-------+\n 3 components running\n $ # View details about the consumer\n $ instance hello-consumer-auto\n Name.....: hello-consumer-auto\n Factory..: hello-consumer-factory\n Bundle ID: 12\n State....: VALID\n Services.:\n Dependencies:\n Field: _svc\n Specification: sample.hello\n Filter......: None\n Optional.....: False\n Aggregate....: False\n Handler......: SimpleDependency\n Bindings:\n ServiceReference(ID=11, Bundle=11, Specs=['sample.hello'])\n Properties:\n +---------------+---------------------+\n | Key | Value |\n +===============+=====================+\n | instance.name | hello-consumer-auto |\n +---------------+---------------------+\n\n $ # Modify the provider file (e.g. change the 'Hello' string by 'Hi')\n $ # Update the provider bundle (ID: 11)\n $ update 11\n Updating bundle 11 (provider)...\n Bye, Consumer !\n Hi, Consumer !\n $ # Play with other commands (see help)\n\nFirst, the ``install`` commands are used to install the bundle: they will be\nimported but their activator won't be called. If this command fails, the bundle\nis not installed and is not referenced by the framework.\n\nIf the installation succeeded, the bundle can be started: it's activator is\ncalled (if any). Then, iPOPO detects the component factories provided by the\nbundle and instantiates the components declared using the ``@Instantiate``\ndecorator.\n\nThe ``instances`` and ``instance`` commands can be use to print the state and\nbindings of the components. Some other commands are very useful, like ``sl``\nand ``sd`` to list the registered services and print their details. Use the\n``help`` command to see which ones can be used.\n\nThe last part of the trace shows what happens when updating a bundle.\nFirst, update the source code of the provider bundle, *e.g.* by changing the\nstring it prints in the ``hello()`` method.\nThen, tell the framework to update the bundle using the ``update`` command.\nThis command requires a bundle ID, which has been given as a result of the\n``install`` command and can be found using ``bl``.\n\nWhen updating a bundle, the framework stops it and reloads it (using\n`imp.reload `_).\nIf the update fails, the old version is kept.\nIf the bundle was active before the update, it is restarted by the framework.\n\nStopping a bundle causes iPOPO to kill the component instance(s) of the\nfactories it provided.\nTherefore, no one provides the ``sample.hello`` service, which causes the\nconsumer component to be invalidated.\nWhen the provider bundle is restarted, a new provider component is instantiated\nand its service is injected in the consumer, which becomes valid again.\n\n\nBatteries included\n##################\n\nPelix/iPOPO comes with some useful services:\n\n* Pelix Shell: a simple shell to control the framework (manage bundles,\n show the state of components, ...).\n The shell is split in 5 parts:\n\n * the parser: a shell interpreter class, which can be reused to create other\n shells (with a basic support of variables);\n * the shell core service: callable from any bundle, it executes the given\n command lines;\n * the UIs: text UI (console) and remote shell (TCP/TLS, XMPP)\n * the commands providers: iPOPO commands, report, EventAdmin, ...\n * the completion providers: Pelix, iPOPO\n\n See the `shell tutorial `_\n for more information.\n\n* An HTTP service, based on the HTTP server from the standard library.\n It provides the concept of *servlet*, borrowed from Java.\n\n See the `HTTP service reference `_\n for more information.\n\n There is also a `routing utility class `_,\n based on decorators, which eases the development of REST-like servlets.\n\n* Remote Services: export and import services to/from other Pelix framework or\n event Java OSGi frameworks!\n\n See the `remote services reference `_\n for more information.\n\nPelix also provides an implementation of the `EventAdmin service `_,\ninspired from the `OSGi specification `_.\n\nFeedback\n########\n\nFeel free to send feedback on your experience of Pelix/iPOPO, via the mailing\nlists:\n\n* User list: http://groups.google.com/group/ipopo-users\n* Development list: http://groups.google.com/group/ipopo-dev\n\nBugs and features requests can be submitted using the `Issue Tracker `_\non GitHub.\n\n\nContributing\n############\n\nAll contributions are welcome!\n\n#. Create an `issue `_ to discuss\n about your idea or the problem you encounter\n#. `Fork `_ the project\n#. Develop your changes\n#. Check your code with `pylint `_\n and `pep8 `_\n#. If necessary, write some unit tests\n#. Commit your changes, indicating in each commit a reference to the issue\n you're working on\n#. Push the commits on your repository\n#. Create a *Pull Request*\n#. Enjoy!\n\nPlease note that your contributions will be released under the project's\nlicense, which is the `Apache Software License 2.0 `__.\n\n\nCompatibility\n#############\n\nPelix and iPOPO are tested using\n`Travis-CI `_ with Python 2.7\nand 3.4 to 3.6.\nPypy is not tested anymore due to various bugs during tests setup.\n\niPOPO doesn't support Python 2.6 anymore (since version 0.5.6).\n\n\nLicense\n#######\n\niPOPO is released under the `Apache Software License 2.0 `__.\n",
"description_content_type": "",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/tcalmant/ipopo/",
"keywords": "",
"license": "Apache License 2.0",
"maintainer": "",
"maintainer_email": "",
"name": "iPOPO",
"package_url": "https://pypi.org/project/iPOPO/",
"platform": "",
"project_url": "https://pypi.org/project/iPOPO/",
"project_urls": {
"Homepage": "https://github.com/tcalmant/ipopo/"
},
"release_url": "https://pypi.org/project/iPOPO/0.8.1/",
"requires_dist": null,
"requires_python": "",
"summary": "A service-oriented component model framework",
"version": "0.8.1"
},
"last_serial": 4497634,
"releases": {
"0.4": [
{
"comment_text": "",
"digests": {
"md5": "9f6feb09c5995173e7b36ac3aa9e8c58",
"sha256": "c5e8f8f9bd10664990e8c7f05b132d8e5a671322584789a8f11dfca84daae3a7"
},
"downloads": -1,
"filename": "iPOPO-0.4.tar.gz",
"has_sig": false,
"md5_digest": "9f6feb09c5995173e7b36ac3aa9e8c58",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 70603,
"upload_time": "2012-11-21T10:30:56",
"url": "https://files.pythonhosted.org/packages/0f/76/81ef2be654de1b994ab38d0bd9f4a9a9a3e7cbdba5632cf5cafcfdfd76a0/iPOPO-0.4.tar.gz"
}
],
"0.5": [
{
"comment_text": "",
"digests": {
"md5": "cc8a919ec87b7e64d6a90e3b049edd3a",
"sha256": "9be8374268de2cf9b521e5c58b2c8e03034cbd6cb8d3406d4c0ae634bf04e966"
},
"downloads": -1,
"filename": "iPOPO-0.5.tar.gz",
"has_sig": false,
"md5_digest": "cc8a919ec87b7e64d6a90e3b049edd3a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 95288,
"upload_time": "2013-05-21T15:46:29",
"url": "https://files.pythonhosted.org/packages/da/dd/60733bf4654958e4db6d34076b3ac02d28d94e2117e8e26994f1e16d6e70/iPOPO-0.5.tar.gz"
}
],
"0.5.1": [
{
"comment_text": "",
"digests": {
"md5": "68035da995c0047414b8ef10be714e61",
"sha256": "576cd49758675b92cbac9065edb9c7ed20f0be13dbd9ff29abf86173944de273"
},
"downloads": -1,
"filename": "iPOPO-0.5.1.tar.gz",
"has_sig": false,
"md5_digest": "68035da995c0047414b8ef10be714e61",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 97179,
"upload_time": "2013-07-05T15:07:54",
"url": "https://files.pythonhosted.org/packages/6d/80/2f2090193ec9292c69c17149dda28bdf2f250de134cabdae548ccdde5494/iPOPO-0.5.1.tar.gz"
}
],
"0.5.2": [
{
"comment_text": "",
"digests": {
"md5": "6c9ef53207beea01c9a0f9195c108543",
"sha256": "5a382a6eebc4a44f0578cfd1d0a1300f5d16015b6b9d25f1dc2a2cdf4ca86201"
},
"downloads": -1,
"filename": "iPOPO-0.5.2.tar.gz",
"has_sig": false,
"md5_digest": "6c9ef53207beea01c9a0f9195c108543",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 100445,
"upload_time": "2013-07-19T14:19:47",
"url": "https://files.pythonhosted.org/packages/33/df/6225d5a989d598bcca20756f81d8e7a7050bbc104b8fc1973947b2b0c84e/iPOPO-0.5.2.tar.gz"
}
],
"0.5.3": [
{
"comment_text": "",
"digests": {
"md5": "87e5eab62f0f3a6ec0c7f2f218280772",
"sha256": "fc86853bddde4f8ab5ec68a131b23505f5cd304bec2e354ebb9cf517f28e7782"
},
"downloads": -1,
"filename": "iPOPO-0.5.3.tar.gz",
"has_sig": false,
"md5_digest": "87e5eab62f0f3a6ec0c7f2f218280772",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 101695,
"upload_time": "2013-08-01T14:58:36",
"url": "https://files.pythonhosted.org/packages/97/d7/ce9a8cdabea593ec49446a0a6c50d79c685024d1615f2fa44a0042a7993f/iPOPO-0.5.3.tar.gz"
}
],
"0.5.4": [
{
"comment_text": "",
"digests": {
"md5": "f6b486c1cab7922924b2421a1f7951e9",
"sha256": "9f5ac9f6ae750177764c4fa15eee86a4abd38e8b7bac3252d97da525835dc742"
},
"downloads": -1,
"filename": "iPOPO-0.5.4.tar.gz",
"has_sig": false,
"md5_digest": "f6b486c1cab7922924b2421a1f7951e9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 107408,
"upload_time": "2013-10-01T16:06:33",
"url": "https://files.pythonhosted.org/packages/03/e1/5de42e5bfbb6cf20512d49bb433926213ffdacf5916ac802453a08fac4f1/iPOPO-0.5.4.tar.gz"
}
],
"0.5.5": [
{
"comment_text": "",
"digests": {
"md5": "6767d7a472dad58b3e941026da840075",
"sha256": "b5d45cffba8aca0ac592b31bb54579824a89931d538b3aee20f5e4b1d850ec10"
},
"downloads": -1,
"filename": "iPOPO-0.5.5.tar.gz",
"has_sig": false,
"md5_digest": "6767d7a472dad58b3e941026da840075",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 110931,
"upload_time": "2013-11-15T15:04:44",
"url": "https://files.pythonhosted.org/packages/b2/6b/f719d4b748009527a3082d72fd79fd37120747d5256347b7d86d56a1f5f1/iPOPO-0.5.5.tar.gz"
}
],
"0.5.6": [
{
"comment_text": "",
"digests": {
"md5": "7810fe1f6a5725d4893f517c10a93be9",
"sha256": "6cf5e0362e331ac850babd307438d936f1b77c8699a01c1df17c81de64f56938"
},
"downloads": -1,
"filename": "iPOPO-0.5.6.tar.gz",
"has_sig": false,
"md5_digest": "7810fe1f6a5725d4893f517c10a93be9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 150735,
"upload_time": "2014-04-28T08:19:27",
"url": "https://files.pythonhosted.org/packages/b5/5e/e98a565eb9a8c534784c71cd74e52bd03568eb71ccd670c98490af10d171/iPOPO-0.5.6.tar.gz"
}
],
"0.5.7": [
{
"comment_text": "",
"digests": {
"md5": "f5bb55b71a5517ffd83a9e4f0d80ff97",
"sha256": "cfee01a305da46f6a1793b317d433560c2d41f3efc0a03d89076469652ea722f"
},
"downloads": -1,
"filename": "iPOPO-0.5.7-py2-none-any.whl",
"has_sig": false,
"md5_digest": "f5bb55b71a5517ffd83a9e4f0d80ff97",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 217464,
"upload_time": "2014-09-18T11:07:36",
"url": "https://files.pythonhosted.org/packages/d8/a4/f66b62a1fc10ca4ce081ddc9686dd5e71f646541365dc4a3eb9c42590fd7/iPOPO-0.5.7-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "5338f5c17dad1b7830d5694b3ab86286",
"sha256": "60a4abf02577f8550faa6c972570f2415c2d9482c6dcaef0f325805596c6601d"
},
"downloads": -1,
"filename": "iPOPO-0.5.7.tar.gz",
"has_sig": false,
"md5_digest": "5338f5c17dad1b7830d5694b3ab86286",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 158359,
"upload_time": "2014-09-18T11:07:32",
"url": "https://files.pythonhosted.org/packages/e9/f6/3f67c4f60fbf906f4b03830cccedf70375944187a3bd199383c5aa504e10/iPOPO-0.5.7.tar.gz"
}
],
"0.5.8": [
{
"comment_text": "",
"digests": {
"md5": "cd1ab9c332df3dc05047fee534514aec",
"sha256": "1f9d91f4865cef99a0bbe360c9e7f207805783423631a122439cc26b6ab38d4d"
},
"downloads": -1,
"filename": "iPOPO-0.5.8-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "cd1ab9c332df3dc05047fee534514aec",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 220010,
"upload_time": "2014-10-13T13:32:46",
"url": "https://files.pythonhosted.org/packages/de/5d/d1ca8ef1e7b198caf5a39ed2a020dc196bed6c130da62d5af4acfc7a49fb/iPOPO-0.5.8-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "c6f9e6fe4c5e754429efa463f6bc9b5d",
"sha256": "e1ac063150e3dbf068cb18e48f212d0e316215b89108d2ae3b4820608d4e36bd"
},
"downloads": -1,
"filename": "iPOPO-0.5.8.tar.gz",
"has_sig": false,
"md5_digest": "c6f9e6fe4c5e754429efa463f6bc9b5d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 161100,
"upload_time": "2014-10-13T13:32:40",
"url": "https://files.pythonhosted.org/packages/63/01/48d4cacacbd6e899a61cf9a09e9a7304df7b87e531756c44159469d47dfa/iPOPO-0.5.8.tar.gz"
}
],
"0.5.9": [
{
"comment_text": "",
"digests": {
"md5": "0a490c6ee539864ae2c672c491d328f7",
"sha256": "2297e7c76e4cff46b2bc2851e738bd116e3de77da76b8816e232e193ee385422"
},
"downloads": -1,
"filename": "iPOPO-0.5.9-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "0a490c6ee539864ae2c672c491d328f7",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 229543,
"upload_time": "2015-02-18T10:58:07",
"url": "https://files.pythonhosted.org/packages/f6/86/84a6cc1147460aef89dd6734a07e48d73af2baa7a7b124a82b5f61e6d60f/iPOPO-0.5.9-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "aea628c5c83c4e60521037e4f567f812",
"sha256": "6c76ed3deaff1fcb8d74227a478de2ebe0fea66aa7beb13b705adf7dfc4996b7"
},
"downloads": -1,
"filename": "iPOPO-0.5.9.tar.gz",
"has_sig": false,
"md5_digest": "aea628c5c83c4e60521037e4f567f812",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 166619,
"upload_time": "2015-02-18T10:58:02",
"url": "https://files.pythonhosted.org/packages/11/0c/f37b86c95e84da499edb15ce61b7cacc52edcb28837ddb145df516b9711b/iPOPO-0.5.9.tar.gz"
}
],
"0.6.0": [
{
"comment_text": "",
"digests": {
"md5": "a1f13791407fcc55a63671187cdc6e12",
"sha256": "26c8fe6268f05de408a8ded1ea2aae735c729d91acc4af02900d8501f7267c26"
},
"downloads": -1,
"filename": "iPOPO-0.6.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "a1f13791407fcc55a63671187cdc6e12",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 228640,
"upload_time": "2015-03-12T10:38:52",
"url": "https://files.pythonhosted.org/packages/53/8c/c5266649190d5815d1f24eed23ea95962655c79362ec0a76c88b9689a5d0/iPOPO-0.6.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "9eae27cf51de3628fcc92c406c162d07",
"sha256": "6c3c22d98198284befd32f40b2dbc4fed594d303f66aa2bcc8bdf6bc5ce43294"
},
"downloads": -1,
"filename": "iPOPO-0.6.0.tar.gz",
"has_sig": false,
"md5_digest": "9eae27cf51de3628fcc92c406c162d07",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 166373,
"upload_time": "2015-03-12T10:38:46",
"url": "https://files.pythonhosted.org/packages/89/27/0e04b525ad955d7efdce43d8add70927516c7d0a16f41dfc458163b3ed46/iPOPO-0.6.0.tar.gz"
}
],
"0.6.1": [
{
"comment_text": "",
"digests": {
"md5": "1b9e564caa3cc506d28d5c74e6dbc7a1",
"sha256": "2aec102591ba5f9b05d942831e1504eee0bf25524fbc587567645a70eaddf048"
},
"downloads": -1,
"filename": "iPOPO-0.6.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "1b9e564caa3cc506d28d5c74e6dbc7a1",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 231217,
"upload_time": "2015-04-20T12:49:18",
"url": "https://files.pythonhosted.org/packages/00/83/9d1386e4941cef8b8e859de6649f84b1c90df72b2e8dae3f1bc931ed8754/iPOPO-0.6.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d1364ebf514e5edcd7608c6b33054287",
"sha256": "ffe6b278faca5e1c23ec081e049a0cbdfebec3555865440bed21c2625f58b6c5"
},
"downloads": -1,
"filename": "iPOPO-0.6.1.tar.gz",
"has_sig": false,
"md5_digest": "d1364ebf514e5edcd7608c6b33054287",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 167646,
"upload_time": "2015-04-20T12:49:12",
"url": "https://files.pythonhosted.org/packages/bc/79/d35c52d1a365cef55a500a2cd78d228f3458fbda850e68b7b64cde82d746/iPOPO-0.6.1.tar.gz"
}
],
"0.6.2": [
{
"comment_text": "",
"digests": {
"md5": "ebaf48f894fb58c3c0ac352ebd9bd61f",
"sha256": "1def836252c44e9dc9b1f6e3831461cff5d67a7384287cdbd78502bbea28225a"
},
"downloads": -1,
"filename": "iPOPO-0.6.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "ebaf48f894fb58c3c0ac352ebd9bd61f",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 230833,
"upload_time": "2015-06-17T10:30:39",
"url": "https://files.pythonhosted.org/packages/f0/89/dc9047e414f67cfda7b856ace273321ee9d78418265916cc65b50902a9aa/iPOPO-0.6.2-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "566cc7856fb7090950266ba728aa5001",
"sha256": "944b9eafff69fb9bf28bcbd8e7d9ee4c57ab870f3e89fcf79f656a4ed85830dd"
},
"downloads": -1,
"filename": "iPOPO-0.6.2.tar.gz",
"has_sig": false,
"md5_digest": "566cc7856fb7090950266ba728aa5001",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 168116,
"upload_time": "2015-06-17T10:30:35",
"url": "https://files.pythonhosted.org/packages/6f/13/d8138e4de768cae1495c9bec108f1fe2bf4cb6bcb2de60e2bd58e0fac66b/iPOPO-0.6.2.tar.gz"
}
],
"0.6.3": [
{
"comment_text": "",
"digests": {
"md5": "cee1782fe8dbe4485cf95fac68a27a9f",
"sha256": "84dd1a24837f371b18cebda46d69f8be635e6f0d5357651fb861438c680ac8ed"
},
"downloads": -1,
"filename": "iPOPO-0.6.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "cee1782fe8dbe4485cf95fac68a27a9f",
"packagetype": "bdist_wheel",
"python_version": "3.4",
"requires_python": null,
"size": 249107,
"upload_time": "2015-10-25T14:44:52",
"url": "https://files.pythonhosted.org/packages/ba/62/0cf58a2a9c8e6b7c1034a5b722ce51fcc4698a126664df778cb4737c1b9f/iPOPO-0.6.3-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "548b79c91cc7c67e9fc51259deba3d23",
"sha256": "303dc33eeda0e9b320a09a2a4fae9f82be25a9bb85229fa1ba7043bfac8efad4"
},
"downloads": -1,
"filename": "iPOPO-0.6.3.zip",
"has_sig": false,
"md5_digest": "548b79c91cc7c67e9fc51259deba3d23",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 284174,
"upload_time": "2015-10-25T14:44:40",
"url": "https://files.pythonhosted.org/packages/93/a2/647284c49d93f20a1a03020e608c00261691aa7e681d0892a82dd0f22754/iPOPO-0.6.3.zip"
}
],
"0.6.4": [
{
"comment_text": "",
"digests": {
"md5": "1b5d2f8fdb8a89850fbdcf20325359a2",
"sha256": "853f1a6d75c7e421b6259a26dbd19b101c6a4e9baf5509d6e64bafe2900c3d24"
},
"downloads": -1,
"filename": "iPOPO-0.6.4-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "1b5d2f8fdb8a89850fbdcf20325359a2",
"packagetype": "bdist_wheel",
"python_version": "3.5",
"requires_python": null,
"size": 259281,
"upload_time": "2016-06-12T16:19:45",
"url": "https://files.pythonhosted.org/packages/ac/fd/204ee6cd8b4d6df5ca7cda96a01e147e49333bcdf340537a6cdf1ab99302/iPOPO-0.6.4-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "5b33f91a103e3b45262498dcfeae27b3",
"sha256": "307ac681518abc035e33f7857e45fe23681335d1c7a1f59f2735e660a33371da"
},
"downloads": -1,
"filename": "iPOPO-0.6.4.zip",
"has_sig": false,
"md5_digest": "5b33f91a103e3b45262498dcfeae27b3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 293780,
"upload_time": "2016-06-12T16:19:39",
"url": "https://files.pythonhosted.org/packages/10/85/d89cc54c88e4c78e076fd32be72238b8ed25aa8bb141f575f46a539db8d1/iPOPO-0.6.4.zip"
}
],
"0.6.5": [
{
"comment_text": "",
"digests": {
"md5": "8f1df1ecfbc75170ca051b8bb4f023e6",
"sha256": "77414c79d2b1651bbfa5d0420a8f2dc3a2856c279addea41a63770a6bcb203f1"
},
"downloads": -1,
"filename": "iPOPO-0.6.5-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "8f1df1ecfbc75170ca051b8bb4f023e6",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 288850,
"upload_time": "2017-09-17T14:35:00",
"url": "https://files.pythonhosted.org/packages/5e/bd/e8f4c41b245e6bf0f2508e85e041d28239d325bde97135c16facece6b4fb/iPOPO-0.6.5-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "2f9632803af9392eb12f75cb9eee4c21",
"sha256": "23bed342c130f2345719c6040fec7b3d45a057022aaa7f72aaa0bb312ce6701a"
},
"downloads": -1,
"filename": "iPOPO-0.6.5.tar.gz",
"has_sig": false,
"md5_digest": "2f9632803af9392eb12f75cb9eee4c21",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 236240,
"upload_time": "2017-09-17T14:34:28",
"url": "https://files.pythonhosted.org/packages/e3/3e/87700f235e3853661bf9e34b68bfa0dbdcd259dc3b6a7619f892a6896b4a/iPOPO-0.6.5.tar.gz"
}
],
"0.7.0": [
{
"comment_text": "",
"digests": {
"md5": "c9bcf177d7495ff13fff09f86b7b5cc8",
"sha256": "da014c959ebcf906d3986c08add9fe6a6492247854f1af47de6c18e1eba406d0"
},
"downloads": -1,
"filename": "iPOPO-0.7.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c9bcf177d7495ff13fff09f86b7b5cc8",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 290264,
"upload_time": "2017-12-30T14:03:46",
"url": "https://files.pythonhosted.org/packages/7b/61/389dfabf4cbcae7251d06b9943d4765e861868130e96d0e347b2fac7e743/iPOPO-0.7.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "ed18cdf5f559b6d8a35e08e20d035699",
"sha256": "cead42f14014afdc46fe80b6683560115f8caafe1cc2dd8385713eea8cb446c5"
},
"downloads": -1,
"filename": "iPOPO-0.7.0.tar.gz",
"has_sig": false,
"md5_digest": "ed18cdf5f559b6d8a35e08e20d035699",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 256283,
"upload_time": "2017-12-30T14:03:43",
"url": "https://files.pythonhosted.org/packages/f7/f0/6c0edd012e1bf63deef6162d0913a2f81827b6dc63c1f235674deb8e10d9/iPOPO-0.7.0.tar.gz"
}
],
"0.7.1": [
{
"comment_text": "",
"digests": {
"md5": "0edc5805782cab859f49c455a3a23db7",
"sha256": "e93697fbec684b58552c6db32446ff731b3a16c6de30b458298e8270e3e48dae"
},
"downloads": -1,
"filename": "iPOPO-0.7.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "0edc5805782cab859f49c455a3a23db7",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 302901,
"upload_time": "2018-06-16T09:06:56",
"url": "https://files.pythonhosted.org/packages/dd/81/9fe34b5a3575b1d45ea59e5a872b6a8e419a8e7b4ee53c40bee0f9ba482b/iPOPO-0.7.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "1eabacd2577475e509e61df5820d114c",
"sha256": "14ee2a448b91687dc6165eb584a061ab0edda42d4ce5323622c29b58d728f48a"
},
"downloads": -1,
"filename": "iPOPO-0.7.1.tar.gz",
"has_sig": false,
"md5_digest": "1eabacd2577475e509e61df5820d114c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 264752,
"upload_time": "2018-06-16T09:06:57",
"url": "https://files.pythonhosted.org/packages/b2/7b/a9be337e7b6583dca18c4ad4308daa656d0c788219c51fc15474527f859f/iPOPO-0.7.1.tar.gz"
}
],
"0.8.0": [
{
"comment_text": "",
"digests": {
"md5": "b04752872998fc975f4cca8c1be0e4b1",
"sha256": "749852dc2ebb38bba8da81afc190d155f3705d9b6c61421feef0a3da0128b334"
},
"downloads": -1,
"filename": "iPOPO-0.8.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "b04752872998fc975f4cca8c1be0e4b1",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 361754,
"upload_time": "2018-08-19T13:50:25",
"url": "https://files.pythonhosted.org/packages/33/43/09396e4ac1660ac77cbcb9b6a5fcca6286c1786de4d8e499543110b730ea/iPOPO-0.8.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "bc1c6f4ee7697d33473f388ff2cc0f5e",
"sha256": "6e6b9367526a27a8d6991024a180c2a189b66feb17be1fad73ea4641be912ec6"
},
"downloads": -1,
"filename": "iPOPO-0.8.0.tar.gz",
"has_sig": false,
"md5_digest": "bc1c6f4ee7697d33473f388ff2cc0f5e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 315908,
"upload_time": "2018-08-19T13:50:23",
"url": "https://files.pythonhosted.org/packages/de/cb/a5f948646c0341e16d42f594747f3bcca89936d0cba46971621d5d55ec96/iPOPO-0.8.0.tar.gz"
}
],
"0.8.1": [
{
"comment_text": "",
"digests": {
"md5": "9c94f858eac70a584411bba7750c9063",
"sha256": "781efcbdb5d2ab4fe8b1201ece23de90bf3937add23c04706ad55c85154acde3"
},
"downloads": -1,
"filename": "iPOPO-0.8.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "9c94f858eac70a584411bba7750c9063",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 363270,
"upload_time": "2018-11-17T17:09:47",
"url": "https://files.pythonhosted.org/packages/3c/c7/aaa283b55bd6c0e5001b4b0acc1fff8d5b3e51b13c5725b88ef8a0b09efa/iPOPO-0.8.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "255c87d7e666266e6b36371859dcde5d",
"sha256": "2d55e34b65a9026291d9f5b626395404fe1566fdf4644012ff4aa922f038567f"
},
"downloads": -1,
"filename": "iPOPO-0.8.1.tar.gz",
"has_sig": false,
"md5_digest": "255c87d7e666266e6b36371859dcde5d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 313491,
"upload_time": "2018-11-17T17:09:44",
"url": "https://files.pythonhosted.org/packages/bd/de/d8c9c5b6dd75a0cfc1a428a620e06cb0650f5243a5025d4cd812b3c7eb0e/iPOPO-0.8.1.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "9c94f858eac70a584411bba7750c9063",
"sha256": "781efcbdb5d2ab4fe8b1201ece23de90bf3937add23c04706ad55c85154acde3"
},
"downloads": -1,
"filename": "iPOPO-0.8.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "9c94f858eac70a584411bba7750c9063",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 363270,
"upload_time": "2018-11-17T17:09:47",
"url": "https://files.pythonhosted.org/packages/3c/c7/aaa283b55bd6c0e5001b4b0acc1fff8d5b3e51b13c5725b88ef8a0b09efa/iPOPO-0.8.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "255c87d7e666266e6b36371859dcde5d",
"sha256": "2d55e34b65a9026291d9f5b626395404fe1566fdf4644012ff4aa922f038567f"
},
"downloads": -1,
"filename": "iPOPO-0.8.1.tar.gz",
"has_sig": false,
"md5_digest": "255c87d7e666266e6b36371859dcde5d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 313491,
"upload_time": "2018-11-17T17:09:44",
"url": "https://files.pythonhosted.org/packages/bd/de/d8c9c5b6dd75a0cfc1a428a620e06cb0650f5243a5025d4cd812b3c7eb0e/iPOPO-0.8.1.tar.gz"
}
]
}