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

Sidnei da Silva sidnei at x3ng.com.br
Thu Feb 13 20:09:50 EST 2003


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

Modified Files:
	NZOMigrate.py 
Log Message:
Late night commit. Just to make sure we dont have to redo everything if the server explodes. Now, migration is running even more smoothtly.

=== Products/ZopeOrg-NV/Extensions/NZOMigrate.py 1.14 => 1.15 ===
     new_obj.setTitle(values['title'])
     if hasattr(aq_base(src), 'logo'):
         new_obj.setLogo('logo')
-    return new_obj
+    return (new_obj, dest)
     
 def migrateZSP(root, obj):
     entries = obj[0].objectValues('ENTRY')
+    result = []
     for entry in entries:
         id = getattr(entry, 'LOGO', entry.getId())
         if hasattr(aq_base(root), id):
             logo_id = '%s_logo' % id
             root.manage_renameObject(id=id, new_id=logo_id)
-        root.invokeFactory(id=id, type_name='Zope Service Provider')
+        try:
+            root.invokeFactory(id=id, type_name='Zope Service Provider')
+        except:
+            pass
+        if not hasattr(aq_base(root), id):
+            result.append(None)
+            continue
         new_obj = getattr(root, id, None)
-        if new_obj is None:
-            return
         new_obj.setCompany(getattr(entry, 'COMPANY', ''))
         new_obj.setSummary('')
         new_obj.setExternalURL(getattr(entry, 'URL', ''))
@@ -204,7 +209,8 @@
             phone['info'] = getattr(p, 'INFO', '')            
             new_phones.append(phone.copy())
         new_obj.setPhoneInfo(new_phones)
-    return new_obj
+        result.append(new_obj)
+    return tuple(result)
     
 class Transmutator:
 
@@ -239,8 +245,8 @@
             nmt = normalizeMetaType
             mmt = '%s2%s' % (nmt(mt), nmt(dt))
         obj_url = obj.absolute_url(relative=1)
-        self.log('Will use %s to migrate %s (%s)\n' % \
-                        (mmt, obj_url, mt))
+        self.log('%s (%s) -> %s \n' % \
+                        (obj_url, mt, mmt))
         return getattr(self, mmt, self.defaultMigrationMethod)
 
     def defaultMigrationMethod(self, obj, source, dest):
@@ -248,10 +254,12 @@
             copy = obj._getCopy(dest)
             dest._setObject(obj.getId(), copy)
         except:
-            self.log('Could not copy %s (%s). Possibly duplicate id.\n'\
+            self.log('%s (%s) failed. Possibly duplicate id.\n'\
                      % (obj.getId(), obj.absolute_url(relative=1)))
             return None
-        return getattr(dest, obj.getId())
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
+        return getattr(dest, obj.getId(), None)
 
     def BrokenBecauseProductisGone2BBR(self, obj, source, dest):
         self.log('Ignoring Broken Beyond Repair.\n')
@@ -274,7 +282,12 @@
         return None
 
     def SoftwareProduct2CMFSoftwarePackage(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='Software Package')
+        try:
+            dest.invokeFactory(id=obj.getId(), type_name='Software Package')
+        except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
         f = getattr(dest, obj.getId())
         title = obj.title or ''
         description = obj.description or ''
@@ -288,14 +301,24 @@
         return f
 
     def ProductRelease2CMFSoftwareRelease(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='Software Release')
-        f = getattr(dest, obj.getId())
+        version = obj.version or 'default'
+        try:
+            dest.invokeFactory(id=version, type_name='Software Release')
+        except:
+            pass
+        if not hasattr(aq_base(dest), version):
+            return None
+        f = getattr(dest, version)
         title = obj.title or ''
-        version = obj.version
         f.setTitle(title)
         f.setVersion(version)
 
-        f.invokeFactory(id=obj.getId(), type_name='Software Release File')
+        try:
+            f.invokeFactory(id=obj.getId(), type_name='Software Release File')
+        except:
+            pass
+        if not hasattr(aq_base(f), obj.getId()):
+            return (f, None)
         r = getattr(f, obj.getId())
         platform = obj.platform
         maturity = obj.status
@@ -310,6 +333,7 @@
                                             'application/octet-stream')
 
         r.update_data(data, content_type, size)
