{ "info": { "author": "Pretaweb", "author_email": "support@pretaweb.com", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Framework :: Plone :: 4.2", "Framework :: Plone :: 4.3", "Framework :: Plone :: 5.0", "Framework :: Plone :: 5.1", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. contents::\n\nIntroduction\n============\n\n.. image:: https://secure.travis-ci.org/collective/collective.listingviews.png\n :target: http://travis-ci.org/collective/collective.listingviews\n\n``collective.listingviews`` allows a Plone site administrator to quickly create a new display\nview their content types, folders, collections and eea.facetnavigation. It will also let you create\ncustom portlets.\n\n.. |listingviews| image:: https://cloud.githubusercontent.com/assets/41700/5023294/b6f6e9e0-6b27-11e4-8516-2b4a50ef66c5.png\n :width: 50pt \n.. |edit listing view| image:: https://cloud.githubusercontent.com/assets/41700/5023298/bdd25150-6b27-11e4-8be8-010e3c2cc6d0.png\n :scale: 50 %\n.. |display menu| image:: https://cloud.githubusercontent.com/assets/41700/5023300/c1546ad4-6b27-11e4-844e-e3d658009731.png\n :scale: 50 %\n.. |unthemed| image:: https://cloud.githubusercontent.com/assets/41700/5023303/c5cdc2f4-6b27-11e4-9a0d-e89e5b99b71e.png\n :scale: 50 %\n.. |themed| image:: https://cloud.githubusercontent.com/assets/41700/5023306/c9e2f918-6b27-11e4-86aa-efd49d202ec8.png\n :scale: 50 %\n\n\n1. Go to Site Setup > Listing Views. |listingviews|\n2. Select the fields you want to display and give your view a name and class tag. Pick which content types this view will be \n available to. \n |edit listing view|\n4. Once you've added your view definition you can use the \"Display Menu\" or \"Listing view portlet\" to apply this view where you want. \n If you use it on a folder or\n collection it display a list items with just the fields you defined. If you use your view on a single item, it will display a list\n with a single set of fields. If you use a portlet, you can either point it to a fixed item, folder or collection, or it will display\n the content of the current context. \n |display menu| \n |unthemed| \n5. If you require further customisation: use diazo to customise the layout/html of your fields or you can \n use custom fields via \"Site setup\" if you need combine field values, format a value or access plone api's.\n |themed| \n \nFor example you could\n\n- create a news listing which displays the first sentance and publish date of each news item\n- create a footer portlet for each page which displays the last updated date of the current content\n- create a portlet which grabs a random image from a folder\n- create a listing of folders which contain pdfs of different languages and display links to each version of the pdf.\n\nThis plugin is very flexible and can be used to:\n\n- create custom views of folders or collections that include metadata and\n content from contained or matching items;\n- create custom listing portlets with additional information such as\n lead images, publication dates or authors;\n- create listing views with subqueries or python via `TAL expressions`_;\n- create additional views of non-folderish content items, showing other aspects of the\n content;\n- create portlets to display information about the current item such as last\n updated date, or even the whole content replacing plugins like ItemViewPortlet;\n- create carousel portlets which pull content or images from collections or\n folders and apply javascript to them, replacing collective.carousel are related\n plugins;\n- create custom listings for ``eea.facetednavigation``;\n\nListing Views are designed to be simple to create quickly on a Plone site\nand avoid the complexity of creating custom page templates or overridden\nviews for many common cases.\n\nView definitions are created inside the Plone Site setup by TTW developers. \nContent editors can apply the views to content items via the\n``Display Menu`` for content or in a ``Listing View Portlet`` for portlets \n(and in the future in a ``Content Listing Tile``).\n\nThe HTML markup used by the view is simple and designed to be easily adapted\nto your needs using CSS or Diazo. Each view consists of:\n\n- a definition list of fields of the target or context content item;\n- a list of definition lists of fields for each the listed items if the\n target or context is a folder, or collection;\n- unique CSS classes for the lists and each field type.\n\nBy default Fields that can make up a ListingView are :\n\n- Any Metadata fields stored in the catalog (e.g. Title, Effective Date)\n- Some Metadata fields with formatting applied (e.g. Title (Link), Effective Date (Date & Time))\n- Any custom TAL expressions\n\nPlone 4.3.5/4.3.6 issues\n========================\n\nThere is a known issue which breaks widgets when editing listing views.\nThis is due to a regression bug in z3c.form 3.2.3 which ships with Plone 4.3.5 and 4.3.6.\n\nYou will need to pin a different version of z3c.form. Add the following to versions::\n\n [versions]\n ...\n z3c.form = 3.2.4\n\n(If for some reason you need to pin an older version of z3c.form you should be fine.\nJust stay away from the 3.2.3 version)\n\nWorked Examples\n===============\n\n>>> from zope.component.hooks import getSite; plone =getSite()\n>>> from plone.uuid.interfaces import IUUID\n\nCreating a custom field\n-----------------------\n\nLet's say have a design that demands that has a folder displaying the publication date for each item.\n\nMost of this can be achieved using diazo and css however the publication date isn't in any of Plone's default listing\nviews.\nPreviously you would have to dig into Plone's code base, find it's folder template implementation and then\nuse ``jbot`` or ``ZCML`` template overrides to customise the folder listing template.\nNot only will you need to learn about TAL, python, packaging and deployment but the end result will make your site\nharder to upgrade. Any future enhancements in Plone's folder template will have to be merged back into your patched\noverriden template.\n\nInstead here is how you do it using a ListingView.\n\nFirst we need to create a custom field using TAL since we want a custom date format rather than Plones default.\nA TAL Expression like the following will work.\n\n>>> tal = \"python:item.effective.strftime('%d/%m/%Y') if item.EffectiveDate != 'None' else '' \"\n\n- Go to ``Site Setup > Listing Custom Fields > Add``\n- The ``Id`` is unique and is also used as a CSS class in the final html\n- The ``Title`` is what the editor picks from the ``Display Menu`` or in the ``ListingView Portlet``\n- Finally the TAL Expression that is evaluated when showing the field. ``item`` is the catalog brain.\n ``object`` or ``here`` is the context object. Below is the TAL we are going to use.\n\n>>> browser = layer['manager']\n>>> browser.getLink('Site Setup').click()\n>>> browser.getLink('Listing Custom Fields').click()\n>>> browser.getControl('Add').click()\n>>> browser.getControl('Id').value = \"pubdate\"\n>>> browser.getControl('Title').value = \"Local Publication Date\"\n>>> browser.getControl('TAL expression').value = tal\n>>> browser.getControl('Save').click()\n\n\nCreating a listing view\n-----------------------\n\nNow that we've created our custom field we can add a new Listing View via\n``Site Setup > Listing View > Add``.\n\n>>> browser.getLink('Site Setup').click()\n>>> browser.getLink('Listing View').click()\n>>> browser.getControl('Add').click()\n\nThere are two kinds of information a listing view display. Information about the context object called\n``Item Fields`` and information about the contents or matched items called ``Listing Fields``.\nThese fields come from either standard metadata or the custom fields we add.\n\n>>> 'Description' in browser.getControl('Title', index=1).control.displayOptions\nTrue\n\n\n#>>> print '\\n'.join( sorted(browser.getControl('Title', index=1).control.displayOptions) )\nCreation Date (Date & Time)\nCreation Date (Date)\nCreator\nDescription\nEffective Date (Date & Time)\nEffective Date (Date)\nEnd Date (Date & Time)\nEnd Date (Date)\nExpiration Date (Date & Time)\nExpiration Date (Date)\nShort Name\nShort Name (Link)\nSize\nLocal Publication Date (Custom)\nLocation\nModification Date (Date & Time)\nModification Date (Date)\nState\nStart Date (Date & Time)\nStart Date (Date)\nTags\nTitle\nTitle (Link)\nTotal number of comments\nItem Type\n...\n\nBy default the view will be enabled for standard content types. These are\n\n>>> options = browser.getControl('Page').control.displayOptions\n>>> options = [o for o in options if 'old-style' not in o]\n>>> print '\\n'.join( options )\nCollection\nComment\nEvent\nFile\nFolder\nImage\nLink\nNews Item\nPage\n\nIn this case we'll create a view called ``News with publication``.\nFor the context object we'll show\n\n - ``Title``\n\nfor each of the content items\n\n - ``Title``\n - ``Title (Link)``\n - ``Effective Date``\n - ``Local Publication Date``\n\nand finally we'll enable the view for all content types\n\n>>> browser.getControl('Id').value = \"pubnews\"\n>>> browser.getControl('Title', index=0).value = \"News with publication\"\n>>> layer.setInAndOut(browser, ['Title'], index=1)\n>>> if plone5: layer.setInAndOut(browser, ['Title', 'Title (Link)', 'EffectiveDate (Date)', 'Local Publication Date (Custom)'], index=3)\n>>> if not plone5: layer.setInAndOut(browser, ['Title', 'Title (Link)', 'Effective Date (Date)', 'Local Publication Date (Custom)'], index=3)\n>>> layer.setInAndOut(browser, browser.getControl('Page').control.displayOptions, index=0 )\n>>> browser.getControl('Add').click()\n\nWe can manage our existing listing views including a link to edit the view we just created.\n\n>>> browser.getLink('pubnews')\n\n\nUsing a listing view on a folder\n--------------------------------\n\nWe have a ``folder1`` with some pages in including a Page called ``item1``.\nUsing the ``Display > News with publication`` menu we will change the folder view to\n``News with publication`` view we created.\n\n>>> browser.getLink('folder1').click()\n>>> browser.getLink('item1')\n\n>>> browser.getLink('folder1').click()\n>>> browser.getLink('News with publication').click()\n\n\nYou will now have a listing that contains all the information you need.\nWe have\n\n- a definition for the fields of the folder (the context item)\n- an unordered list of definition lists for every item contained in the folder.\n\n - the title of ``item1``\n - a title made into a link to ``item1``\n - the ``EffectiveDate`` using Plone's default Date format\n - and finally our custom version of the effective date\n\nNote the html is in exactly the same order as we specifed in our view definition\n\n\n>>> print browser.contents\n<...\n
\n
\n
Title
\n
folder1
\n
\n
\n...\n\n>>> print browser.contents\n<...\n \n...\n\n>>> print browser.contents\n<...\n
Title
\n
item1
\n...\n\n>>> print browser.contents\n<...\n
Title (Link)
\n
item1
\n...\n\n>>> print browser.contents\n<...\n
Effective...Date (Date)
\n
\n...\n\n>>> print browser.contents\n<...\n
Local Publication Date
\n
\n...\n\n\nThe styling of this view is very basic. With ``Diazo`` we can turn this into a much nicer looking view by\nmatching against the CSS class ``pubnews-listing``::\n\n \n \n
\n
\n \n \n \n \n
\n
Published
\n
\n
\n \n \n Read Full Article\n \n
\n
\n
\n
\n\n\nAdding publication date to a Page using a portlet\n-------------------------------------------------\n\nWe can use the same custom publication date field when viewing Page items.\n\nWe'll create a new Listing View\ncalled ``Publication Info``, .\nadd ``Local Publication Date`` to the 'item' fields, rather than the listing fields.\n\nFinally we only want this to be applied to a Page content type\n\n>>> browser.getLink('Site Setup').click()\n>>> browser.getLink('Listing View').click()\n>>> browser.getControl('Add').click()\n>>> browser.getControl('Id').value = \"pubnewsitem\"\n>>> browser.getControl('Title', index=0).value = \"Publication Info\"\n>>> layer.setInAndOut(browser, ['Local Publication Date (Custom)'], index=0)\n>>> layer.setInAndOut(browser, ['Page'])\n>>> browser.getControl('Add').click()\n\n\nGo to your folder where all the pages are located\nand\n\n1. Add a ``ListingView Portlet`` portlet to the left side using ``Manage porlets``.\n2. Enter ``Publication Info`` as the Portlet header.\n3. Select ``Publication Info`` as the ``Listing views``.\n4. Leave ``Target`` target blank as you want portlet to show information of the current item. Click ``Save``.\n\nAlternatively you can also add the portlet as a Content Type portlet which also ensures it will only be shown only when\nviewing this content type. (e.g. ``Site Setup > Types > News Item > Manage Portlets assigned to this content type``).\n\n>>> browser.getLink('Home').click()\n>>> browser.getLink('folder1').click()\n>>> browser.getLink('Manage portlets').click()\n>>> browser.getControl('ListingView Portlet', index=1).click()\n>>> layer.getFormFromControl(browser.getControl('ListingView Portlet', index=1)).submit()\n>>> browser.getControl('Portlet header').value = 'Publication Info'\n>>> browser.getControl('Listing views').value = ['pubnewsitem']\n>>> browser.getControl('Save').click()\n\n\nNow whenever you view a news item you will get a portlet on the left hand side.\nWe can see\n\n- a portlet with the heading ``Publication Info``.\n- Our portlet shows data about the context item (in this case item1)\n- and because item1 has no contents we have an empty list in the listing part of the portlet.\n\n>>> browser.getLink('folder1').click()\n>>> browser.getLink('item1').click()\n>>> print browser.contents\n<...\n
\n ...\n
\n...\n>>> print browser.contents\n<...\n
\n \n \n Publication Info\n \n \n
\n...\n>>> print browser.contents\n<...\n
\n
\n
Local Publication Date
\n
.../.../...
\n
\n
\n...\n>>> print browser.contents\n<...\n \n...\n\nUsing the diazo mockup and rules.xml to change the final design we can move the publication date below the title\nand remove the portlet completely::\n\n \n \n \n
Published
\n
\n\n\nBecause we restricted which types the view can be applied to we won't see the portlet on the folder.\nWe also aren't able to select that view from the display menu because this is a folder not a Page.\n\n>>> browser.getLink('folder1').click()\n>>> 'portlet-listing-news-item-info' in browser.contents\nFalse\n>>> 'There was an error while rendering the portlet' in browser.contents\nFalse\n>>> browser.getLink('Publication Info')\nTraceback (most recent call last):\n...\nLinkNotFoundError\n\n\nItem View on content\n--------------------\n\nWe are also able to select our ``Publication Info`` view as a view for the ``item1`` main content as well\nvia the ``Display > Publication Info`` menu.\n\n>>> browser.getLink('folder1').click()\n>>> browser.getLink('item1').click()\n>>> browser.getLink('Publication Info')\n\n\n\nItem View portlet for fixed item\n--------------------------------\nIt's also possible to fix a portlet to show information on particular item instead of the current content context.\nEdit the portlet and search for ``item1`` in the ``Target`` Field.\n\n>>> browser.getLink('Manage portlets').click()\n>>> browser.getLink('Publication Info').click()\n>>> if plone5: browser.getForm('form').getControl(name='form.widgets.root').value = IUUID(plone['folder1']['item1'])\n>>> if not plone5: browser.getControl('Save').mech_form.new_control('text','form.root', {'value':'/folder1/item1'})\n>>> browser.getControl('Save').click()\n\n#TODO show what happens if we pick an item of invalid type\n\nWe will now see the portlet at the folder level\n\n>>> browser.getLink('folder1').click()\n>>> print browser.contents\n<...\n
\n
\n
Local Publication Date
\n
.../.../...
\n
\n
\n...\n\nListing Views for collections\n-----------------------------\n\nWe have create a collection in our folder1 called collection1\n\n>>> browser.getLink('folder1').click()\n>>> print browser.contents\n<...collection1...>\n>>> browser.getLink('collection1').click()\n>>> assert \"There are currently no items in this folder.\" not in browser.contents\n>>> print browser.contents\n<...item1...>\n>>> browser.getLink('item1')\n\n\nSwitch to our publication view\n\nSelect ``Display > 'News with publication'``.\n\n>>> browser.getLink('collection1').click()\n>>> browser.getLink('News with publication').click()\n>>> print browser.contents\n<...\n
Local Publication Date
\n...\n\n\nAnd we'll still see item1\nand our custom field\n\n>>> browser.getLink('item1')\n\n>>> print browser.contents\n<...\n
Local Publication Date
\n
.../.../...
\n...\n\nCollection Portlets\n-------------------\n\nWe can also create a portlet on the home page listing the contents of this collection\n\nOn the home page we have no link to item1\n\n>>> browser.getLink('Home').click()\n>>> browser.getLink('item1')\nTraceback (most recent call last):\n...\nLinkNotFoundError\n\nWe'll create a portlet to give us links.\nGive the portlet a header.\nWe have a choice of Listing Views to pick from.\nSelect ``News with publication`` as the ``Listing views``.\nWe can select a specific collection to display by searching by\nname for ``collection1`` in the ``Target`` field.\n\n>>> browser.getLink('Manage portlets').click()\n>>> browser.getControl('ListingView Portlet', index=1).click()\n>>> layer.getFormFromControl(browser.getControl('ListingView Portlet', index=1)).submit()\n>>> browser.getControl('Portlet header').value = 'Collection Portlet'\n>>> if not plone5:\n... browser.getControl('Listing views').displayOptions == ['(nothing selected)', 'News with publication', 'Publication Info']\n... else:\n... browser.getControl('Listing views').displayOptions == ['News with publication', 'Publication Info']\nTrue\n>>> if plone5: browser.getControl('Listing views').value = ['pubnews']\n>>> if not plone5: browser.getControl('News with publication').click()\n>>> if plone5: browser.getForm('form').getControl(name='form.widgets.root').value = IUUID(plone['folder1']['collection1'])\n>>> if not plone5: browser.getControl('Save').mech_form.new_control('text','form.root', {'value':'/folder1/collection1'})\n>>> browser.getControl('Save').click()\n\nNew when we view home we see the items inside ``folder1` based on criteria in ``collection1``, so we'll see\na link to the ``item1``\n\n>>> browser.getLink('Home').click()\n>>> browser.getLink('item1')\n\n\n\nExample: News listing in table view\n-----------------------------------\n\nLet's say have a design that demands that has a news folder that displays the publication date for each news item in table form.\n\nWe just copy our listing view and give it a new class. Add the following to your diazo rules.xml to turn the plain view into a table::\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n

Published

\n
\n

\n
\n
\n\n\n\n\n\n\nContributing\n============\n\nDevelopment is at http://github.com/collective/collective.listingviews\n\nInitial development was funded by `PretaWeb`_.\n\nWe have some ideas on where this could go:\n\n- Nicer GS import/export. Currently uses plone.app.registry.\n- Safe HTML filtering for all fields. Currently not implemented.\n- Support `plone.app.contentlistingtile`_ for Deco or ``collective.cover``.\n ``contentlistingtile`` allows custom views to be selected so this should\n be simple.\n- Preview/export as ZPT. This provides a way to learn ZPT and a base to start\n from when more complex views are needed.\n- Debug custom fields. Allow selection of content to test fields quickly.\n- Migration of views. Provide a way to make bulk changes in content from one\n listingview to another listingview. This would allow a new \"template\" to\n be created and tested and then switched in production.\n- Support customisation of batching settings.\n- Allow GET requests so that the list can act as a custom search listing\n page.\n- Support grouping.\n- Support hierarchical listing. Allow navigation portlets, sitemaps with\n additional fields. Maybe different kind of views? Maybe allow views to be\n used as fields within other views?\n- Support AJAX batching and infinite lists (auto-load next when scrolled\n down).\n- Reuse TAL on different fields. The TAL becomes a formatter function\n instead of a field; e.g. convert date or turn Title into link. Functions\n let you select with fields they apply to, or apply to whole item (i.e.\n custom field).\n- Pre-calculate custom fields, i.e. add them to catalog metadata.\n\n.. _plone.app.contentlistingtile: https://github.com/plone/plone.app.contentlistingtile\n.. _plone.app.collection: https://github.com/plone/plone.app.collection\n.. _PretaWeb: http://www.pretaweb.com\n.. _TAL expressions: http://developer.plone.org/functionality/expressions.html\n\nChangelog\n=========\n\n1.0.1 (2019-01-17)\n------------------\n\n- Fix broken release\n [instification]\n\n\n1.0 (2019-01-17)\n----------------\n\n- Make Plone 5 compatible\n [Dylan Jay, instification]\n- Fix bug where collections view were ignoring sort order\n [David Bain]\n- Fix exclude the navigation if it is not container or batch number is zero.\n [Ivan Teoh]\n\n1.0beta3 (2013-09-11)\n---------------------\n\n- Fix import of getSite to work with Plone 4.3\n [vangheem]\n- Removed 'location' field as it has other meaning in catalog and 'Title' gives\n you the same info\n [Dylan Jay]\n\n1.0beta2 (2013-01-31)\n---------------------\n\n- Fixed bug where can set dynamic view for 'Discussion Item'\n [Dylan Jay]\n\n1.0beta1 (2013-01-30)\n---------------------\n\n- Renamed TAL attributes. object->item (catalog metadata), context->object\n [Dylan Jay]\n- Functional tests\n [Dylan Jay]\n- Use CRUD z3cform framework and autoform so make easier to use and easier to\n replace widgets\n [Dylan Jay]\n- Make \"Restricted to types\" work\n [Dylan Jay]\n- Add date and link filters\n [Dylan Jay]\n- Views appear in display menu directly\n [Dylan Jay]\n\n1.0alpha1 (unreleased)\n----------------------\n\n- Refactor to support eea.facetednavigation\n [Dylan Jay]\n- Precompile TAL expressions before loop\n [Dylan Jay]\n- Initial version\n [Ivan Teoh]\n- Package created using templer\n [Ivan Teoh]", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/collective/collective.listingviews", "keywords": "Plone Python TTW", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "collective.listingviews", "package_url": "https://pypi.org/project/collective.listingviews/", "platform": "", "project_url": "https://pypi.org/project/collective.listingviews/", "project_urls": { "Homepage": "http://github.com/collective/collective.listingviews" }, "release_url": "https://pypi.org/project/collective.listingviews/1.0.1/", "requires_dist": null, "requires_python": "", "summary": "Listing views", "version": "1.0.1" }, "last_serial": 4709060, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "aeb4a9bd87c3059a51b29ed3fa03a637", "sha256": "8f75e8bfb47c62a5b7e1b10fa39201cb47602391fa80d453cd36128224567f14" }, "downloads": -1, "filename": "collective.listingviews-1.0.tar.gz", "has_sig": false, "md5_digest": "aeb4a9bd87c3059a51b29ed3fa03a637", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37807, "upload_time": "2019-01-17T16:35:31", "url": "https://files.pythonhosted.org/packages/d7/9a/5af7574c6cb0ed8d6fe8ccf94e76fe787901ce889251f79220e638e114c0/collective.listingviews-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "361672703dbfd8f04b3979071554a619", "sha256": "1f12ce878f7957ce1a029594b6aec44c29784ed6a69e5c10bcefad7afe4b9a97" }, "downloads": -1, "filename": "collective.listingviews-1.0.1.tar.gz", "has_sig": false, "md5_digest": "361672703dbfd8f04b3979071554a619", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60301, "upload_time": "2019-01-17T17:33:35", "url": "https://files.pythonhosted.org/packages/45/c0/ec6b00654dc464eafe4cb1d1cfec3ceaa3c82b57b2bb39e616c5d801c944/collective.listingviews-1.0.1.tar.gz" } ], "1.0beta1": [ { "comment_text": "", "digests": { "md5": "f782129ff1a9c7fe3bd3a4928ed6a278", "sha256": "46ff08b17dc1424a655c9bd26e44f00153d06ff170da92394dad55f581734875" }, "downloads": -1, "filename": "collective.listingviews-1.0beta1.tar.gz", "has_sig": false, "md5_digest": "f782129ff1a9c7fe3bd3a4928ed6a278", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 701122, "upload_time": "2013-01-30T14:37:49", "url": "https://files.pythonhosted.org/packages/46/df/1f22277832aae543f1ca180e6a07e50675f9322c785f1e7f46d4a472f0d3/collective.listingviews-1.0beta1.tar.gz" } ], "1.0beta2": [ { "comment_text": "", "digests": { "md5": "9695400e6ce765a275fd7ff5f84773d4", "sha256": "d04370e94ad410d2d98fdf7d3061ab90e73f350f2b25dc8786bcbbb6480f1576" }, "downloads": -1, "filename": "collective.listingviews-1.0beta2.tar.gz", "has_sig": false, "md5_digest": "9695400e6ce765a275fd7ff5f84773d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52803, "upload_time": "2013-01-30T16:23:18", "url": "https://files.pythonhosted.org/packages/fe/f5/0aac3fdc8b1bfe6691d6230153adbc7c1ca81fb755ff56d765f4873e6b1b/collective.listingviews-1.0beta2.tar.gz" } ], "1.0beta3": [ { "comment_text": "", "digests": { "md5": "b4f8bf1aecdff44cfd7fac105f0dcaad", "sha256": "2e2a3ea3b6022483df111b81d84dbb2dd9e990f427196ab82d9c0c5b64066e46" }, "downloads": -1, "filename": "collective.listingviews-1.0beta3.zip", "has_sig": false, "md5_digest": "b4f8bf1aecdff44cfd7fac105f0dcaad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74952, "upload_time": "2013-09-11T22:06:53", "url": "https://files.pythonhosted.org/packages/5d/65/e06c8f8ff4e662ba5b660d4e4a9abd836ffb730aa3ee2c77b2750e1b0337/collective.listingviews-1.0beta3.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "361672703dbfd8f04b3979071554a619", "sha256": "1f12ce878f7957ce1a029594b6aec44c29784ed6a69e5c10bcefad7afe4b9a97" }, "downloads": -1, "filename": "collective.listingviews-1.0.1.tar.gz", "has_sig": false, "md5_digest": "361672703dbfd8f04b3979071554a619", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60301, "upload_time": "2019-01-17T17:33:35", "url": "https://files.pythonhosted.org/packages/45/c0/ec6b00654dc464eafe4cb1d1cfec3ceaa3c82b57b2bb39e616c5d801c944/collective.listingviews-1.0.1.tar.gz" } ] }