{ "info": { "author": "Franz Eichhorn", "author_email": "frairon@googlemail.com", "bugtrack_url": null, "classifiers": [], "description": ".. role:: bash(code)\n :language: bash\n\nSimple Inversion-Of-Control-Container for python\n================================================\n\nThis package provides a simple inversion-of-control container.\n\nInstall with \n\n.. code:: bash\n\n pip install pythonioc\n\nQuick Start\n-----------\n\nThe main idea is: services are registered to a service-registry and can be injected into users of that service (which can of course be services themselves).\n\nYou have two options: \n\n(A) use a global registry (never create a registry yourself)\n \n(B) use a local registry\n \nExamples are below, more details will follow.\n\nGlobal Registry\n^^^^^^^^^^^^^^^\n\n.. code:: python\n\n import pythonioc\n\n # register your service with a default name (here: 'someService', see Notes On Names)\n @pythonioc.Service\n class SomeService(object):\n \n # called when the service is auto-instantiated.\n def postInit(self):\n pass\n \n @pythonioc.NamedService('DifferentNameService')\n class DifferentService(object):\n pass \n \n # for classes which we cannot decorate:\n pythonioc.registerService(ExternalService)\n \n # when we don't even have the class (or don't care about lazy-initialization)\n pythonioc.registerServiceInstance(SomeService())\n \n \n class ServiceUser(object):\n # inject the dependency by class\n service = pythonioc.Inject(SomeService)\n \n # inject the dependency by name (for cyclic dependencies)\n service2 = pythonioc.Inject('DifferentNameService')\n \n \n myUser = ServiceUser()\n \n myUser.service # --> automatically created and injected service instance.\n \n # explicitly get a service\n pythonioc.getService(SomeService)\n pythonioc.getService('DifferentNameService')\n\n \n\nLocal Registry\n^^^^^^^^^^^^^^\n\n.. code:: python\n\n\n class Service(object):\n \n # this will make the service registry inject a service named \"someOtherService\" which \n # comes from class SomeOtherService\n _someOtherService = None\n \n def __init__(self):\n pass\n \n # will be called after everything is injected\n def postInit(self):\n pass\n \n # will be called right before the object is destroyed (the registry's clean\n # method is called)\n def preDestroy(self):\n pass\n \n \n\n class SomeOtherService(object):\n pass\n \n # let's register our services\n reg = ServiceRegistry()\n reg.registerService(Service)\n reg.registerService(SomeOtherService)\n\nOnce everything is registered, a service can be injected by\n\n.. code:: python\n\n\n class WiredUser(object):\n\n _service=None\n \n def __init__(self, *args):\n pass\n \n wiredUser = reg.createWired(WiredUser, 'arg1', 'arg2')\n\nWired objects are not automatically part of the service registry, only\nif added by calling ``reg.registerServiceInstance``. \n\nWired objects can inject their own service registry, so they can create wired objects on the fly:\n\n.. code:: python\n\n\n class WiredUser(object):\n _service=None\n \n\n class UserCreator(object):\n _serviceRegistry=None\n \n def createUser(self):\n return self._serviceRegistry.createWired(WiredUser) \n \n userCreator = reg.createWired(UserCreator)\n\n # create some wired users\n userA = userCreator.createUser()\n userB = userCreator.createUser()\n\n\nNotes on Names\n--------------\n\nServices added to the registry need a name. If no name is provided, the class' name (or the instance's class name) is used. The name's first character is lowered by convention.\n\nExample:\n\n.. code:: python\n\n import pythonioc\n \n class MyService(object):\n pass\n \n pythonioc.registerService(MyService) # --> name is 'myService'\n pythonioc.registerServiceInstance(MyService()) # --> name is 'myService'\n pythonioc.registerService(MyService, serviceName='customName') # --> name is 'customName'\n pythonioc.registerServiceInstance(MyService(), serviceName='customName2') # --> name is 'customName2'\n \n\nNotes on Dependency Cycles\n--------------------------\n\nGenerally, dependency cycles are resolved by lazily initializing services. Critical cycles can still occur, when two services depend on each other within their `postInit`-methods that are executed after initialization. Those cycles are detected by keeping track of the currently running postInit methods and throwing an exception.\n\nThe service creation is thread safe, so accessing a non-initialized service with a long-running init or postInit method from two different threads will block one of the threads.\n\n\nBugs\n----\n\nBug reports, suggestions for improvements etc. are always welcome!", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/eh14/python-ioc", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pythonioc", "package_url": "https://pypi.org/project/pythonioc/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/pythonioc/", "project_urls": { "Homepage": "https://bitbucket.org/eh14/python-ioc" }, "release_url": "https://pypi.org/project/pythonioc/0.4.1/", "requires_dist": null, "requires_python": "", "summary": "Simplistic dependency injection container for python", "version": "0.4.1" }, "last_serial": 1833923, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "f71a9d60327c999b4203cd00433c548c", "sha256": "9cfa731b3f85618a8950c6a560e53de7161d536f6f0df5e15d370b869ba54db2" }, "downloads": -1, "filename": "pythonioc-0.1.tar.gz", "has_sig": false, "md5_digest": "f71a9d60327c999b4203cd00433c548c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2613, "upload_time": "2014-09-02T12:12:41", "url": "https://files.pythonhosted.org/packages/0b/6e/3946a099f94bf0a781c0c465d7788f4612e0ddb05856382e22f9ab788696/pythonioc-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "efc6b1b15b9555be3524905a198f5970", "sha256": "9ce9becd531b91c1aee84408d567d207f6f3bbb9809f3fccc3ff95529c846203" }, "downloads": -1, "filename": "pythonioc-0.2.tar.gz", "has_sig": false, "md5_digest": "efc6b1b15b9555be3524905a198f5970", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2919, "upload_time": "2014-09-03T08:53:38", "url": "https://files.pythonhosted.org/packages/d4/57/7aecd761d79588fabe88392d8076809d1f5c65937952836c4e991edbd0fb/pythonioc-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "367307a1183ca87e340c2b1b9e49f9f1", "sha256": "4a5dc96f0a81f3a565fca5b825b17ca03ffa0b4bf01906594e04fe6add6eb43f" }, "downloads": -1, "filename": "pythonioc-0.2.1.tar.gz", "has_sig": false, "md5_digest": "367307a1183ca87e340c2b1b9e49f9f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3551, "upload_time": "2014-09-03T09:18:40", "url": "https://files.pythonhosted.org/packages/e8/8a/d1147801ee88b0f5778457841d9bab377720ac0c3c5771d80788a16646e0/pythonioc-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "1d4a2c40bc0ece88aa04dfc60e532511", "sha256": "0cde671ef78f77f1248680fcc9bff2ec3d628ef5117453e5009855a6dfc0e104" }, "downloads": -1, "filename": "pythonioc-0.2.2.tar.gz", "has_sig": false, "md5_digest": "1d4a2c40bc0ece88aa04dfc60e532511", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4088, "upload_time": "2014-09-03T10:44:41", "url": "https://files.pythonhosted.org/packages/e3/45/fbd80da789ae65a7e61bc93f0e365655f440edb14757c80fae0b1debaed9/pythonioc-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "fc570f16889679e3719317ac015e1ab2", "sha256": "214b9f17d2ee114f7c8cd1ddc5b531a5c12feeeb6e6d5f359915c882c33e7d5c" }, "downloads": -1, "filename": "pythonioc-0.2.3.tar.gz", "has_sig": false, "md5_digest": "fc570f16889679e3719317ac015e1ab2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4120, "upload_time": "2014-09-03T12:20:42", "url": "https://files.pythonhosted.org/packages/1a/96/52947e232b4c5165584b801b7b3ee11d7942e8f484059825a69d5b02623a/pythonioc-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "ecd6f6b13462328ffd9d984cf7029c49", "sha256": "801c45b56d709d5985b2bdb095fa2b32640c2451e91382e1eebd859a96e3ef65" }, "downloads": -1, "filename": "pythonioc-0.2.4.tar.gz", "has_sig": false, "md5_digest": "ecd6f6b13462328ffd9d984cf7029c49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4318, "upload_time": "2014-09-03T14:52:42", "url": "https://files.pythonhosted.org/packages/74/47/c50c3acc49a5d2168664e6b100dedcd511107380e515736b5b7d5026775f/pythonioc-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "7ec4ea9aefc1e13f5774ec784823d69f", "sha256": "7ecbb84ee587bc83c5f177f898dd8d50f90b349fb126a7ec082bbc39b62c8370" }, "downloads": -1, "filename": "pythonioc-0.2.5.tar.gz", "has_sig": false, "md5_digest": "7ec4ea9aefc1e13f5774ec784823d69f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4330, "upload_time": "2014-09-03T15:05:45", "url": "https://files.pythonhosted.org/packages/6d/7e/89ce95e602782c13f1d4598271b809a802094bc6a0132deaa84a4ca98654/pythonioc-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "65ce6317888938abba13f29119601b06", "sha256": "3ac0851c3b62b42d4b76df8849cf11ad2e6397200920feb80ac5312b0e284083" }, "downloads": -1, "filename": "pythonioc-0.2.6.tar.gz", "has_sig": false, "md5_digest": "65ce6317888938abba13f29119601b06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4961, "upload_time": "2014-09-04T12:40:32", "url": "https://files.pythonhosted.org/packages/4a/41/88caa0641e5fa493c7bd5fcb8f6c22c2a9be369513361898de0c10bbeedb/pythonioc-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "c334821711d580a78d82a45b84f38548", "sha256": "6eab66481252ee1797c0de4ca64767329de7ca32fa3b93395712a427a17b68c3" }, "downloads": -1, "filename": "pythonioc-0.2.7.tar.gz", "has_sig": false, "md5_digest": "c334821711d580a78d82a45b84f38548", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5112, "upload_time": "2014-09-10T16:35:14", "url": "https://files.pythonhosted.org/packages/38/e1/c2961352507cb09c3444d02986b8e3ab56ab02a6b170c81122ba56fe402d/pythonioc-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "cfa0f7ca1637db79ce26878db92ba468", "sha256": "f191d0abde39169645dd5469f599852ecd22094ffe7aa8fd136f0b2485b2c581" }, "downloads": -1, "filename": "pythonioc-0.2.8.tar.gz", "has_sig": false, "md5_digest": "cfa0f7ca1637db79ce26878db92ba468", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5110, "upload_time": "2014-09-17T08:06:44", "url": "https://files.pythonhosted.org/packages/22/9e/e34b3e640180ea9f20ccaeb9fdaa446361419e7e4670e7ac46057202e89e/pythonioc-0.2.8.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f22cff0ee96c70e479471ec99b198b06", "sha256": "96b38fcead79b60b83c8eb02f10d33e4d7bc86e660f965ecaf71239aed186602" }, "downloads": -1, "filename": "pythonioc-0.3.0.tar.gz", "has_sig": false, "md5_digest": "f22cff0ee96c70e479471ec99b198b06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5352, "upload_time": "2014-09-29T07:27:45", "url": "https://files.pythonhosted.org/packages/c0/51/4f98f55842c97e1c0e3d9d7350495bbabc2ad239b5b0946d7279e254fb94/pythonioc-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "e3768f99dc28bcb0d9c93d823d52562e", "sha256": "e81ff79a807cb49fc8ff1604dadfc3d9dc5bd8432332226d962d4b5cc10b0b8a" }, "downloads": -1, "filename": "pythonioc-0.3.1.tar.gz", "has_sig": false, "md5_digest": "e3768f99dc28bcb0d9c93d823d52562e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5237, "upload_time": "2014-11-24T11:47:48", "url": "https://files.pythonhosted.org/packages/58/bb/c22ddf332a6f817e23eb9de00a1016e797cde998c705dea973e490f57684/pythonioc-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "b7f4e7555e13d9685a626d4b185f3592", "sha256": "f8b4e7d78e7d1d2ac1c1780a6881c9a5a9a71961f332f5fb6ccce5c5f7948409" }, "downloads": -1, "filename": "pythonioc-0.3.2.tar.gz", "has_sig": false, "md5_digest": "b7f4e7555e13d9685a626d4b185f3592", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5156, "upload_time": "2015-09-25T16:05:02", "url": "https://files.pythonhosted.org/packages/ca/61/89ee7c60bb47789c5a5e1dbf92bc4b5f966bf76ee6fd41402cf407188821/pythonioc-0.3.2.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "069724634e40bfda10a184c831fd105c", "sha256": "2ecf2070110350a7b92dddbf7e1c987cc3a27b1379dfcbecb64dd26073087677" }, "downloads": -1, "filename": "pythonioc-0.4.0.tar.gz", "has_sig": false, "md5_digest": "069724634e40bfda10a184c831fd105c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10201, "upload_time": "2015-11-18T15:45:17", "url": "https://files.pythonhosted.org/packages/c9/d4/3e6e41bc4de93e2b595a15c304d8408808fd833c08002e73e09c2c004fca/pythonioc-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "ae494dcf5b91d7f778211c26c51732a8", "sha256": "57790a1a39a7daa8a6a9cd4981b94676c80cfa5456112e91a371dc93a2097c9f" }, "downloads": -1, "filename": "pythonioc-0.4.1.tar.gz", "has_sig": false, "md5_digest": "ae494dcf5b91d7f778211c26c51732a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10454, "upload_time": "2015-11-25T23:23:37", "url": "https://files.pythonhosted.org/packages/ba/5f/6bcbf40e2539278ec60488117b25c39d67ccd98cf00d4ef99af0385f03fe/pythonioc-0.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ae494dcf5b91d7f778211c26c51732a8", "sha256": "57790a1a39a7daa8a6a9cd4981b94676c80cfa5456112e91a371dc93a2097c9f" }, "downloads": -1, "filename": "pythonioc-0.4.1.tar.gz", "has_sig": false, "md5_digest": "ae494dcf5b91d7f778211c26c51732a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10454, "upload_time": "2015-11-25T23:23:37", "url": "https://files.pythonhosted.org/packages/ba/5f/6bcbf40e2539278ec60488117b25c39d67ccd98cf00d4ef99af0385f03fe/pythonioc-0.4.1.tar.gz" } ] }