yafowil.plone


Nameyafowil.plone JSON
Version 3.0.0 PyPI version JSON
download
home_pagehttps://github.com/bluedynamics/yafowil.plone
SummaryPlone Integration with YAFOWIL
upload_time2019-02-19 10:12:04
maintainer
docs_urlNone
authorBlueDynamics Alliance
requires_python
licenseBSD
keywords zope2 plone request response html input widgets
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            This is the **Plone Integration** for `YAFOWIL
<http://pypi.python.org/pypi/yafowil>`_


Functionality
=============


Resources Integration with GenericSetup
---------------------------------------

Addon widgets may provide custom javascripts, CSS, images and so on.

This package registers the directories containing these assets as
resource directories. Thus they can be accessed from the webbrowser.
The registration schema is ``++resource++MODULENAME/...``.

The "YAFOWIL Form Library" GS profile registers all resources related to
so called "resource groups" in the CSS and javascript registries.

This resource groups must be enabled explicitly(!). The resource groups
configuration happens via the portal registry.

You need to provide a Generic setup profile containing a ``registry.xml`` with
the resource groups configuration, e.g.::

    <!-- yafowil.widget.array -->
    <record name="yafowil.widget.array.common">
      <field type="plone.registry.field.Bool">
        <title>Array widget common resources</title>
      </field>
      <value>True</value>
    </record>

The record ``name`` maps to the resource group name.

.. note::

    The profile to register the resoures in resource registries (the default
    profile) must run AFTER the resource groups have been configured. Thus you
    are forced to use 2 profiles; one registering the resource groups, and one
    depending on the resource groups profile and the yafowil profile in it's
    ``metadata.xml``. In other words, if you add a plugin
    (like yafowil.widget.autocomplete) ``after yafowil.plone installation``
    you MUST re-install yafowil.plone in order to get new plugin's resources
    registered.

Take a look into ``registry.xml`` of the
``yafowil.plone:profiles/demoresources`` profile for more examples or consider
the referring resource providing code inside the addon widgets, usually
contained in the packages ``__init__.py`` file to get available resource
groups.


Integration with Translation
----------------------------

The package adds an translation method for Zope2 i18n messages. It's added
using by defining a global preprocessor


Request wrapper
---------------

This package registers a global preprocessor for YAFOWIL. It wraps the Zope2
request by an own request instance providing the behavior expected by YAFOWIL.
Spezial behaviors:

File Uploads provided by Zope2 as ``ZPublisher.HTTPRequest.Fileupload``
objects are turned into Dicts with the keys:

**file**
    file-like object to read data from

**filename**
    submitted name of the upload

**mimetype**
    type of the upload

**headers**
    all headers

**original**
    keeps the original ``ZPublisher.HTTPRequest.Fileupload`` object


Base Forms
----------

This package ships with base forms to be extended.

The following form base classes are available:

**yafowil.plone.form.BaseForm**
    does not define a ```__call__``` method: define a template in ZCML or a
    ```__call__``` method. It provides a method named ```render_form```
    which processes and renders the form.

**yafowil.plone.form.Form**
    renders the naked form on ``__call__``.

**yafowil.plone.form.YAMLBaseForm**
    similar to ``BaseForm`` above. Expects properties ``form_template``
    pointing to a YAML file and ``message_factory`` providing the message
    factory used for YAML message strings.

**yafowil.plone.form.YAMLForm**
    similar to ``YAMLBaseForm`` renders the naked YAML form on ``__call__``.

Concrete implementation may look like::

    >>> from yafowil.base import factory
    >>> from yafowil.plone.form import Form

    >>> class MyForm(Form):
    ...     action_resource = '@@view_name_callable_by_browser'
    ...
    ...     def prepare(self):
    ...         form = factory(
    ...             'form',
    ...             name='myform',
    ...             props={
    ...                 'action': self.form_action,
    ...             })
    ...
    ...         # form widgets creation here...
    ...
    ...         self.form = form

