[Zope3-checkins] CVS: Zope3/src/zope/app/utilities - definition.py:1.1.2.1 definition.pyc:1.1.2.1 definition.zcml:1.1.2.1 configure.zcml:1.1.2.7 instance.py:1.1.2.3 instance.zcml:1.1.2.2 permission_edit.pt:1.1.2.4 schema.py:1.1.2.13

Stephan Richter srichter at cosmos.phy.tufts.edu
Wed Aug 13 16:53:56 EDT 2003


Update of /cvs-repository/Zope3/src/zope/app/utilities
In directory cvs.zope.org:/tmp/cvs-serv26440/utilities

Modified Files:
      Tag: dreamcatcher-ttwschema-branch
	configure.zcml instance.py instance.zcml permission_edit.pt 
	schema.py 
Added Files:
      Tag: dreamcatcher-ttwschema-branch
	definition.py definition.pyc definition.zcml 
Log Message:
Content Component (Utility) for specifying new content components is done.


=== Added File Zope3/src/zope/app/utilities/definition.py ===
##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Content Component Definition

$Id: definition.py,v 1.1.2.1 2003/08/13 19:53:46 srichter Exp $
"""
from persistence import Persistent
from persistence.dict import PersistentDict
from zope.app.browser.form.editview import EditView
from zope.app.browser.form.submit import Update
from zope.app.component.interfacefield import InterfaceField
from zope.app.form.utility import setUpWidget
from zope.app.security.permission import PermissionField
from zope.app.services.utility import UtilityRegistration
from zope.context import ContextMethod
from zope.interface import implements, Interface, Attribute
from zope.schema import getFieldsInOrder, TextLine
from zope.security.checker import CheckerPublic
from zope.security.proxy import trustedRemoveSecurityProxy

class IContentComponent(Interface):

    name = TextLine(
        title=u"Name of Content Component Type",
        description=u"""This is the name of the document type.""",
        required=True)

    schema = InterfaceField(
        title=u"Schema",
        description=u"Specifies the schema that characterizes the document.",
        required=True)

    permissions = Attribute(
        u"A dictionary that maps set/get permissions on the schema's"
        u"fields. Entries looks as follows: {fieldname:(set_perm, get_perm)}")


class ContentComponent(Persistent):

    implements(IContentComponent)

    def __init__(self, name=u'', schema=None):
        self.name = name
        self.schema = schema
        self.permissions = PersistentDict()


class ContentComponentRegistration(UtilityRegistration):
    """Content Component Registration"""
    
    def activated(self):
        """Once activated, we have to register the new Content Object with the
        appropriate menu.
        """
        component = self.getComponent()
        component.name = self.name
    activated = ContextMethod(activated)
        
    def deactivated(self):
        """Once activated, we have to unregister the new Content Object with
        the appropriate menu."""
        component = self.getComponent()
        component.name = '<component not activated>'
    deactivated = ContextMethod(deactivated)



class ContentComponentPermissionEdit(EditView):

    def __init__(self, context, request):
        super(ContentComponentPermissionEdit, self).__init__(context, request)
        self.buildPermissionWidgets()

    def buildPermissionWidgets(self):
        schema = self.context.schema
        for name, field in getFieldsInOrder(schema):
            # Try to get current settings
            if self.context.permissions.has_key(name):
                get_perm, set_perm = self.context.permissions[name]
            else:
                get_perm, set_perm = None, None

            # Create the Accessor Permission Widget for this field
            permField = PermissionField(
                __name__=name+'_get_perm',
                title=u"Accessor Permission",
                default=CheckerPublic,
                required=False)
            setUpWidget(self, name+'_get_perm', permField, value=get_perm)

            # Create the Mutator Permission Widget for this field
            permField = PermissionField(
                __name__=name+'_set_perm',
                title=u"Mutator Permission",
                default=CheckerPublic,
                required=False)
            setUpWidget(self, name+'_set_perm', permField, value=set_perm)

    def update(self):
        status = ''

        if Update in self.request:
            status = super(ContentComponentPermissionEdit, self).update()
            self.buildPermissionWidgets()
        elif 'CHANGE' in self.request:
            schema = self.context.schema
            perms = trustedRemoveSecurityProxy(self.context.permissions)
            for name, field in getFieldsInOrder(schema):
                getPerm = getattr(self, name+'_get_perm_widget').getData()
                setPerm = getattr(self, name+'_set_perm_widget').getData()
                perms[name] = (getPerm, setPerm)
            status = 'Fields permissions mapping updated.'

        return status

    def getPermissionWidgets(self):
        schema = self.context.schema
        info = []
        for name, field in getFieldsInOrder(schema):
            field = trustedRemoveSecurityProxy(field)
            info.append(
                {'fieldName': name,
                 'fieldTitle': field.title,
                 'getter': getattr(self, name+'_get_perm_widget'),
                 'setter': getattr(self, name+'_set_perm_widget')} )
        return info


=== Added File Zope3/src/zope/app/utilities/definition.pyc ===
  <Binary-ish file>

=== Added File Zope3/src/zope/app/utilities/definition.zcml ===
<configure
  xmlns="http://namespaces.zope.org/zope"
  xmlns:browser="http://namespaces.zope.org/browser">

  <content class=".definition.ContentComponent">

    <factory
      id="utility.ContentComponent"
      permission="zope.ManageServices"
      title="Persistent Content Component"
      description="A Persistent Content Component Definition" />

    <implements
      interface="zope.app.interfaces.services.utility.ILocalUtility" />

    <implements
      interface="zope.app.interfaces.annotation.IAttributeAnnotatable" />

    <require
      permission="zope.ManageServices"
      interface=".definition.IContentComponent"
      set_schema=".definition.IContentComponent" />

  </content>

  
  <content class=".definition.ContentComponentRegistration">
    <require
      permission="zope.ManageServices"
      interface="zope.app.interfaces.services.utility.IUtilityRegistration
                 zope.app.interfaces.container.IAddNotifiable
                 zope.app.interfaces.container.IDeleteNotifiable"
      set_schema="zope.app.interfaces.services.utility.IUtilityRegistration"
      />
  </content>

  <browser:addform
      label="Content Component Definition Registration"
      for=".definition.IContentComponent"
      name="addRegistration.html"
      schema="zope.app.interfaces.services.utility.IUtilityRegistration"
      class="zope.app.browser.services.utility.AddRegistration"
      permission="zope.ManageServices"
      content_factory=".definition.ContentComponentRegistration"
      arguments="name interface componentPath"
      set_after_add="status"
      fields="name interface componentPath permission status" />


  <!-- Menu entry for "add component" menu -->
  <browser:menuItem
      for="zope.app.interfaces.container.IAdding"
      menu="add_component"
      action="utility.ContentComponent"
      title="Content Component Definition"
      description="A Persistent Content Component Definition"
      permission="zope.ManageServices"
      />

  <!-- Menu entry for "add utility" menu -->
  <browser:menuItem
      for="zope.app.interfaces.container.IAdding"
      menu="add_utility"
      action="utility.ContentComponent"
      title="Content Component Definition"
      description="A Persistent Content Component Definition"
      permission="zope.ManageServices"
      />

  <browser:editform
      schema=".definition.IContentComponent"
      name="edit.html"
      fields="schema"
      menu="zmi_views" title="Edit"
      permission="zope.ManageContent"/>

  <browser:editform
      schema=".definition.IContentComponent"
      name="editpermissions.html"
      template="permission_edit.pt"
      class=".definition.ContentComponentPermissionEdit"
      menu="zmi_views" title="Schema Permissions"
      permission="zope.ManageContent"/>

</configure>


=== Zope3/src/zope/app/utilities/configure.zcml 1.1.2.6 => 1.1.2.7 ===
--- Zope3/src/zope/app/utilities/configure.zcml:1.1.2.6	Wed Aug 13 14:31:08 2003
+++ Zope3/src/zope/app/utilities/configure.zcml	Wed Aug 13 15:53:46 2003
@@ -105,16 +105,6 @@
       attribute="edit"
    />
 
-  <browser:editform
-      schema="zope.app.interfaces.utilities.IMutableSchema"
-      name="editpermissions.html"
-      template="permission_edit.pt"
-      class=".schema.MutableSchemaPermsEdit"
-      menu="zmi_views" title="Schema Permissions"
-      label="Schema Permissions"
-      permission="zope.ManageContent"/>
-
-
   <!-- Widgets for the MutableSchemaField -->
 
   <browser:page
@@ -164,6 +154,7 @@
       class=".traversal.SchemaFieldTraverser"
       permission="zope.Public" />
 
+  <include file="definition.zcml" />
   <include file="instance.zcml" />
 
 </configure>


=== Zope3/src/zope/app/utilities/instance.py 1.1.2.2 => 1.1.2.3 ===
--- Zope3/src/zope/app/utilities/instance.py:1.1.2.2	Wed Aug 13 14:31:08 2003
+++ Zope3/src/zope/app/utilities/instance.py	Wed Aug 13 15:53:46 2003
@@ -26,11 +26,11 @@
 from zope.security.checker import CheckerPublic, Checker, defineChecker
 
 
-class IDocumentInstance(Interface):
+class IContentComponentInstance(Interface):
     """Interface describing a Conten Object Instance"""
 
     __name__ = TextLine(
-        title=u"Name of Document Type",
+        title=u"Name of Content Component Type",
         description=u"""This is the name of the document type.""",
         required=True)
 
@@ -40,12 +40,12 @@
         required=True)
 
     
-class DocumentInstance(Persistent):
+class ContentComponentInstance(Persistent):
 
-    implements(IDocumentInstance)
+    implements(IContentComponentInstance)
 
     def __init__(self, name, schema, schemaPermissions=None):
-        super(DocumentInstance, self).__init__()
+        super(ContentComponentInstance, self).__init__()
 
         # Save the name of the object
         self.__name__ = name
@@ -77,14 +77,15 @@
         if (key in ('getSchema',) or
             key.startswith('_p_') or
             key.startswith('__') or
-            key.startswith('_DocumentInstance__')):
-            return super(DocumentInstance, self).__setattr__(key, value)
+            key.startswith('_ContentComponentInstance__')):
+            return super(ContentComponentInstance, self).__setattr__(key,
+                                                                     value)
 
         is_schema_field = self.__schema is not None and \
                           key in getFields(self.__schema).keys()
 
         if is_schema_field:
-            super(DocumentInstance, self).__setattr__(key, value)
+            super(ContentComponentInstance, self).__setattr__(key, value)
         else:
             raise AttributeError, 'Attribute not available'
 
@@ -95,24 +96,24 @@
         return self.__schema
 
     def __repr__(self):
-        return '<DocumentInstance called %s>' %self.__name__
+        return '<ContentComponentInstance called %s>' %self.__name__
     
 
-def DocumentInstanceChecker(instance):
+def ContentComponentInstanceChecker(instance):
     """A function that can be registered as a Checker in defineChecker()"""
     return Checker(instance.__checker_getattr.get,
                    instance.__checker_setattr.get)
 
-defineChecker(DocumentInstance, DocumentInstanceChecker)
+defineChecker(ContentComponentInstance, ContentComponentInstanceChecker)
 
 
 from zope.app.browser.form.editview import EditView
 
-class EditDocumentView(EditView):
+class EditContentComponentView(EditView):
 
     def __init__(self, context, request):
         self.schema = context.getSchema()
         self.label = 'Edit %s' %context.__name__
-        super(EditDocumentView, self).__init__(context, request)
+        super(EditContentComponentView, self).__init__(context, request)
 
 


=== Zope3/src/zope/app/utilities/instance.zcml 1.1.2.1 => 1.1.2.2 ===
--- Zope3/src/zope/app/utilities/instance.zcml:1.1.2.1	Wed Aug 13 14:31:08 2003
+++ Zope3/src/zope/app/utilities/instance.zcml	Wed Aug 13 15:53:46 2003
@@ -2,7 +2,7 @@
   xmlns="http://namespaces.zope.org/zope"
   xmlns:browser="http://namespaces.zope.org/browser">
 
-  <content class=".instance.DocumentInstance">
+  <content class=".instance.ContentComponentInstance">
 
     <implements
       interface="zope.app.interfaces.annotation.IAttributeAnnotatable" />
@@ -12,20 +12,20 @@
   <browser:page
       name="edit.html"
       menu="zmi_views" title="Edit"
-      for=".instance.IDocumentInstance"
+      for=".instance.IContentComponentInstance"
       permission="zope.ManageContent"
-      class=".instance.EditDocumentView"
+      class=".instance.EditContentComponentView"
       attribute="generated_form" />
 
-  <!-- Directives to test the Document Instance -->
+  <!-- Directives to test the Content Component Instance -->
   <browser:addform
-      label="New Document"
-      name="AddDocument"
-      schema=".instance.IDocumentInstance"
+      label="New ContentComponent"
+      name="AddContentComponent"
+      schema=".instance.IContentComponentInstance"
       permission="zope.ManageContent"
-      content_factory=".instance.DocumentInstance"
+      content_factory=".instance.ContentComponentInstance"
       arguments="__name__ __schema__"
       fields="__name__ __schema__" 
-      menu="add_content" title="Schema Document"/>
+      menu="add_content" title="Schema Content Component"/>
 
 </configure>


=== Zope3/src/zope/app/utilities/permission_edit.pt 1.1.2.3 => 1.1.2.4 ===
--- Zope3/src/zope/app/utilities/permission_edit.pt:1.1.2.3	Wed Aug 13 12:22:57 2003
+++ Zope3/src/zope/app/utilities/permission_edit.pt	Wed Aug 13 15:53:46 2003
@@ -8,7 +8,6 @@
 
   <form action="./@@edit.html"
         tal:attributes="action request/URL" method="POST">
-    <h3 tal:content="view/label">Label</h3>
 
     <tal:block define="widgets view/getPermissionWidgets"
                condition="widgets">


=== Zope3/src/zope/app/utilities/schema.py 1.1.2.12 => 1.1.2.13 ===
--- Zope3/src/zope/app/utilities/schema.py:1.1.2.12	Wed Aug 13 12:22:57 2003
+++ Zope3/src/zope/app/utilities/schema.py	Wed Aug 13 15:53:46 2003
@@ -166,66 +166,6 @@
         return status
 
 
-class MutableSchemaPermsEdit(EditView):
-
-    def __init__(self, context, request):
-        super(MutableSchemaPermsEdit, self).__init__(context, request)
-        self.buildPermissionWidgets()
-
-    def buildPermissionWidgets(self):
-        schema = self.context
-        for name, field in getFieldsInOrder(schema):
-            # Try to get current settings
-            if self.context.schemaPermissions.has_key(name):
-                get_perm, set_perm = self.context.schemaPermissions[name]
-            else:
-                get_perm, set_perm = None, None
-
-            # Create the Accessor Permission Widget for this field
-            permField = PermissionField(
-                __name__=name+'_get_perm',
-                title=u"Accessor Permission",
-                default=CheckerPublic,
-                required=False)
-            setUpWidget(self, name+'_get_perm', permField, value=get_perm)
-
-            # Create the Mutator Permission Widget for this field
-            permField = PermissionField(
-                __name__=name+'_set_perm',
-                title=u"Mutator Permission",
-                default=CheckerPublic,
-                required=False)
-            setUpWidget(self, name+'_set_perm', permField, value=set_perm)
-
-    def update(self):
-        status = ''
-
-        if Update in self.request:
-            status = super(MutableSchemaPermsEdit, self).update()
-            self.buildPermissionWidgets()
-        elif 'CHANGE' in self.request:
-            schema = self.context
-            perms = trustedRemoveSecurityProxy(self.context.schemaPermissions)
-            for name, field in getFieldsInOrder(schema):
-                getPerm = getattr(self, name+'_get_perm_widget').getData()
-                setPerm = getattr(self, name+'_set_perm_widget').getData()
-                perms[name] = (getPerm, setPerm)
-            status = 'Fields permissions mapping updated.'
-
-        return status
-
-    def getPermissionWidgets(self):
-        schema = self.context
-        info = []
-        for name, field in getFieldsInOrder(schema):
-            field = trustedRemoveSecurityProxy(field)
-            info.append(
-                {'fieldName': name,
-                 'fieldTitle': field.title,
-                 'getter': getattr(self, name+'_get_perm_widget'),
-                 'setter': getattr(self, name+'_set_perm_widget')} )
-        return info
-
 class EditMutableSchema(EditView):
 
     def _get_schema(self):




More information about the Zope3-Checkins mailing list