Good morning, Plone community!
I am in the process of creating a migration script using transaction and ZODB. When running the script, there are important pieces of data that get skipped. How would I go about fixing this problem in my code?
The code which I am using for the migration is below:
class Cvmigration(BrowserView):
# init function here
def __call__(self):
alsoProvides(self.request, IDisableCSRFProtection)
portal = api.portal.get()
portal_catalog = api.portal.get_tool('portal_catalog')
current_path = '/'.join(self.context.getPhysicalPath())
print('Starting Migration')
colleges = portal_catalog(portal_type='college')
for college in colleges:
print('Creating directory')
college_id = 'directory'
collegeLocation = current_path + '/' + college_id
obj = college.getObject()
try:
transaction.begin()
collegeObject = api.content.create(
type='directory',
id=college_id,
schoolsVocab=obj.schoolsVocab,
departmentVocab=obj.departmentVocab,
programVocab=obj.programVocab,
degreeVocab=obj.degreeVocab,
teachingTitleVocab=obj.teachingTitleVocab,
title=obj.title,
safe_id=True,
container=portal
)
collegeObject.manage_setLocalRoles('rnunez', ['Editor'])
transaction.commit()
print('Directory created ' + str(collegeObject.absolute_url()))
print(collegeLocation)
except IndexError as e:
print(e)
print('Failed to create directory ' + str(obj.absolute_url()))
faculties = portal_catalog(portal_type="Faculty")
for faculty in faculties:
object = faculty.getObject()
facultyLocation = '/'.join(object.getPhysicalPath())
print(str(facultyLocation) + ' - migrating')
try:
image = NamedBlobImage(data=object.image.data,
contentType=object.image.content_type,
filename=unicode(object.image.filename))
except AttributeError:
image = None
try:
transaction.begin()
facultyObject = api.content.create(
container=collegeObject,
type='faculty2',
id=object.id.lower(),
subject=object.subject,
userid=object.userid,
employeeType=object.employeeType,
first_name=object.first_name,
last_name=object.last_name,
teachingTitle=object.teachingTitle,
otherTitle=object.otherTitle,
email=object.email,
website=object.website,
officePhone=object.officePhone,
officeLocation=object.officeLocation,
officeHours=object.officeHours,
image=image,
dept=object.dept,
currentStatus=object.currentStatus,
orgStatus=object.orgStatus,
school=object.school,
prog=object.prog,
education=object.education,
managers=str(object.managers).replace('()-', '').replace('and', '-').replace(',', '').replace('&',
'-').lower(),
ssn=object.ssn,
citizen=object.citizen,
tenure=object.tenure,
Senior=object.Senior,
street=object.street,
apt=object.apt,
city=object.city,
state=object.state,
zipCode=object.zipCode,
homePhone=object.homePhone,
allowDiscussion=object.allowDiscussion,
location=object.location,
language=object.language,
contributors=object.contributors,
creators=object.creators,
rights=object.rights,
# description=object.description,
effectiveDate=object.effectiveDate,
expirationDate=object.expirationDate,
areaExpertise=object.areaExpertise,
briefBio=str(object.briefBio),
experienceFT=object.experienceFT,
experiencePT=object.experiencePT,
experienceNA=object.experienceNA,
employmentRecord=object.employmentRecord,
books=object.books,
articles=object.articles,
refereedProceedings=object.refereedProceedings,
nonRefereedProceedings=object.nonRefereedProceedings,
chapters=object.chapters,
monographs=object.monographs,
reviews=object.reviews,
presented=object.presented,
patents=object.patents,
pubEnhance=object.pubEnhance,
professional=object.professional,
grants=object.grants,
serviceDepartment=object.serviceDepartment,
serviceSchool=object.serviceSchool,
serviceCollege=object.serviceCollege,
serviceGraduateCenter=object.serviceGraduateCenter,
serviceUniversity=object.serviceUniversity,
officeHeld=object.officeHeld,
activities=object.activities,
coursesTaught=object.coursesTaught,
developed=object.developed,
hidecv=object.hidecv,
scholarEnhance=str(object.scholarEnhance),
teachEnhance=str(object.teachEnhance),
safe_id=True,
)
facultyObject.manage_setLocalRoles('rnunez', ['Editor'])
state = api.content.get_state(obj=object)
api.content.transition(obj=facultyObject, to_state=state)
transaction.commit()
print('Faculty created ' + str(facultyObject.absolute_url()))
except IndexError as e:
print(e)
print('Failed to create Faculty ' + str(object.absolute_url()))
# other submigrations in Faculty folder go here...
# staff goes here
# success message goes here
I thank you kindly.
Sincerely,
rbrown12