Convenience for creating YAML forms::

    >>> from zope.i18nmessageid import MessageFactory
    >>> from yafowil.plone.form import YAMLBaseForm

    >>> class MyYAMLForm(YAMLBaseForm):
    ...     action_resource = '@@view_name_callable_by_browser'
    ...     form_template = 'package.name:forms/myform.yaml'
    ...     message_factory = MessageFactory('package.name')

Form classes inherit from ``Products.Five.BrowserPage``, thus they
must be registered via ZCML ``browser:page`` directive::

    <browser:page
      for="*"
      name="form_registration_name"
      class=".forms.MyYAMLForm"
      template="myyamlform.pt"
      permission="cmf.ModifyPortalContent"
    />

Forms build with this base form classes need a template in
order to insert such a form in a layout. It must be called inside a
wrapper template ```myform.yaml```::

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
          xmlns:tal="http://xml.zope.org/namespaces/tal"
          xmlns:metal="http://xml.zope.org/namespaces/metal"
          xmlns:i18n="http://xml.zope.org/namespaces/i18n"
          lang="en"
          metal:use-macro="context/main_template/macros/master"
          i18n:domain="package.name">
      <body>
        <metal:content-core fill-slot="content-core">
          <metal:block define-macro="content-core">
            <tal:form replace="structure view/render_form" />
          </metal:block>
        </metal:content-core>
      </body>
    </html>


In Plone 5.x,
when not using one of the BaseForms,
the **CSS/JS resources for YAFOWIL are not loaded** automatically.

Add the following lines in order to load it::

    from Products.CMFPlone.resources import add_bundle_on_request

    ...

    class MyViewWithYafowil(BrowserView):

    def __init__(self, context, request):
        super(MyViewWithYafowil, self).__init__(context, request)
        add_bundle_on_request(request, 'yafowil')


Detailed Documentation
======================

If you're interested to dig deeper: The
`detailed YAFOWIL documentation <http://yafowil.info>`_ is available.
Read it and learn how to create your example application with YAFOWIL.


Source Code
===========

The sources are in a GIT DVCS with its main branches at
`github <http://github.com/bluedynamics/yafowil.plone>`_.


Contributors
============

- Jens W. Klein <jens [at] bluedynamics [dot] com>

- Peter Holzer <hpeter [at] agitator [dot] com>

- Benjamin Stefaner <bs [at] kleinundpartner [dot] at>

- Robert Niederreiter <rnix [at] squarewave [dot] at>

History
=======

3.0.0 (2019-02-19)
------------------

- Add resources explicit in pages using YAFOWIL.
  Do not deliver the CSS/JS chunk on every request.
  Code using yafoil w/o the ``yafowil.plone.form.*`` as base class need a minimal modification.
  See README.
  [jensens]

- Use ``self.context`` instead of ``context`` in ``CSRFProtectionBehavior``
  when looking up fallback root key manager.
  [rnix]

- Deliver resources as `plone.stableResource` to cache JS/CSS in browser.
  [jensens]

- Python 3 support:
  [reinhardt]

  - Replaced UserDict
  - Replaced old-style relative import
  - Fixed StringIO import
  - Fixed text handling

- Deliver jqueryui on request and remove dependency on collective.js.jqueryui
  [agitator]

2.4.1 (2017-03-10)
------------------

- Reduce logging verbosity on load from info to debug.
  [jensens]


2.4.0 (2017-03-10)
------------------

- Introduce ``yafowil.plone.form.CSRFProtectionBehavior``.
  [rnix]


2.3.1 (2016-09-14)
------------------

- Fix yafowil dependency minimal version
  [jensens]


2.3 (2016-09-09)
----------------

- Use ``yafowil.utils.entry_point`` decorator.
  [rnix]

- Plone 5 support.
  [rnix]


2.2 (2015-10-10)
----------------

- Use ``pkg_resources.get_distribution`` instead of catching ``ImportError``
  to check whether TinyMCE is installed.
  [rnix]

- Make dependency on Products.TinyMCE a soft dependency.
  [thet]


2.1 (2013-06-03)
----------------

