[Erp5-report] r38976 arnaud.fontaine - /erp5/trunk/products/ERP5/Document/

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Oct 7 17:01:47 CEST 2010


Author: arnaud.fontaine
Date: Thu Oct  7 17:01:45 2010
New Revision: 38976

URL: http://svn.erp5.org?rev=38976&view=rev
Log:
Add property documents for web-based Property Sheets


Added:
    erp5/trunk/products/ERP5/Document/AcquiredProperty.py
    erp5/trunk/products/ERP5/Document/DynamicCategoryProperty.py
    erp5/trunk/products/ERP5/Document/StandardProperty.py

Added: erp5/trunk/products/ERP5/Document/AcquiredProperty.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/AcquiredProperty.py?rev=38976&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/Document/AcquiredProperty.py (added)
+++ erp5/trunk/products/ERP5/Document/AcquiredProperty.py [utf8] Thu Oct  7 17:01:45 2010
@@ -0,0 +1,113 @@
+##############################################################################
+#
+# Copyright (c) 2010 Nexedi SARL and Contributors. All Rights Reserved.
+#                    Arnaud Fontaine <arnaud.fontaine at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+
+from AccessControl import ClassSecurityInfo
+from Products.CMFCore.Expression import Expression
+
+from Products.ERP5Type import Permissions, PropertySheet
+from Products.ERP5.Document.StandardProperty import StandardProperty
+
+class AcquiredProperty(StandardProperty):
+  """
+  Define an Acquired Property Document for a web-based Property Sheet
+  (an Acquired Property only brings new attributes to a Standard
+  Property)
+  """
+  meta_type = 'ERP5 Acquired Property'
+  portal_type = 'Acquired Property'
+
+  # Declarative security
+  security = ClassSecurityInfo()
+  security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+  property_sheets = StandardProperty.property_sheets + \
+      (PropertySheet.AcquiredProperty,)
+
+  # Filesystem-based name of attributes specific to 'content' type
+  _content_type_attribute_tuple = ('portal_type',
+                                   'acquired_property_id',
+                                   'translation_acquired_property')
+
+  # Add names specific to 'content' type (see StandardProperty)
+  _name_mapping_filesystem_to_web_dict = \
+      dict([ (name, 'content_' + name,) for name in _content_type_attribute_tuple ],
+           **StandardProperty._name_mapping_filesystem_to_web_dict)
+
+  # Web-based name of attributes whose value is a TALES Expression
+  _expression_attribute_tuple = ('acquisition_portal_type',
+                                 'content_portal_type')
+
+  @staticmethod
+  def _convertValueToTalesExpression(value):
+    """
+    Convert a string value to a TALES expression for attributes listed
+    in '_expression_attribute_tuple'
+    """
+    return value is None and value or Expression(value)
+
+  security.declareProtected(Permissions.AccessContentsInformation,
+                            'exportToFilesystemDefinition')
+  def exportToFilesystemDefinition(self):
+    """
+    Return the filesystem definition of this web-based property
+    """
+    filesystem_property_dict = \
+        StandardProperty.exportToFilesystemDefinition(self)
+
+    filesystem_property_dict.update(
+      {'acquisition_base_category': self.getAcquisitionBaseCategoryList() or None,
+       'acquisition_object_id': self.getAcquisitionObjectIdList() or None,
+       'acquisition_portal_type': self._convertValueToTalesExpression(self.getAcquisitionPortalType()),
+       'acquisition_accessor_id': self.getAcquisitionAccessorId(),
+       'alt_accessor_id': self.getAltAccessorIdList() or None,
+       'acquisition_copy_value': self.getAcquisitionCopyValue(),
+       'acquisition_mask_value': self.getAcquisitionMaskValue(),
+       'portal_type': self._convertValueToTalesExpression(self.getContentPortalType()),
+       'acquired_property_id': self.getContentAcquiredPropertyIdList() or None,
+       'translation_acquired_property_id': self.getContentTranslationAcquiredPropertyIdList() or None})
+
+    return filesystem_property_dict
+
+  def _convertFromFilesytemPropertyDict(self, filesystem_property_dict):
+    """
+    Convert a property dict coming from a Property Sheet on the
+    filesystem to a web-based property dict
+    """
+    web_property_dict = StandardProperty._convertFromFilesytemPropertyDict(
+      self, filesystem_property_dict)
+
+    # Update the properties whose values are TALES Expression
+    for attribute in self._expression_attribute_tuple:
+      if attribute in web_property_dict:
+        value = isinstance(web_property_dict[attribute], Expression) and \
+            web_property_dict[attribute].text or \
+            'python: ' + repr(web_property_dict[attribute])
+
+        web_property_dict[attribute] = value
+
+    return web_property_dict

