{ "info": { "author": "4teamwork AG", "author_email": "mailto:info@4teamwork.ch", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Framework :: Plone :: 4.3", "Framework :: Plone :: 5.1", "License :: OSI Approved :: GNU General Public License (GPL)", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. contents:: Table of Contents\n\n\nIntroduction\n============\n\n``ftw.keywordwidget`` provides three features:\n\n1. A widget, which loads select2 for better usability on single and multiselect fields.\n2. A ``ChoicePlus`` field, which allows new terms. This is prevents us from making a specific, complicated source, which allow new items.\n3. Render a additional ``New Entry`` textarea for new terms.\n4. Uses tags feature of select 2 to add new keywords.\n5. A async option to get the selectable options with the select2 ajax options.\n6. Custom templates for results and selected items\n\nThe widget supports schema.Choice, schema.Tuple and schema.List fields.\n\n\nUnicode or utf-8??\n------------------\n\nThe ICategorization behavior provided by this package depends on the plone\ndefault index \"Subject\".\nIn DX \"Subject\" is a accessor for \"subject\", which returns utf-8.\n\"subject\" itself has a property getter for \"subjects\", where the values are actually stored.\n\nThe Plone KeywordsVocabulary builds it's terms using the catalog value, which is utf-8 in case of the Subject index. By convention indexed values should be always utf-8 and DX values should always be unicode.\n\nThis actually means in the case of the KeywordsVocabulary the value needs to be stored as utf-8, because the vocabulary values are encoded as utf-8.\nThe SequenceWidget fieldToWidget converter has a sanity check included, which makes sure only field values, which are also in vocabulary are computed.\nAnd this means if you store new terms as unicode values, the whole thing falls apart. Currently the widget makes sure to work perfectly with the \"Subject\" index, which relays on utf-8 values, which is not common with DX types.\n\nBeside of the primary Use-Case, the widget also supports vocabularies, with unicode values, but this needs to be configured separately on the widget.\nNew terms are than added as unicode instead of utf-8.\n\n::\n\n directives.widget('unicode_keywords', KeywordFieldWidget, new_terms_as_unicode=True)\n unicode_keywords = schema.Tuple(\n title=u'UnicodeTags',\n value_type=ChoicePlus(\n title=u\"Multiple\",\n vocabulary='ftw.keywordwidget.UnicodeKeywordVocabulary',\n ),\n required=False,\n missing_value=(),\n )\n\n\nAsync option\n------------\n\nThe async option can only be used if the source is a IQuerySource from z3c.formwidget.query.interfaces.\nThis interface extends the ISource specification by a `search` method, which is essential for the async option.\n\nBasically if `async=True` the select2 Widget asks a search endpoint for possible options by a given search term.\nFurther the search endpoint queries the `IContentSourceBinder` defined on the field.\n\n::\n\n directives.widget('async', KeywordFieldWidget, async=True)\n async = schema.Tuple(\n title=u'Some async values',\n value_type=ChoicePlus(\n source=MySourceBinder(),\n ),\n required=False,\n missing_value=(),\n )\n\n\nPrimary Use-Case\n----------------\n\nThe widget provides the same functionality as the AT Keywordwidget with some benefits.\n\nFeatures from the AT Widget:\n\n- Protect adding new terms by a permission/role\n- Display all possible values\n- Add new terms\n\nBenefits:\n\n- Configurable select2 widget\n- Sane defaults for the Widget\n- z3c.form Widget\n- Based on the SelectWidget (No new converter, etc. needed)\n- Configurable \"add new terms permission\" per field/widget possible\n\nDemarcation\n-----------\nThere are several other z3c form widgets for plone 4.x, which provides a similar feature set, Like ``collective.z3cform.keywordwidget``, or the ``AutocompleteWidget``.\n\n- They do not fit the primary Use-Case.\n\nFurther you can configure the select2 plugin as you wish.\n\n\nCompatibility\n-------------\n\nPlone 4.3.x and 5.1.x\n\nIn Plone 5.1.x we included the select2 javascript resources in the\nkeywordwidget ones and patched things to prevent conflicts with an older\nversion of select2 included by plone itself.\nThis is a point of failure as the surrounding is changing in future!\n\nInstallation\n============\n\n- Add the package to your buildout configuration:\n\n::\n\n [instance]\n eggs +=\n ...\n ftw.keywordwidget\n\n\nUsage / Integration\n===================\n\nThis Widget is not automatically applied to all possible select fields.\nThe idea is that you integrate it where needed by your self.\n\nBut for the primary Use-Case mentioned above, there is a behavior:\n\n1. Install the ``default`` profile and the ``select2js`` profile if needed.\n2. Enable the ``ftw.keywordwidget.behavior.IKeywordCategorization`` behavior on your content type.\n\nFor some other Use-Cases you can also enable the ``ftw.keywordwidget.behavior.IKeywordUseCases`` behavior.\nThis enables a single and multi select field.\n\nCheck behaviors.py for examples:\n\n\n::\n\n from ftw.keywordwidget.widget import KeywordFieldWidget\n\n\n class IKeywordUseCases(model.Schema):\n\n directives.widget('types', KeywordFieldWidget)\n types = schema.List(\n title=u'Types',\n value_type=schema.Choice(\n title=u\"Multiple\",\n vocabulary='plone.app.vocabularies.PortalTypes',\n ),\n required=False,\n missing_value=(),\n )\n\n directives.widget('types2', KeywordFieldWidget)\n types2 = schema.Choice(\n title=u'Single type',\n vocabulary='plone.app.vocabularies.PortalTypes',\n required=False,\n missing_value=(),\n )\n\n alsoProvides(IKeywordUseCases, IFormFieldProvider)\n\n\nYou can configure select2 as you wish by giving a ``js_config`` to widget factory.\n\n::\n\n directives.widget('types',\n KeywordFieldWidget,\n js_config={'placeholder': 'Select something...'})\n\n\nThe select2 4.0.3 JS Plugin is shipped with this package.\nBut you it's not installed with the default profile, because you may already have a\nselect2 JS installed for other purpose.\nIf you need select2 you can install the ``ftw.keywordwidget Install select2 jquery plugin`` profile.\n\nTemplating\n----------\n\nYou can define your own templates for each plone-widget or you replace the default widget for\nall your used keywordwidgets.\n\nFirst of all, you need to create a new templates (take a look at the select2-documentation to\nsee what a template is in the select2-context). Wrap it into a constructor-function to get access\nto the widget itself (context-aware).\n\n.. code:: javascript\n\n function myPurpleTemplate(widget) {\n return function(data) {\n return $('').text(data.text);\n }\n }\n function myBlueTemplate(widget) {\n return function(data) {\n return $('').text(data.text);\n }\n }\n\nthen you need to register it\n\n\n.. code:: javascript\n\n $(document).on('ftwKeywordWidgetInit', function(e) {\n window.ftwKeywordWidget.registerTemplate('purple', myPurpleTemplate);\n window.ftwKeywordWidget.registerTemplate('blue', myBlueTemplate);\n });\n\n\nand use it in your desired widgets\n\n.. code:: python\n\n directives.widget('colours', KeywordFieldWidget,\n template_selection='purple'\n template_result='blue')\n colours = schema.Tuple(\n title=u'Some colours',\n value_type=ChoicePlus(source=MySourceBinder()),\n required=False,\n missing_value=(),\n )\n\nIf you wish to override the default-template, just register a template for\n\n`defaultResultTemplate` or `defaultSelectionTemplate` depending on which defaulttemplate you want to override.\n\n.. code:: javascript\n\n function myBlackTemplate(data) {\n return $('').text(data.text);\n }\n\n $(document).on('ftwKeywordWidgetInit', function(e) {\n window.ftwKeywordWidget.registerTemplate('defaultResultTemplate', myBlackTemplate);\n });\n\nDevelopment\n===========\n\n**Python:**\n\n1. Fork this repo\n2. Clone your fork\n3. Shell: ``ln -s development.cfg buidlout.cfg``\n4. Shell: ``python boostrap.py``\n5. Shell: ``bin/buildout``\n\nRun ``bin/test`` to test your changes.\n\nOr start an instance by running ``bin/instance fg``.\n\n\nLinks\n=====\n\n- Github: https://github.com/4teamwork/ftw.keywordwidget\n- Issues: https://github.com/4teamwork/ftw.keywordwidget/issues\n- Pypi: http://pypi.python.org/pypi/ftw.keywordwidget\n- Continuous integration: https://jenkins.4teamwork.ch/search?q=ftw.keywordwidget\n\n\nCopyright\n=========\n\nThis package is copyright by `4teamwork `_.\n\n``ftw.keywordwidget`` is licensed under GNU General Public License, version 2.\n\nChangelog\n=========\n\n\n2.1.1 (2019-10-17)\n------------------\n\n- Make sure terms from KeywordSearchableSource have a title. [njohner]\n- Append changelog to long_description [Nachtalb]\n\n\n2.1.0 (2019-08-20)\n------------------\n\n- Allow to use sources also not in async mode. [njohner]\n- Allow adding new terms in async mode. [njohner]\n- Fix an error where it was no longer possible to add tags after another async widget have been used. [elioschmutz]\n\n\n2.0.0 (2019-04-18)\n------------------\n\n- Add support for Plone 5.1.x. [mbaechtold]\n- Fit newer version of select2 into keywordwidget resources to prevent conflict\n with an older vers. of select2 required by plone. [mathias.leimgruber, busykoala]\n\n\n1.5.2 (2018-09-21)\n------------------\n\n- Fix french translations. [phgross]\n\n1.5.1 (2018-08-27)\n------------------\n\n- Remove improper parent of parent validations from ChoicePlus.\n [Rotonen]\n\n\n1.5.0 (2017-12-14)\n------------------\n\n- BREAKING CHANGE: Disallow setting a custom permission at widget init time.\n [Rotonen]\n\n- Move the accidentally-persisting permission check from the field to the\n widget and cache the result in the request.\n [Rotonen]\n\n\n1.4.2 (2017-11-23)\n------------------\n\n- Fix an issue where the term-lookup will fail after the form-validation.\n https://github.com/4teamwork/ftw.keywordwidget/issues/27\n [elioschmutz]\n\n\n1.4.1 (2017-11-15)\n------------------\n\n- Add event after initializing a widget.\n [elioschmutz]\n\n1.4.0 (2017-11-14)\n------------------\n\n- Add possiblity to add templates for the select2 widget.\n [elioschmutz]\n\n\n1.3.6 (2017-08-31)\n------------------\n\n- Only add terms to the new field list if it's really a new selected term.\n [mathias.leimgruber]\n\n\n1.3.5 (2017-08-31)\n------------------\n\n- Fix a bug, which I introduced in 1.3.3 and miss to catch in 1.3.4 :-( [mathias.leimgruber]\n\n\n1.3.4 (2017-08-30)\n------------------\n\n- Automatically open the search menu for single value fields. [mathias.leimgruber]\n\n- BugFix: Fix JS error on single value fields. [mathias.leimgruber]\n\n\n1.3.3 (2017-07-31)\n------------------\n\n- BugFix: No longer add items if they're not \"really\" selected.\n [mathias.leimgruber]\n\n\n1.3.2 (2017-07-11)\n------------------\n\n- Removed superfluous `for` attribute for a behavior without a `factory` configured. [phgross]\n\n\n1.3.1 (2017-06-14)\n------------------\n\n- Added french translations.\n [phgross]\n\n- BugFix: Do not use the value as id in the search endpoint.\n [mathias.leimgruber]\n\n- BugFix: Get stored terms by token not by value, since self.value stores the widget value.\n [mathias.leimgruber]\n\n\n1.3.0 (2017-05-11)\n------------------\n\n- Add testbrowser widget for Keywordwidgets with async option.\n [mathias.leimgruber]\n\n- No longer load keywordwidget JS inline in the widget.\n [mathias.leimgruber]\n\n- Implement new async option.\n [mathias.leimgruber]\n\n\n1.2.0 (2017-04-24)\n------------------\n\n- Implement new option to create new terms with unicode values instead of utf-8.\n [mathias.leimgruber]\n\n\n1.1.4 (2017-03-20)\n------------------\n\n- Always hide new entries field.\n [mathias.leimgruber]\n\n\n1.1.3 (2017-03-09)\n------------------\n\n- No longer duplicate keywords with non ascii chars. [deiferni]\n\n- Don't drop user-input when a form including the widget has validation errors. [deiferni]\n\n- Fix an issue if the user only inserts one keyword into the widget.\n [elioschmutz]\n\n- Fix selec2js profile path to select2 resources. [deiferni]\n\n\n1.1.2 (2017-03-02)\n------------------\n\n- Downgrade select2 from 4.0.3 to 4.0.2 to fix an ie11 issue.\n See https://github.com/select2/select2/issues/4525.\n [elioschmutz]\n\n- Move select2 files into a folder without a version postfix. This makes it much\n easier to upgrade/downgrade the select2 version without upgradesteps.\n [elioschmutz]\n\n\n1.1.1 (2017-02-22)\n------------------\n\n- BugFix recarding vocabularies and the tags feature of select2.\n [mathias.leimgruber]\n\n\n1.1.0 (2017-02-08)\n------------------\n\n- Add i18n helper for translations.\n [mathias.leimgruber]\n\n- Implement select2 tag option for adding new keywords.\n This hides the new keyword textarea.\n Warning: this is the new default, you can disable it by passing `tags: false`.\n [mathias.leimgruber]\n\n\n1.0.4 (2017-02-07)\n------------------\n\n- Add support for `schema.Tuple` fields.\n [mathias.leimgruber]\n\n\n1.0.3 (2016-10-04)\n------------------\n\n- Disable compression of the already minified \"select2.min.js\".\n [mbaechtold]\n\n\n1.0.2 (2016-09-28)\n------------------\n\n- Make \"add new term permission\" configurable + lawgiver support.\n [mathias.leimgruber]\n\n\n1.0.1 (2016-09-28)\n------------------\n\n- Reinitilize select2 if overlay content is replaced.\n [mathias.leimgruber]\n\n\n1.0.0 (2016-09-28)\n------------------\n\n- Init Release\n [mathias.leimgruber]", "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.keywordwidget", "keywords": "ftw keyword widget", "license": "GPL2", "maintainer": "4teamwork", "maintainer_email": "", "name": "ftw.keywordwidget", "package_url": "https://pypi.org/project/ftw.keywordwidget/", "platform": "", "project_url": "https://pypi.org/project/ftw.keywordwidget/", "project_urls": { "Homepage": "https://github.com/4teamwork/ftw.keywordwidget" }, "release_url": "https://pypi.org/project/ftw.keywordwidget/2.1.1/", "requires_dist": null, "requires_python": "", "summary": "A z3c form keyword widget using select2.", "version": "2.1.1" }, "last_serial": 5988266, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "6918afef64cf08362eec8c81c526662b", "sha256": "16b375043370d75cf222a1bfa23dd021c74ff7812ae6c0c7fd8d3d481773af7a" }, "downloads": -1, "filename": "ftw.keywordwidget-1.0.0.tar.gz", "has_sig": false, "md5_digest": "6918afef64cf08362eec8c81c526662b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123097, "upload_time": "2016-09-28T11:09:59", "url": "https://files.pythonhosted.org/packages/c1/e4/0a75e04828840b541f17eb16f1321df85fb15c838f58f6796fea12c35dc0/ftw.keywordwidget-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "0ca3b69a629902dcb9ac626d6e2007bf", "sha256": "1302d1fe7ba44ab25862c8cd55c6d8b2531bc2cf77efcb11450747e5fc47a1d9" }, "downloads": -1, "filename": "ftw.keywordwidget-1.0.1.tar.gz", "has_sig": false, "md5_digest": "0ca3b69a629902dcb9ac626d6e2007bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123128, "upload_time": "2016-09-28T12:58:54", "url": "https://files.pythonhosted.org/packages/8a/4a/73684af3e28a214bdbe303492f3775d30d45c8c397e92fbba2ee37bd7da8/ftw.keywordwidget-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "a8a520e7eaf52c81edf971903417ec91", "sha256": "77232f1673ea64fb0dbe0d6c810f82f4f863d0656940b8edeeabca057b9eacb2" }, "downloads": -1, "filename": "ftw.keywordwidget-1.0.2.tar.gz", "has_sig": false, "md5_digest": "a8a520e7eaf52c81edf971903417ec91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123346, "upload_time": "2016-09-28T13:52:28", "url": "https://files.pythonhosted.org/packages/3f/e0/68ff7c00db80ee3df5fa26fc9187ea18c46ed944f5e350dbca3706c87b42/ftw.keywordwidget-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "a453167c0f84897e9518d76dfc249174", "sha256": "c676d299c9440a19ccbecc2ebc06a5acf85da447044ab5f0720daf53d7598763" }, "downloads": -1, "filename": "ftw.keywordwidget-1.0.3.tar.gz", "has_sig": false, "md5_digest": "a453167c0f84897e9518d76dfc249174", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 124136, "upload_time": "2016-10-04T08:41:43", "url": "https://files.pythonhosted.org/packages/c7/31/43477d3f3c997cb5e8d3578cde279bb77b58e55b89aff412decaa2324ffa/ftw.keywordwidget-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "9649da178261c0e289b1b2399952d64b", "sha256": "7332cf49808dc33f0a27fbfe71d8f340f1b80ac08298a0bf933478950a8e1f1e" }, "downloads": -1, "filename": "ftw.keywordwidget-1.0.4.tar.gz", "has_sig": false, "md5_digest": "9649da178261c0e289b1b2399952d64b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 124320, "upload_time": "2017-02-07T17:25:05", "url": "https://files.pythonhosted.org/packages/a4/b4/c505f1c12a3ca24af8445b98e5f4d5f664282c825b345fd7a6e726db2bff/ftw.keywordwidget-1.0.4.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "54a94a524d7ff5ddffc35412aa1b9e96", "sha256": "cb4ea0571ce2758deb698af06896e49db77ae449111bc92deb53029a97afbf19" }, "downloads": -1, "filename": "ftw.keywordwidget-1.1.0.tar.gz", "has_sig": false, "md5_digest": "54a94a524d7ff5ddffc35412aa1b9e96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 125067, "upload_time": "2017-02-08T16:28:57", "url": "https://files.pythonhosted.org/packages/3e/1b/d65d51b59fc3312f266461543792619f507067c94ee8bbfd337e4d37c93d/ftw.keywordwidget-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "735d181aadc4308919c0a35e6b62ef45", "sha256": "59b1a54112c3fac50b50b7de8b140b0c4449b1f0b04fe88b957b7299074e30eb" }, "downloads": -1, "filename": "ftw.keywordwidget-1.1.1.tar.gz", "has_sig": false, "md5_digest": "735d181aadc4308919c0a35e6b62ef45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 125269, "upload_time": "2017-02-22T15:08:32", "url": "https://files.pythonhosted.org/packages/d8/a1/e9fa18374c151bb8d36dcd8e3ce283f546eb1f2c7f3370875f643b1fda32/ftw.keywordwidget-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "e778e9fff3b25ba8928b3276bb6ff08b", "sha256": "3c8311718edf71e1a685aa86d5a6a2ae79c3c66d1e2d3bf26c873777018f9b77" }, "downloads": -1, "filename": "ftw.keywordwidget-1.1.2.tar.gz", "has_sig": false, "md5_digest": "e778e9fff3b25ba8928b3276bb6ff08b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 122961, "upload_time": "2017-03-02T14:46:39", "url": "https://files.pythonhosted.org/packages/81/1b/4551f2005a89800158df8b0844eef2ef300b92c3f903608cf95045abd542/ftw.keywordwidget-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "7e7e9fb11ab45c0334f30dcd91ee9405", "sha256": "f4074ca49089bc5eeadda24e55dc4179e915f668fd18c6e0e7e1e6855b05568a" }, "downloads": -1, "filename": "ftw.keywordwidget-1.1.3.tar.gz", "has_sig": false, "md5_digest": "7e7e9fb11ab45c0334f30dcd91ee9405", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123827, "upload_time": "2017-03-09T11:00:52", "url": "https://files.pythonhosted.org/packages/2e/89/0b02c05c2bab3e26ba563cf94b4fa9aaaa98ca7231192c99e59c0e88da06/ftw.keywordwidget-1.1.3.tar.gz" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "bc0153ec8b1a715c0c338382493786ae", "sha256": "97132379af1d86a5fc49772e6a03cf78c5962ba16e829f32659ea287e5004f90" }, "downloads": -1, "filename": "ftw.keywordwidget-1.1.4.tar.gz", "has_sig": false, "md5_digest": "bc0153ec8b1a715c0c338382493786ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123852, "upload_time": "2017-03-20T16:34:48", "url": "https://files.pythonhosted.org/packages/51/bd/c40d0d3af0f5866096f479afabb4ca16a5345e89747170c57441ab4a9281/ftw.keywordwidget-1.1.4.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "e727ff541218cec222b90a508d0666e4", "sha256": "0fc11be2cc4311db16b58c8d0b77e326ad448d11f4214c7da6ca8148e00f7fe3" }, "downloads": -1, "filename": "ftw.keywordwidget-1.2.0.tar.gz", "has_sig": false, "md5_digest": "e727ff541218cec222b90a508d0666e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 125645, "upload_time": "2017-04-24T09:19:40", "url": "https://files.pythonhosted.org/packages/33/ad/084e0545ff554f2ad63863937266062c5f5ce223e8e4b1406bf66aa2b320/ftw.keywordwidget-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "a3c325fee7917a6e65a2d161c7a54c17", "sha256": "9f51188f1a1d415f9aaa016ed2438c488e7d675fed34c9e8701e53bdfdff4e2f" }, "downloads": -1, "filename": "ftw.keywordwidget-1.3.0.tar.gz", "has_sig": false, "md5_digest": "a3c325fee7917a6e65a2d161c7a54c17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 130062, "upload_time": "2017-05-11T07:52:59", "url": "https://files.pythonhosted.org/packages/93/c2/4f22fd16f159a41e551aa1cce002558b3ed1fb7fcf6b9cee4df42b393f28/ftw.keywordwidget-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "e694ac13af8b228da32453e1ab15eda9", "sha256": "c7351be88cc3bfccf22de7c0d50a8e838c7f2984579f97c59acaede734b7534f" }, "downloads": -1, "filename": "ftw.keywordwidget-1.3.1.zip", "has_sig": false, "md5_digest": "e694ac13af8b228da32453e1ab15eda9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 158876, "upload_time": "2017-06-14T15:19:31", "url": "https://files.pythonhosted.org/packages/fb/bb/51c1877db0bb35181d73ef5010c0dd4fc44718f3a27db45c0f93103025ea/ftw.keywordwidget-1.3.1.zip" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "451beaca807f2ee04f71f68822b4e39d", "sha256": "7fba5be9e18eb98a9870ec524f79a062a72e5107561ab1b047f4a993b3f29f2c" }, "downloads": -1, "filename": "ftw.keywordwidget-1.3.2.tar.gz", "has_sig": false, "md5_digest": "451beaca807f2ee04f71f68822b4e39d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 130433, "upload_time": "2017-07-11T09:36:02", "url": "https://files.pythonhosted.org/packages/d8/64/4cbfc21939739e4891f70b705f1966702f25a50fb019e8337da00661792b/ftw.keywordwidget-1.3.2.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "8f8d6d985ba20c8e4a9def3fd7d97cc4", "sha256": "98bd4b0d5010054d53720b991231c605fac2434ecbc07d4eecf50df03d16eee3" }, "downloads": -1, "filename": "ftw.keywordwidget-1.3.3.tar.gz", "has_sig": false, "md5_digest": "8f8d6d985ba20c8e4a9def3fd7d97cc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 130503, "upload_time": "2017-07-31T15:10:03", "url": "https://files.pythonhosted.org/packages/28/d3/0389431bdc32c90f94e8fba038f8ebabc0ace55077ba972aa8e95fa99d8b/ftw.keywordwidget-1.3.3.tar.gz" } ], "1.3.4": [ { "comment_text": "", "digests": { "md5": "03f3f3c3c927e02b0a94a71a87041485", "sha256": "f9b6a6a0b3a17638eaa44d03fdbd71e6011c17485a0a30a237f3550671fbf942" }, "downloads": -1, "filename": "ftw.keywordwidget-1.3.4.tar.gz", "has_sig": false, "md5_digest": "03f3f3c3c927e02b0a94a71a87041485", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 130600, "upload_time": "2017-08-30T08:24:12", "url": "https://files.pythonhosted.org/packages/b3/8f/c48388ce830244226abaccf2b4c3ea57f0fe0413822db52c9209541fca4f/ftw.keywordwidget-1.3.4.tar.gz" } ], "1.3.5": [ { "comment_text": "", "digests": { "md5": "9ec9a53a52f09227207714285405d370", "sha256": "0dc75c009eea13b8bbbb6ffba6250679ffd1fe6fb17dd21a8d3cd2a31aed9d3a" }, "downloads": -1, "filename": "ftw.keywordwidget-1.3.5.tar.gz", "has_sig": false, "md5_digest": "9ec9a53a52f09227207714285405d370", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 130603, "upload_time": "2017-08-31T16:10:12", "url": "https://files.pythonhosted.org/packages/be/23/a52486579b8ebc9bc290a7638b449f56aa00d78965a797e3c010212a44eb/ftw.keywordwidget-1.3.5.tar.gz" } ], "1.3.6": [ { "comment_text": "", "digests": { "md5": "bd31dfdef2b4056cbbb078d671471861", "sha256": "2fa6e7ab2ed82172c08e9a365fed7f5ba49c0aacad9a19689405fc618989b129" }, "downloads": -1, "filename": "ftw.keywordwidget-1.3.6.tar.gz", "has_sig": false, "md5_digest": "bd31dfdef2b4056cbbb078d671471861", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 130877, "upload_time": "2017-08-31T16:39:29", "url": "https://files.pythonhosted.org/packages/94/28/10107de9730eb63991e79b60dcc2ec1b6fb61f8d6f7d0db15427109520dd/ftw.keywordwidget-1.3.6.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "c57eba0b864952a7bc5742800b9a62b1", "sha256": "e4d6e0386cfdbd9f99551c8bbb36253f543b4933451b1f509c97f2de28523906" }, "downloads": -1, "filename": "ftw.keywordwidget-1.4.0.tar.gz", "has_sig": false, "md5_digest": "c57eba0b864952a7bc5742800b9a62b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 132212, "upload_time": "2017-11-14T16:00:10", "url": "https://files.pythonhosted.org/packages/66/7b/adde7506b198714d4d16512ab4813b358ad379ad95b1e129d1b6f62d7231/ftw.keywordwidget-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "d17505d28c4c4074c53fbbbeac26bef0", "sha256": "b22ae79d8ab90009baba9ddebd9e2dbf04c69eaa8de453b97ff36264f0e3510e" }, "downloads": -1, "filename": "ftw.keywordwidget-1.4.1.tar.gz", "has_sig": false, "md5_digest": "d17505d28c4c4074c53fbbbeac26bef0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 132233, "upload_time": "2017-11-15T17:15:27", "url": "https://files.pythonhosted.org/packages/4f/f0/7fa1921041ac8da09b4cc525e804f40b8cdf627b1a9780b0c46d2b1e9d27/ftw.keywordwidget-1.4.1.tar.gz" } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "020388790195d69c09bcb10c4392546c", "sha256": "1570ae2e74f8b86dd88a6207efd8d4a11f5616c176965c61e6ea938a8bfefe34" }, "downloads": -1, "filename": "ftw.keywordwidget-1.4.2.tar.gz", "has_sig": false, "md5_digest": "020388790195d69c09bcb10c4392546c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 132311, "upload_time": "2017-11-23T08:59:43", "url": "https://files.pythonhosted.org/packages/18/d8/e4061a136809e93171919470e5bfc39ef193a239403979ee6370bf32b101/ftw.keywordwidget-1.4.2.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "52d388877c43f66383ef3691a176366d", "sha256": "464a928f0813b1162b10e929c3fcfa4b7955e9ba4150c14c615562af06499da3" }, "downloads": -1, "filename": "ftw.keywordwidget-1.5.0.tar.gz", "has_sig": false, "md5_digest": "52d388877c43f66383ef3691a176366d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 134026, "upload_time": "2017-12-14T17:49:15", "url": "https://files.pythonhosted.org/packages/c3/59/214d5fcbe043684adaeafb69fc1557ddb15bd80d5ab0db2acf2395e25841/ftw.keywordwidget-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "9c3fca71242ea3f6cb03a6be747d58fc", "sha256": "cccc01851739b3c7f36c4b74a371d716a776c4ca2d2f846358eece2574f503fa" }, "downloads": -1, "filename": "ftw.keywordwidget-1.5.1.tar.gz", "has_sig": false, "md5_digest": "9c3fca71242ea3f6cb03a6be747d58fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 134131, "upload_time": "2018-08-27T15:14:41", "url": "https://files.pythonhosted.org/packages/02/f2/ea7158a8a3c2c8cf1d609a279c5a210ce8d109a5659e0c20d214dd9b839f/ftw.keywordwidget-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "20a4efab14bec001039116a7e2df505c", "sha256": "03a922ab2a3d4c0620826546e35fbe72bfe2d077104d0c9e2b80a73cc7302008" }, "downloads": -1, "filename": "ftw.keywordwidget-1.5.2.tar.gz", "has_sig": false, "md5_digest": "20a4efab14bec001039116a7e2df505c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 132601, "upload_time": "2018-09-21T11:51:16", "url": "https://files.pythonhosted.org/packages/2d/57/ba4bceddd34119d0a6c15b81ab050cadf502c4d0759ed35118d1e62b237f/ftw.keywordwidget-1.5.2.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "49a80021ba6a79414e1edadad9cc56b9", "sha256": "b7aef45fb011c7e6c5d10036c879e8ed38c4b5700e96f0639e8addc91feb4dcd" }, "downloads": -1, "filename": "ftw.keywordwidget-2.0.0.tar.gz", "has_sig": false, "md5_digest": "49a80021ba6a79414e1edadad9cc56b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 171990, "upload_time": "2019-04-18T08:46:22", "url": "https://files.pythonhosted.org/packages/5e/8a/282efad78388e057e80a0cb9ae1dfbc29dfd274fa021811c0f963bae8177/ftw.keywordwidget-2.0.0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "0caa75b4b585cba1c40c6e30c7e740b9", "sha256": "89d7ca90360fd02b9b23bc7f5e4738044b9d19bb1c2d473cd0c5e550c2da206c" }, "downloads": -1, "filename": "ftw.keywordwidget-2.1.0.tar.gz", "has_sig": false, "md5_digest": "0caa75b4b585cba1c40c6e30c7e740b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 171218, "upload_time": "2019-08-20T06:34:37", "url": "https://files.pythonhosted.org/packages/b0/07/df9c517564d6b3ae5eead3f62339b93a0c50fc54ae8b44af574adbcc0aa6/ftw.keywordwidget-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "ad0f29ba0152f0a710104c8666515863", "sha256": "bd4a861d83069f60b389698c987b97c5b88abab8aebf9456aac794d1c50f6514" }, "downloads": -1, "filename": "ftw.keywordwidget-2.1.1.tar.gz", "has_sig": false, "md5_digest": "ad0f29ba0152f0a710104c8666515863", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 174570, "upload_time": "2019-10-17T07:59:28", "url": "https://files.pythonhosted.org/packages/88/04/fcfbfa9ad74a174205e795778cfebabbf721fb946c1ae5615ea690794c5f/ftw.keywordwidget-2.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ad0f29ba0152f0a710104c8666515863", "sha256": "bd4a861d83069f60b389698c987b97c5b88abab8aebf9456aac794d1c50f6514" }, "downloads": -1, "filename": "ftw.keywordwidget-2.1.1.tar.gz", "has_sig": false, "md5_digest": "ad0f29ba0152f0a710104c8666515863", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 174570, "upload_time": "2019-10-17T07:59:28", "url": "https://files.pythonhosted.org/packages/88/04/fcfbfa9ad74a174205e795778cfebabbf721fb946c1ae5615ea690794c5f/ftw.keywordwidget-2.1.1.tar.gz" } ] }