{
"info": {
"author": "Michael Howitz",
"author_email": "zope-dev@zope.org",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 4 - Beta",
"Environment :: Web Environment",
"Framework :: Zope :: 3",
"Intended Audience :: Developers",
"License :: OSI Approved",
"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.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: Implementation",
"Programming Language :: Python :: Implementation :: CPython",
"Topic :: Internet :: WWW/HTTP"
],
"description": ".. image:: https://travis-ci.com/zopefoundation/z3c.preference.svg?branch=master\n :target: https://travis-ci.com/zopefoundation/z3c.preference\n\n.. image:: https://coveralls.io/repos/github/zopefoundation/z3c.preference/badge.svg\n :target: https://coveralls.io/github/zopefoundation/z3c.preference\n\n.. image:: https://img.shields.io/pypi/v/z3c.preference.svg\n :target: https://pypi.org/project/z3c.preference/\n :alt: Current version on PyPI\n\n.. image:: https://img.shields.io/pypi/pyversions/z3c.preference.svg\n :target: https://pypi.org/project/z3c.preference/\n :alt: Supported Python versions\n\n\nThis packages provides a user interface for `zope.preference` using\n`z3c.pagelet` and `z3c.form`.\n\n\n.. contents::\n\nChanges\n=======\n\n\n1.0 (2018-12-21)\n----------------\n\n- Update tests to `zope.testbrowser >= 5`.\n\n- Add support for Python 3.6 and 3.7.\n\n\n0.5 (2013-03-09)\n----------------\n\n- Sorting preferences in ``CategoryEditForm`` by their `id` to stabialize\n sort order.\n\n\n0.4 (2012-04-20)\n----------------\n\n- Descriptions of preference groups are now rendered in the ``group-header``\n slot of the form above the error messages for the group.\n\n- Fixed description of version `0.3`, it actually added descriptions for\n preference categories, not preference groups.\n\n\n0.3 (2012-03-15)\n----------------\n\n- Descriptions of preference categories are now rendered in the\n ``extra-info`` slot of the form.\n\n\n0.2 (2012-02-23)\n----------------\n\n- Added form for preference categories, see `Editing preference group trees`_.\n\n\n0.1.1 (2010-07-17)\n------------------\n\n- Documented preconditions to use this package, see `Using\n z3c.preference`_.\n\n0.1.0 (2010-07-10)\n------------------\n\n- Initial Release.\n\n\nOverview\n========\n\n``z3c.preference`` renders forms in the browser for the preference\nsets which were defined using zope.preference_.\n\n.. _zope.preference: http://pypi.python.org/pypi/zope.preference\n\nUsing z3c.preference\n====================\n\nThere are some preconditions to use `z3c.preference`:\n\n* The views for the ``++preferences++`` namespace are registered for\n the layer ``z3c.preference.interfaces.IPreferenceLayer``. So you\n have to add this interface to the browser layer of your application.\n\n* Only users having the permission ``z3c.preference.EditPreference``\n are allowed to access the the preference views. So you have to add this\n permission to the users resp. roles which should be able to access\n the preferences views.\n\nEditing preferences\n===================\n\nSet up for tests\n----------------\n\nAt first we have to define a preference interface:\n\n >>> import zope.interface\n >>> import zope.schema\n >>> class IBackEndSettings(zope.interface.Interface):\n ... \"\"\"Backend User Preferences\"\"\"\n ...\n ... email = zope.schema.TextLine(\n ... title=u\"E-mail Address\",\n ... description=u\"E-mail address used to send notifications\")\n ...\n ... skin = zope.schema.Choice(\n ... title=u\"Skin\",\n ... description=u\"The skin that should be used for the back end.\",\n ... values=['Hipp', 'Lame', 'Basic'],\n ... default='Basic')\n ...\n ... showLogo = zope.schema.Bool(\n ... title=u\"Show Logo\",\n ... description=u\"Specifies whether the logo should be displayed.\",\n ... default=True)\n\nThe interface must be registered for preferences:\n\n >>> from zope.configuration import xmlconfig\n >>> import zope.preference\n >>> context = xmlconfig.file('meta.zcml', zope.preference)\n\n >>> context = xmlconfig.string('''\n ... \n ...\n ... \n ...\n ... ''', context)\n\n\nTo access the forms a browser is needed, the user must be authorized as\nthe preferences are stored in the principal annotations:\n\n>>> from zope.testbrowser.wsgi import Browser\n>>> browser = Browser()\n>>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')\n\n\nEditing preferences using browser\n---------------------------------\n\nThere is a namespace to access the preferences. On the page a form is\ndisplayed which shows the default values:\n\n>>> browser.open('http://localhost/++preferences++/BackEndSettings')\n>>> browser.getControl('E-mail Address').value\n''\n>>> browser.getControl('Skin').displayValue\n['Basic']\n>>> browser.getControl('yes').selected\nTrue\n>>> browser.getControl('no').selected\nFalse\n\nThe values can be changed and submitting the form makes them persistent:\n\n>>> browser.getControl('E-mail Address').value = 'me@example.com'\n>>> browser.getControl('Skin').displayValue = ['Hipp']\n>>> browser.getControl('no').click()\n>>> browser.getControl('Apply').click()\n\nAfter submitting the form gets displayed again and shows the changed values:\n\n>>> 'Data successfully updated.' in browser.contents\nTrue\n>>> browser.getControl('E-mail Address').value\n'me@example.com'\n>>> browser.getControl('Skin').displayValue\n['Hipp']\n>>> browser.getControl('no').selected\nTrue\n\n\nEditing preference group trees\n==============================\n\n`zope.preference` has the concept of `preference group trees`_ and\n`preference categories` to group preferences.\n\n.. _`preference group trees`: http://pypi.python.org/pypi/zope.preference#preference-group-trees\n\nIf a `preference category` is displayed using `z3c.preference` automatically\nall `preference groups` belonging to the category are rendered as groups in the\nedit form (aka ``GroupForm``).\n\n**Note:** Currently only the preference category and its *direct* children\nare rendered in the tree.\n\n\nSet up\n------\n\nAt first we have to define some preference interfaces presenting the tree. In\nthis example we think of a web application with some areas:\n\n >>> import zope.interface\n >>> import zope.schema\n >>> class IGeneralSettings(zope.interface.Interface):\n ... \"\"\"General preferences\"\"\"\n ...\n ... language = zope.schema.Choice(\n ... title=u\"Language\",\n ... description=u\"The language which should be used for display.\",\n ... values=['German', 'English', 'Russian'],\n ... default='German')\n\n >>> class IRSSSettings(zope.interface.Interface):\n ... \"\"\"Preferences for the RSS area of the application.\"\"\"\n ...\n ... number = zope.schema.Int(\n ... title=u\"Item count\",\n ... description=u\"Maximum number of items in each feed.\")\n\n >>> class ISearchSettings(zope.interface.Interface):\n ... \"\"\"Preferences for the search area of the application.\"\"\"\n ...\n ... store_searches = zope.schema.Bool(\n ... title=u\"Store searches?\",\n ... description=u\"Should searches be kept for later use?\",\n ... default=True)\n\nThe interfaces must be registered for preferences:\n\n >>> from zope.configuration import xmlconfig\n >>> import zope.preference\n >>> context = xmlconfig.file('meta.zcml', zope.preference)\n\n >>> context = xmlconfig.string('''\n ... \n ...\n ... \n ...\n ... \n ...\n ... \n ...\n ... ''', context)\n\n\nTo access the forms a browser is needed, the user must be authorized as\nthe preferences are stored in the principal annotations:\n\n>>> from zope.testbrowser.wsgi import Browser\n>>> browser = Browser()\n>>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')\n\nThe form displays the titles and descriptions of the categories:\n\n>>> browser.open('http://localhost/++preferences++/app')\n>>> print(browser.contents)\n>> browser.open('http://localhost/++preferences++/app')\n>>> browser.getControl('Language').displayValue\n['German']\n>>> browser.getControl('Item count').value\n''\n>>> browser.getControl('yes').selected\nTrue\n>>> browser.getControl('no').selected\nFalse\n\nThe values can be changed and submitting the form makes them persistent:\n\n>>> browser.getControl('Language').displayValue = ['English']\n>>> browser.getControl('Item count').value = '20'\n>>> browser.getControl('no').click()\n>>> browser.getControl('Apply').click()\n\nAfter submitting the form gets displayed again and shows the changed values:\n\n>>> 'Data successfully updated.' in browser.contents\nTrue\n>>> browser.getControl('Language').displayValue\n['English']\n>>> browser.getControl('Item count').value\n'20'\n>>> browser.getControl('no').selected\nTrue\n\n\nTo do\n=======\n\n- Document how to use it in own projects. (ZCML and skin)\n\n\n",
"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.preference",
"keywords": "zope3 bluebream z3c preference ui",
"license": "ZPL 2.1",
"maintainer": "",
"maintainer_email": "",
"name": "z3c.preference",
"package_url": "https://pypi.org/project/z3c.preference/",
"platform": "",
"project_url": "https://pypi.org/project/z3c.preference/",
"project_urls": {
"Homepage": "https://github.com/zopefoundation/z3c.preference"
},
"release_url": "https://pypi.org/project/z3c.preference/1.0/",
"requires_dist": [
"setuptools",
"z3c.form",
"z3c.formui",
"z3c.pagelet",
"zope.preference",
"zope.app.principalannotation; extra == 'test'",
"zope.app.wsgi (>=3.7); extra == 'test'",
"zope.browserresource; extra == 'test'",
"zope.login; extra == 'test'",
"zope.principalregistry; extra == 'test'",
"zope.securitypolicy; extra == 'test'",
"zope.testbrowser (>=5); extra == 'test'",
"zope.testing; extra == 'test'"
],
"requires_python": "",
"summary": "UI for zope.preference using z3c.pagelet and z3c.form.",
"version": "1.0"
},
"last_serial": 4625891,
"releases": {
"0.1.0": [
{
"comment_text": "",
"digests": {
"md5": "99fffa6e8ccb072cb85582f307988294",
"sha256": "db2a2ed506f3468e1438c0f299dabaee1bf5b0fbd19153fb5e5b7d9d993ed5f6"
},
"downloads": -1,
"filename": "z3c.preference-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "99fffa6e8ccb072cb85582f307988294",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6772,
"upload_time": "2010-07-10T22:29:26",
"url": "https://files.pythonhosted.org/packages/c3/33/6e05fbcc08b97110141afb8a4657609190a1aedce5156e00cc2833dbd228/z3c.preference-0.1.0.tar.gz"
}
],
"0.1.1": [
{
"comment_text": "",
"digests": {
"md5": "553608d059f69504475a320637cae4a1",
"sha256": "3aeaf5d7a66ece82df350ab505be6ae151c6df5c05cb68ca09642ba3af3e983e"
},
"downloads": -1,
"filename": "z3c.preference-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "553608d059f69504475a320637cae4a1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7054,
"upload_time": "2010-07-17T21:03:41",
"url": "https://files.pythonhosted.org/packages/81/89/9185042c271394a3b52655fe47284a4928dd08559c55b48c256f0e5252bd/z3c.preference-0.1.1.tar.gz"
}
],
"0.2": [
{
"comment_text": "",
"digests": {
"md5": "fe367cab02378a73429138df333508e6",
"sha256": "08e59f87f950570fd030ae0e0df224e0e8fabb41016d88c0dea39dedc72cdb7c"
},
"downloads": -1,
"filename": "z3c.preference-0.2.tar.gz",
"has_sig": false,
"md5_digest": "fe367cab02378a73429138df333508e6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 9752,
"upload_time": "2012-02-23T21:14:22",
"url": "https://files.pythonhosted.org/packages/2f/75/3e9ee7fad397a122658b67f63936cce57502b113a1d6a6006c24e7a48f09/z3c.preference-0.2.tar.gz"
}
],
"0.3": [
{
"comment_text": "",
"digests": {
"md5": "57d53f0db1aa19146b11cd16d2125ccb",
"sha256": "d63f07ec4902dac5a5437cfa2c62173ebd3d528b268a76e3c0a421618a878487"
},
"downloads": -1,
"filename": "z3c.preference-0.3.tar.gz",
"has_sig": false,
"md5_digest": "57d53f0db1aa19146b11cd16d2125ccb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10014,
"upload_time": "2012-03-15T21:51:09",
"url": "https://files.pythonhosted.org/packages/51/42/3f18480970ff01bf0c632d3f0bd718f7d90f449bb77f980837ef77151135/z3c.preference-0.3.tar.gz"
}
],
"0.4": [
{
"comment_text": "",
"digests": {
"md5": "8eb09152871f65fe0f4d60b101ad8a02",
"sha256": "72a9e91004e3f92b4b9fb967318f6ec661ccb3e6da2fba57479511eaa6ec55a2"
},
"downloads": -1,
"filename": "z3c.preference-0.4.tar.gz",
"has_sig": false,
"md5_digest": "8eb09152871f65fe0f4d60b101ad8a02",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10795,
"upload_time": "2012-04-20T21:42:24",
"url": "https://files.pythonhosted.org/packages/ca/a2/03dffb14fac4f39393c5b930c0d0d6976c73c821a795aa484bb069bb879d/z3c.preference-0.4.tar.gz"
}
],
"0.5": [
{
"comment_text": "",
"digests": {
"md5": "acc91d4bcbf23f68beaae4d79caa39ac",
"sha256": "7007f29bfc71154987105b76e37e7221bcb8f3c0d39b5a4960665cd49b9dda41"
},
"downloads": -1,
"filename": "z3c.preference-0.5.zip",
"has_sig": false,
"md5_digest": "acc91d4bcbf23f68beaae4d79caa39ac",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 24325,
"upload_time": "2013-03-09T14:04:10",
"url": "https://files.pythonhosted.org/packages/56/bb/4e3a331cc0747b34a90bed9c009cd745e3c2cda6930c0a6557b5d802330f/z3c.preference-0.5.zip"
}
],
"1.0": [
{
"comment_text": "",
"digests": {
"md5": "232b93ac5c58f3a973b741562aad787a",
"sha256": "b843693f6e8c57ebdde36c01f4fa690e569a3ed52b72902705e8564a66f828f5"
},
"downloads": -1,
"filename": "z3c.preference-1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "232b93ac5c58f3a973b741562aad787a",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 17168,
"upload_time": "2018-12-21T17:21:33",
"url": "https://files.pythonhosted.org/packages/86/d1/d4156aea034b91082a2e6b8ad47f19e15e12b386703c524b82f6377f66f6/z3c.preference-1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "044ba1f1ab3f13ac71995be90301df90",
"sha256": "2d1842395de171260f470f0e63985dea9cd0cbe125789e54010137de579416fd"
},
"downloads": -1,
"filename": "z3c.preference-1.0.tar.gz",
"has_sig": false,
"md5_digest": "044ba1f1ab3f13ac71995be90301df90",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 11633,
"upload_time": "2018-12-21T17:21:35",
"url": "https://files.pythonhosted.org/packages/50/c1/2bd4e621361d17af3fd72d04e676f885b562239595ce2c2d0624eced6c16/z3c.preference-1.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "232b93ac5c58f3a973b741562aad787a",
"sha256": "b843693f6e8c57ebdde36c01f4fa690e569a3ed52b72902705e8564a66f828f5"
},
"downloads": -1,
"filename": "z3c.preference-1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "232b93ac5c58f3a973b741562aad787a",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 17168,
"upload_time": "2018-12-21T17:21:33",
"url": "https://files.pythonhosted.org/packages/86/d1/d4156aea034b91082a2e6b8ad47f19e15e12b386703c524b82f6377f66f6/z3c.preference-1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "044ba1f1ab3f13ac71995be90301df90",
"sha256": "2d1842395de171260f470f0e63985dea9cd0cbe125789e54010137de579416fd"
},
"downloads": -1,
"filename": "z3c.preference-1.0.tar.gz",
"has_sig": false,
"md5_digest": "044ba1f1ab3f13ac71995be90301df90",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 11633,
"upload_time": "2018-12-21T17:21:35",
"url": "https://files.pythonhosted.org/packages/50/c1/2bd4e621361d17af3fd72d04e676f885b562239595ce2c2d0624eced6c16/z3c.preference-1.0.tar.gz"
}
]
}