[Erp5-report] r19407 - in /erp5/trunk/products/ERP5: Document/ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Feb 19 17:39:52 CET 2008


Author: romain
Date: Tue Feb 19 17:39:51 2008
New Revision: 19407

URL: http://svn.erp5.org?rev=19407&view=rev
Log:
Manage catalog role_keys and local_role_keys.

Modified:
    erp5/trunk/products/ERP5/Document/BusinessTemplate.py
    erp5/trunk/products/ERP5/tests/testBusinessTemplate.py

Modified: erp5/trunk/products/ERP5/Document/BusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/BusinessTemplate.py?rev=19407&r1=19406&r2=19407&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/BusinessTemplate.py (original)
+++ erp5/trunk/products/ERP5/Document/BusinessTemplate.py Tue Feb 19 17:39:51 2008
@@ -3866,6 +3866,192 @@
       xml_data = self.generateXml(path=path)
       bta.addObject(obj=xml_data, name=path, path=None)
 
+class CatalogRoleKeyTemplateItem(BaseTemplateItem):
+  # XXX Copy/paste from CatalogScriptableKeyTemplateItem
+
+  def build(self, context, **kw):
+    catalog = _getCatalogValue(self)
+    if catalog is None:
+      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
+      return
+    sql_catalog_role_keys = list(catalog.sql_catalog_role_keys)
+    key_list = []
+    for key in self._archive.keys():
+      if key in sql_catalog_role_keys:
+        key_list.append(key)
+      else:
+        raise NotFound, 'Role key "%r" not found in catalog' %(key,)
+    if len(key_list) > 0:
+      self._objects[self.__class__.__name__+'/'+'role_key_list'] = key_list
+
+  def _importFile(self, file_name, file):
+    list = []
+    xml = parse(file)
+    key_list = xml.getElementsByTagName('key')
+    for key in key_list:
+      node = key.childNodes[0]
+      value = node.data
+      list.append(str(value))
+    self._objects[file_name[:-4]] = list
+
+  def install(self, context, trashbin, **kw):
+    catalog = _getCatalogValue(self)
+    if catalog is None:
+      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
+      return
+
+    sql_catalog_role_keys = list(catalog.sql_catalog_role_keys)
+    if context.getTemplateFormatVersion() == 1:
+      if len(self._objects.keys()) == 0: # needed because of pop()
+        return
+      keys = []
+      for k in self._objects.values().pop(): # because of list of list
+        keys.append(k)
+    else:
+      keys = self._archive.keys()
+    update_dict = kw.get('object_to_update')
+    force = kw.get('force')
+    # XXX must a find a better way to manage scriptable key
+    if update_dict.has_key('role_key_list') or force:
+      if not force:
+        if update_dict.has_key('role_key_list'):
+          action = update_dict['role_key_list']
+        if action == 'nothing':
+          return
+      for key in keys:
+        if key not in sql_catalog_role_keys:
+          sql_catalog_role_keys.append(key)
+      catalog.sql_catalog_role_keys = tuple(sql_catalog_role_keys)
+
+  def uninstall(self, context, **kw):
+    catalog = _getCatalogValue(self)
+    if catalog is None:
+      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
+      return
+    sql_catalog_role_keys = list(catalog.sql_catalog_role_keys)
+    object_path = kw.get('object_path', None)
+    if object_path is not None:
+      object_keys = [object_path]
+    else:
+      object_keys = self._archive.keys()
+    for key in object_keys:
+      if key in sql_catalog_role_keys:
+        sql_catalog_role_keys.remove(key)
+    catalog.sql_catalog_role_keys = tuple(sql_catalog_role_keys)
+    BaseTemplateItem.uninstall(self, context, **kw)
+
+  # Function to generate XML Code Manually
+  def generateXml(self, path=None):
+    obj = self._objects[path]
+    xml_data = '<key_list>'
+    obj.sort()
+    for key in obj:
+      xml_data += '\n <key>%s</key>' %(key)
+    xml_data += '\n</key_list>'
+    return xml_data
+
+  def export(self, context, bta, **kw):
+    if len(self._objects.keys()) == 0:
+      return
+    path = os.path.join(bta.path, self.__class__.__name__)
+    bta.addFolder(name=path)
+    for path in self._objects.keys():
+      xml_data = self.generateXml(path=path)
+      bta.addObject(obj=xml_data, name=path, path=None)
+
+class CatalogLocalRoleKeyTemplateItem(BaseTemplateItem):
+  # XXX Copy/paste from CatalogScriptableKeyTemplateItem
+
+  def build(self, context, **kw):
+    catalog = _getCatalogValue(self)
+    if catalog is None:
+      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
+      return
+    sql_catalog_local_role_keys = list(catalog.sql_catalog_local_role_keys)
+    key_list = []
+    for key in self._archive.keys():
+      if key in sql_catalog_local_role_keys:
+        key_list.append(key)
+      else:
+        raise NotFound, 'LocalRole key "%r" not found in catalog' %(key,)
+    if len(key_list) > 0:
+      self._objects[self.__class__.__name__+'/'+'local_role_key_list'] = key_list
+
+  def _importFile(self, file_name, file):
+    list = []
+    xml = parse(file)
+    key_list = xml.getElementsByTagName('key')
+    for key in key_list:
+      node = key.childNodes[0]
+      value = node.data
+      list.append(str(value))
+    self._objects[file_name[:-4]] = list
+
+  def install(self, context, trashbin, **kw):
+    catalog = _getCatalogValue(self)
+    if catalog is None:
+      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
+      return
+
+    sql_catalog_local_role_keys = list(catalog.sql_catalog_local_role_keys)
+    if context.getTemplateFormatVersion() == 1:
+      if len(self._objects.keys()) == 0: # needed because of pop()
+        return
+      keys = []
+      for k in self._objects.values().pop(): # because of list of list
+        keys.append(k)
+    else:
+      keys = self._archive.keys()
+    update_dict = kw.get('object_to_update')
+    force = kw.get('force')
+    # XXX must a find a better way to manage scriptable key
+    if update_dict.has_key('local_role_key_list') or force:
+      if not force:
+        if update_dict.has_key('local_role_key_list'):
+          action = update_dict['local_role_key_list']
+        if action == 'nothing':
+          return
+      for key in keys:
+        if key not in sql_catalog_local_role_keys:
+          sql_catalog_local_role_keys.append(key)
+      catalog.sql_catalog_local_role_keys = tuple(sql_catalog_local_role_keys)
+
+  def uninstall(self, context, **kw):
+    catalog = _getCatalogValue(self)
+    if catalog is None:
+      LOG('BusinessTemplate', 0, 'no SQL catalog was available')
+      return
+    sql_catalog_local_role_keys = list(catalog.sql_catalog_local_role_keys)
+    object_path = kw.get('object_path', None)
+    if object_path is not None:
+      object_keys = [object_path]
+    else:
+      object_keys = self._archive.keys()
+    for key in object_keys:
+      if key in sql_catalog_local_role_keys:
+        sql_catalog_local_role_keys.remove(key)
+    catalog.sql_catalog_local_role_keys = tuple(sql_catalog_local_role_keys)
+    BaseTemplateItem.uninstall(self, context, **kw)
+
+  # Function to generate XML Code Manually
+  def generateXml(self, path=None):
+    obj = self._objects[path]
+    xml_data = '<key_list>'
+    obj.sort()
+    for key in obj:
+      xml_data += '\n <key>%s</key>' %(key)
+    xml_data += '\n</key_list>'
+    return xml_data
+
+  def export(self, context, bta, **kw):
+    if len(self._objects.keys()) == 0:
+      return
+    path = os.path.join(bta.path, self.__class__.__name__)
+    bta.addFolder(name=path)
+    for path in self._objects.keys():
+      xml_data = self.generateXml(path=path)
+      bta.addObject(obj=xml_data, name=path, path=None)
+
 class MessageTranslationTemplateItem(BaseTemplateItem):
 
   def build(self, context, **kw):
