Пример #1
0
    def _create_file(self, item, files, title, description, rights):
        namechooser = INameChooser(self.context)
        content_type = item.headers.get('Content-Type')
        filename = safe_unicode(item.filename)
        data = item.read()
        id_name = ''
        title = title and title[0] or filename
        id_name = namechooser.chooseName(title, self.context)

        if content_type in IMAGE_MIMETYPES:
            portal_type = 'Image'
            wrapped_data = NamedBlobImage(data=data, filename=filename)
        else:
            portal_type = 'File'
            wrapped_data = NamedBlobFile(data=data, filename=filename)

        self.context.invokeFactory(portal_type,
                                   id=id_name,
                                   title=title,
                                   description=description[0],
                                   rights=rights[0])
        newfile = self.context[id_name]
        if portal_type == 'File':
            if IATFile.providedBy(newfile):
                newfile.setFile(data, filename=filename)
            else:
                newfile.file = wrapped_data
        elif portal_type == 'Image':
            if IATImage.providedBy(newfile):
                newfile.setImage(data, filename=filename)
            else:
                newfile.image = wrapped_data
        newfile.reindexObject()
        notify(ObjectModifiedEvent(newfile))
        return newfile
Пример #2
0
 def testFileBlobInterfaces(self):
     foo = self.folder[self.folder.invokeFactory('File', 'foo')]
     self.assertTrue(atfile.IATFile.providedBy(foo), 'no IATFile?')
     self.assertTrue(atfile.IFileContent.providedBy(foo), 'no IFileContent?')
     self.assertTrue(IATBlobFile.providedBy(foo), 'no IATBlobFile?')
     if not IInterface.providedBy(Z2IATFile):    # this is zope < 2.12
         self.assertTrue(Z2IATFile.isImplementedBy(foo), 'no zope2 IATFile?')
         self.assertFalse(Z2IATImage.isImplementedBy(foo), 'zope2 IATImage?')
 def test_images(self):
     view = api.content.get_view('view', self.task, self.request)
     self.assertEqual(len(view.images()), 0)
     api.content.create(self.task, 'Image', 'image')
     self.assertEqual(len(view.images()), 1)
     self.assertTrue(IATImage.providedBy(view.images()[0]))
     api.content.delete(self.task['image'])
     self.assertEqual(len(view.images()), 0)
Пример #4
0
 def testImageBlobInterfaces(self):
     foo = self.folder[self.folder.invokeFactory('Image', 'foo')]
     self.failUnless(atimage.IATImage.providedBy(foo), 'no IATImage?')
     self.failUnless(atimage.IImageContent.providedBy(foo), 'no IImageContent?')
     self.failUnless(IATBlobImage.providedBy(foo), 'no IATBlobImage?')
     if not IInterface.providedBy(Z2IATFile):    # this is zope < 2.12
         self.failUnless(Z2IATImage.isImplementedBy(foo), 'no zope2 IATImage?')
         self.failIf(Z2IATFile.isImplementedBy(foo), 'zope2 IATFile?')
Пример #5
0
 def testFileBlobInterfaces(self):
     foo = self.folder[self.folder.invokeFactory('File', 'foo')]
     self.assertTrue(atfile.IATFile.providedBy(foo), 'no IATFile?')
     self.assertTrue(atfile.IFileContent.providedBy(foo), 'no IFileContent?')
     self.assertTrue(IATBlobFile.providedBy(foo), 'no IATBlobFile?')
     if not IInterface.providedBy(Z2IATFile):    # this is zope < 2.12
         self.assertTrue(Z2IATFile.isImplementedBy(foo), 'no zope2 IATFile?')
         self.assertFalse(Z2IATImage.isImplementedBy(foo), 'zope2 IATImage?')
Пример #6
0
    def upload(self, files, title='', description=''):
        loaded = []
        namechooser = INameChooser(self.context)
        if not isinstance(files, list):
            files = [files]
        for item in files:
            if item.filename:
                content_type = item.headers.get('Content-Type')
                filename = safe_unicode(item.filename)
                data = item.read()
                id_name = ''
                title = title and title[0] or filename
                # Get a unique id here
                id_name = namechooser.chooseName(title, self.context)

                # Portal types allowed : File and Image
                # Since Plone 4.x both types use Blob
                if content_type in IMAGE_MIMETYPES:
                    portal_type = 'ArquivoBiblioteca'
                    wrapped_data = NamedBlobFile(data=data, filename=filename)
                else:
                    portal_type = 'ArquivoBiblioteca'
                    wrapped_data = NamedBlobFile(data=data, filename=filename)

                # Create content
                self.context.invokeFactory(portal_type,
                                           id=id_name,
                                           title=title,
                                           description=description[0])

                newfile = self.context[id_name]

                if not newfile.Title():
                    newfile.setTitle(title)
                    import transaction
                    transaction.commit()

                if IBoaPratica.providedBy(self.context):
                    newfile.setUid_pratica(self.context)

                # Set data
                if portal_type == 'ArquivoBiblioteca':
                    if IATFile.providedBy(newfile):
                        newfile.setFile(data, filename=filename)
                    else:
                        newfile.file = wrapped_data
                elif portal_type == 'ArquivoBiblioteca':
                    if IATImage.providedBy(newfile):
                        newfile.setImage(data, filename=filename)
                    else:
                        newfile.image = wrapped_data
                # Finalize content creation, reindex it
                newfile.reindexObject()
                notify(ObjectModifiedEvent(newfile))
                loaded.append(newfile)
            if loaded:
                return loaded
            return False