Added: erp5/trunk/products/ERP5/Document/DynamicCategoryProperty.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/DynamicCategoryProperty.py?rev=38976&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/Document/DynamicCategoryProperty.py (added)
+++ erp5/trunk/products/ERP5/Document/DynamicCategoryProperty.py [utf8] Thu Oct  7 17:01:45 2010
@@ -0,0 +1,64 @@
+##############################################################################
+#
+# Copyright (c) 2010 Nexedi SARL and Contributors. All Rights Reserved.
+#                    Arnaud Fontaine <arnaud.fontaine at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+
+from AccessControl import ClassSecurityInfo
+from Products.CMFCore.Expression import Expression
+
+from Products.ERP5Type import Permissions, PropertySheet
+from Products.ERP5Type.XMLObject import XMLObject
+
+class DynamicCategoryProperty(XMLObject):
+  """
+  Define a Dynamic Category Property Document for a web-based Property
+  Sheets (a dynamic category is defined by a TALES expression rather
+  than a string and is being used by Item and Movement for example)
+  """
+  meta_type = 'ERP5 Dynamic Category Property'
+  portal_type = 'Dynamic Category Property'
+
+  # Declarative security
+  security = ClassSecurityInfo()
+  security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+  property_sheets = (PropertySheet.DynamicCategoryProperty,)
+
+  security.declareProtected(Permissions.AccessContentsInformation,
+                            'exportToFilesystemDefinition')
+  def exportToFilesystemDefinition(self):
+    """
+    Return the filesystem definition of the property
+    """
+    return Expression(self.getCategoryExpression())
+
+  security.declareProtected(Permissions.AccessContentsInformation,
+                            'importFromFilesystemDefinition')
+  def importFromFilesystemDefinition(self, category_expression):
+    """
+    Set the Expression text from a filesystem definition of a property
+    """
+    self.setCategoryExpression(category_expression.text)

Added: erp5/trunk/products/ERP5/Document/StandardProperty.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/StandardProperty.py?rev=38976&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/Document/StandardProperty.py (added)
+++ erp5/trunk/products/ERP5/Document/StandardProperty.py [utf8] Thu Oct  7 17:01:45 2010
@@ -0,0 +1,100 @@
+##############################################################################
+#
+# Copyright (c) 2010 Nexedi SARL and Contributors. All Rights Reserved.
+#                    Arnaud Fontaine <arnaud.fontaine at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+
+from AccessControl import ClassSecurityInfo
+
+from Products.ERP5Type import Permissions, PropertySheet
+from Products.ERP5Type.XMLObject import XMLObject
+
+class StandardProperty(XMLObject):
+  """
+  Define an Acquired Property Document for a web-based Property Sheet
+  """
+  meta_type = 'ERP5 Standard Property'
+  portal_type = 'Standard Property'
+
+  # Declarative security
+  security = ClassSecurityInfo()
+  security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+  property_sheets = (PropertySheet.SimpleItem,
+                     PropertySheet.StandardProperty,
+                     PropertySheet.TranslatableProperty)
+
+  # Names mapping between filesystem to web-based property, only
+  # meaningful when importing a property from its filesystem
+  # definition
+  _name_mapping_filesystem_to_web_dict = {'id': 'reference',
+                                          'type': 'elementary_type',
+                                          'default': 'property_default'}
+
+  security.declareProtected(Permissions.AccessContentsInformation,
+                            'exportToFilesystemDefinition')
+  def exportToFilesystemDefinition(self):
+    """
+    Return the filesystem definition of this web-based property
+    """
+    return {'id': self.getReference(),
+            'description': self.getDescription(),
+            'type': self.getElementaryType(),
+            'storage_id': self.getStorageId(),
+            'multivalued': self.getMultivalued(),
+            'default': self.getPropertyDefault(),
+            'range': self.getRange(),
+            'preference': self.getPreference(),
+            'read_permission': self.getReadPermission(),
+            'write_permission': self.getWritePermission(),
+            'translatable': self.getTranslatable(),
+            'translation_domain': self.getTranslationDomain()}
+
+  def _convertFromFilesytemPropertyDict(self, filesystem_property_dict):
+    """
+    Convert a property dict coming from a Property Sheet on the
+    filesystem to a web-based property dict
+    """
+    # Prepare a dictionnary of the web-based property
+    web_property_dict = {}
+
+    for fs_property_name, value in filesystem_property_dict.iteritems():
+      # Convert filesystem property name to web-based if necessary
+      web_property_name = \
+          fs_property_name in self._name_mapping_filesystem_to_web_dict and \
+          self._name_mapping_filesystem_to_web_dict[fs_property_name] or \
+          fs_property_name
+
+      web_property_dict[web_property_name] = value
+
+    return web_property_dict
+
+  security.declareProtected(Permissions.AccessContentsInformation,
+                            'importFromFilesystemDefinition')
+  def importFromFilesystemDefinition(self, filesystem_property_dict):
+    """
+    Set attributes from the filesystem definition of a property
+    """
+    self.edit(**self._convertFromFilesytemPropertyDict(filesystem_property_dict))




More information about the Erp5-report mailing list