{
"info": {
"author": "Laurence Rowe",
"author_email": "plone-developers@lists.sourceforge.net",
"bugtrack_url": null,
"classifiers": [
"Framework :: Plone",
"Framework :: Plone :: 4.3",
"Framework :: Plone :: 5.0",
"Framework :: Plone :: 5.1",
"Framework :: Plone :: 5.2",
"License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)",
"Programming Language :: Python",
"Programming Language :: Python :: 2.6",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Topic :: Software Development :: Libraries :: Python Modules"
],
"description": "==============\nplone.alterego\n==============\n\nNow you see it, it now you don't!\n\nThis package defines a dynamic module type that lets you create objects in the\ndynamic module on demand.\n\nUsage\n-----\n\nTo use this package, you should:\n\n - Identify an appropriate parent module where the dynamic module will live.\n\n - Ensure that plone.alterego.dynamic.create() is called with this module and\n a dynamic module name. Typically, you'd do this in the parent module\n itself, so that the dynamic module is instantiated as soon as the parent\n module is imported.\n\n - Register a named utility providing IDynamicObjectFactory. The name should\n be the same as the full dotted path to the dynamic module. This utility\n will be responsible for creating the objects that inhabit the dynamic\n module.\n\nExample\n-------\n\nFor a more fully-featured example, see the alterego.txt doctest.\n\nLet's say we have a generic content class that should get a unique interface\nfor each instance.\n\n >>> from zope import interface\n >>> class IContent(interface.Interface):\n ... pass\n >>> class Content(object):\n ... interface.implements(IContent)\n\n >>> c1 = Content()\n\nTo create the unique interface, we will use a dynamic module. There is a\nhelper method to make this easier. It takes a parent module and a name as\narguments:\n\n >>> from plone.alterego.dynamic import create\n >>> dynamic = create('plone.alterego.tests.dynamic')\n\nWe can now import this module:\n\n >>> from plone.alterego.tests import dynamic\n\nTo make objects on demand, we'll need to register a utility that can act\nas a factory.\n\n >>> from plone.alterego.interfaces import IDynamicObjectFactory\n >>> from zope.interface.interface import InterfaceClass\n >>> class InterfaceOnDemand(object):\n ... interface.implements(IDynamicObjectFactory)\n ...\n ... def __call__(self, name, module):\n ... schema = InterfaceClass(name, (interface.Interface,), __module__=module.__name__)\n ... setattr(module, name, schema)\n ... return schema\n\nThis utility should have a name that corresponds to the full,\ndotted name to the dynamic module. This way, we can have different factories\nfor different dynamic modules. We'd register this in ZCML like so::\n\n \n\nFrom this point forward, when we access an attribute of the dynamic module,\nthe factory will be used:\n\n >>> dynamic.IOne\n \n\nNote that so long as the setattr() call above is executed, the factory is\ncalled only once. That is, you'll always get the same object each time you\naccess a given attribute of the dynamic module.\n\n\nChangelog\n=========\n\n.. You should *NOT* be adding new change log entries to this file.\n You should create a file in the news directory instead.\n For helpful instructions, please see:\n https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst\n\n.. towncrier release notes start\n\n1.1.3 (2018-11-21)\n------------------\n\nBug fixes:\n\n\n- Cleanup project level files (setup.py, .travis-ci.yml...) [maurits]\n [gforcada] (#2524)\n- Initialized towncrier. [gforcada] (#2548)\n\n\n1.1.3 (unreleased)\n------------------\n\n\n1.1.2 (2018-11-21)\n------------------\n\nBug fixes:\n\n- Update code to follow Plone styleguide.\n [gforcada]\n\n1.1 (2016-11-01)\n----------------\n\nNew features:\n\n- Add compatibility with Python 3. [datakurre]\n\n\n1.0.1 (2016-08-11)\n------------------\n\nFixes:\n\n- Use zope.interface decorator.\n [gforcada]\n\n\n1.0 (2011-04-30)\n----------------\n\n- Use doctest from the stdlib instead of from zope.testing\n [davisagli]\n\n\n1.0a1 (2009-04-17)\n------------------\n\n- Initial release.\n\n\n",
"description_content_type": "",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://pypi.python.org/plone.alterego",
"keywords": "Plone schema interface",
"license": "LGPL",
"maintainer": "",
"maintainer_email": "",
"name": "plone.alterego",
"package_url": "https://pypi.org/project/plone.alterego/",
"platform": "",
"project_url": "https://pypi.org/project/plone.alterego/",
"project_urls": {
"Homepage": "https://pypi.python.org/plone.alterego"
},
"release_url": "https://pypi.org/project/plone.alterego/1.1.3/",
"requires_dist": [
"setuptools",
"zope.component",
"zope.interface"
],
"requires_python": "",
"summary": "Low level support for dynamic modules",
"version": "1.1.3"
},
"last_serial": 4514383,
"releases": {
"1.0": [
{
"comment_text": "",
"digests": {
"md5": "b7b6dbcbba00505d98d5aba83e016408",
"sha256": "8d78a1ca989a59cd2996b26e89d0b62587e6307978079be3a2d2e5d853ec5ee5"
},
"downloads": -1,
"filename": "plone.alterego-1.0.zip",
"has_sig": false,
"md5_digest": "b7b6dbcbba00505d98d5aba83e016408",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 17556,
"upload_time": "2011-04-30T20:59:30",
"url": "https://files.pythonhosted.org/packages/ae/6f/bc454147eefde6ed49ad6123efc3bd937b9f3f8d525aecb823441cd8a502/plone.alterego-1.0.zip"
}
],
"1.0.1": [
{
"comment_text": "",
"digests": {
"md5": "78eea4a962d24e7dcd27a9fc950207cf",
"sha256": "493a43ff8834c520aef8299517594e2caaf63ee2cc5fef790cbc914d31122422"
},
"downloads": -1,
"filename": "plone.alterego-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "78eea4a962d24e7dcd27a9fc950207cf",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10409,
"upload_time": "2016-08-11T16:49:13",
"url": "https://files.pythonhosted.org/packages/2b/b4/c67f61f5022675230b2e1884a99c7ac5ed3631e2eb2626bbeae335fe7f5f/plone.alterego-1.0.1.tar.gz"
}
],
"1.0b1": [
{
"comment_text": "",
"digests": {
"md5": "970ca8d9451017b1866b26b50ef20503",
"sha256": "b24882189cff504dae7d9ff63e354ed92b416c4bda3ea39e0c8d60a4943ce000"
},
"downloads": -1,
"filename": "plone.alterego-1.0b1.tar.gz",
"has_sig": false,
"md5_digest": "970ca8d9451017b1866b26b50ef20503",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10097,
"upload_time": "2009-04-17T06:59:38",
"url": "https://files.pythonhosted.org/packages/34/af/8cee44f81faf3693dd46180d7199c0f41245dc5326640996ebaf6c082af1/plone.alterego-1.0b1.tar.gz"
}
],
"1.1": [
{
"comment_text": "",
"digests": {
"md5": "0ef957cb603f21907b49f697f4e3a74a",
"sha256": "f0d633a0f3fc77bb560e1efd3a22d50d554e231c3b0a1bde2c51a4e2b7f649b8"
},
"downloads": -1,
"filename": "plone.alterego-1.1.tar.gz",
"has_sig": false,
"md5_digest": "0ef957cb603f21907b49f697f4e3a74a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10675,
"upload_time": "2016-11-01T18:28:03",
"url": "https://files.pythonhosted.org/packages/84/63/c7de165e9e315b3f0992ed5a13a6925316e8b9905adabdf314d40f8ffb45/plone.alterego-1.1.tar.gz"
}
],
"1.1.1": [
{
"comment_text": "",
"digests": {
"md5": "8f2e587f321cb05d551391620f70a921",
"sha256": "db47ef5344d2b2ef2fc1c6a34221aa7520a16dbe217443e5aefa7610465fcd08"
},
"downloads": -1,
"filename": "plone.alterego-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "8f2e587f321cb05d551391620f70a921",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10723,
"upload_time": "2016-11-09T15:54:39",
"url": "https://files.pythonhosted.org/packages/89/96/5137c0784d7574747fb77b79346d127166f5dfe9069d058c6f826f4e138e/plone.alterego-1.1.1.tar.gz"
}
],
"1.1.2": [
{
"comment_text": "",
"digests": {
"md5": "a213e58a7d046a246e0cbcfbe49ddfb3",
"sha256": "5f49a47008314dc2c7a4b3f699c46698bec66db57448dcf784e34c4c7f734c3b"
},
"downloads": -1,
"filename": "plone.alterego-1.1.2-py2-none-any.whl",
"has_sig": false,
"md5_digest": "a213e58a7d046a246e0cbcfbe49ddfb3",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 7425,
"upload_time": "2018-11-21T21:40:00",
"url": "https://files.pythonhosted.org/packages/b4/18/5d9eab71d105ff54b7e41b60e35638c12ed2797c62e407739bb5c8ceaf11/plone.alterego-1.1.2-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "cddc7323c373c4add7412f7006064bdc",
"sha256": "5f405edc22680318fe41880f6ef70ba12baaa3180ceca8394caf9f02bc600a77"
},
"downloads": -1,
"filename": "plone.alterego-1.1.2.tar.gz",
"has_sig": false,
"md5_digest": "cddc7323c373c4add7412f7006064bdc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 11140,
"upload_time": "2018-11-21T21:40:02",
"url": "https://files.pythonhosted.org/packages/4d/d4/49c6dd42e43570e1134256235401d689fd71880cae8cead20ccd19e11c66/plone.alterego-1.1.2.tar.gz"
}
],
"1.1.3": [
{
"comment_text": "",
"digests": {
"md5": "888b25c23ab36f590226b0edb5bcaaf0",
"sha256": "1c410b098f979274ac6bc848e4881dbccd4a69110312e5b4a16d21e55011cc2d"
},
"downloads": -1,
"filename": "plone.alterego-1.1.3-py2-none-any.whl",
"has_sig": false,
"md5_digest": "888b25c23ab36f590226b0edb5bcaaf0",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 7507,
"upload_time": "2018-11-21T21:44:28",
"url": "https://files.pythonhosted.org/packages/b6/d2/e345d05bab74b3e6ae26952f4e3707fabe2b42cf7ca563e74a88c3930ddd/plone.alterego-1.1.3-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d39557dce97ad7702a76da913c4e090f",
"sha256": "b9a9c4bf4a1600e5c4762358ccca2b00b9dc8208c426a31d818ad3e9ad37da77"
},
"downloads": -1,
"filename": "plone.alterego-1.1.3.tar.gz",
"has_sig": false,
"md5_digest": "d39557dce97ad7702a76da913c4e090f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 11257,
"upload_time": "2018-11-21T21:44:30",
"url": "https://files.pythonhosted.org/packages/de/22/afab5b07372302e335e580262449f8d1c546cfa2a18fca7301b7a5a936c8/plone.alterego-1.1.3.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "888b25c23ab36f590226b0edb5bcaaf0",
"sha256": "1c410b098f979274ac6bc848e4881dbccd4a69110312e5b4a16d21e55011cc2d"
},
"downloads": -1,
"filename": "plone.alterego-1.1.3-py2-none-any.whl",
"has_sig": false,
"md5_digest": "888b25c23ab36f590226b0edb5bcaaf0",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 7507,
"upload_time": "2018-11-21T21:44:28",
"url": "https://files.pythonhosted.org/packages/b6/d2/e345d05bab74b3e6ae26952f4e3707fabe2b42cf7ca563e74a88c3930ddd/plone.alterego-1.1.3-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d39557dce97ad7702a76da913c4e090f",
"sha256": "b9a9c4bf4a1600e5c4762358ccca2b00b9dc8208c426a31d818ad3e9ad37da77"
},
"downloads": -1,
"filename": "plone.alterego-1.1.3.tar.gz",
"has_sig": false,
"md5_digest": "d39557dce97ad7702a76da913c4e090f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 11257,
"upload_time": "2018-11-21T21:44:30",
"url": "https://files.pythonhosted.org/packages/de/22/afab5b07372302e335e580262449f8d1c546cfa2a18fca7301b7a5a936c8/plone.alterego-1.1.3.tar.gz"
}
]
}