• Remember Mailing List

  • issues migrating from CMFMember

    from Kevin Worth on Mar 04, 2008 03:47 PM
    Hi-
    
    I'm trying to move up from a CMFMember based site to a remember site.   
    I'm having issues with the migration.  I have a feeling it is either  
    in my MIGRATION_MAP for my custom member types or the way I am  
    handling the new remember-based members.
    
    I regenerated my member types (faculty and staff) using ArchGenXML  
    1.5.2 by changing the stereotype for member to remember.  I then  
    replaced the existing faculty.py and staff.py with the newly generated  
    files.  Should the original faculty.py and staff.py be somewhere?
    
    My MIGRATION_MAP looks like this:
    
        'Products.<my product>.people.faculty.faculty':
                {'atct_newTypeFor': {'portal_type': 'faculty',
                                     'meta_type': 'faculty'},
                 'project_name': '<my product>',
                 'product': '<my product>',
                  'replace_workflows': REPLACE_CMFMEMBER_WORKFLOWS,
                  'workflow_ids': ('member_auto_workflow',
                                   'member_approval_workflow'),
                 },
        'Products.<my product>.people.staff.staff':
                {'atct_newTypeFor': {'portal_type': 'staff',
                                     'meta_type': 'staff'},
                 'project_name': '<my product>',
                 'product': '<my product>',
                  'replace_workflows': REPLACE_CMFMEMBER_WORKFLOWS,
                  'workflow_ids': ('member_auto_workflow',
                                   'member_approval_workflow'),
                 },
    
    During the migration I get:
    
    	• Dry run selected.
    	• Starting the migration from version: 2.1.2
    	• Attempting to upgrade from: 2.1.2
    	• Removed vcXMLRPC.js
    	• Added icons for copy, cut, paste and delete
    	• Upgrade to: 2.1.3-rc1, completed
    	• Attempting to upgrade from: 2.1.3-rc1
    	• Upgrade to: 2.1.3, completed
    	• Attempting to upgrade from: 2.1.3
    	• Upgrade to: 2.1.4-rc1, completed
    	• Attempting to upgrade from: 2.1.4-rc1
    	• Upgrade to: 2.1.4, completed
    	• Attempting to upgrade from: 2.1.4
    	• Installed CMFPlacefulWorkflow.
    	• Upgrade to: 2.5-alpha1, completed
    	• Attempting to upgrade from: 2.5-alpha1
    	• Upgrade aborted
    	• Error type: exceptions.AttributeError
    	• Error value: 'NoneType' object has no attribute '__of__'
    	• File "/Applications/Plone-2.5.5/Instance/Products/CMFPlone/ 
    MigrationTool.py", line 308, in upgrade newv, msgs = self._upgrade(newv)
    	• File "/Applications/Plone-2.5.5/Instance/Products/CMFPlone/ 
    MigrationTool.py", line 416, in _upgrade res = function(self.aq_parent)
    	• File "/Applications/Plone-2.5.5/Instance/Products/CMFPlone/ 
    migrations/v2_5/alphas.py", line 24, in alpha1_alpha2  
    installPlonePAS(portal, out)
    	• File "/Applications/Plone-2.5.5/Instance/Products/remember/ 
    cmfmember/monkey.py", line 61, in installPlonePAS result =  
    InstallPlonePAS.install(portal)
    	• File "/Applications/Plone-2.5.5/Instance/Products/PlonePAS/ 
    Extensions/Install.py", line 837, in install setupTools(portal, out)
    	• File "/Applications/Plone-2.5.5/Instance/Products/PlonePAS/ 
    Extensions/Install.py", line 399, in setupTools  
    migrateMemberDataTool(portal, out)
    	• File "/Applications/Plone-2.5.5/Instance/Products/remember/ 
    cmfmember/monkey.py", line 100, in migrateMemberDataTool  
    unrestricted_move(portal.cmfmember_tmp, portal.portal_memberdata)
    	• File "/Applications/Plone-2.5.5/Instance/Products/contentmigration/ 
    utils.py", line 69, in unrestricted_move notify(ObjectMovedEvent(ob,  
    orig_container, orig_id, self, id))
    	• File "/Applications/Plone-2.5.5/lib/python/zope/event/__init__.py",  
    line 23, in notify subscriber(event)
    	• File "/Applications/Plone-2.5.5/lib/python/zope/app/event/ 
    dispatching.py", line 66, in dispatch for ignored in  
    subscribers(event, None):
    	• File "/Applications/Plone-2.5.5/lib/python/zope/component/ 
    __init__.py", line 181, in subscribers return  
    sitemanager.subscribers(objects, interface)
    	• File "/Applications/Plone-2.5.5/lib/python/zope/component/site.py",  
    line 89, in subscribers return self.adapters.subscribers(required,  
    provided)
    	• File "/Applications/Plone-2.5.5/lib/python/zope/interface/ 
    adapter.py", line 481, in subscribers subscribers =  
    [subscription(*objects)
    	• File "/Applications/Plone-2.5.5/lib/python/zope/app/event/ 
    objectevent.py", line 192, in objectEventNotify adapters =  
    subscribers((event.object, event), None)
    	• File "/Applications/Plone-2.5.5/lib/python/zope/component/ 
    __init__.py", line 181, in subscribers return  
    sitemanager.subscribers(objects, interface)
    	• File "/Applications/Plone-2.5.5/lib/python/zope/component/site.py",  
    line 89, in subscribers return self.adapters.subscribers(required,  
    provided)
    	• File "/Applications/Plone-2.5.5/lib/python/zope/interface/ 
    adapter.py", line 481, in subscribers subscribers =  
    [subscription(*objects)
    	• File "/Applications/Plone-2.5.5/lib/python/OFS/subscribers.py",  
    line 117, in dispatchObjectMovedEvent dispatchToSublocations(ob, event)
    	• File "/Applications/Plone-2.5.5/lib/python/zope/app/container/ 
    contained.py", line 184, in dispatchToSublocations for ignored in  
    zapi.subscribers((sub, event), None):
    	• File "/Applications/Plone-2.5.5/lib/python/zope/component/ 
    __init__.py", line 181, in subscribers return  
    sitemanager.subscribers(objects, interface)
    	• File "/Applications/Plone-2.5.5/lib/python/zope/component/site.py",  
    line 89, in subscribers return self.adapters.subscribers(required,  
    provided)
    	• File "/Applications/Plone-2.5.5/lib/python/zope/interface/ 
    adapter.py", line 481, in subscribers subscribers =  
    [subscription(*objects)
    	• File "/Applications/Plone-2.5.5/Instance/Products/remember/ 
    utils.py", line 98, in fixOwnership ob.fixOwnership()
    	• File "/Applications/Plone-2.5.5/Instance/Products/remember/content/ 
    member.py", line 115, in fixOwnership user = self.getUser()
    	• File "/Applications/Plone-2.5.5/Instance/Products/remember/content/ 
    member.py", line 133, in getUser return user.__of__(self)
    	• End of upgrade path, migration has finished
    	• The upgrade path did NOT reach current version
    	• Migration has failed
    	• Dry run selected, transaction aborted
    
    Any help would be greatly appreciated.
    
    Kevin
    
    ---------------------------------------------------
    Kevin Worth <kworth@...>
    Senior IT Administrator
    Department of Materials Science and Engineering
    University of Michigan
    
    
    
    Thread Outline:
  • Re: issues migrating from CMFMember

    from ra on Mar 04, 2008 09:27 PM
    Kevin Worth wrote:
    > Hi-
    > 
    > I'm trying to move up from a CMFMember based site to a remember site.  
    > I'm having issues with the migration.  I have a feeling it is either in 
    > my MIGRATION_MAP for my custom member types or the way I am handling the 
    > new remember-based members.
    > 
    > I regenerated my member types (faculty and staff) using ArchGenXML 1.5.2 
    > by changing the stereotype for member to remember.  I then replaced the 
    > existing faculty.py and staff.py with the newly generated files.  Should 
    > the original faculty.py and staff.py be somewhere?
    
    yes, i'd recommend creating your new, remember-based classes in a different 
    module, alongside the original CMFMember-based classes.  things can get a bit 
    confusing when you change the class out from under existing objects in the 
    ZODB.  you should still have the CMFMember product present in your Products 
    directory, as well.
    
    once the migration is successful, remember provides a 'remove_cmfmember' 
    external method you can use.  this will clear out the CMFMember remnants that 
    are left in your site.  once this is complete, then you can safely remove the 
    CMFMember code from your Products directory, as well as the CMFMember-based 
    classes that are now obsolete.
    
    -r
    
    • Re: issues migrating from CMFMember

      from Kevin Worth on Mar 05, 2008 05:17 PM
      Thanks, that helped out a lot.  I'm still running into a problem.  I  
      have 3 cmfmember types.  The default type and 2 custom types.  I can  
      "successfully" perform a dry run with the default member type and  
      either of the custom types, but not both of them.
      
      My MIGRATION_MAP currently looks like:
      
      MIGRATION_MAP = {
           'Products.remember.content.Member':
                   {'atct_newTypeFor': {'portal_type': 'Member',
                                        'meta_type': 'Member'},
                    'project_name': PROJECT_NAME,
                    'profile': 'profile-remember:default',
                    },
           'Products.msewww.people.facultyMember.facultyMember':
                   {'atct_newTypeFor': {'portal_type': 'faculty',
                                        'meta_type': 'faculty'},
                    'project_name': 'msewww',
                    'product': 'msewww',
                    },
           'Products.msewww.people.staffMember.staffMember':
                   {'atct_newTypeFor': {'portal_type': 'staff',
                                        'meta_type': 'staff'},
                    'project_name': 'msewww',
        #            'profile': 'profile-remember:default',
                    'product': 'msewww',
                    },
           }
      
      If I comment out either the section for the facultyMember or  
      staffMember (leaving the other enabled) it works (or, I get no errors.  
      I've only don dry runs so I don't know what the outcome looks like)
      
      
      The error is:
      
      	• Dry run selected.
      	• Starting the migration from version: 2.1.2
      	• Attempting to upgrade from: 2.1.2
      	• Removed vcXMLRPC.js
      	• Added icons for copy, cut, paste and delete
      	• Upgrade to: 2.1.3-rc1, completed
      	• Attempting to upgrade from: 2.1.3-rc1
      	• Upgrade to: 2.1.3, completed
      	• Attempting to upgrade from: 2.1.3
      	• Upgrade to: 2.1.4-rc1, completed
      	• Attempting to upgrade from: 2.1.4-rc1
      	• Upgrade to: 2.1.4, completed
      	• Attempting to upgrade from: 2.1.4
      	• Installed CMFPlacefulWorkflow.
      	• Upgrade to: 2.5-alpha1, completed
      	• Attempting to upgrade from: 2.5-alpha1
      	• Upgrade aborted
      	• Error type: Products.ATContentTypes.migration.walker.MigrationError
      	• Error value: MigrationError for obj at /msewww/cmfmember_tmp/ 
      portal_memberdata/admin (staff -> staff): Traceback (most recent call  
      last): File "/Applications/Plone-2.5.5/Instance/Products/ 
      ATContentTypes/migration/walker.py", line 174, in migrate  
      migrator.migrate() File "/Applications/Plone-2.5.5/Instance/Products/ 
      remember/cmfmember/migrator.py", line 85, in migrate return  
      InplaceATItemMigrator.migrate(self, *args, **kw) File "/Applications/ 
      Plone-2.5.5/Instance/Products/contentmigration/basemigrator/ 
      migrator.py", line 191, in migrate self.createNew() File "/ 
      Applications/Plone-2.5.5/Instance/Products/contentmigration/ 
      translocate.py", line 29, in createNew self.new_id, **schema) File "/ 
      Applications/Plone-2.5.5/Instance/Products/contentmigration/ 
      common.py", line 74, in _createObjectByType m(id, *args, **kw) File "/ 
      Applications/Plone-2.5.5/Instance/Products/msewww/people/staff.py",  
      line 49, in addstaff self._setObject(id, o) File "/Applications/ 
      Plone-2.5.5/lib/python/Products/BTreeFolder2/BTreeFolder2.py", line  
      446, in _setObject notify(ObjectAddedEvent(ob, self, id)) File "/ 
      Applications/Plone-2.5.5/lib/python/zope/event/__init__.py", line 23,  
      in notify subscriber(event) File "/Applications/Plone-2.5.5/lib/python/ 
      zope/app/event/dispatching.py", line 66, in dispatch for ignored in  
      subscribers(event, None): File "/Applications/Plone-2.5.5/lib/python/ 
      zope/component/__init__.py", line 181, in subscribers return  
      sitemanager.subscribers(objects, interface) File "/Applications/ 
      Plone-2.5.5/lib/python/zope/component/site.py", line 89, in  
      subscribers return self.adapters.subscribers(required, provided) File  
      "/Applications/Plone-2.5.5/lib/python/zope/interface/adapter.py", line  
      481, in subscribers subscribers = [subscription(*objects) File "/ 
      Applications/Plone-2.5.5/lib/python/zope/app/event/objectevent.py",  
      line 192, in objectEventNotify adapters = subscribers((event.object,  
      event), None) File "/Applications/Plone-2.5.5/lib/python/zope/ 
      component/__init__.py", line 181, in subscribers return  
      sitemanager.subscribers(objects, interface) File "/Applications/ 
      Plone-2.5.5/lib/python/zope/component/site.py", line 89, in  
      subscribers return self.adapters.subscribers(required, provided) File  
      "/Applications/Plone-2.5.5/lib/python/zope/interface/adapter.py", line  
      481, in subscribers subscribers = [subscription(*objects) File "/ 
      Applications/Plone-2.5.5/lib/python/OFS/subscribers.py", line 114, in  
      dispatchObjectMovedEvent callManageAfterAdd(ob, event.object,  
      event.newParent) File "/Applications/Plone-2.5.5/lib/python/OFS/ 
      subscribers.py", line 144, in callManageAfterAdd  
      ob.manage_afterAdd(item, container) File "/Applications/Plone-2.5.5/ 
      Instance/Products/CMFMember/content/member.py", line 1143, in  
      manage_afterAdd self.base_archetype.manage_afterAdd(self, object,  
      container) File "/Applications/Plone-2.5.5/Instance/Products/ 
      Archetypes/BaseContent.py", line 42, in manage_afterAdd  
      CatalogMultiplex.manage_afterAdd(self, item, container) File "/ 
      Applications/Plone-2.5.5/Instance/Products/CMFCore/ 
      CMFCatalogAware.py", line 202, in manage_afterAdd self.indexObject()  
      File "/Applications/Plone-2.5.5/Instance/Products/Archetypes/ 
      CatalogMultiplex.py", line 36, in indexObject c.catalog_object(self,  
      url) File "/Applications/Plone-2.5.5/Instance/Products/CMFPlone/ 
      CatalogTool.py", line 357, in catalog_object update_metadata,  
      pghandler=pghandler) File "/Applications/Plone-2.5.5/Instance/Products/ 
      CacheSetup/patch.py", line 87, in catalog_object return call(self,  
      'catalog_object', obj, uid, idxs, update_metadata) File "/Applications/ 
      Plone-2.5.5/Instance/Products/CacheSetup/patch_utils.py", line 6, in  
      call return getattr(self, PATTERN % __name__)(*args, **kw) File "/ 
      Applications/Plone-2.5.5/lib/python/Products/ZCatalog/ZCatalog.py",  
      line 567, in catalog_object update_metadata=update_metadata) File "/ 
      Applications/Plone-2.5.5/lib/python/Products/ZCatalog/Catalog.py",  
      line 339, in catalogObject index = self.updateMetadata(object, uid)  
      File "/Applications/Plone-2.5.5/lib/python/Products/ZCatalog/ 
      Catalog.py", line 277, in updateMetadata newDataRecord =  
      self.recordify(object) File "/Applications/Plone-2.5.5/lib/python/ 
      Products/ZCatalog/Catalog.py", line 417, in recordify if(attr is not  
      MV and safe_callable(attr)): attr=attr() File "/Applications/ 
      Plone-2.5.5/Instance/Products/CMFMember/content/member.py", line 442,  
      in getGroups pref = acl_users.getGroupPrefix() AttributeError:  
      getGroupPrefix
      	• File "/Applications/Plone-2.5.5/Instance/Products/CMFPlone/ 
      MigrationTool.py", line 308, in upgrade newv, msgs = self._upgrade(newv)
      	• File "/Applications/Plone-2.5.5/Instance/Products/CMFPlone/ 
      MigrationTool.py", line 416, in _upgrade res = function(self.aq_parent)
      	• File "/Applications/Plone-2.5.5/Instance/Products/CMFPlone/ 
      migrations/v2_5/alphas.py", line 24, in alpha1_alpha2  
      installPlonePAS(portal, out)
      	• File "/Applications/Plone-2.5.5/Instance/Products/remember/ 
      cmfmember/monkey.py", line 61, in installPlonePAS result =  
      InstallPlonePAS.install(portal)
      	• File "/Applications/Plone-2.5.5/Instance/Products/PlonePAS/ 
      Extensions/Install.py", line 845, in install restoreUserData(portal,  
      out, userdata)
      	• File "/Applications/Plone-2.5.5/Instance/Products/remember/ 
      cmfmember/monkey.py", line 179, in restoreUserData  
      migrateCMFMembers(portal, out)
      	• File "/Applications/Plone-2.5.5/Instance/Products/remember/ 
      cmfmember/migrator.py", line 161, in migrateCMFMembers  
      migrator(portal, out)
      	• File "/Applications/Plone-2.5.5/Instance/Products/remember/ 
      cmfmember/migrator.py", line 149, in migrateCMFMemberType  
      use_catalog_patch=False)
      	• File "/Applications/Plone-2.5.5/Instance/Products/ATContentTypes/ 
      migration/common.py", line 224, in migratePortalType walk.go()
      	• File "/Applications/Plone-2.5.5/Instance/Products/ATContentTypes/ 
      migration/walker.py", line 126, in go self.migrate(self.walk(),  
      **kwargs)
      	• File "/Applications/Plone-2.5.5/Instance/Products/ATContentTypes/ 
      migration/walker.py", line 205, in migrate raise  
      MigrationError(objpath, migrator, tb)
      	• End of upgrade path, migration has finished
      	• The upgrade path did NOT reach current version
      	• Migration has failed
      	• Dry run selected, transaction aborted
      
      
      
      On Mar 4, 2008, at 9:27 PM, Rob Miller wrote:
      
      > Kevin Worth wrote:
      >> Hi-
      >> I'm trying to move up from a CMFMember based site to a remember  
      >> site.  I'm having issues with the migration.  I have a feeling it  
      >> is either in my MIGRATION_MAP for my custom member types or the way  
      >> I am handling the new remember-based members.
      >> I regenerated my member types (faculty and staff) using ArchGenXML  
      >> 1.5.2 by changing the stereotype for member to remember.  I then  
      >> replaced the existing faculty.py and staff.py with the newly  
      >> generated files.  Should the original faculty.py and staff.py be  
      >> somewhere?
      >
      > yes, i'd recommend creating your new, remember-based classes in a  
      > different module, alongside the original CMFMember-based classes.   
      > things can get a bit confusing when you change the class out from  
      > under existing objects in the ZODB.  you should still have the  
      > CMFMember product present in your Products directory, as well.
      >
      > once the migration is successful, remember provides a  
      > 'remove_cmfmember' external method you can use.  this will clear out  
      > the CMFMember remnants that are left in your site.  once this is  
      > complete, then you can safely remove the CMFMember code from your  
      > Products directory, as well as the CMFMember-based classes that are  
      > now obsolete.
      >
      > -r
      >
      >
      > --
      > Archive: http://www.openplans.org/projects/remember/lists/remember/archive/2008/03/1204684075850
      > To unsubscribe send an email with subject unsubscribe to remember@... 
      > .  Please contact remember-manager@... for questions.
      >
      >
      >
      
      
      ---------------------------------------------------
      Kevin Worth <kworth@...>
      Senior IT Administrator
      Department of Materials Science and Engineering
      University of Michigan