- Set applyPrefix for CSS resources to True, so that referenced images can
  still be found.
  [thet, 2014-05-06]

- Integrate translations.
  [rnix, 2014-05-01]


2.0.2
-----

- fix resource group names
  [thet]

- correct getSite import, cleanup
  [thet]

2.0.1
-----

- Provdide default ``title`` attribute value for ``richtext`` blueprint of
  ``yafowil.widget.richtext`` addon widget in order to provide ``TinyMCE``
  configuration as expected by plone integration.
  [rnix]

2.0
---

- YAFOWIL resource including configuration via generic setup.
  [rnix, 2012-10-03]

1.3.1
-----

- Simplify base forms for plone.
  [jensens, 2012-05-21]

- Not ZIP safe!
  [jensens, 2012-04-15]

1.3
---

- GS profile marker - fix wrong filename.
  [rnix, 2012-04-11]

- Add ``yafowil.plone.form`` module containing base classes.
  [rnix, 2012-04-11]


1.2
---

- Rename to yafowil.plone - seems a 2 at the end of a package name confuses
  easy_install. wtf!?
  [jensens, 2012-03-20]


1.1
---

- Depend on yafowil 1.3 in setup.py and bump version.
  [jensens, 2012-03-20]


1.0
---

- Resources are registered using the new plugin infrastructure.
  Theres now an import step for generic setup registering all javascripts and
  stylesheets provided by the plugins. They are registred without any
  thirdparty dependencies. If a resource is already registered its registration
  is skipped. Such its possible to register or overide the defaults using xml
  files.
  [jensens, 2012-02-01]

- Automatic browserresources for plugins.
  [jensens, 2012-02-16]

- Depends on yafowil 1.3 plugin infrastucture.
  [jensens, 2012-02-15]

- Example form and senseful default-classes and plans for plone.
  [hpeter, bennyboy, 2012-02-15]


1.0-beta
--------

- Made it work.
  [jensens, rnix, et al, 2010-12-27]

License
=======

Copyright (c) 2010-2016, BlueDynamics Alliance, Austria
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this 
  list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this 
  list of conditions and the following disclaimer in the documentation and/or 
  other materials provided with the distribution.
* Neither the name of the BlueDynamics Alliance nor the names of its 
  contributors may be used to endorse or promote products derived from this 
  software without specific prior written permission.
      