Пример #7
0
    def media_type(self, obj):
        media = ''
        if IATImage.providedBy(obj):
            media = 'image'

        if IVideo.providedBy(obj):
            media = 'video'

        return media
Пример #8
0
def resolveImage(context, src):
    """ Try to resolve an image based on its src which
        can be a relative URL, an absolute URL or an URL
        using UIDs. Image scales can be annotated through
        image_<scale> or using the newer plone.app.imaging
        mechanism. Much fun :-P
    """

    if context is None:
        context = getSite()
    parse_result = urlparse(unquote(src))
    path = str(parse_result.path)
    img_obj = None

    if path.startswith('resolveuid'):
        # can be resolveuid/<uid>/@@images/image/preview
        path_parts = path.split('/')
        ref_catalog = getToolByName(context, 'reference_catalog')
        img_obj = ref_catalog.lookupObject(path_parts[1])
    else:

        candidates = [path, path[1:]] # with and without leading '/'
        # check for a possible URL redirection
        if src.startswith('http'):
            req = Request(src)

            try:
                result = urlopen(req)
            except HTTPError:
                result = None

            if result and result.url != src:
                # a redirection happened
                parse_result2 = urlparse(unquote(result.url))
                path2 = str(parse_result2.path)
                candidates.extend([path2, path2[1:]])

        for p in candidates:
            img_obj = context.restrictedTraverse(p, None)
            if img_obj:
                if img_obj.portal_type in ('Image',):
                    # check if current image is a scale (having a parent image)
                    if IATImage.providedBy(img_obj.aq_parent):
                        img_obj = img_obj.aq_parent
                    break
                elif isinstance(img_obj, ImageScale):
                    img_obj = img_obj.aq_parent
                    break
                elif isinstance(img_obj.aq_inner.aq_base, Image):
                    img_obj = img_obj.aq_inner.aq_base
                    break
                elif isinstance(img_obj.aq_parent, Image):
                    break

            else:
                img_obj = None
    return dict(image=img_obj)
Пример #9
0
def resolveImage(context, src):
    """ Try to resolve an image based on its src which 
        can be a relative URL, an absolute URL or an URL
        using UIDs. Image scales can be annotated through
        image_<scale> or using the newer plone.app.imaging
        mechanism. Much fun :-P
    """

    if context is None:
        context = getSite()
    ref_catalog = getToolByName(context, 'reference_catalog')
    parse_result = urlparse(unquote(src))
    path = str(parse_result.path)
    img_obj = None

    if path.startswith('resolveuid'):
        # can be resolveuid/<uid>/@@images/image/preview
        path_parts = path.split('/')
        img_obj = ref_catalog.lookupObject(path_parts[1])
    else:

        candidates = [path, path[1:]]  # with and without leading '/'
        # check for a possible URL redirection
        if src.startswith('http'):
            req = Request(src)

            try:
                result = urlopen(req)
            except HTTPError:
                result = None

            if result and result.url != src:
                # a redirection happened
                parse_result2 = urlparse(unquote(result.url))
                path2 = str(parse_result2.path)
                candidates.extend([path2, path2[1:]])

        for p in candidates:
            img_obj = context.restrictedTraverse(p, None)
            if img_obj:
                if img_obj.portal_type in ('Image', ):
                    # check if current image is a scale (having a parent image)
                    if IATImage.providedBy(img_obj.aq_parent):
                        img_obj = img_obj.aq_parent
                    break
                elif isinstance(img_obj, ImageScale):
                    img_obj = img_obj.aq_parent
                    break
                elif isinstance(img_obj.aq_inner.aq_base, Image):
                    img_obj = img_obj.aq_inner.aq_base
                    break
                elif isinstance(img_obj.aq_parent, Image):
                    break

            else:
                img_obj = None
    return img_obj