@@ -4209,6 +4395,8 @@
       '_catalog_multivalue_key_item',
       '_catalog_topic_key_item',
       '_catalog_scriptable_key_item',
+      '_catalog_role_key_item',
+      '_catalog_local_role_key_item',
     ]
 
     def __init__(self, *args, **kw):
@@ -4364,6 +4552,12 @@
       self._catalog_scriptable_key_item = \
           CatalogScriptableKeyTemplateItem(
                self.getTemplateCatalogScriptableKeyList())
+      self._catalog_role_key_item = \
+          CatalogRoleKeyTemplateItem(
+               self.getTemplateCatalogRoleKeyList())
+      self._catalog_local_role_key_item = \
+          CatalogLocalRoleKeyTemplateItem(
+               self.getTemplateCatalogLocalRoleKeyList())
 
       # Build each part
       for item_name in self._item_name_list:
@@ -4971,6 +5165,12 @@
       self._catalog_scriptable_key_item = \
           CatalogScriptableKeyTemplateItem(
                self.getTemplateCatalogScriptableKeyList())
+      self._catalog_role_key_item = \
+          CatalogRoleKeyTemplateItem(
+               self.getTemplateCatalogRoleKeyList())
+      self._catalog_local_role_key_item = \
+          CatalogLocalRoleKeyTemplateItem(
+               self.getTemplateCatalogLocalRoleKeyList())
 
       for item_name in self._item_name_list:
         getattr(self, item_name).importFile(bta)
