[zopeorg-checkins] CVS: Products/ZopeOrg-NV/Extensions - NZOMigrate.py:1.11

Sidnei da Silva sidnei at x3ng.com.br
Thu Feb 13 06:27:36 EST 2003


Update of /cvs-zopeorg/Products/ZopeOrg-NV/Extensions
In directory cvs.zope.org:/tmp/cvs-serv13059/Extensions

Modified Files:
	NZOMigrate.py 
Log Message:
now the migration is running smoothly

=== Products/ZopeOrg-NV/Extensions/NZOMigrate.py 1.10 => 1.11 ===
                     "BTree Folder": "CMF BTree Folder",
                     "ZWiki Page": "ZWiki Page",
                     "Broken Because Product is Gone": "BBR",
-                    "XML Document": "XML Document",
+                    "XML Document": "Parsed XML",
                     "BackTalk Book": "CMF BackTalk Book",
                     "BackTalk Document": "CMF BackTalk Document"
                     }
@@ -59,6 +59,9 @@
     try: changed = ob._p_changed
     except: changed = 0
 
+    if ob is None:
+        return res
+
     owner = ob.getOwner(info=1)
     if owner:
         udb, uid = owner
@@ -130,6 +133,38 @@
     alist.sort()
     return alist
 
+def migrateCaseStudies(src, dest):
+    dest.invokeFactory(id='index_html', title=dest.title, \
+                       type_name='Case Study')
+    new_obj = getattr(dest, 'index_html', None)
+    if new_obj is None:
+        return
+    values = {}
+    for id in ['case_facts', 'problem', 'solution', 'summary', \
+               'external_url', 'title']:
+        values[id] = ''
+        prop = getattr(src, id, None)
+        if prop is not None:
+            if callable(prop):
+                try:
+                    values[id] = prop(src)
+                except:
+                    try:
+                        values['id'] = prop.raw()
+                    except:
+                        values['id'] = str(prop)
+            else:
+                values[id] = prop
+    new_obj.setSummary(values['summary'])
+    new_obj.setCaseFacts('text/html', values['case_facts'])
+    new_obj.setProblem('text/html', values['problem'])
+    new_obj.setSolution('text/html', values['solution'])
+    new_obj.setExternalURL(values['external_url'])
+    new_obj.setTitle(values['title'])
+    if hasattr(aq_base(src), 'logo'):
+        new_obj.setLogo('logo')
+    return new_obj
+    
 def migrateZSP(root, obj):
     entries = obj[0].objectValues('ENTRY')
     for entry in entries:
@@ -286,11 +321,18 @@
         self.log('Ignoring Tracker for now.\n')
         return None
 
-    def XMLDocument2XMLDocument(self, obj, source, dest):
-        id = obj.getId()
-        if id == 'zsp.xml':
+    def XMLDocument2ParsedXML(self, obj, source, dest):
+        # Exception: ZSP will be converted to objects
+        url = obj.absolute_url(relative=1)
+        if url == 'Resources/ZSP/zsp.xml':
             return migrateZSP(dest, obj)
-        return None
+        try:
+            parsed = dest.manage_addProduct['ParsedXML']
+            parsed.manage_addParsedXML(dest, obj.getId(), obj.title, \
+                                       obj.toXML())
+        except:
+            return None
+        return getattr(aq_base(dest), obj.getId(), None)
 
     def BackTalkBook2CMFBackTalkBook(self, obj, source, dest):
         dest.invokeFactory(id=obj.getId(), type_name='BackTalk Book')
@@ -430,15 +472,21 @@
         return howto
 
     def Folder2CMFPortalFolder(self, obj, source, dest):
+            
         if dest is None or obj is None: return None
         try:
-            dest.invokeFactory(id=obj.getId(), type_name="Folder")
-            dest.setTitle(obj.title)
-        except: pass
+            dest.invokeFactory(id=obj.getId(), title=obj.title, \
+                               type_name="Folder")
+        except:
+            pass
         if not hasattr(aq_base(dest), obj.getId()):
             return None
         new = getattr(dest, obj.getId())
         if hasattr(aq_base(new), 'objectValues'):
+            # Exception: CaseStudies content will be converted to 1 object.
+            url = obj.absolute_url(relative=1)
+            if url.find('Resources/CaseStudies/') == 0:
+                migrateCaseStudies(obj, new)
             return new
         return None
 
@@ -448,9 +496,11 @@
             bt2 = dest.manage_addProduct['BTreeFolder2']
             bt2.manage_addCMFBTreeFolder(obj.getId(), obj.title)
         except: pass
-        new = getattr(aq_base(dest), obj.getId(), None)
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
+        new = getattr(dest, obj.getId(), None)
         if new is not None and hasattr(aq_base(new), 'objectValues'):
-            return new.__of__(dest)
+            return new
         return None
 
     def WikiMethodsCleanup(self, obj, ignore_path):
@@ -487,21 +537,29 @@
         elif hasattr(obj, 'objectIds'):
             obj_ids = obj.objectIds()
         
+        obj_path = obj.getPhysicalPath()
         if obj_ids:
-            obj_path = obj.getPhysicalPath()
             for dm in ('local_nav', 'page_title',
                            'standard_html_footer', 'standard_html_header',
                            'custom_html_header',
                            'custom_html_footer', 'local_exit'):
                 if dm in obj_ids:
                     ignore_path.append(obj_path + (dm,))
+        # Exception: when migrating case studies we dont want to bring
+        # the dtml methods to the new site. Only images and files.
+        url = obj.absolute_url(relative=1)
+        if url.find('Resources/CaseStudies/') == 0:
+            for o in obj.objectValues():
+                if o.meta_type not in ['Image', 'File']:
+                    ignore_path.append(obj_path + (o.getId(),))
         return ignore_path
 
     def fixOwnership(self, orig, new):
+        if orig is None or new is None:
+            return None
         owner = orig.getOwner()
         if owner is not None:
             try:
-                # Retain ownership.
                 new.changeOwnership(owner)
             except: pass
         return new
@@ -567,7 +625,10 @@
                 try:
                     new_obj = mm(obj, source, dest)
                 except: new_obj = None
-                
+                if obj is None:
+                    self.log('Something wicked happened to %s ' % oid +\
+                              'on %s.\n' % '/'.join(path))
+                    continue
                 if new_obj is None or not new_obj:
                     self.log('Result of conversion of' +\
                               ' %s: Failed.\n' % obj.absolute_url(relative=1))





More information about the zopeorg-checkins mailing list