{ "info": { "author": "4teamwork AG", "author_email": "mailto:info@4teamwork.ch", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Framework :: Plone :: 4.3", "Framework :: Plone :: 5.1", "Intended Audience :: Developers", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "ftw.activity\n============\n\n``ftw.activity`` provides a view with an activity stream for Plone.\n\n.. image:: https://raw.githubusercontent.com/4teamwork/ftw.activity/master/docs/screenshot.png\n\n\nHow it works\n============\n\nActivities are stored with event handlers into a custom `souper`_ catalog.\nAn activity view then renders each activity for a context (recursively) with\nactivity renderers.\n\n\nSupported events\n================\n\nThe default event handlers work for Archetypes and Dexterity objects.\n\n- Object added\n- Object changed\n- Object deleted\n- Object copied\n- Object moved\n- Workflow transition\n\n\nUsage\n=====\n\n\n- Add ``ftw.activity`` as dependency to your package (``setup.py``) or\n to your buildout configuration:\n\n::\n\n [instance]\n eggs +=\n ftw.activity\n\n- Install the generic import profile in Plone's addons control panel.\n\nOnce the package is installed there is no link to the view.\nThe view is available as ``/activity`` on any context, so you might\nwant to place a link anywhere you like or add an action.\n\n``ftw.activity`` also registers an\n`ftw.tabbedview `_\ntab with the name ``tabbedview_view-activity``.\n\n\nCustom activities\n=================\n\nCustom activities can easily be registered in the `souper`_ catalog and\nare automatically rendered:\n\n.. code:: python\n\n from ftw.activity.catalog import ActivityRecord\n from ftw.activity.catalog import get_activity_soup\n\n record = ActivityRecord(context, 'downloaded')\n get_activity_soup().add(record)\n\n\nActivity renderers\n==================\n\nThe default activity renderer renders the activity with a link to the\nobject (unless it was deleted), the event and the actor.\n\nHowever, if you want to change how activities are rendered you can easily\ndo that with a custom renderer.\nAn activity renderer is a named multi-adapter.\n\nBe aware that the renderer adapts the context where the activity view is rendered,\nnot the object on which the activity happened.\nThe reason for that is that the object may no longer exist.\n\nThe renderer must implement three methods, ``position``, ``match`` and ``render``.\nSince there may be multiple adapters which can render an activity, the ``position``\nis used to determine which renderer precedes.\nThe ``match`` method is used to ask the renderer whether he wants to render a certain\nactivity.\nIf the activity matches, it is renderered using the ``render`` method.\n\n**Warning** Be aware the the object passed to match and render may be ``None``,\nwhen the object was deleted.\n\nExample ZCML registration:\n\n.. code:: xml\n\n \n\n\nImplement the adapter (``activity.py``):\n\n.. code:: python\n\n from ftw.activity.interfaces import IActivityRenderer\n from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile\n from zope.component import adapts\n from zope.interface import implements\n from zope.interface import Interface\n\n\n class CustomActivityRenderer(object):\n implements(IActivityRenderer)\n adapts(Interface, Interface, Interface)\n\n index = ViewPageTemplateFile('templates/activity_renderer.pt')\n\n def __init__(self, context, request, view):\n self.context = context\n self.request = request\n self.view = view\n self.items = []\n\n def position(self):\n # The position of the default renderer is 1000\n return 500\n\n def match(self, activity, obj):\n return activity.attrs['portal_type'] == 'MyType'\n\n def render(self, activity, obj):\n return self.index(activity=activity, obj=obj)\n\n\nIn the template (``templates/activity_renderer.pt``) you may want to use\nthe default activity macro and extend it:\n\n.. code:: html\n\n \n \n\n
\n\n
\n
\n\n\nStore additional information on activities\n==========================================\n\nThe metadata stored on the activity record can be easily extended with an event handler:\n\n.. code:: xml\n\n \n\n.. code:: python\n\n def enhance_activity_record(event):\n record = event.activity\n obj = event.object\n record.attrs['creator'] = obj.Creator()\n\nActivity Filters\n================\n\nThere may be various custom use cases which require activities to be dropped when rendering\nthe activity view.\nFor example system activities are recorded for internal purposes which should not show\nup in the activity feed.\n\nActivities can easily be filtered by registering an ``IActivityFilter`` adapter:\n\n.. code:: xml\n\n \n\n\n.. code:: python\n\n from ftw.activity.interfaces import IActivityFilter\n from zope.component import adapts\n from zope.interface import implements\n from zope.interface import Interface\n\n\n class CustomActivityFilter(object):\n implements(IActivityFilter)\n adapts(Interface, Interface, Interface)\n\n def __init__(self, context, request, view):\n self.context = context\n self.request = request\n self.view = view\n\n def position(self):\n return 500\n\n def process(self, activities):\n for activity in activities:\n if activity.attrs['action'] == 'custom-action':\n continue\n\n yield activity\n\nThere is a default ``FilterCloseChanges`` filter, which removes succeding \"changed\" activites\nof the same object which happen in less than 1 Minute between each activity.\nThis is removes noise from the activity feed when a user edits the same object a lot in short\ntime, for example when using an external editor.\n\n\nLocal activity view\n===================\n\nThe ``@@local-activity`` view is available on any context and shows only activities\nof the current context but not its children.\n\n\nHint about Plone 5.1 testing using ftw.testing.freeze\n=====================================================\nFor some reason there is a transaction.commit() required right before using freeze (contextmanager).\nDetails might be found in https://github.com/plone/plone.restapi/pull/747\nI think it's a similar problem and maybe the transaction.commit() right before using the freeze contextmanager might circumvent the issues accidentally.\n\n\nLinks\n=====\n\n- github: https://github.com/4teamwork/ftw.activity\n- pypi: http://pypi.python.org/pypi/ftw.activity\n- CI: https://jenkins.4teamwork.ch/search?q=ftw.activity\n\n\nCopyright\n=========\n\nThis package is copyright by `4teamwork `_.\n\n``ftw.activity`` is licensed under GNU General Public License, version 2.\n\n.. _souper: https://pypi.python.org/pypi/souper\n\nChangelog\n=========\n\n\n2.5.2 (2021-02-26)\n------------------\n\n- Show plone toolbar in activity view [Nachtalb]\n\n\n2.5.1 (2019-12-14)\n------------------\n\n- Provide precompiled bundle. [tinagerber]\n\n\n2.5.0 (2019-11-11)\n------------------\n\n- Upgrade to ftw.theming (also fixes missing css on plone 5) [Nachtalb]\n\n\n2.4.0 (2019-10-29)\n------------------\n\n- Plone 5.1 support [mathias.leimgruber]\n\n- Ignore events fired by moving a plone site [raphael-s]\n\n\n2.3.2 (2017-07-03)\n------------------\n\n- Resize image in readme to fix a bug with its size on pypi [raphael-s]\n\n- Ignore events of objects without UIDs to avoid errors. [raphael-s]\n\n\n2.3.1 (2017-06-19)\n------------------\n\n- Add version constraint for node.ext.zodb <= 1.0.1 to avoid pulling in ZODB 5. [lgraf]\n\n\n2.3.0 (2016-11-23)\n------------------\n\n- Store activites for added / removed p.a.discussion comments. [jone]\n\n\n2.2.2 (2016-11-15)\n------------------\n\n- Fix error in detection of last event (More button). [jone]\n\n\n2.2.1 (2016-11-15)\n------------------\n\n- Hide \"More\" button when there are no more events. [jone]\n\n- Hide \"More\" button when there are no events. [jone]\n\n\n2.2.0 (2016-06-01)\n------------------\n\n- Optimize performance of date index by storing timestamps. [jone]\n\n\n2.1.0 (2016-03-21)\n------------------\n\n- Fix bug with collective.geo when indexing objects too early. [jone]\n\n- Fix a bug which occurred when moving objects from and to the Plone Site.\n [mbaechtold]\n\n- Fix fetching within tabbedview tabs.\n [jone]\n\n- Add an Activity Portlet\n [elioschmutz]\n\n\n2.0.0 (2015-09-30)\n------------------\n\n- Implement custom souper-based catalog for logging all activities separately.\n This allows us to also track delete activities.\n The rendering has changed completely: custom representations must be rewritten\n to the new renderer adapter.\n [jone]\n\n- Remove support for collections.\n Because the activity feed will no longer be catalog based.\n [jone]\n\n\n1.1.5 (2015-05-18)\n------------------\n\n- Fix diazo error when fetching more events.\n [jone]\n\n- disable diazo themeing for ajax responses.\n [jone]\n\n\n1.1.4 (2015-03-25)\n------------------\n\n- Fix width of too wide images.\n [Kevin Bieri]\n\n\n1.1.3 (2014-11-18)\n------------------\n\n- Fixes a bug where the activity view crashed when the modifying user is no\n longer available.\n [mbaechtold]\n\n\n1.1.2 (2014-09-24)\n------------------\n\n- Ignore comments in activity view.\n Fixes a bug where the activity view crashed when comments were added.\n [jone]\n\n\n1.1.1 (2014-09-24)\n------------------\n\n- Empty brown-bag release.\n\n1.1.0 (2014-09-04)\n------------------\n\n- Add support for collections.\n [jone]\n\n\n1.0.0 (2014-09-03)\n------------------\n\n- Initial implementation.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/4teamwork/ftw.activity", "keywords": "ftw activity feed", "license": "GPL2", "maintainer": "", "maintainer_email": "", "name": "ftw.activity", "package_url": "https://pypi.org/project/ftw.activity/", "platform": "", "project_url": "https://pypi.org/project/ftw.activity/", "project_urls": { "Homepage": "https://github.com/4teamwork/ftw.activity" }, "release_url": "https://pypi.org/project/ftw.activity/2.5.2/", "requires_dist": null, "requires_python": "", "summary": "An activity feed for Plone.", "version": "2.5.2", "yanked": false, "yanked_reason": null }, "last_serial": 13253234, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "de7df319f164a559147cd032c3270707", "sha256": "7b29342d8b5ddba1b34d7e9917b9311f443f6d3ed64a0d80988668001bccfd78" }, "downloads": -1, "filename": "ftw.activity-1.0.0.zip", "has_sig": false, "md5_digest": "de7df319f164a559147cd032c3270707", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83469, "upload_time": "2014-09-03T12:01:46", "upload_time_iso_8601": "2014-09-03T12:01:46.531656Z", "url": "https://files.pythonhosted.org/packages/ff/79/d0763b03fd0cf7ae198106f7760f80ff436c703182ca2de25f135c158470/ftw.activity-1.0.0.zip", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "80163e0eb27cd25c50ae09e67ee15523", "sha256": "bc548c338e83dc0795dfa0123e57d55b1eecb3339a901a08d1553f1a1db10bed" }, "downloads": -1, "filename": "ftw.activity-1.1.0.zip", "has_sig": false, "md5_digest": "80163e0eb27cd25c50ae09e67ee15523", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 89037, "upload_time": "2014-09-04T09:04:29", "upload_time_iso_8601": "2014-09-04T09:04:29.373510Z", "url": "https://files.pythonhosted.org/packages/92/2a/2e835b0c15265da742b4d857317d9dba5ad4ccfe9d29037e25109ca8828c/ftw.activity-1.1.0.zip", "yanked": false, "yanked_reason": null } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "3122e3f914a33bc28e0585d44d3941fd", "sha256": "9d07df2884124b26cade920126318ad4d82ea5c2547f5cb543866a7a49cb17a9" }, "downloads": -1, "filename": "ftw.activity-1.1.1.zip", "has_sig": false, "md5_digest": "3122e3f914a33bc28e0585d44d3941fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 89039, "upload_time": "2014-09-24T07:35:36", "upload_time_iso_8601": "2014-09-24T07:35:36.181214Z", "url": "https://files.pythonhosted.org/packages/41/55/6f930521bfc22b42349f41b677134fe7d365e6f8c92d40865ce1a7c2afc8/ftw.activity-1.1.1.zip", "yanked": false, "yanked_reason": null } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "c55f74b47868b04c93e7c70c906cb3bc", "sha256": "97af04bf3999d51c57f8f25000586eb51fdbd49f8f5dbfcdf90ecc234447bbd4" }, "downloads": -1, "filename": "ftw.activity-1.1.2.zip", "has_sig": false, "md5_digest": "c55f74b47868b04c93e7c70c906cb3bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 89517, "upload_time": "2014-09-24T07:40:14", "upload_time_iso_8601": "2014-09-24T07:40:14.742012Z", "url": "https://files.pythonhosted.org/packages/14/f5/b06ae1a5441a7570489b17b52d5bc5a64fe0c5438288ddb06858e29cbb4e/ftw.activity-1.1.2.zip", "yanked": false, "yanked_reason": null } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "bc70df72fd1502d95a04eca27c70fa34", "sha256": "116c6f37e13491c6fac4e64a704d0afea1cf244272ff2b400205fd44b4e48433" }, "downloads": -1, "filename": "ftw.activity-1.1.3.zip", "has_sig": false, "md5_digest": "bc70df72fd1502d95a04eca27c70fa34", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86664, "upload_time": "2014-11-18T08:34:09", "upload_time_iso_8601": "2014-11-18T08:34:09.192530Z", "url": "https://files.pythonhosted.org/packages/1a/3b/99cf13c4f5a0e40d9958456687d6cf3984d01ef60017890a841f0c6d8fda/ftw.activity-1.1.3.zip", "yanked": false, "yanked_reason": null } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "d182fe70cd03ac9ac3d75d4f266418f1", "sha256": "5835b15bcd2ea2b178d2da24d46ff9d12163bfab2fa6ac61ee39663befafdc41" }, "downloads": -1, "filename": "ftw.activity-1.1.4.zip", "has_sig": false, "md5_digest": "d182fe70cd03ac9ac3d75d4f266418f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90242, "upload_time": "2015-03-25T10:47:53", "upload_time_iso_8601": "2015-03-25T10:47:53.590525Z", "url": "https://files.pythonhosted.org/packages/df/67/fa0416b48c4dcb2cf4ce8f4ccaf1c5262406a42637f8434d3d9f2d4e1ed3/ftw.activity-1.1.4.zip", "yanked": false, "yanked_reason": null } ], "1.1.5": [ { "comment_text": "", "digests": { "md5": "1b5a8d82bd6b45f2f3fafda4b5af1c71", "sha256": "d13569503394b4f006bf315b1f04132393889a8e0b45023c1185a11ad19950ae" }, "downloads": -1, "filename": "ftw.activity-1.1.5.zip", "has_sig": false, "md5_digest": "1b5a8d82bd6b45f2f3fafda4b5af1c71", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90536, "upload_time": "2015-05-18T09:09:14", "upload_time_iso_8601": "2015-05-18T09:09:14.757078Z", "url": "https://files.pythonhosted.org/packages/9d/c3/a1abd9dab7f9749eb64873294c607cbcfb6a8a7c0bbac038791c1e80af88/ftw.activity-1.1.5.zip", "yanked": false, "yanked_reason": null } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "7dee7f1f18d13214a820c7645e169227", "sha256": "5969908214eacfc2166066315eb6b36fb16ec6dfe862c9c568989053fca19136" }, "downloads": -1, "filename": "ftw.activity-2.0.0.tar.gz", "has_sig": false, "md5_digest": "7dee7f1f18d13214a820c7645e169227", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 299004, "upload_time": "2015-09-30T13:45:37", "upload_time_iso_8601": "2015-09-30T13:45:37.614690Z", "url": "https://files.pythonhosted.org/packages/89/ee/6f06cfa428e63fd8d8d5af6446e642b101fcd98c896481b22429f5f8850b/ftw.activity-2.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "da86f37342638e4e6e4b5ca5b0921d3c", "sha256": "8788466832ae1305a66b7da960f38da092c2ade3bbdf6c9777645aee64553d74" }, "downloads": -1, "filename": "ftw.activity-2.1.0.tar.gz", "has_sig": false, "md5_digest": "da86f37342638e4e6e4b5ca5b0921d3c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 301693, "upload_time": "2016-03-21T17:25:11", "upload_time_iso_8601": "2016-03-21T17:25:11.584774Z", "url": "https://files.pythonhosted.org/packages/9d/61/bf7668e07c869b56377747158f1dc2c29a01fed4524b64dd848b7903ddae/ftw.activity-2.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "5824173125866c8969fb1668a2442d3e", "sha256": "88b87d51d08b7d3c872fc4dcf8770ba7ab21d343053d0c51b538418b5b0a5f1b" }, "downloads": -1, "filename": "ftw.activity-2.2.0.tar.gz", "has_sig": false, "md5_digest": "5824173125866c8969fb1668a2442d3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 302211, "upload_time": "2016-06-01T09:45:12", "upload_time_iso_8601": "2016-06-01T09:45:12.120085Z", "url": "https://files.pythonhosted.org/packages/ca/57/5af9a97f9a3c062451f6367e4d81e5fd814f76e64836b7703db46e8b3e14/ftw.activity-2.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "9d695ed715e4dd47f84f2800cb23ed76", "sha256": "cf83ac832526c2ff023844163ec23bd4f0e58d4913751da6000a2c9f0612bf79" }, "downloads": -1, "filename": "ftw.activity-2.2.1.tar.gz", "has_sig": false, "md5_digest": "9d695ed715e4dd47f84f2800cb23ed76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 302744, "upload_time": "2016-11-15T12:18:16", "upload_time_iso_8601": "2016-11-15T12:18:16.376332Z", "url": "https://files.pythonhosted.org/packages/61/87/c7dbc2347eef66d2c6ff60e8e83a157198142e956de8a1c6eaa6d718bcdb/ftw.activity-2.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2.2": [ { "comment_text": "", "digests": { "md5": "290977550c0d23e2e1ca296da9c73a53", "sha256": "489a2571764605ec75338205745d8c7126869b06262793ba6e105ee3cee81c09" }, "downloads": -1, "filename": "ftw.activity-2.2.2.tar.gz", "has_sig": false, "md5_digest": "290977550c0d23e2e1ca296da9c73a53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 302827, "upload_time": "2016-11-15T15:34:20", "upload_time_iso_8601": "2016-11-15T15:34:20.585310Z", "url": "https://files.pythonhosted.org/packages/35/d4/bd822222d778a66c85cfc24e4aedd3c495504a6ddbc38c911727eb4b494e/ftw.activity-2.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.3.0": [ { "comment_text": "", "digests": { "md5": "a3ad4b4896c150a713502c6c62fb7a2b", "sha256": "f06b59f999105b8139ddc18363460c729e6804c096fc00060bfc33f20cfd7f25" }, "downloads": -1, "filename": "ftw.activity-2.3.0.tar.gz", "has_sig": false, "md5_digest": "a3ad4b4896c150a713502c6c62fb7a2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 304734, "upload_time": "2016-11-23T18:32:40", "upload_time_iso_8601": "2016-11-23T18:32:40.369793Z", "url": "https://files.pythonhosted.org/packages/97/8e/33f6e31e559caa5a11539f40978963cf43c2794bfa0a6358607a19032250/ftw.activity-2.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.3.1": [ { "comment_text": "", "digests": { "md5": "b9dcc743baa16c6ca94c27fb53cfa06f", "sha256": "2a18c873588a9699497e011a1d71477a7a921439acdf649f87ce5250a8794fe8" }, "downloads": -1, "filename": "ftw.activity-2.3.1.tar.gz", "has_sig": false, "md5_digest": "b9dcc743baa16c6ca94c27fb53cfa06f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 304864, "upload_time": "2017-06-19T09:15:11", "upload_time_iso_8601": "2017-06-19T09:15:11.996914Z", "url": "https://files.pythonhosted.org/packages/50/bf/579cfd3e01f06582fca5b265e2cd778ac955800eee898ec27c2b00be746a/ftw.activity-2.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.3.2": [ { "comment_text": "", "digests": { "md5": "291e921603b7ba30999cb6c6cf16f851", "sha256": "302ea79536e750f5393bf61d2758df6804fdacdb556911a4e797a678419f9ee1" }, "downloads": -1, "filename": "ftw.activity-2.3.2.tar.gz", "has_sig": false, "md5_digest": "291e921603b7ba30999cb6c6cf16f851", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70718, "upload_time": "2017-07-03T12:51:46", "upload_time_iso_8601": "2017-07-03T12:51:46.268390Z", "url": "https://files.pythonhosted.org/packages/12/46/a4f70aabf44d8ee706fabd9aa5f5c85837ebe528d1cdb3aed0ec843eb8c4/ftw.activity-2.3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.4.0": [ { "comment_text": "", "digests": { "md5": "2b16b45ebf1ded3aa4610c1b74a473a6", "sha256": "f8db836a80cfe9a30572494be3ed85a1b0c55f02bc36e31c521503c38e07bc04" }, "downloads": -1, "filename": "ftw.activity-2.4.0.tar.gz", "has_sig": false, "md5_digest": "2b16b45ebf1ded3aa4610c1b74a473a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77708, "upload_time": "2019-10-29T07:20:46", "upload_time_iso_8601": "2019-10-29T07:20:46.493165Z", "url": "https://files.pythonhosted.org/packages/9e/22/b9dbdf1a21051a8ebda1a83059690e4709988afbe9c79cd0e596f88c4496/ftw.activity-2.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.5.0": [ { "comment_text": "", "digests": { "md5": "0a4afb7919dfde236867a89ffe7d9b0f", "sha256": "8111d620bf5b2e720a41bc33e9d1f85684d4af26c0f969d2b73bff4dbd7179b7" }, "downloads": -1, "filename": "ftw.activity-2.5.0.tar.gz", "has_sig": false, "md5_digest": "0a4afb7919dfde236867a89ffe7d9b0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78195, "upload_time": "2019-11-11T17:25:02", "upload_time_iso_8601": "2019-11-11T17:25:02.624851Z", "url": "https://files.pythonhosted.org/packages/a5/db/3a495b31a74fdebf4a2a9be7c3bb103ee6a53218672747f286570f62c617/ftw.activity-2.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.5.1": [ { "comment_text": "", "digests": { "md5": "9b81fcc2016f9c61e85efa1fcec38498", "sha256": "ddd0fe505653ffa62936ff7a9848ab45363ab1836809df51ec83dec327763a8e" }, "downloads": -1, "filename": "ftw.activity-2.5.1.tar.gz", "has_sig": false, "md5_digest": "9b81fcc2016f9c61e85efa1fcec38498", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78810, "upload_time": "2019-12-14T15:43:10", "upload_time_iso_8601": "2019-12-14T15:43:10.776074Z", "url": "https://files.pythonhosted.org/packages/7d/a5/8c54270984521ba0648634f3afd27e999ab65a20f3a46b32126bf0dd075b/ftw.activity-2.5.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.5.2": [ { "comment_text": "", "digests": { "md5": "cde666e5225b0602c4f228566bc4ca30", "sha256": "cc093732c112f63629a8d01db29b025df2267e934cd5b0321c49630a71e4e4b5" }, "downloads": -1, "filename": "ftw.activity-2.5.2.tar.gz", "has_sig": false, "md5_digest": "cde666e5225b0602c4f228566bc4ca30", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79676, "upload_time": "2021-02-26T09:38:20", "upload_time_iso_8601": "2021-02-26T09:38:20.698860Z", "url": "https://files.pythonhosted.org/packages/96/0a/2ef9dc71087ed231a2cbdd13203415b1a2d4a0bd0562ca0d040aabc45e99/ftw.activity-2.5.2.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cde666e5225b0602c4f228566bc4ca30", "sha256": "cc093732c112f63629a8d01db29b025df2267e934cd5b0321c49630a71e4e4b5" }, "downloads": -1, "filename": "ftw.activity-2.5.2.tar.gz", "has_sig": false, "md5_digest": "cde666e5225b0602c4f228566bc4ca30", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79676, "upload_time": "2021-02-26T09:38:20", "upload_time_iso_8601": "2021-02-26T09:38:20.698860Z", "url": "https://files.pythonhosted.org/packages/96/0a/2ef9dc71087ed231a2cbdd13203415b1a2d4a0bd0562ca0d040aabc45e99/ftw.activity-2.5.2.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }