def migrate_schema_fields(self): newacc = IEventAccessor(self.new) newacc.start = self.old.start_date newacc.end = self.old.end_date newacc.timezone = str(self.old.start_date.tzinfo) \ if self.old.start_date.tzinfo \ else default_timezone(fallback='UTC') if hasattr(self.old, 'location'): newacc.location = self.old.location if hasattr(self.old, 'attendees'): newacc.attendees = tuple(self.old.attendees.splitlines()) if hasattr(self.old, 'event_url'): newacc.event_url = self.old.event_url if hasattr(self.old, 'contact_name'): newacc.contact_name = self.old.contact_name if hasattr(self.old, 'contact_email'): newacc.contact_email = self.old.contact_email if hasattr(self.old, 'contact_phone'): newacc.contact_phone = self.old.contact_phone if hasattr(self.old, 'text'): # Copy the entire richtext object, not just it's representation IEventSummary(self.new).text = self.old.text # Trigger ObjectModified, so timezones can be fixed up. notify(ObjectModifiedEvent(self.new))
def migrate_schema_fields(self): timezone = str(self.old.start_date.tzinfo) \ if self.old.start_date.tzinfo \ else default_timezone(fallback='UTC') # Customização timezone inicia aqui self.new.timezone = timezone # Customização timezone finaliza aqui self.new.start = datetime_fixer(self.old.start_date, timezone) self.new.end = datetime_fixer(self.old.end_date, timezone) if hasattr(self.old, 'location'): self.new.location = self.old.location if hasattr(self.old, 'attendees'): # Customização attendess inicia aqui # self.new.attendees = tuple(self.old.attendees.splitlines()) if self.old.attendees: self.new.attendees = tuple(self.old.attendees.splitlines()) else: self.new.attendees = tuple() # Customização attendess finalizada if hasattr(self.old, 'event_url'): self.new.event_url = self.old.event_url if hasattr(self.old, 'contact_name'): self.new.contact_name = self.old.contact_name if hasattr(self.old, 'contact_email'): self.new.contact_email = self.old.contact_email if hasattr(self.old, 'contact_phone'): self.new.contact_phone = self.old.contact_phone if hasattr(self.old, 'text'): # Copy the entire richtext object, not just it's representation self.new.text = self.old.text
def migrate_schema_fields(self): old_start = self.old.getField('startDate').get(self.old) old_end = self.old.getField('endDate').get(self.old) old_location = self.old.getField('location').get(self.old) old_attendees = self.old.getField('attendees').get(self.old) old_eventurl = self.old.getField('eventUrl').get(self.old) old_contactname = self.old.getField('contactName').get(self.old) old_contactemail = self.old.getField('contactEmail').get(self.old) old_contactphone = self.old.getField('contactPhone').get(self.old) old_text_field = self.old.getField('text') raw_text = safe_unicode(old_text_field.getRaw(self.old)) mime_type = old_text_field.getContentType(self.old) if raw_text.strip() == '': raw_text = '' old_richtext = RichTextValue(raw=raw_text, mimeType=mime_type, outputMimeType='text/x-html-safe') wholeDay = None if self.old.getField('wholeDay'): wholeDay = self.old.getField('wholeDay').get(self.old) openEnd = None if self.old.getField('openEnd'): openEnd = self.old.getField('openEnd').get(self.old) recurrence = None if self.old.getField('recurrence'): recurrence = self.old.getField('recurrence').get(self.old) if self.old.getField('timezone'): old_timezone = self.old.getField('timezone').get(self.old) else: old_timezone = default_timezone(fallback='UTC') # IEventBasic self.new.start = datetime_fixer(old_start.asdatetime(), old_timezone) self.new.end = datetime_fixer(old_end.asdatetime(), old_timezone) if wholeDay is not None: self.new.whole_day = wholeDay # IEventBasic if openEnd is not None: self.new.open_end = openEnd # IEventBasic if recurrence is not None: self.new.recurrence = recurrence # IEventRecurrence self.new.location = old_location # IEventLocation self.new.attendees = old_attendees # IEventAttendees self.new.event_url = old_eventurl # IEventContact self.new.contact_name = old_contactname # IEventContact self.new.contact_email = old_contactemail # IEventContact self.new.contact_phone = old_contactphone # IEventContact # Copy the entire richtext object, not just it's representation self.new.text = old_richtext
def migrate_datetimefield(src_obj, dst_obj, src_fieldname, dst_fieldname): """Migrate a datefield.""" old_value = src_obj.getField(src_fieldname).get(src_obj) if old_value == '': return if src_obj.getField('timezone', None) is not None: old_timezone = src_obj.getField('timezone').get(src_obj) else: old_timezone = default_timezone(fallback='UTC') new_value = datetime_fixer(old_value.asdatetime(), old_timezone) setattr(dst_obj, dst_fieldname, new_value)
def __call__(self, value): try: # Parse ISO 8601 string with Zope's DateTime module # and convert to a timezone naive datetime in local time from plone.event.utils import default_timezone tzval = default_timezone(self.context) tzinfo = timezone(tzval) dt = dateutil.parser.parse(value) value = tzinfo.localize(dt) except (SyntaxError, DateTimeError) as e: raise ValueError(e.message) self.field.validate(value) return value
def migrate_schema_fields(self): from plone.app.event.dx.behaviors import IEventSummary newacc = IEventAccessor(self.new) newacc.location = self.old.location newacc.start = self.old.start_date newacc.end = self.old.end_date if self.old.start_date.tzinfo: newacc.timezone = str(self.old.start_date.tzinfo) else: newacc.timezone = default_timezone(fallback='UTC') newacc.attendees = self.old.attendees newacc.event_url = self.old.event_url newacc.contact_name = self.old.contact_name newacc.contact_email = self.old.contact_email newacc.contact_phone = self.old.contact_phone # Copy the entire richtext object, not just it's representation IEventSummary(self.new).text = self.old.text # Trigger ObjectModified, so timezones can be fixed up. notify(ObjectModifiedEvent(self.new))
def migrate_schema_fields(self): from plone.app.event.dx.behaviors import IEventSummary old_start = self.old.getField('startDate').get(self.old) old_end = self.old.getField('endDate').get(self.old) old_location = self.old.getField('location').get(self.old) old_attendees = self.old.getField('attendees').get(self.old) old_eventurl = self.old.getField('eventUrl').get(self.old) old_contactname = self.old.getField('contactName').get(self.old) old_contactemail = self.old.getField('contactEmail').get(self.old) old_contactphone = self.old.getField('contactPhone').get(self.old) old_text_field = self.old.getField('text') raw_text = safe_unicode(old_text_field.getRaw(self.old)) mime_type = old_text_field.getContentType(self.old) if raw_text.strip() == '': raw_text = '' old_richtext = RichTextValue(raw=raw_text, mimeType=mime_type, outputMimeType='text/x-html-safe') if self.old.getField('timezone'): old_timezone = self.old.getField('timezone').get(self.old) else: old_timezone = default_timezone(fallback='UTC') acc = IEventAccessor(self.new) acc.start = old_start.asdatetime() # IEventBasic acc.end = old_end.asdatetime() # IEventBasic acc.timezone = old_timezone # IEventBasic acc.location = old_location # IEventLocation acc.attendees = old_attendees # IEventAttendees acc.event_url = old_eventurl # IEventContact acc.contact_name = old_contactname # IEventContact acc.contact_email = old_contactemail # IEventContact acc.contact_phone = old_contactphone # IEventContact # Copy the entire richtext object, not just it's representation IEventSummary(self.new).text = old_richtext # Trigger ObjectModified, so timezones can be fixed up. notify(ObjectModifiedEvent(self.new))
def test_default_timezone(self, os, pytz): from plone.event.utils import default_timezone os.environ.keys.return_value = ['TZ'] os.environ = mock.MagicMock() pytz.timezone().zone = 'zone' self.assertEqual(default_timezone(), 'zone')