+        r._calculateMD5()
         r.setPlatform(platform)
         f.setMaturity(maturity)
         f.setInfoURL(info_url)
@@ -317,8 +341,8 @@
         f.setChangesURL(changes_url)
         f.setInstallationURL(installation_url)
         f.setLicense(license)
-
-        return f
+        
+        return (f, r)
 
     def Tracker2CMFCollector(self, obj, source, dest):
         self.log('Ignoring Tracker for now.\n')
@@ -334,12 +358,19 @@
             parsed.manage_addParsedXML(obj.getId(), obj.title, \
                                        obj.toXML())
         except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
             return None
-        return getattr(aq_base(dest), obj.getId(), None)
+        return getattr(dest, obj.getId(), None)
 
     def BackTalkBook2CMFBackTalkBook(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='BackTalk Book')
-        book = getattr(dest, obj.getId())
+        try:
+            dest.invokeFactory(id=obj.getId(), type_name='BackTalk Book')
+        except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
+        book = getattr(dest, obj.getId(), None)
         for prop in obj.propertyIds():
             if prop in ['header', 'summary']:
                 continue
@@ -353,7 +384,12 @@
         return book
 
     def BackTalkDocument2CMFBackTalkDocument(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='BackTalk Document')
+        try:
+            dest.invokeFactory(id=obj.getId(), type_name='BackTalk Document')
+        except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
         doc = getattr(dest, obj.getId())
         for prop in obj.propertyIds():
             if prop in ['summary']:
@@ -367,8 +403,13 @@
         return doc
 
     def File2CMFDefaultFile(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='File')
-        f = getattr(dest, obj.getId())
+        try:
+            dest.invokeFactory(id=obj.getId(), type_name='File')
+        except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
+        f = getattr(dest, obj.getId(), None)
         title = obj.title or ''
         content_type = obj.content_type
         data = str(obj.data)
@@ -379,8 +420,13 @@
         return f
 
     def Image2CMFDefaultImage(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='Image')
-        f = getattr(dest, obj.getId())
+        try:
+            dest.invokeFactory(id=obj.getId(), type_name='Image')
+        except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
+        f = getattr(dest, obj.getId(), None)
         title = obj.title or ''
         content_type = obj.content_type
         data = str(obj.data)
@@ -391,8 +437,13 @@
         return f
 
     def NewsItem2CMFDefaultNewsItem(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='News Item')
-        news = getattr(dest, obj.getId())
+        try:
+            dest.invokeFactory(id=obj.getId(), type_name='News Item')
+        except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
+        news = getattr(dest, obj.getId(), None)
         title = obj.title or ''
         text = obj.text
         format = obj.format
@@ -406,8 +457,13 @@
         return news
 
     def Link2CMFDefaultLink(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='Link')
-        link = getattr(dest, obj.getId())
+        try:
+            dest.invokeFactory(id=obj.getId(), type_name='Link')
+        except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
+        link = getattr(dest, obj.getId(), None)
         title = obj.title or ''
         description = (type(obj.description) == type('')) and \
                       obj.description or ''
@@ -425,8 +481,13 @@
         return link
 
     def FormattedDocument2CMFDefaultDocument(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='Document')
-        doc = getattr(dest, obj.getId())
+        try:
+            dest.invokeFactory(id=obj.getId(), type_name='Document')
+        except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
+        doc = getattr(dest, obj.getId(), None)
         title = obj.title or ''
         description = (type(obj.description) == type('')) and \
                       obj.description or ''
@@ -445,8 +506,13 @@
     HTMLDocument2CMFDefaultDocument = FormattedDocument2CMFDefaultDocument
 
     def Tip2ZopeOrgTip(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='Tip')
-        tip = getattr(dest, obj.getId())
+        try:
+            dest.invokeFactory(id=obj.getId(), type_name='Tip')
+        except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
+        tip = getattr(dest, obj.getId(), None)
         title = obj.tip or ''
         text = obj.details or ''
         format = 'html'
@@ -460,8 +526,13 @@
         return tip
 
     def HowTo2ZopeOrgHowTo(self, obj, source, dest):
