def markNewContentObject(obj, event): """Mark newly created content as Pigeonhole-aware if its portal type is in our list of Aware types""" # get our local utility # this is incidentally also our lame check # to see if PH is installed here try: utility = getUtility(IPigeonholizer) except ComponentLookupError: # ignore problems when we can't find the utility -- PH might not # be installed utility = None if utility is not None: if obj.portal_type in utility.ph_aware_types: alsoProvides(obj, IPigeonholeAware) elif blobsAvailable: # in Plone 3, the meta_type for blob-based Images and Files # is just ATBlob, but thanks to a custom factory, they DO have # marker interfaces set. Check them! if "Image" in utility.ph_aware_types and \ IATBlobImage.providedBy(obj): alsoProvides(obj, IPigeonholeAware) elif "File" in utility.ph_aware_types and \ IATBlobFile.providedBy(obj): alsoProvides(obj, IPigeonholeAware) if disableCache is not None: disableCache(getSite().REQUEST)
def testImageBlobInterfaces(self): foo = self.folder[self.folder.invokeFactory('Image', 'foo')] self.assertTrue(atimage.IATImage.providedBy(foo), 'no IATImage?') self.assertTrue(atimage.IImageContent.providedBy(foo), 'no IImageContent?') self.assertTrue(IATBlobImage.providedBy(foo), 'no IATBlobImage?') if not IInterface.providedBy(Z2IATFile): # this is zope < 2.12 self.assertTrue(Z2IATImage.isImplementedBy(foo), 'no zope2 IATImage?') self.assertFalse(Z2IATFile.isImplementedBy(foo), 'zope2 IATFile?')
def __str__(self): """ return data as a string; this is highly inefficient as it loads the complete blob content into memory, but the method is unfortunately still used here and there... """ if IATBlobImage.providedBy(self): return self.getPrimaryField().tag(self) else: return self.get_data()
def preview_image(self, uuid): images = self.contained_items(uuid) preview = None if len(images): first_item = images[0].getObject() if IATBlobImage.providedBy(first_item): preview = first_item return preview
def index_html(self, REQUEST, RESPONSE): """ download the file inline or as an attachment """ field = self.getPrimaryField() if IATBlobImage.providedBy(self): return field.index_html(self, REQUEST, RESPONSE) elif field.getContentType(self) in ATFile.inlineMimetypes: return field.index_html(self, REQUEST, RESPONSE) else: return field.download(self, REQUEST, RESPONSE)
def __repr__(self): """ try to mimic the the old file and image types from ATCT for improved test compatibility """ res = super(ATBlob, self).__repr__() if IATBlobFile.providedBy(self): res = res.replace(ATBlob.__name__, 'ATFile', 1) elif IATBlobImage.providedBy(self): res = res.replace(ATBlob.__name__, 'ATImage', 1) return res
def fields(self): if IATBlobImage.providedBy( self.context) or (has_dx and IImage.providedBy(self.context)): fields = z3cfield.Fields(self.interface) fields['bannerImageLink'].widgetFactory = ContentTreeFieldWidget else: fields = z3cfield.Fields(self.interface).select( 'bannerLocalOnly', 'bannerStopAcquisition') return fields
def getImageTag(self, item, scalename): if IATBlobImage.providedBy(item): obj = item else: obj = item.getObject() scales = getMultiAdapter((obj, self.request), name='images') if scalename == 'thumb': scale = scales.scale('image', width=100, height=100) else: scale = scales.scale('image', width=500, height=500) item = {} if scale is not None: item['url'] = scale.url item['width'] = scale.width item['height'] = scale.height return item
def testWebDavUpload(self): image = StringIO(getImage()) image.filename = 'original.gif' base = '/'.join(self.folder.getPhysicalPath()) response = self.publish(base + '/image', request_method='PUT', stdin=image, basic=self.getCredentials(), env={'CONTENT_TYPE': 'image/gif'}) self.assertEqual(response.getStatus(), 201) self.failUnless('image' in self.folder.objectIds()) obj = self.folder.image self.assertEqual(obj.getPortalTypeName(), 'Image') self.failUnless(IATBlobImage.providedBy(obj), 'no blob?') self.assertEqual(str(obj.getField('image').get(obj)), image.getvalue()) # on initial (webdav) upload no filename is set by the client, # so it should end up being equal to the last path/url component... self.assertEqual(obj.getFilename(), 'image')
def testWebDavUpload(self): image = StringIO(getImage()) image.filename = 'original.gif' base = '/'.join(self.folder.getPhysicalPath()) response = self.publish(base + '/image', request_method='PUT', stdin=image, basic=self.getCredentials(), env={'CONTENT_TYPE': 'image/gif'}) self.assertEqual(response.getStatus(), 201) self.assertTrue('image' in self.folder.objectIds()) obj = self.folder.image self.assertEqual(obj.getPortalTypeName(), 'Image') self.assertTrue(IATBlobImage.providedBy(obj), 'no blob?') self.assertEqual(str(obj.getField('image').get(obj)), image.getvalue()) # on initial (webdav) upload no filename is set by the client, # so it should end up being equal to the last path/url component... self.assertEqual(obj.getFilename(), 'image')
def index_html(self, REQUEST, RESPONSE): """ download the file inline or as an attachment """ field = self.getPrimaryField() if IATBlobImage.providedBy(self): return field.index_html(self, REQUEST, RESPONSE) elif field.getContentType(self) in ATFile.inlineMimetypes: if self.activ_download: return field.index_html(self, REQUEST, RESPONSE) else: url = self.aq_parent.absolute_url() UtilMyvindula().setStatusMessage('error','Este arquivo não está autorizado para download') self.REQUEST.RESPONSE.redirect(url) else: if self.activ_download: return field.download(self, REQUEST, RESPONSE) else: url = self.aq_parent.absolute_url() UtilMyvindula().setStatusMessage('error','Este arquivo não está autorizado para download') self.REQUEST.RESPONSE.redirect(url)
def testWebDavUpload(self): image = StringIO(getImage()) image.filename = "original.gif" base = "/".join(self.folder.getPhysicalPath()) response = self.publish( base + "/image", request_method="PUT", stdin=image, basic=self.getCredentials(), env={"CONTENT_TYPE": "image/gif"}, ) self.assertEqual(response.getStatus(), 201) self.assertTrue("image" in self.folder.objectIds()) obj = self.folder.image self.assertEqual(obj.getPortalTypeName(), "Image") self.assertTrue(IATBlobImage.providedBy(obj), "no blob?") self.assertEqual(str(obj.getField("image").get(obj)), image.getvalue()) # on initial (webdav) upload no filename is set by the client, # so it should end up being equal to the last path/url component... self.assertEqual(obj.getFilename(), "image")
def set(self, instance, value, **kwargs): super(BlobImageField, self).set(instance, value, **kwargs) if not kwargs.get('_initializing_', False) and (IATBlobImage.providedBy(instance) or isinstance(instance, ATImage)): self.fixAutoId(instance)
def canBackground(self): if has_dx and IImage.providedBy(self.context): return True return IATBlobImage.providedBy(self.context)