def setData(self, data): charset = extractCharset(data['contentType']) try: encodeddata = data['data'].encode(charset) except LookupError: raise UnknownCharset(charset) except UnicodeEncodeError: raise CharsetTooWeak(charset) modified = [] if encodeddata != self.context.data: self.context.data = encodeddata modified.append('data') if self.context.contentType != data['contentType']: self.context.contentType = data['contentType'] modified.append('contentType') formatter = self.request.locale.dates.getFormatter( 'dateTime', 'medium') if modified: event = lifecycleevent.ObjectModifiedEvent( self.context, lifecycleevent.Attributes(IFile, *modified)) zope.event.notify(event) return _("Updated on ${date_time}", mapping={'date_time': formatter.format(datetime.utcnow())})
def migrate(self): orig_id = self.context.getId() orig_obj = self.context.aq_base field = orig_obj.getPrimaryField() file = field.getEditAccessor(orig_obj)() if isinstance(file, filewrapper.FileWrapper): fd, tempfilename = tempfile.mkstemp('', 'ATVideoMigratable__temp__') f = open(tempfilename, 'wb') for x in file.filestream(): f.write(x) f.close() else: tempfilename = fileutils.write_to_tempfile(file) self.container.manage_delObjects([orig_id]) self.container.invokeFactory('File', orig_id) file = self.container[orig_id] f = open(tempfilename, 'rb') file.setFile(f) f.close() os.remove(tempfilename) evt = lifecycleevent.ObjectModifiedEvent(file) event.notify(evt) return True
def apply_data_event(context, form_fields, data, adapters=None, update=False): """Like apply_data, but also sends an IObjectModifiedEvent. """ changes = apply_data(context, form_fields, data, adapters, update) if changes: descriptions = [] for interface, names in changes.items(): descriptions.append(lifecycleevent.Attributes(interface, *names)) event.notify(lifecycleevent.ObjectModifiedEvent( context, *descriptions)) return changes
def set_document_xml_from(self, data, format='kupu', request=None): """Set the document xml of the version from the given data in the given format. """ transformer = EditorTransformer(editor=format) context = Context(self, request) document = transformer.to_source(targetobj=data, context=context)[0] title = document.find('title')[0].extract_text() content = document.find('doc')[0].asBytes(encoding="UTF8") self.content.manage_edit(content) self.set_title(title) notify(lifecycleevent.ObjectModifiedEvent(self))
def update_object(self, data, contenttype): self.context.contentType = contenttype descriptor = lifecycleevent.Attributes(IFile, "contentType") # Update *only* if a new value is specified if data: self.context.data = data descriptor.attributes += ("data", ) event = lifecycleevent.ObjectModifiedEvent(self.context, descriptor) zope.event.notify(event) formatter = self.request.locale.dates.getFormatter( 'dateTime', 'medium') return _("Updated on ${date_time}", mapping={'date_time': formatter.format(datetime.utcnow())})
def query(self): context = Acquisition.aq_inner(self.context) retriever = component.queryUtility(embedifaces.IVideoMetadataRetriever) if retriever is None: raise QueryException('Remote metadata retrieval misconfigured.') url = embedifaces.ILinkProvider(context).getLink() data = retriever.get_metadata(url) result = False if data is None: raise QueryException('Retriever returned no data, most likely ' 'cause is that there is no registered ' 'lookup component for "%s"' % url) video = interfaces.IVideo(context) if getattr(data, 'thumbnail_url', None): video.video_image = build_ofsimage(data.thumbnail_url) if getattr(data, 'title', None): video.title = data.title if getattr(data, 'description', None): video.description = data.description if getattr(data, 'author', None): video.video_author = data.author if getattr(data, 'duration', None): video.duration = data.duration if getattr(data, 'tags', None) and \ has_contenttagging_support(context): from lovely.tag import interfaces as tagifaces tagging = tagifaces.ITagging(context) user = self.username() tags = set(tagging.getTags([user])) for x in data.tags: tags.add(x) tagging.update(user, tags) event.notify(lifecycleevent.ObjectModifiedEvent(context))