{ "info": { "author": "Roger Ineichen and the Zope Community", "author_email": "zope-dev@zope.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Zope :: 3", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "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", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP" ], "description": "Pagelets are Zope 3 UI components. In particular they allow the developer to\nspecify content templates without worrying about the UI O-wrap.\n\n\n========\nPagelets\n========\n\n.. contents::\n\nThis package provides a very flexible base implementation that can be used\nto write view components which can be higly customized later in custom projects.\nThis is needed if you have to write reusable components like those needed\nin a framework. Pagelets are BrowserPages made differently and can be used\nto replace them.\n\nWhat does this mean?\n\nWe separate the python view code from the template implementation. And we also\nseparate the template in at least two different templates - the content\ntemplate and the layout template.\n\nThis package uses z3c.template and offers an implementaton for this\ntemplate pattern. Additionaly this package offers a ``pagelet`` directive\nwich can be used to register pagelets.\n\nPagelets are views which can be called and support the update and render\npattern.\n\n\nHow do they work\n----------------\n\nA pagelet returns the rendered content without layout in the render method and\nreturns the layout code if we call it. See also z3c.template which shows\nhow the template works. These samples will only show how the base implementation\nlocated in the z3c.pagelet.browser module get used.\n\n\nBrowserPagelet\n--------------\n\nThe base implementation called BrowserPagelet offers builtin __call__ and\nrender methods which provide the different template lookups. Take a look at the\nBrowserPagelet class located in z3c.pagelet.browser and you can see that the render\nmethod returns a IContentTemplate and the __call__ method a ILayoutTemplate\ndefined in the z3c.layout package.\n\n >>> import os, tempfile\n >>> temp_dir = tempfile.mkdtemp()\n\n >>> import zope.interface\n >>> import zope.component\n >>> from z3c.pagelet import interfaces\n >>> from z3c.pagelet import browser\n\nWe start by defining a page template rendering the pagelet content.\n\n >>> contentTemplate = os.path.join(temp_dir, 'contentTemplate.pt')\n >>> with open(contentTemplate, 'w') as file:\n ... _ = file.write('''\n ...
\n ... my template content\n ...
\n ... ''')\n\nAnd we also define a layout template rendering the layout for a pagelet.\nThis template will call the render method from a pagelet:\n\n >>> layoutTemplate = os.path.join(temp_dir, 'layoutTemplate.pt')\n >>> with open(layoutTemplate, 'w') as file:\n ... _ = file.write('''\n ... \n ... \n ...
\n ... here comes the content\n ...
\n ... \n ... \n ... ''')\n\nLet's now register the template for the view and the request. We use the\nTemplateFactory directly from the z3c.template package. This is commonly done\nusing the ZCML directive called ``z3c:template``. Note that we do use the\ngeneric Interface as the view base interface to register the template. This\nallows us to register a more specific template in the next sample:\n\n >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer\n >>> from z3c.template.interfaces import IContentTemplate\n >>> from z3c.template.template import TemplateFactory\n >>> factory = TemplateFactory(contentTemplate, 'text/html')\n >>> zope.component.provideAdapter(\n ... factory, (zope.interface.Interface, IDefaultBrowserLayer),\n ... IContentTemplate)\n\nAnd register the layout template using the ``Interface`` as registration base:\n\n >>> from z3c.template.interfaces import ILayoutTemplate\n >>> factory = TemplateFactory(layoutTemplate, 'text/html')\n >>> zope.component.provideAdapter(factory,\n ... (zope.interface.Interface, IDefaultBrowserLayer), ILayoutTemplate)\n\nNow define a view marker interface. Such a marker interface is used to let\nus register our templates:\n\n >>> class IMyView(zope.interface.Interface):\n ... pass\n\nAnd we define a view class inherited from BrowserPagelet and implementing the\nview marker interface:\n\n >>> @zope.interface.implementer(IMyView)\n ... class MyView(browser.BrowserPagelet):\n ... pass\n\nNow test the view class providing the view and check the output:\n\n >>> from zope.publisher.browser import TestRequest\n >>> request = TestRequest()\n >>> myView = MyView(root, request)\n >>> print(myView())\n \n \n
\n
\n my template content\n
\n
\n \n \n\nYou can see the render method generates only the content:\n\n >>> print(myView.render())\n
\n my template content\n
\n\n\nRedirection\n-----------\n\nThe pagelet doesn't bother rendering itself and its layout when request is a\nredirection as the rendering doesn't make any sense with browser requests in\nthat case. Let's create a view that does a redirection in its update method.\n\n >>> class RedirectingView(MyView):\n ... def update(self):\n ... self.request.response.redirect('.')\n\nIt will return an empty string when called as a browser page.\n\n >>> redirectRequest = TestRequest()\n >>> redirectView = RedirectingView(root, redirectRequest)\n >>> redirectView() == ''\n True\n\nHowever, the ``render`` method will render pagelet's template as usual:\n\n >>> print(redirectView.render())\n
\n my template content\n
\n\n\nPageletRenderer\n---------------\n\nThere is also a standard pattern for calling the render method on pagelet.\nUsing the pagelet renderer which is a IContentProvider makes it possible to\nreuse existing layout template without the pagelet. If you want to reuse a\nlayout template without a pagelet you simply have to provide another content\nprovider. It's flexible isn't it? As next let's show a sample using the\npagelet renderer.\n\nWe define a new layout template using the content provider called ```pagelet``\n\n\n >>> providerLayout = os.path.join(temp_dir, 'providerLayout.pt')\n >>> with open(providerLayout, 'w') as file:\n ... _ = file.write('''\n ... \n ... \n ...
\n ... here comes the content\n ...
\n ... \n ... \n ... ''')\n\nand register them. Now we use the specific interface defined in the view:\n\n >>> factory = TemplateFactory(providerLayout, 'text/html')\n >>> zope.component.provideAdapter(factory,\n ... (zope.interface.Interface, IDefaultBrowserLayer), ILayoutTemplate)\n\nNow let's call the view:\n\n >>> try:\n ... myView()\n ... except Exception as e:\n ... print(repr(e))\n ContentProviderLookupError('pagelet'...)\n\nThat's right, we need to register the content provider ``pagelet`` before we\ncan use it.\n\n >>> from zope.contentprovider.interfaces import IContentProvider\n >>> from z3c.pagelet import provider\n >>> zope.component.provideAdapter(provider.PageletRenderer,\n ... provides=IContentProvider, name='pagelet')\n\nNow let's call the view again:\n\n >>> print(myView())\n \n \n
\n
\n my template content\n
\n
\n \n \n\n\nContext-specific templates\n--------------------------\n\nPagelets are also able to lookup templates using their context object\nas an additional discriminator, via (self, self.request, self.context)\nlookup. It's useful when you want to provide a custom template for\nsome specific content objects. Let's check that out.\n\nFirst, let's define a custom content type and make an object to work with:\n\n >>> class IContent(zope.interface.Interface):\n ... pass\n >>> @zope.interface.implementer(IContent)\n ... class Content(object):\n ... pass\n\n >>> content = Content()\n\nLet's use our view class we defined earlier. Currently, it will use\nthe layout and content templates we defined for (view, request) before:\n\n >>> myView = MyView(content, request)\n >>> print(myView())\n \n \n
\n
\n my template content\n
\n
\n \n \n\nLet's create context-specific layout and content templates and register\nthem for our IContent interface:\n\n >>> contextLayoutTemplate = os.path.join(temp_dir, 'contextLayoutTemplate.pt')\n >>> with open(contextLayoutTemplate, 'w') as file:\n ... _ = file.write('''\n ... \n ... \n ...
\n ... here comes the context-specific content\n ...
\n ... \n ... \n ... ''')\n >>> factory = TemplateFactory(contextLayoutTemplate, 'text/html')\n >>> zope.component.provideAdapter(\n ... factory, (zope.interface.Interface, IDefaultBrowserLayer, IContent),\n ... ILayoutTemplate)\n\n >>> contextContentTemplate = os.path.join(temp_dir, 'contextContentTemplate.pt')\n >>> with open(contextContentTemplate, 'w') as file:\n ... _ = file.write('''\n ...
\n ... my context-specific template content\n ...
\n ... ''')\n >>> factory = TemplateFactory(contextContentTemplate, 'text/html')\n >>> zope.component.provideAdapter(\n ... factory, (zope.interface.Interface, IDefaultBrowserLayer, IContent),\n ... IContentTemplate)\n\nNow, our view should use context-specific templates for rendering:\n\n >>> print(myView())\n \n \n
\n
\n my context-specific template content\n
\n
\n \n \n\n\nAdd, Edit and Display forms (formlib)\n-------------------------------------\n\nWhat would the pagelet be without any formlib based implementations?\nWe offer base implementations for add, edit and display forms based on\nthe formlib. **Note:** To make sure these classes get defined, you\nshould have ``zope.formlib`` already installed, as ``z3c.pagelet``\ndoes not directly depend on ``zope.formlib`` because there are other\nform libraries.\n\nFor the next tests we provide a generic form template\nlike those used in formlib. This template is registered within this package\nas a default for the formlib based mixin classes:\n\n >>> from z3c import pagelet\n >>> baseDir = os.path.split(pagelet.__file__)[0]\n >>> formTemplate = os.path.join(baseDir, 'form.pt')\n >>> factory = TemplateFactory(formTemplate, 'text/html')\n >>> zope.component.provideAdapter(\n ... factory,\n ... (interfaces.IPageletForm, IDefaultBrowserLayer), IContentTemplate)\n\nAnd we define a new interface including a text attribute:\n\n >>> import zope.schema\n >>> class IDocument(zope.interface.Interface):\n ... \"\"\"A document.\"\"\"\n ... text = zope.schema.TextLine(title=u'Text', description=u'Text attr.')\n\nAlso define a content object which implements the interface:\n\n >>> @zope.interface.implementer(IDocument)\n ... class Document(object):\n ... text = None\n >>> document = Document()\n\nPageletAddForm\n~~~~~~~~~~~~~~\n\nNow let's define an add from based on the PageletAddForm class:\n\n >>> from zope.formlib import form\n >>> class MyAddForm(browser.PageletAddForm):\n ... form_fields = form.Fields(IDocument)\n ... def createAndAdd(self, data):\n ... title = data.get('title', u'')\n ... doc = Document()\n ... doc.title = title\n ... root['document'] = doc\n ... return doc\n\nNow render the form:\n\n >>> addForm = MyAddForm(root, request)\n >>> print(addForm())\n \n \n
\n
\n \n \n \n \n \n
\n \n \n
Text attr.
\n
\n
\n
\n \n
\n
\n
\n \n \n\n\nPageletEditForm\n~~~~~~~~~~~~~~~\n\nNow let's define an edit form based on the PageletEditForm class:\n\n >>> class MyEditForm(browser.PageletEditForm):\n ... form_fields = form.Fields(IDocument)\n\nand render the form:\n\n >>> document.text = u'foo'\n >>> editForm = MyEditForm(document, request)\n >>> print(editForm())\n \n \n
\n
\n \n \n \n \n \n
\n \n \n
Text attr.
\n
\n
\n
\n \n
\n
\n
\n \n \n\n\nPageletDisplayForm\n~~~~~~~~~~~~~~~~~~\n\nNow let's define a display form based on the PageletDisplayForm class...\n\n >>> class MyDisplayForm(browser.PageletDisplayForm):\n ... form_fields = form.Fields(IDocument)\n\nand render the form:\n\n >>> document.text = u'foo'\n >>> displayForm = MyDisplayForm(document, request)\n >>> print(displayForm())\n \n \n
\n
\n \n \n \n \n \n
\n \n \n
Text attr.
\n
foo
\n
\n
\n
\n \n \n\n\nCleanup\n-------\n\n >>> import shutil\n >>> shutil.rmtree(temp_dir)\n\n\n=======\nCHANGES\n=======\n\n2.1 (2018-11-12)\n----------------\n\n- Claim support for Python 3.5, 3.6, 3.6, PyPy and PyPy3.\n\n- Drop support for Python 2.6 and 3.3.\n\n- Drop support for ``python setup.py test``.\n\n\n2.0.0 (2015-11-09)\n------------------\n\n- Standardize namespace __init__.\n\n- Claim support for Python 3.4.\n\n\n2.0.0a1 (2013-02-28)\n--------------------\n\n- Added support for Python 3.3.\n\n- Replaced deprecated ``zope.interface.implements`` usage with equivalent\n ``zope.interface.implementer`` decorator.\n\n- Dropped support for Python 2.4 and 2.5.\n\n\n1.3.1 (2012-09-15)\n------------------\n\n- Fix ``IPageletDirective`` after a change in\n ``zope.component.zcml.IBasicViewInformation``\n\n\n1.3.0 (2011-10-29)\n------------------\n\n- Moved z3c.pt include to extras_require chameleon. This makes the package\n independent from chameleon and friends and allows to include this\n dependencies in your own project.\n\n- Upgrade to chameleon 2.0 template engine and use the newest z3c.pt and\n z3c.ptcompat packages adjusted to work with chameleon 2.0.\n\n See the notes from the z3c.ptcompat package:\n\n Update z3c.ptcompat implementation to use component-based template engine\n configuration, plugging directly into the Zope Toolkit framework.\n\n The z3c.ptcompat package no longer provides template classes, or ZCML\n directives; you should import directly from the ZTK codebase.\n\n Note that the ``PREFER_Z3C_PT`` environment option has been\n rendered obsolete; instead, this is now managed via component\n configuration.\n\n Also note that the chameleon CHAMELEON_CACHE environment value changed from\n True/False to a path. Skip this property if you don't like to use a cache.\n None or False defined in buildout environment section doesn't work. At least\n with chameleon <= 2.5.4\n\n Attention: You need to include the configure.zcml file from z3c.ptcompat\n for enable the z3c.pt template engine. The configure.zcml will plugin the\n template engine. Also remove any custom built hooks which will import\n z3c.ptcompat in your tests or other places.\n\n\n1.2.2 (2011-08-18)\n------------------\n\n- Change request interface in pagelet adapter signature e.g.\n (context, request, pagelet). Switch from IBrowserRequest to IHTTPRequest.\n This allows to use the pagelet pattern for jsonrpc request which doesn't\n provide IBrowserRequest. Also reflect the changes in configure.zcml\n\n\n1.2.1 (2010-07-29)\n------------------\n\n- ``zope.app.pagetemplate.metaconfigure.registerType`` was moved to\n ``zope.browserpage``, so it gets now imported from there.\n\n- Dropped test dependency on ``zope.app.security``, it is no longer\n needed.\n\n- Using python's ``doctest`` instead of deprecated\n ``zope.testing.doctest[unit]``.\n\n\n1.2.0 (2009-08-27)\n------------------\n\n- Fix untrusted redirect to google.com in tests. It's now forbidden by default\n by newer zope.publisher versions.\n\n- Change ``zope.app.publisher`` dependency to new ``zope.browserpage``, as it\n has much less dependencies.\n\n1.1.0 (2009-05-28)\n------------------\n\n* Got rid of dependency on ``zope.app.component`` by requiring\n ``zope.component >= 3.7``.\n\n* Removed hard dependency on ``zope.formlib``: the pagelet forms now\n only get defined when ``zope.formlib`` is available. Tests still\n depend on ``zope.formlib``, so it got a test dependency.\n\n* Made sure long_description renders fine on pypi.\n\n\n1.0.3 (2009-02-27)\n------------------\n\n* Allow use of ``z3c.pt`` using ``z3c.ptcompat`` compatibility layer.\n\n* Add support for context-specific layout and content template lookup,\n using (view, request, context) discriminator. This is compatible with\n context-specific templates introduced in z3c.template 1.2.0.\n\n* Don't do rendering in pagelet's __call__ method when request is a redirection.\n\n* Add sphinx-based HTML documentation building part to the buildout.\n\n\n1.0.2 (2008-01-21)\n------------------\n\n* Added a `form.zcml` which can be included to have a template for\n ``PageletAddForm``, ``PageletEditForm`` and ``PageletDisplayForm``.\n\n\n1.0.1 (2007-10-08)\n------------------\n\n* Added ``update()`` and ``render()`` method to ``IPagelet`` which was\n not specified but used.\n\n* Fixed a infinite recursion bug when a layout template was registered for \"*\"\n but no content template was registered for a pagelet.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/zopefoundation/z3c.pagelet", "keywords": "zope3 template pagelet layout zpt pagetemplate", "license": "ZPL 2.1", "maintainer": "", "maintainer_email": "", "name": "z3c.pagelet", "package_url": "https://pypi.org/project/z3c.pagelet/", "platform": "", "project_url": "https://pypi.org/project/z3c.pagelet/", "project_urls": { "Homepage": "https://github.com/zopefoundation/z3c.pagelet" }, "release_url": "https://pypi.org/project/z3c.pagelet/2.1/", "requires_dist": null, "requires_python": "", "summary": "Pagelets are way to specify a template without the O-wrap.", "version": "2.1" }, "last_serial": 4476894, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "29c886b2df8a9c302b6d43853e02c64b", "sha256": "06780d7f59d3bd691dba3444a0b79ecc94e921fe66020a9d048ead70ad55221a" }, "downloads": -1, "filename": "z3c.pagelet-1.0.0-py2.4.egg", "has_sig": false, "md5_digest": "29c886b2df8a9c302b6d43853e02c64b", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 24157, "upload_time": "2007-05-22T16:05:31", "url": "https://files.pythonhosted.org/packages/1d/a8/c5c744ebae61ef6903ef0ef722b0073ec64bd3cd71e9ab3de9a7f3fb66f1/z3c.pagelet-1.0.0-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "f8663efe94f3ab0b026fc2b579d7cad6", "sha256": "88af568790a0a0cefcad252dae9a10efdee4bbf842edb79709de46459833f005" }, "downloads": -1, "filename": "z3c.pagelet-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f8663efe94f3ab0b026fc2b579d7cad6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12822, "upload_time": "2007-05-22T16:05:20", "url": "https://files.pythonhosted.org/packages/e2/92/55cbad15274cfe4bbb7a9cc9e0c6ead0a0815325eeddfa4e9bfeb326f7ad/z3c.pagelet-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "810f6470a14b65980e1372bcd0b71645", "sha256": "5171725015d9e44c17c525b87d31254407752514c8c5cfc5bf0426218d8ec59d" }, "downloads": -1, "filename": "z3c.pagelet-1.0.1.tar.gz", "has_sig": false, "md5_digest": "810f6470a14b65980e1372bcd0b71645", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14011, "upload_time": "2007-10-09T01:18:02", "url": "https://files.pythonhosted.org/packages/b5/78/067eb4e890ed6bd0a4f47fb9961908b3a254e80d6726206a0332f120dbdd/z3c.pagelet-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "70dbe325d51a13dff095e9a5d3421666", "sha256": "e7417069078a28a87fdcc449bed4c44875bb98f68f442f8c349d33d12ef64375" }, "downloads": -1, "filename": "z3c.pagelet-1.0.2.tar.gz", "has_sig": false, "md5_digest": "70dbe325d51a13dff095e9a5d3421666", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14309, "upload_time": "2008-01-23T22:33:46", "url": "https://files.pythonhosted.org/packages/9f/e9/b492c0e269369f425f327b7cf4af642443920fc24beacde6ee143f8863cc/z3c.pagelet-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "a94531fb01ad50fda93e219819f2a006", "sha256": "f702c48881d2e9e598d7ca8712856d344c4781621ff12f1f5e492df25065faf3" }, "downloads": -1, "filename": "z3c.pagelet-1.0.3.tar.gz", "has_sig": false, "md5_digest": "a94531fb01ad50fda93e219819f2a006", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16416, "upload_time": "2009-02-27T11:56:46", "url": "https://files.pythonhosted.org/packages/78/50/f3a9d0b57e722fb267f3c2861fc56a7ddc82bf65d41bd2150d13bfb343a1/z3c.pagelet-1.0.3.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "72f107b6afad3526e3252c6a7a45fee1", "sha256": "06bbd850df5a7cbdb0c922d46d43af7c35f17621a1a86e605159ec7ec23ee408" }, "downloads": -1, "filename": "z3c.pagelet-1.1.0.tar.gz", "has_sig": false, "md5_digest": "72f107b6afad3526e3252c6a7a45fee1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17893, "upload_time": "2009-05-28T21:05:03", "url": "https://files.pythonhosted.org/packages/1d/0f/5b10764632ac618789d55e94576edae6d4a66c2066751e39f95501d5db78/z3c.pagelet-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "3a66827f0ad4c05e6a6390c3809b0bca", "sha256": "6057a4222b42cf31f501d5a21b24f45252b6844e91305acfe0b3e2ee9cf03a43" }, "downloads": -1, "filename": "z3c.pagelet-1.2.0.tar.gz", "has_sig": false, "md5_digest": "3a66827f0ad4c05e6a6390c3809b0bca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17014, "upload_time": "2009-08-27T18:35:56", "url": "https://files.pythonhosted.org/packages/08/e1/463fd703270426d048988f0fdaab6e5b169ed9e04de0c4a4872bae11c305/z3c.pagelet-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "3122240b64f8407d2e337ff747d99633", "sha256": "1514694a71a98c826260d37e91dff58007649a0bcadb84c480843100eac8d814" }, "downloads": -1, "filename": "z3c.pagelet-1.2.1.tar.gz", "has_sig": false, "md5_digest": "3122240b64f8407d2e337ff747d99633", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15364, "upload_time": "2010-07-29T08:49:56", "url": "https://files.pythonhosted.org/packages/b4/61/1e849e92e630805d867cfa43d5c18a5ef83d4c9d9a403b843caa6f79ebe4/z3c.pagelet-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "73a04a5e6a4540714fd3507a22abcf5a", "sha256": "529fe3a139437d7bb1fe710677f7f7b7879a42c6842e8a8640ba83f3c7202bb5" }, "downloads": -1, "filename": "z3c.pagelet-1.2.2.zip", "has_sig": false, "md5_digest": "73a04a5e6a4540714fd3507a22abcf5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32940, "upload_time": "2011-08-18T14:15:51", "url": "https://files.pythonhosted.org/packages/6b/ca/a6f425e05eb8ea833f67b0f087dad2314fc03fa2a4ac0c9f09ddaa25129c/z3c.pagelet-1.2.2.zip" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "a0771d003ea58b32eb0ce7922f920485", "sha256": "f702f553819be64bc4bfd722eaf2a602d226408e8dbc20c1a7aacc65ae1a196c" }, "downloads": -1, "filename": "z3c.pagelet-1.3.0.zip", "has_sig": false, "md5_digest": "a0771d003ea58b32eb0ce7922f920485", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35340, "upload_time": "2011-10-29T23:12:49", "url": "https://files.pythonhosted.org/packages/1f/8b/27a5be6ff2fd4bfd60f85f73c854abb14d4f47f9e1f23f1bb2f8f742a95b/z3c.pagelet-1.3.0.zip" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "afa25f096761f3446ebc3a7cdad551b5", "sha256": "bee8fb8b43db540d1040acd87588aabf8d670cf99bb9e54ec260ec329e73e008" }, "downloads": -1, "filename": "z3c.pagelet-1.3.1.tar.gz", "has_sig": false, "md5_digest": "afa25f096761f3446ebc3a7cdad551b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23363, "upload_time": "2012-09-15T16:17:39", "url": "https://files.pythonhosted.org/packages/be/63/38076c374b067d08ac832e507405a952345bebc0cb26c2d94c6277f1e0c6/z3c.pagelet-1.3.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "5aa2b1d4c5de809f9c18f93b32e72930", "sha256": "e6f94870b2193ffb0543457c95a3e0c02f5ab9162ca0e5127c8575d5c9e8df4f" }, "downloads": -1, "filename": "z3c.pagelet-2.0.0.tar.gz", "has_sig": false, "md5_digest": "5aa2b1d4c5de809f9c18f93b32e72930", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25763, "upload_time": "2015-11-09T14:22:14", "url": "https://files.pythonhosted.org/packages/84/cc/3195083820d14147fa4dfd76dc37e8fd24e1f12b20622add583c46b01045/z3c.pagelet-2.0.0.tar.gz" } ], "2.0.0a1": [ { "comment_text": "", "digests": { "md5": "1ce21f30780b67eb7fcb5738396134d1", "sha256": "a6b838db89fc6d74357d1698dee7b0dd18e30d41b49a99e3958d1d3b9a7b7064" }, "downloads": -1, "filename": "z3c.pagelet-2.0.0a1.zip", "has_sig": false, "md5_digest": "1ce21f30780b67eb7fcb5738396134d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38198, "upload_time": "2013-02-28T20:31:48", "url": "https://files.pythonhosted.org/packages/0c/cf/6c15aa2cc516f14a1729a8084099edece796ef6e8b92db2e6f4139deddcb/z3c.pagelet-2.0.0a1.zip" } ], "2.1": [ { "comment_text": "", "digests": { "md5": "e6eed8a1d5736a44ebc484a8d120045a", "sha256": "8e6fd788b4a5fb459236e24a7492930d201ac72d6368ce1e6bd1d93950219b19" }, "downloads": -1, "filename": "z3c.pagelet-2.1.tar.gz", "has_sig": false, "md5_digest": "e6eed8a1d5736a44ebc484a8d120045a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26976, "upload_time": "2018-11-12T10:24:16", "url": "https://files.pythonhosted.org/packages/aa/28/ee83f53c17a4f85849e03412d60f1e7a58c9cb7c572d7a6c48e7ee6f77cf/z3c.pagelet-2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e6eed8a1d5736a44ebc484a8d120045a", "sha256": "8e6fd788b4a5fb459236e24a7492930d201ac72d6368ce1e6bd1d93950219b19" }, "downloads": -1, "filename": "z3c.pagelet-2.1.tar.gz", "has_sig": false, "md5_digest": "e6eed8a1d5736a44ebc484a8d120045a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26976, "upload_time": "2018-11-12T10:24:16", "url": "https://files.pythonhosted.org/packages/aa/28/ee83f53c17a4f85849e03412d60f1e7a58c9cb7c572d7a6c48e7ee6f77cf/z3c.pagelet-2.1.tar.gz" } ] }