THIS SOFTWARE IS PROVIDED BY BlueDynamics Alliance ``AS IS`` AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL BlueDynamics Alliance BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/bluedynamics/yafowil.plone",
    "name": "yafowil.plone",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "zope2 plone request response html input widgets",
    "author": "BlueDynamics Alliance",
    "author_email": "dev@bluedynamics.com",
    "download_url": "https://files.pythonhosted.org/packages/88/cc/a90f9ca54bcf8c1bb0e5efd14979e58f4d5e95910dfa703f8f8e9b2908ff/yafowil.plone-3.0.0.tar.gz",
    "platform": "",
    "description": "This is the **Plone Integration** for `YAFOWIL\n<http://pypi.python.org/pypi/yafowil>`_\n\n\nFunctionality\n=============\n\n\nResources Integration with GenericSetup\n---------------------------------------\n\nAddon widgets may provide custom javascripts, CSS, images and so on.\n\nThis package registers the directories containing these assets as\nresource directories. Thus they can be accessed from the webbrowser.\nThe registration schema is ``++resource++MODULENAME/...``.\n\nThe \"YAFOWIL Form Library\" GS profile registers all resources related to\nso called \"resource groups\" in the CSS and javascript registries.\n\nThis resource groups must be enabled explicitly(!). The resource groups\nconfiguration happens via the portal registry.\n\nYou need to provide a Generic setup profile containing a ``registry.xml`` with\nthe resource groups configuration, e.g.::\n\n    <!-- yafowil.widget.array -->\n    <record name=\"yafowil.widget.array.common\">\n      <field type=\"plone.registry.field.Bool\">\n        <title>Array widget common resources</title>\n      </field>\n      <value>True</value>\n    </record>\n\nThe record ``name`` maps to the resource group name.\n\n.. note::\n\n    The profile to register the resoures in resource registries (the default\n    profile) must run AFTER the resource groups have been configured. Thus you\n    are forced to use 2 profiles; one registering the resource groups, and one\n    depending on the resource groups profile and the yafowil profile in it's\n    ``metadata.xml``. In other words, if you add a plugin\n    (like yafowil.widget.autocomplete) ``after yafowil.plone installation``\n    you MUST re-install yafowil.plone in order to get new plugin's resources\n    registered.\n\nTake a look into ``registry.xml`` of the\n``yafowil.plone:profiles/demoresources`` profile for more examples or consider\nthe referring resource providing code inside the addon widgets, usually\ncontained in the packages ``__init__.py`` file to get available resource\ngroups.\n\n\nIntegration with Translation\n----------------------------\n\nThe package adds an translation method for Zope2 i18n messages. It's added\nusing by defining a global preprocessor\n\n\nRequest wrapper\n---------------\n\nThis package registers a global preprocessor for YAFOWIL. It wraps the Zope2\nrequest by an own request instance providing the behavior expected by YAFOWIL.\nSpezial behaviors:\n\nFile Uploads provided by Zope2 as ``ZPublisher.HTTPRequest.Fileupload``\nobjects are turned into Dicts with the keys:\n\n**file**\n    file-like object to read data from\n\n**filename**\n    submitted name of the upload\n\n**mimetype**\n    type of the upload\n\n**headers**\n    all headers\n\n**original**\n    keeps the original ``ZPublisher.HTTPRequest.Fileupload`` object\n\n\nBase Forms\n----------\n\nThis package ships with base forms to be extended.\n\nThe following form base classes are available:\n\n**yafowil.plone.form.BaseForm**\n    does not define a ```__call__``` method: define a template in ZCML or a\n    ```__call__``` method. It provides a method named ```render_form```\n    which processes and renders the form.\n\n**yafowil.plone.form.Form**\n    renders the naked form on ``__call__``.\n\n**yafowil.plone.form.YAMLBaseForm**\n    similar to ``BaseForm`` above. Expects properties ``form_template``\n    pointing to a YAML file and ``message_factory`` providing the message\n    factory used for YAML message strings.\n\n**yafowil.plone.form.YAMLForm**\n    similar to ``YAMLBaseForm`` renders the naked YAML form on ``__call__``.\n\nConcrete implementation may look like::\n\n    >>> from yafowil.base import factory\n    >>> from yafowil.plone.form import Form\n\n    >>> class MyForm(Form):\n    ...     action_resource = '@@view_name_callable_by_browser'\n    ...\n    ...     def prepare(self):\n    ...         form = factory(\n    ...             'form',\n    ...             name='myform',\n    ...             props={\n    ...                 'action': self.form_action,\n    ...             })\n    ...\n    ...         # form widgets creation here...\n    ...\n    ...         self.form = form\n\nConvenience for creating YAML forms::\n\n    >>> from zope.i18nmessageid import MessageFactory\n    >>> from yafowil.plone.form import YAMLBaseForm\n\n    >>> class MyYAMLForm(YAMLBaseForm):\n    ...     action_resource = '@@view_name_callable_by_browser'\n    ...     form_template = 'package.name:forms/myform.yaml'\n    ...     message_factory = MessageFactory('package.name')\n\nForm classes inherit from ``Products.Five.BrowserPage``, thus they\nmust be registered via ZCML ``browser:page`` directive::\n\n    <browser:page\n      for=\"*\"\n      name=\"form_registration_name\"\n      class=\".forms.MyYAMLForm\"\n      template=\"myyamlform.pt\"\n      permission=\"cmf.ModifyPortalContent\"\n    />\n\nForms build with this base form classes need a template in\norder to insert such a form in a layout. It must be called inside a\nwrapper template ```myform.yaml```::\n\n    <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\"\n          xmlns:tal=\"http://xml.zope.org/namespaces/tal\"\n          xmlns:metal=\"http://xml.zope.org/namespaces/metal\"\n          xmlns:i18n=\"http://xml.zope.org/namespaces/i18n\"\n          lang=\"en\"\n          metal:use-macro=\"context/main_template/macros/master\"\n          i18n:domain=\"package.name\">\n      <body>\n        <metal:content-core fill-slot=\"content-core\">\n          <metal:block define-macro=\"content-core\">\n            <tal:form replace=\"structure view/render_form\" />\n          </metal:block>\n        </metal:content-core>\n      </body>\n    </html>\n\n\nIn Plone 5.x,\nwhen not using one of the BaseForms,\nthe **CSS/JS resources for YAFOWIL are not loaded** automatically.\n\nAdd the following lines in order to load it::\n\n    from Products.CMFPlone.resources import add_bundle_on_request\n\n    ...\n\n    class MyViewWithYafowil(BrowserView):\n\n    def __init__(self, context, request):\n        super(MyViewWithYafowil, self).__init__(context, request)\n        add_bundle_on_request(request, 'yafowil')\n\n\nDetailed Documentation\n======================\n\nIf you're interested to dig deeper: The\n`detailed YAFOWIL documentation <http://yafowil.info>`_ is available.\nRead it and learn how to create your example application with YAFOWIL.\n\n\nSource Code\n===========\n\nThe sources are in a GIT DVCS with its main branches at\n`github <http://github.com/bluedynamics/yafowil.plone>`_.\n\n\nContributors\n============\n\n- Jens W. Klein <jens [at] bluedynamics [dot] com>\n\n- Peter Holzer <hpeter [at] agitator [dot] com>\n\n- Benjamin Stefaner <bs [at] kleinundpartner [dot] at>\n\n- Robert Niederreiter <rnix [at] squarewave [dot] at>\n\nHistory\n=======\n\n3.0.0 (2019-02-19)\n------------------\n\n- Add resources explicit in pages using YAFOWIL.\n  Do not deliver the CSS/JS chunk on every request.\n  Code using yafoil w/o the ``yafowil.plone.form.*`` as base class need a minimal modification.\n  See README.\n  [jensens]\n\n- Use ``self.context`` instead of ``context`` in ``CSRFProtectionBehavior``\n  when looking up fallback root key manager.\n  [rnix]\n\n- Deliver resources as `plone.stableResource` to cache JS/CSS in browser.\n  [jensens]\n\n- Python 3 support:\n  [reinhardt]\n\n  - Replaced UserDict\n  - Replaced old-style relative import\n  - Fixed StringIO import\n  - Fixed text handling\n\n- Deliver jqueryui on request and remove dependency on collective.js.jqueryui\n  [agitator]\n\n2.4.1 (2017-03-10)\n------------------\n\n- Reduce logging verbosity on load from info to debug.\n  [jensens]\n\n\n2.4.0 (2017-03-10)\n------------------\n\n- Introduce ``yafowil.plone.form.CSRFProtectionBehavior``.\n  [rnix]\n\n\n2.3.1 (2016-09-14)\n------------------\n\n- Fix yafowil dependency minimal version\n  [jensens]\n\n\n2.3 (2016-09-09)\n----------------\n\n- Use ``yafowil.utils.entry_point`` decorator.\n  [rnix]\n\n- Plone 5 support.\n  [rnix]\n\n\n2.2 (2015-10-10)\n----------------\n\n- Use ``pkg_resources.get_distribution`` instead of catching ``ImportError``\n  to check whether TinyMCE is installed.\n  [rnix]\n\n- Make dependency on Products.TinyMCE a soft dependency.\n  [thet]\n\n\n2.1 (2013-06-03)\n----------------\n\n- Set applyPrefix for CSS resources to True, so that referenced images can\n  still be found.\n  [thet, 2014-05-06]\n\n- Integrate translations.\n  [rnix, 2014-05-01]\n\n\n2.0.2\n-----\n\n- fix resource group names\n  [thet]\n\n- correct getSite import, cleanup\n  [thet]\n\n2.0.1\n-----\n\n- Provdide default ``title`` attribute value for ``richtext`` blueprint of\n  ``yafowil.widget.richtext`` addon widget in order to provide ``TinyMCE``\n  configuration as expected by plone integration.\n  [rnix]\n\n2.0\n---\n\n- YAFOWIL resource including configuration via generic setup.\n  [rnix, 2012-10-03]\n\n1.3.1\n-----\n\n- Simplify base forms for plone.\n  [jensens, 2012-05-21]\n\n- Not ZIP safe!\n  [jensens, 2012-04-15]\n\n1.3\n---\n\n- GS profile marker - fix wrong filename.\n  [rnix, 2012-04-11]\n\n- Add ``yafowil.plone.form`` module containing base classes.\n  [rnix, 2012-04-11]\n\n\n1.2\n---\n\n- Rename to yafowil.plone - seems a 2 at the end of a package name confuses\n  easy_install. wtf!?\n  [jensens, 2012-03-20]\n\n\n1.1\n---\n\n- Depend on yafowil 1.3 in setup.py and bump version.\n  [jensens, 2012-03-20]\n\n\n1.0\n---\n\n- Resources are registered using the new plugin infrastructure.\n  Theres now an import step for generic setup registering all javascripts and\n  stylesheets provided by the plugins. They are registred without any\n  thirdparty dependencies. If a resource is already registered its registration\n  is skipped. Such its possible to register or overide the defaults using xml\n  files.\n  [jensens, 2012-02-01]\n\n- Automatic browserresources for plugins.\n  [jensens, 2012-02-16]\n\n- Depends on yafowil 1.3 plugin infrastucture.\n  [jensens, 2012-02-15]\n\n- Example form and senseful default-classes and plans for plone.\n  [hpeter, bennyboy, 2012-02-15]\n\n\n1.0-beta\n--------\n\n- Made it work.\n  [jensens, rnix, et al, 2010-12-27]\n\nLicense\n=======\n\nCopyright (c) 2010-2016, BlueDynamics Alliance, Austria\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this \n  list of conditions and the following disclaimer.\n* Redistributions in binary form must reproduce the above copyright notice, this \n  list of conditions and the following disclaimer in the documentation and/or \n  other materials provided with the distribution.\n* Neither the name of the BlueDynamics Alliance nor the names of its \n  contributors may be used to endorse or promote products derived from this \n  software without specific prior written permission.\n      \nTHIS SOFTWARE IS PROVIDED BY BlueDynamics Alliance ``AS IS`` AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL BlueDynamics Alliance BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.",
    "bugtrack_url": null,
    "license": "BSD",
    "summary": "Plone Integration with YAFOWIL",
    "version": "3.0.0",
    "project_urls": {
        "Homepage": "https://github.com/bluedynamics/yafowil.plone"
    },
    "split_keywords": [
        "zope2",
        "plone",
        "request",
        "response",
        "html",
        "input",
        "widgets"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "88cca90f9ca54bcf8c1bb0e5efd14979e58f4d5e95910dfa703f8f8e9b2908ff",
                "md5": "580f09cb794338ec67ca3a17da6a1b4a",
                "sha256": "aa1f8aef271bc77d3adb0862afd8f3f94c0246868a9fc07afe301c228344c198"
            },
            "downloads": -1,
            "filename": "yafowil.plone-3.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "580f09cb794338ec67ca3a17da6a1b4a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 127154,
            "upload_time": "2019-02-19T10:12:04",
            "upload_time_iso_8601": "2019-02-19T10:12:04.953868Z",
            "url": "https://files.pythonhosted.org/packages/88/cc/a90f9ca54bcf8c1bb0e5efd14979e58f4d5e95910dfa703f8f8e9b2908ff/yafowil.plone-3.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2019-02-19 10:12:04",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bluedynamics",
    "github_project": "yafowil.plone",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "yafowil.plone"
}
        
Elapsed time: 0.20821s