[Checkins] SVN: megrok.z3cform.composed/ megrok.z3cform.composed initial import.

Souheil CHELFOUH souheil at chelfouh.com
Mon Sep 14 11:46:45 EDT 2009


Log message for revision 103951:
  megrok.z3cform.composed initial import.
  

Changed:
  A   megrok.z3cform.composed/branches/
  A   megrok.z3cform.composed/tags/
  A   megrok.z3cform.composed/trunk/
  A   megrok.z3cform.composed/trunk/README.txt
  A   megrok.z3cform.composed/trunk/docs/
  A   megrok.z3cform.composed/trunk/docs/HISTORY.txt
  A   megrok.z3cform.composed/trunk/setup.py
  A   megrok.z3cform.composed/trunk/src/
  A   megrok.z3cform.composed/trunk/src/megrok/
  A   megrok.z3cform.composed/trunk/src/megrok/__init__.py
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/__init__.py
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/__init__.py
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/composedform.py
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/meta.py
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/meta.zcml
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/subform.py
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/templates/
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/templates/composedform.pt
  A   megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/templates/z3cform.pt

-=-
Added: megrok.z3cform.composed/trunk/README.txt
===================================================================
--- megrok.z3cform.composed/trunk/README.txt	                        (rev 0)
+++ megrok.z3cform.composed/trunk/README.txt	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,4 @@
+Introduction
+============
+
+

Added: megrok.z3cform.composed/trunk/docs/HISTORY.txt
===================================================================
--- megrok.z3cform.composed/trunk/docs/HISTORY.txt	                        (rev 0)
+++ megrok.z3cform.composed/trunk/docs/HISTORY.txt	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,8 @@
+Changelog
+=========
+
+1.0 - Unreleased
+----------------
+
+* Initial release
+

Added: megrok.z3cform.composed/trunk/setup.py
===================================================================
--- megrok.z3cform.composed/trunk/setup.py	                        (rev 0)
+++ megrok.z3cform.composed/trunk/setup.py	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,36 @@
+from setuptools import setup, find_packages
+import os
+
+version = '0.1'
+
+setup(name='megrok.z3cform.composed',
+      version=version,
+      description="",
+      long_description=open("README.txt").read() + "\n" +
+                       open(os.path.join("docs", "HISTORY.txt")).read(),
+      classifiers=[
+        "Programming Language :: Python",
+        "Topic :: Software Development :: Libraries :: Python Modules",
+        ],
+      keywords='z3cform Grok Form',
+      author='Souheil Chelfouh',
+      author_email='trollfot at gmail.com',
+      url='',
+      license='GPL',
+      packages=find_packages('src', exclude=['ez_setup']),
+      package_dir={'': 'src'},
+      namespace_packages=['megrok', 'megrok.z3cform'],
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=[
+          'setuptools',
+          'z3c.form',
+          'megrok.z3cform.base',
+          'grokcore.view',
+          'grokcore.viewlet',
+          'zope.component',
+      ],
+      entry_points="""
+      # -*- Entry points: -*-
+      """,
+      )

Added: megrok.z3cform.composed/trunk/src/megrok/__init__.py
===================================================================
--- megrok.z3cform.composed/trunk/src/megrok/__init__.py	                        (rev 0)
+++ megrok.z3cform.composed/trunk/src/megrok/__init__.py	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)

Added: megrok.z3cform.composed/trunk/src/megrok/z3cform/__init__.py
===================================================================
--- megrok.z3cform.composed/trunk/src/megrok/z3cform/__init__.py	                        (rev 0)
+++ megrok.z3cform.composed/trunk/src/megrok/z3cform/__init__.py	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)

Added: megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/__init__.py
===================================================================
--- megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/__init__.py	                        (rev 0)
+++ megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/__init__.py	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from subform import SubForm
+from composedform import ComposedForm

Added: megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/composedform.py
===================================================================
--- megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/composedform.py	                        (rev 0)
+++ megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/composedform.py	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+import grokcore.viewlet
+import zope.component as component
+from megrok.z3cform.base import PageForm
+from z3c.form.interfaces import ISubForm
+
+
+class ComposedForm(PageForm):
+    """A more generic form which can be composed of many others.
+    """
+    grokcore.viewlet.baseclass()
+
+    template = grokcore.viewlet.PageTemplateFile('templates/composedform.pt')
+
+    def updateSubForms(self):
+        subforms = map(lambda x: x[1], component.getAdapters(
+            (self.context, self.request,  self), ISubForm))
+        subforms = grokcore.viewlet.util.sort_components(subforms)
+        self.subforms = []
+        # Update form
+        for subform in subforms:
+            if not subform.available():
+                continue
+            subform.update()
+            subform.updateForm()
+            self.subforms.append(subform)
+
+    def updateForm(self):
+        self.updateSubForms()
+        super(PageForm, self).updateForm()