-        dest.invokeFactory(id=obj.getId(), type_name='HowTo')
-        howto = getattr(dest, obj.getId())
+        try:
+            dest.invokeFactory(id=obj.getId(), type_name='HowTo')
+        except:
+            pass
+        if not hasattr(aq_base(dest), obj.getId()):
+            return None
+        howto = getattr(dest, obj.getId(), None)
         title = obj.title or ''
         text = obj.content
         format = obj.format
@@ -475,7 +546,6 @@
         return howto
 
     def Folder2CMFPortalFolder(self, obj, source, dest):
-            
         if dest is None or obj is None: return None
         try:
             dest.invokeFactory(id=obj.getId(), title=obj.title, \
@@ -484,12 +554,12 @@
             pass
         if not hasattr(aq_base(dest), obj.getId()):
             return None
-        new = getattr(dest, obj.getId())
+        new = getattr(dest, obj.getId(), None)
         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 migrateCaseStudies(obj, new)
             return new
         return None
 
@@ -588,14 +658,28 @@
                             value = p['select_variable']
                         if not hasattr(new, value):
                             setattr(new, value, [])
-                else: value = orig.getProperty(prop)
+                else:
+                    try:
+                        value = orig.getProperty(prop)
+                    except:
+                        value = ''
                 try: new._setProperty(prop, value, type)
                 except Exception, msg:
                     self.log('Could not set property ' + \
                              '%s of type %s to %s.\n %s\n' % \
                              (prop, type, value, msg))
             else:
-                new._setPropValue(prop, orig.getProperty(prop))
+                try:
+                    value = orig.getProperty(prop)
+                except:
+                    value = ''
+                try:
+                    new._setPropValue(prop, value)
+                except Exception, msg:
+                    self.log('Could not set property ' + \
+                             '%s to %s.\n %s\n' % \
+                             (prop, value, msg))
+                    
         return new
         
     def run(self):
@@ -623,21 +707,24 @@
                     obj_url = obj.absolute_url(relative=1)
                 except POSKeyError:
                     # Skip this object
-                    self.log('POSKeyError while trying to access' +\
+                    self.log('POSKeyError on' +\
                               ' %s.\n' % '/'.join(path + (oid, )))
                     continue
                 mm = self.getMigrationMethod(obj)
                 try:
-                    new_obj = mm(obj, source, dest)
-                except: new_obj = None
+                    new_objs = mm(obj, source, dest)
+                except: new_objs = 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:
+                if new_objs is None:
                     self.log('Result of conversion of' +\
                               ' %s: Failed.\n' % obj.absolute_url(relative=1))
-                else:
+                    continue
+                if type(new_objs) != type(()):
+                    new_objs = (new_objs, )
+                for new_obj in new_objs:
                     new_obj = self.fixOwnership(obj, new_obj)
                     new_obj = self.copyProperties(obj, new_obj)
                     res = []
@@ -650,19 +737,18 @@
                     if ct is not None:
                         try: ct.reindexObject(obj)
                         except: pass
-                    self.log('Result of conversion of' +\
-                              ' %s: Success.\n' % obj.absolute_url(relative=1))
+                    self.log('%s: Success.\n' % obj.absolute_url(relative=1))
                     
-                if hasattr(obj, 'objectIds') and new_obj is not None:
-                    ignore = self.WikiMethodsCleanup(obj, ignore)
-                    ignore = self.DefaultDTMLCleanup(obj, ignore)
-                    self.log(Transmutator(obj, new_obj, \
+                    if hasattr(obj, 'objectIds') and new_obj is not None:
+                        ignore = self.WikiMethodsCleanup(obj, ignore)
+                        ignore = self.DefaultDTMLCleanup(obj, ignore)
+                        self.log(Transmutator(obj, new_obj, \
                                           ignore, self._type_map, \
                                           self._level + 1).run(), dup=0)
-                    if self._level <= 2:
-                        get_transaction().commit()
-                    else:
-                        get_transaction().commit(1)
+                        if self._level <= 2:
+                            get_transaction().commit()
+                        else:
+                            get_transaction().commit(1)
 
         return 'Ok.\n'
 





More information about the zopeorg-checkins mailing list