@@ -5057,6 +5257,8 @@
         'CatalogTopicKey' : '_catalog_topic_key_item',
         'Tool': '_tool_item',
         'CatalogScriptableKey' : '_catalog_scriptable_key_item',
+        'CatalogRoleKey' : '_catalog_role_key_item',
+        'CatalogLocalRoleKey' : '_catalog_local_role_key_item',
         }
 
       object_id = REQUEST.object_id
@@ -5113,6 +5315,8 @@
                      '_catalog_multivalue_key_item',
                      '_catalog_topic_key_item',
                      '_catalog_scriptable_key_item',
+                     '_catalog_role_key_item',
+                     '_catalog_local_role_key_item',
                      '_portal_type_allowed_content_type_item',
                      '_portal_type_hidden_content_type_item',
                      '_portal_type_property_sheet_item',

Modified: erp5/trunk/products/ERP5/tests/testBusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testBusinessTemplate.py?rev=19407&r1=19406&r2=19407&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testBusinessTemplate.py (original)
+++ erp5/trunk/products/ERP5/tests/testBusinessTemplate.py Tue Feb 19 17:39:51 2008
@@ -1353,6 +1353,8 @@
     multivalue_key = 'fake_multivalue'
     topic_key = 'fake_topic'
     scriptable_key = 'fake_search_text | fake_script_query'
+    role_key = 'Foo | catalog.owner'
+    local_role_key = 'Bar | catalog.owner'
     catalog = self.getCatalogTool().getSQLCatalog()
     self.failUnless(catalog is not None)
     # result table
@@ -1418,11 +1420,28 @@
       sql_catalog_scriptable_keys.sort()
       catalog.sql_catalog_scriptable_keys = tuple(sql_catalog_scriptable_keys)
     self.failUnless(scriptable_key in catalog.sql_catalog_scriptable_keys)