Added: megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/meta.py
===================================================================
--- megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/meta.py	                        (rev 0)
+++ megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/meta.py	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+
+import martian
+import zope.component
+import grokcore.viewlet
+import grokcore.component
+from z3c.form.interfaces import ISubForm
+from megrok.z3cform.composed import SubForm
+from grokcore.view.meta.views import default_view_name
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+
+class SubFormGrokker(martian.ClassGrokker):
+    martian.component(SubForm)
+    martian.directive(grokcore.component.context)
+    martian.directive(grokcore.viewlet.layer, default=IDefaultBrowserLayer)
+    martian.directive(grokcore.viewlet.view)
+    martian.directive(grokcore.viewlet.name, get_default=default_view_name)
+
+    def grok(self, name, factory, module_info, **kw):
+        factory.module_info = module_info
+        return super(SubFormGrokker, self).grok(
+            name, factory, module_info, **kw
+            )
+
+    def execute(self, factory, config, context, layer, view, name, **kw):
+        if not factory.prefix:
+            factory.prefix = name
+        adapts = (context, layer, view)
+        config.action(
+            discriminator=('adapter', adapts, ISubForm, name),
+            callable=zope.component.provideAdapter,
+            args=(factory, adapts, ISubForm, name),
+            )
+        return True

Added: megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/meta.zcml
===================================================================
--- megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/meta.zcml	                        (rev 0)
+++ megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/meta.zcml	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,6 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:grok="http://namespaces.zope.org/grok">
+  <include package="grokcore.component" file="meta.zcml" />
+  <grok:grok package=".meta" />	
+</configure>

Added: megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/subform.py
===================================================================
--- megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/subform.py	                        (rev 0)
+++ megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/subform.py	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+
+import grokcore.view as grok
+from megrok.z3cform.base import PageForm
+from grokcore.view.meta.views import default_view_name
+from z3c.form.interfaces import ISubForm
+
+
+class SubForm(PageForm):
+    """A form going in a composed form.
+    """
+    grok.baseclass()
+    grok.implements(ISubForm)
+    
+    def __init__(self, context, request, parentForm=None):
+        self.parentForm = self.__parent__ = parentForm
+        super(PageForm, self).__init__(context, request)
+
+    def available(self):
+        return self.getContent() is not None
+
+    @property
+    def prefix(self):
+        name = grok.name.bind().get(self) or default_view_name(self)
+        return str('%s' % name)

Added: megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/templates/composedform.pt
===================================================================
--- megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/templates/composedform.pt	                        (rev 0)
+++ megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/templates/composedform.pt	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,3 @@
+<tal:repeat tal:repeat="form view/subforms"
+	    tal:replace="structure form/render">
+</tal:repeat>

Added: megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/templates/z3cform.pt
===================================================================
--- megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/templates/z3cform.pt	                        (rev 0)
+++ megrok.z3cform.composed/trunk/src/megrok/z3cform/composed/templates/z3cform.pt	2009-09-14 15:46:44 UTC (rev 103951)
@@ -0,0 +1,74 @@
+ <html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      i18n:domain="silva"
+      tal:omit-tag="">
+
+   <form action="." method="post">
+
+     <table class="listing">
+
+       <tbody>
+
+         <metal:label metal:define-macro="label">
+           <tal:label tal:define="label view/label | nothing"
+                      tal:condition="label">
+             <tr class="top-controls">
+               <td colspan="2">
+                 <h3 tal:content="label">Label</h3>
+               </td>
+             </tr>
+           </tal:label>
+         </metal:label>
+
+         <metal:widgets metal:define-macro="widgets">
+           <tal:repeat tal:repeat="widget view/widgets/values">
+             <tr class="#"
+                 tal:define="widget_odd   repeat/widget/odd;
+                             description  widget/field/description;
+                             error        widget/error;
+                             idx          repeat/widget/index"
+                 tal:attributes="class python:widget_odd and ('odd' + ' row' + str(idx))
+                                 or ('even' + ' row' + str(idx)) + (error and ' field-error' or '')">
+               <td class="designator"
+                   style="width:25%">
+                 <label tal:attributes="for widget/id"
+                        tal:content="widget/label">
+                   Field Name
+                 </label><span class="warning"
+                   tal:condition="widget/required">*</span>
+                 <p tal:condition="description" tal:content="description">
+                   Description
+                 </p>
+               </td>
+               <td class="field">
+                 <tal:error tal:condition="error"
+                            tal:content="structure error/render">
+                   Validation error.
+                 </tal:error>
+                 <tal:widget tal:content="structure widget/render">
+                   Widget.
+                 </tal:widget>
+               </td>
+             </tr>
+           </tal:repeat>
+         </metal:widgets>
+       </tbody>
+
+       <tfoot>
+         <metal:actions metal:define-macro="actions">
+           <tr class="controls" tal:condition="view/actions">
+             <td class="align-right" colspan="2">
+               <input tal:repeat="action view/actions/values | nothing"
+                      tal:replace="structure action/render" />
+             </td>
+           </tr>
+         </metal:actions>
+       </tfoot>
+
+     </table>
+
+   </form>
+
+ </html>



More information about the checkins mailing list