Пример #10
0
 def get_gallery_pictures(self):
     gallery = None
     pictures = []
     num_pictures = self.data.num_pictures
     galleries = self.get_galleries()
     if galleries:
         gallery = random.choice(galleries).getObject()
         pictures = [pic for pic in gallery.contentValues()
                     if IATImage.providedBy(pic)]
         if len(pictures) > num_pictures:
             pictures = random.sample(pictures, num_pictures)
     return {'gallery': gallery, 'pictures': pictures}
Пример #11
0
    def upload(self, files, title='', description='', rights=''):
        loaded = []
        namechooser = INameChooser(self.context)
        if not isinstance(files, list):
            files = [files]
        for item in files:
            if item.filename:
                content_type = item.headers.get('Content-Type')
                filename = safe_unicode(item.filename)
                data = item.read()
                id_name = ''
                title = title and title[0] or filename
                # Get a unique id here
                id_name = namechooser.chooseName(title, self.context)

                # Portal types allowed : File and Image
                # Since Plone 4.x both types use Blob
                if content_type in IMAGE_MIMETYPES:
                    portal_type = 'Image'
                    wrapped_data = NamedBlobImage(data=data, filename=filename)
                else:
                    portal_type = 'File'
                    wrapped_data = NamedBlobFile(data=data, filename=filename)

                # Create content
                newfile = api.content.create(
                    container=self.context,
                    type=portal_type,
                    id=id_name,
                    title=title,
                    description=description[0],
                    rights=rights[0]
                )

                # Set data
                if portal_type == 'File':
                    if IATFile.providedBy(newfile):
                        newfile.setFile(data, filename=filename)
                    else:
                        newfile.file = wrapped_data
                elif portal_type == 'Image':
                    if IATImage.providedBy(newfile):
                        newfile.setImage(data, filename=filename)
                    else:
                        newfile.image = wrapped_data
                # Finalize content creation, reindex it
                newfile.reindexObject()
                notify(ObjectModifiedEvent(newfile))
                loaded.append(newfile)
            if loaded:
                return loaded
            return False
 def _data(self, item):
     item.update({'title': item['brain'].Title,
                  'description': item['brain'].Description,
                  'class': ''})
     if item.has_key('show') and item['show']:
         item['class'] += ' hidden'
     if IATImage.providedBy(item['obj']):
         img = IImage(item['obj'])
         item['image'] = img.getImage(self.thumb_size)
     elif MEDIA and IVideoEmbed.providedBy(item['obj']):
         embedders = component.getAdapters((item['obj'],), IVideoEmbedder)
         item['embed'] = True
         item['url'] = item['brain'].getRemoteUrl
         for name, embedder in embedders:
             if embedder.matches():
                 item['code'] = embedder.getEmbedCode()
                 item['provider'] = embedder.name
     elif MEDIA and IVideo.providedBy(item['obj']):
         view = component.queryMultiAdapter((item['obj'], self.request,), name='flowplayer')
         teaser = ITeaser(item['obj'])
         item['image'] = teaser.getTeaser(self.thumb_size)
         item['embed'] = False
         item['url'] = view is None and item['brain'].getURL() or view.href()
Пример #13
0
 def image(self):
     if IATImage.providedBy(self.context):
         return self.context
     return self.context.getField('image')
Пример #14
0
    def folderupload(self, files, title='', description=''):

        if not self.doc.isDocument():
            return

        self.doc.setfile(self.doc, files[0])

        docfolderId = self.doc.getId()
        dbfolderId = self.doc.getParentDatabase().id

        #TODO come configurare diverse cartelle per applicazione o plomino db (da fare sulle singole app)?
        target = self.context.portal_url.getPortalObject()[ATTACHMENT_FOLDER]

        with adopt_roles('Manager'):
            if not dbfolderId in target.keys():
                target.invokeFactory("Folder", id=dbfolderId, title=dbfolderId)
            target = target[dbfolderId]
            if not docfolderId in target.keys():
                target.invokeFactory("Folder",
                                     id=docfolderId,
                                     title=docfolderId)
            docFolder = target[docfolderId]
            for username, roles in self.doc.get_local_roles():
                docFolder.manage_setLocalRoles(username, roles)

        if not isinstance(files, list):
            files = [files]

        #se non  campo multiplo vuoto la cartella
        #TODO tenere allineati i files nella cartella con i nomi sul campo di plomino
        current_files = self.doc.getItem(self.element)
        cleaned_files = {}
        if self.multiple:
            for fName in current_files:
                if fName in docFolder.keys():
                    cleaned_files[fName] = current_files[fName]
            self.doc.setItem(self.element, cleaned_files)

        #se upload singolo cancello tutti i file presenti collegati al campo
        else:
            try:
                docFolder.manage_delObjects(current_files.keys())
            except Exception as error:
                pass
            self.doc.removeItem(self.element)

        namechooser = INameChooser(docFolder)
        loaded = []
        for item in files:
            if item.filename:
                content_type = item.headers.get('Content-Type')
                filename = safe_unicode(item.filename)
                data = item.read()
                id_name = ''
                title = title and title[0] or filename
                # Get a unique id here
                id_name = namechooser.chooseName(title, docFolder)

                # Portal types allowed : File and Image
                # Since Plone 4.x both types use Blob
                if content_type in IMAGE_MIMETYPES:
                    portal_type = 'Image'
                    wrapped_data = NamedBlobImage(data=data, filename=filename)
                else:
                    portal_type = 'File'
                    wrapped_data = NamedBlobFile(data=data, filename=filename)

                # Create content
                docFolder.invokeFactory(portal_type,
                                        id=id_name,
                                        title=title,
                                        description=description[0])

                newfile = docFolder[id_name]
                # Set data
                if portal_type == 'File':
                    if IATFile.providedBy(newfile):
                        newfile.setFile(data, filename=filename)
                    else:
                        newfile.file = wrapped_data
                elif portal_type == 'Image':
                    if IATImage.providedBy(newfile):
                        newfile.setImage(data, filename=filename)
                    else:
                        newfile.image = wrapped_data

                # Finalize content creation, reindex it
                newfile.reindexObject()
                notify(ObjectModifiedEvent(newfile))
                loaded.append(newfile)
            if loaded:
                return loaded
            return False
