{ "info": { "author": "Asko Soukka", "author_email": "asko.soukka@iki.fi", "bugtrack_url": null, "classifiers": [ "Development Status :: 7 - Inactive", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "schema.Object made simple\r\n=========================\r\n\r\nThis package introduces an experimental proof-of-concept support for\r\nobject-fields (*zope.schema.Object*) on z3c.form and Plone for a\r\nuse-case where one desires to save schema based hierarchical data on\r\nobjects.\r\n\r\nI can't say, why anyone would like to do that (instead of mapping data\r\nto containers and items), but I hope this package provides examples,\r\nhow to make object-fields work with *plone.autoform* and Plone's\r\nKSS-validation.\r\n\r\nThis package\r\n\r\n* provides *ISubformFactory* for object-widget within *IAutoExtensibleForm*\r\n* implements simple Plone-style *input* and *display* widgets for object-field\r\n* introduces refactored KSS-validation integration with support for object-field\r\n* monkeypatches ``plone.z3cform``\\'s widget traversal to support object-widgets\r\n* overrides default *DataConverter* for *ObjectWidget*\\'s with a less invasive one\r\n* provides a simple abstract factory class to store object-fields'\r\n values as *SimpleItem*-properties.\r\n\r\nNote that this package relies on ``plone.app.z3cform`` and\r\n*IPloneFormLayer* it registers.\r\n\r\nExample of Use\r\n==============\r\n\r\nAt first we define a simple schema we'd like to re-use as a part of other schemas::\r\n\r\n from zope import schema\r\n from zope.interface import invariant, Invalid\r\n\r\n from plone.directives import form\r\n\r\n from zope.i18nmessageid import MessageFactory as ZopeMessageFactory\r\n _= ZopeMessageFactory(\"my.package\")\r\n\r\n\r\n class StartBeforeEnd(Invalid):\r\n __doc__ = _(u\"The start or end date is invalid\")\r\n\r\n\r\n class IPeriod(form.Schema):\r\n start = schema.Date(\r\n title=_(u\"period_start_label\",\r\n default=u\"Period began\"),\r\n required=True\r\n )\r\n\r\n end = schema.Date(\r\n title=_(u\"period_end_label\",\r\n default=u\"Period ended\"),\r\n required=True\r\n )\r\n\r\n @invariant\r\n def validateStartEnd(data):\r\n if data.start is not None and data.end is not None:\r\n if data.start > data.end:\r\n raise StartBeforeEnd(\\\r\n _(u\"The start date must be before the end date.\"))\r\n\r\nThen we define the main schema, which re-uses the first schema::\r\n\r\n class IWorkPeriod(form.Schema):\r\n title = schema.TextLine(\r\n title=_(u\"work_title_label\",\r\n default=u\"Title\"),\r\n required=True\r\n )\r\n description = schema.TextLine(\r\n title=_(u\"work_description_label\",\r\n default=u\"Description\"),\r\n required=False\r\n )\r\n period = schema.Object(\r\n title=_(u\"work_period\",\r\n default=u\"Period\"),\r\n schema=IPeriod,\r\n required=True\r\n )\r\n\r\nFinally, we register an object factor, which creates *SimpleItem*\r\nmatching our schema for *z3c.form* to validate and store as a\r\nproperty of the actual object being created or edited::\r\n\r\n from five import grok\r\n\r\n from zope.interface import Interface\r\n\r\n from z3c.form.interfaces import IObjectFactory\r\n\r\n from jyu.formwidget.object.factory import AbstractBaseFactory\r\n\r\n from my.package.schemas import IPeriod\r\n\r\n\r\n class PeriodFactory(AbstractBaseFactory, grok.MultiAdapter):\r\n grok.provides(IObjectFactory)\r\n grok.name(\"my.package.schemas.IPeriod\")\r\n grok.adapts(Interface, Interface, Interface, Interface)\r\n\r\nTo be able to test this, you should, of course, also define and\r\nregister a new content type based on the main schema (e.g. with\r\nDexterity).\r\n\r\nChangelog\r\n=========\r\n\r\n1.0b7 - 2011-02-23\r\n------------------\r\n\r\n* Fixed datamanager to work as attribute field by default to \r\n fix problems with `plone.app.textfield` and `plone.namedfile`.\r\n\r\n1.0b6 - 2011-01-28\r\n------------------\r\n\r\n* Added note about problems of `plone.app.textfield` and `plone.namedfile`.\r\n\r\n1.0b5 - 2011-01-24\r\n------------------\r\n\r\n* Merged changes from `plone.app.z3form` (0.5.3) to `validation.py`.\r\n\r\n1.0b4 - 2011-01-19\r\n------------------\r\n\r\n* Fixed datamanager to initialize object attribute also when it\r\n already exists with None.\r\n\r\n1.0b3 - 2011-01-07\r\n------------------\r\n\r\n* Fixed validator and data converter to handle sub object field.\r\n\r\n1.0b2 - 2010-12-23\r\n------------------\r\n\r\n* Refactored to use custom DataConverter and DataManager instead of\r\n the one shipped with ``z3c.form``.\r\n\r\n1.0b1 - 2010-12-20\r\n------------------\r\n\r\n* Initial release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/jyu.formwidget.object", "keywords": "", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "jyu.formwidget.object", "package_url": "https://pypi.org/project/jyu.formwidget.object/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/jyu.formwidget.object/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pypi.python.org/pypi/jyu.formwidget.object" }, "release_url": "https://pypi.org/project/jyu.formwidget.object/1.0b7/", "requires_dist": null, "requires_python": null, "summary": "Introduces experimental schema.Object support for plone.autoform and plone.app.z3cform.", "version": "1.0b7" }, "last_serial": 977955, "releases": { "1.0b1": [ { "comment_text": "", "digests": { "md5": "507641536dbe246104e925acfaa9bbfd", "sha256": "30c7d02d1a6bab425deaeea24767165efc5179692361d2ae2ecf75b2d77b16b9" }, "downloads": -1, "filename": "jyu.formwidget.object-1.0b1.zip", "has_sig": false, "md5_digest": "507641536dbe246104e925acfaa9bbfd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15571, "upload_time": "2010-12-20T15:15:07", "url": "https://files.pythonhosted.org/packages/5a/a2/1085a4759649cf4d31118c4cb369ac4cbab9ee78c5f9e5b717855d6c034c/jyu.formwidget.object-1.0b1.zip" } ], "1.0b2": [ { "comment_text": "", "digests": { "md5": "39a896faf5972b55645a61de709e1f64", "sha256": "96c908bc608fa18ee0dec3cf1297a32d3f73042d5389d136a35243d90abf8879" }, "downloads": -1, "filename": "jyu.formwidget.object-1.0b2.zip", "has_sig": false, "md5_digest": "39a896faf5972b55645a61de709e1f64", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17964, "upload_time": "2010-12-23T13:27:04", "url": "https://files.pythonhosted.org/packages/ed/02/62653535a4ff40b8da9bf5990a1c9c82005cb39090fdd7fd45636dd621ea/jyu.formwidget.object-1.0b2.zip" } ], "1.0b3": [ { "comment_text": "", "digests": { "md5": "558e7bb8a732b4e1379679cbcce54d77", "sha256": "ea5c782e5badfefd813d61604277d2cd9bd45de23d9e9a20f62849ca78996c89" }, "downloads": -1, "filename": "jyu.formwidget.object-1.0b3.zip", "has_sig": false, "md5_digest": "558e7bb8a732b4e1379679cbcce54d77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18211, "upload_time": "2011-01-07T15:56:28", "url": "https://files.pythonhosted.org/packages/5a/3d/b55022d1f0ac3168445779abc769ca49561d1b4c0cf85b480425b8fd61a7/jyu.formwidget.object-1.0b3.zip" } ], "1.0b4": [ { "comment_text": "", "digests": { "md5": "7c2530ee1f475602dc5a35296a8fd572", "sha256": "ee7d43c5430bcc8733950dcd6885b62da789255877f0dab77052f4749d6e5d7b" }, "downloads": -1, "filename": "jyu.formwidget.object-1.0b4.zip", "has_sig": false, "md5_digest": "7c2530ee1f475602dc5a35296a8fd572", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18380, "upload_time": "2011-01-19T18:15:39", "url": "https://files.pythonhosted.org/packages/34/fc/33ff6a317221d715760acbd4295d69492939a9ac1330327bbe0f938a2b6d/jyu.formwidget.object-1.0b4.zip" } ], "1.0b5": [ { "comment_text": "", "digests": { "md5": "edf5886484709b5f315fbf40a3c73044", "sha256": "e68201a182b3545cc26ae6fa25a8e7c42f7b9066a244aa29e645710c8c8c16bd" }, "downloads": -1, "filename": "jyu.formwidget.object-1.0b5.zip", "has_sig": false, "md5_digest": "edf5886484709b5f315fbf40a3c73044", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18765, "upload_time": "2011-01-24T09:02:44", "url": "https://files.pythonhosted.org/packages/b8/36/2be70e59bbc3a87cacde9b2c98948009fc9b515af99b6c0bd595850bc001/jyu.formwidget.object-1.0b5.zip" } ], "1.0b6": [ { "comment_text": "", "digests": { "md5": "7a65d4550594fb3a7092db76e33e4536", "sha256": "4952e830340d89cab8a0f9749d666497e831c1c929317601444644c1002081ff" }, "downloads": -1, "filename": "jyu.formwidget.object-1.0b6.zip", "has_sig": false, "md5_digest": "7a65d4550594fb3a7092db76e33e4536", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20041, "upload_time": "2011-01-28T11:38:43", "url": "https://files.pythonhosted.org/packages/bc/dd/7bc4eadd7f80bdf4cef32559ac2b46fe0fa61732b8ebb29842d2383c20cf/jyu.formwidget.object-1.0b6.zip" } ], "1.0b7": [ { "comment_text": "", "digests": { "md5": "13d420042368c4c910c1d517533c9d26", "sha256": "cf80d3b420df13c4c44ee6c5406678508197e1c6ca3655f0a3077414a7d118cf" }, "downloads": -1, "filename": "jyu.formwidget.object-1.0b7.zip", "has_sig": false, "md5_digest": "13d420042368c4c910c1d517533c9d26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19024, "upload_time": "2011-02-23T08:47:58", "url": "https://files.pythonhosted.org/packages/82/1b/b0a80881892beffdceaffd31617988ef9bea16e6e203e23fb75a2a10fd49/jyu.formwidget.object-1.0b7.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "13d420042368c4c910c1d517533c9d26", "sha256": "cf80d3b420df13c4c44ee6c5406678508197e1c6ca3655f0a3077414a7d118cf" }, "downloads": -1, "filename": "jyu.formwidget.object-1.0b7.zip", "has_sig": false, "md5_digest": "13d420042368c4c910c1d517533c9d26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19024, "upload_time": "2011-02-23T08:47:58", "url": "https://files.pythonhosted.org/packages/82/1b/b0a80881892beffdceaffd31617988ef9bea16e6e203e23fb75a2a10fd49/jyu.formwidget.object-1.0b7.zip" } ] }