-
-    sequence.edit(related_key=related_key, result_key=result_key, result_table=result_table, \
-                  keyword_key=keyword_key, full_text_key=full_text_key, request_key=request_key, \
+    # role keys
+    if role_key not in catalog.sql_catalog_role_keys:
+      sql_catalog_role_keys = list(catalog.sql_catalog_role_keys)
+      sql_catalog_role_keys.append(role_key)
+      sql_catalog_role_keys.sort()
+      catalog.sql_catalog_role_keys = tuple(sql_catalog_role_keys)
+    self.failUnless(role_key in catalog.sql_catalog_role_keys)
+    # local_role keys
+    if local_role_key not in catalog.sql_catalog_local_role_keys:
+      sql_catalog_local_role_keys = list(catalog.sql_catalog_local_role_keys)
+      sql_catalog_local_role_keys.append(local_role_key)
+      sql_catalog_local_role_keys.sort()
+      catalog.sql_catalog_local_role_keys = tuple(sql_catalog_local_role_keys)
+    self.failUnless(local_role_key in catalog.sql_catalog_local_role_keys)
+
+    sequence.edit(related_key=related_key, result_key=result_key, 
+                  result_table=result_table,
+                  keyword_key=keyword_key, full_text_key=full_text_key, 
+                  request_key=request_key,
                   multivalue_key=multivalue_key, topic_key=topic_key, \
-                  scriptable_key=scriptable_key)
+                  scriptable_key=scriptable_key,
+                  role_key=role_key, local_role_key=local_role_key)
 
   def stepModifyCatalogConfiguration(self, sequence, **kw):
     """Modify the current configuration of the catalog.
@@ -1505,6 +1524,10 @@
     self.failUnless(topic_key is not None)
     scriptable_key = sequence.get('scriptable_key', None)
     self.failUnless(scriptable_key is not None)
+    role_key = sequence.get('role_key', None)
+    self.failUnless(role_key is not None)
+    local_role_key = sequence.get('local_role_key', None)
+    self.failUnless(local_role_key is not None)
 
     bt.edit(template_catalog_related_key_list=[related_key],
             template_catalog_result_key_list=[result_key],
@@ -1515,6 +1538,8 @@
             template_catalog_multivalue_key_list=[multivalue_key],
             template_catalog_topic_key_list=[topic_key],
             template_catalog_scriptable_key_list=[scriptable_key],
+            template_catalog_role_key_list=[role_key],
+            template_catalog_local_role_key_list=[local_role_key],
             )
 
   def stepRemoveKeysAndTable(self, sequence=list, sequence_list=None, **kw):
@@ -1539,6 +1564,10 @@
     self.failUnless(topic_key is not None)
     scriptable_key = sequence.get('scriptable_key', None)
     self.failUnless(scriptable_key is not None)
+    role_key = sequence.get('role_key', None)
+    self.failUnless(role_key is not None)
+    local_role_key = sequence.get('local_role_key', None)
+    self.failUnless(local_role_key is not None)
 
     catalog = self.getCatalogTool().getSQLCatalog()
     self.failUnless(catalog is not None)
@@ -1596,6 +1625,18 @@
     sql_catalog_scriptable_keys.sort()
     catalog.sql_catalog_scriptable_keys = tuple(sql_catalog_scriptable_keys)
     self.failUnless(scriptable_key not in catalog.sql_catalog_scriptable_keys)
+    # role keys
+    sql_catalog_role_keys = list(catalog.sql_catalog_role_keys)
+    sql_catalog_role_keys.remove(role_key)
+    sql_catalog_role_keys.sort()
+    catalog.sql_catalog_role_keys = tuple(sql_catalog_role_keys)
+    self.failUnless(role_key not in catalog.sql_catalog_role_keys)
+    # local_role keys
+    sql_catalog_local_role_keys = list(catalog.sql_catalog_local_role_keys)
+    sql_catalog_local_role_keys.remove(local_role_key)
+    sql_catalog_local_role_keys.sort()
+    catalog.sql_catalog_local_role_keys = tuple(sql_catalog_local_role_keys)
+    self.failUnless(local_role_key not in catalog.sql_catalog_local_role_keys)
 
 
   def stepCheckKeysAndTableExists(self, sequence=list, sequence_list=None, **kw):
@@ -1620,6 +1661,10 @@
     self.failUnless(topic_key is not None)
     scriptable_key = sequence.get('scriptable_key', None)
     self.failUnless(scriptable_key is not None)
+    role_key = sequence.get('role_key', None)
+    self.failUnless(role_key is not None)
+    local_role_key = sequence.get('local_role_key', None)
+    self.failUnless(local_role_key is not None)
 
     catalog = self.getCatalogTool().getSQLCatalog()
     self.failUnless(catalog is not None)
@@ -1641,6 +1686,10 @@
     self.failUnless(topic_key in catalog.sql_catalog_topic_search_keys)
     # scriptable key
     self.failUnless(scriptable_key in catalog.sql_catalog_scriptable_keys)
+    # role key
+    self.failUnless(role_key in catalog.sql_catalog_role_keys)
+    # local_role key
+    self.failUnless(local_role_key in catalog.sql_catalog_local_role_keys)
 
   def stepCheckKeysAndTableRemoved(self, sequence=list, sequence_list=None, **kw):
     """
@@ -1664,6 +1713,10 @@
     self.failUnless(topic_key is not None)
     scriptable_key = sequence.get('scriptable_key', None)
     self.failUnless(scriptable_key is not None)
+    role_key = sequence.get('role_key', None)
+    self.failUnless(role_key is not None)
+    local_role_key = sequence.get('local_role_key', None)
+    self.failUnless(local_role_key is not None)
 
     catalog = self.getCatalogTool().getSQLCatalog()
     self.failUnless(catalog is not None)
@@ -1685,6 +1738,10 @@
     self.failUnless(topic_key not in catalog.sql_catalog_topic_search_keys)
     # scriptable key
     self.failUnless(scriptable_key not in catalog.sql_catalog_scriptable_keys)
+    # role key
+    self.failUnless(role_key not in catalog.sql_catalog_role_keys)
+    # local_role key
+    self.failUnless(local_role_key not in catalog.sql_catalog_local_role_keys)
 
   # Roles
   def stepCreateRole(self, sequence=None, sequence_list=None, **kw):




More information about the Erp5-report mailing list