Пример #15
0
    def upload(self, files, title='', description=''):

        #TODO!!!!!!!!!!!!!!!
        #OGNI PACCHETTO CREA LA PROPRIA CARTELLA PER GLI ALLEGATI 
        #E IL GRUPPO DI ISTRUTTORI/RUP 
        #CHE HANNO RUOLI DI CONTRIBUTORI/EDITOR SULLA CARTELLA
        #QUESTO PACCHETTO DEVE CREARE LA CARTELLA DI PARTENZA CHE PER ORA CABLO IN documenti_allegati

        #import pdb;pdb.set_trace()

        if not self.doc.isDocument():
            return

        docfolderId = self.doc.getId()
        dbfolderId = self.doc.getParentDatabase().id

        #TODO come configurare diverse cartelle per applicazione o plomino db (da fare sulle singole app)?
        target = self.context.portal_url.getPortalObject()[ATTACHMENT_FOLDER]

        with adopt_roles('Manager'):
            if not dbfolderId in target.keys():
                target.invokeFactory("Folder", id=dbfolderId, title=dbfolderId)
            target = target[dbfolderId]
            if not docfolderId in target.keys():
                target.invokeFactory("Folder", id=docfolderId, title=docfolderId)
            docFolder = target[docfolderId]
            for username, roles in self.doc.get_local_roles():
                docFolder.manage_setLocalRoles(username, roles)

        if not isinstance(files, list):
            files = [files]

        #se non  campo multiplo vuoto la cartella
        #TODO tenere allineati i files nella cartella con i nomi sul campo di plomino 
        current_files = self.doc.getItem(self.fieldName)
        cleaned_files = {}
        if self.multiple:
            for fName in current_files:
                if fName in docFolder.keys():
                    cleaned_files[fName] = current_files[fName]
            self.doc.setItem(self.fieldName, cleaned_files)

        #se upload singolo cancello tutti i file presenti collegati al campo
        else:
            try:
                docFolder.manage_delObjects(current_files.keys())
            except Exception as error:
                pass
            self.doc.removeItem(self.fieldName)     

        namechooser = INameChooser(docFolder)
        loaded = []
        for item in files:
            if item.filename:
                content_type = item.headers.get('Content-Type')
                filename = safe_unicode(item.filename)
                data = item.read()
                id_name = ''
                title = title and title[0] or filename
                # Get a unique id here
                id_name = namechooser.chooseName(title, docFolder)

                # Portal types allowed : File and Image
                # Since Plone 4.x both types use Blob
                if content_type in IMAGE_MIMETYPES:
                    portal_type = 'Image'
                    wrapped_data = NamedBlobImage(data=data, filename=filename)
                else:
                    portal_type = 'File'
                    wrapped_data = NamedBlobFile(data=data, filename=filename)

                # Create content
                docFolder.invokeFactory(portal_type,
                                           id=id_name,
                                           title=title,
                                           description=description[0])
                newfile = docFolder[id_name]
                # Set data
                if portal_type == 'File':
                    if IATFile.providedBy(newfile):
                        newfile.setFile(data, filename=filename)
                    else:
                        newfile.file = wrapped_data
                elif portal_type == 'Image':
                    if IATImage.providedBy(newfile):
                        newfile.setImage(data, filename=filename)
                    else:
                        newfile.image = wrapped_data

                # Finalize content creation, reindex it
                newfile.reindexObject()
                notify(ObjectModifiedEvent(newfile))
                loaded.append(newfile)
            if loaded:
                return loaded
            return False