def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] with api.env.adopt_roles(['Manager']): self.image = api.content.create( self.portal, 'Image', 'test_image', image=dummy_image(), ) annotations = IAnnotations(self.image) thumbnail = ImageField() thumbnail.set(self.image, dummy_image().data) annotations[THUMBNAIL_KEY] = list([thumbnail]) self.image_view = api.content.get_view( 'document_preview', self.image, self.request, ) self.portal_view = api.content.get_view( 'document_preview', self.portal, self.request, )
def __call__(self): helperutilities.RUN_SHELL_COMMANDS = True log = self.mklog() log('converting preview images...') IF = ImageField() cat = self.context.portal_catalog results = cat(Language='all', portal_type=TYPES, b_size=100000) log(str(len(results))+'\n') for result in results: try: ob = result.getObject() except AttributeError: continue if not hasattr(ob, 'pagePictures') or len(ob.pagePictures)==0: log("NOTFOUND: %s has no pagePictures\n" % result.getPath()) continue first = ob.pagePictures[0] if type(first) == type(IF): continue # wrap as blobfield newpics = [] for pic in ob.pagePictures: NF = ImageField() NF.set(ob, pic) newpics.append(NF) ob.pagePictures = newpics log("Success: %s converted\n" % result.getPath()) return # Code to kill old pagePictures from history # PH = portal.portal_historiesstorage # REP = PH._getZVCRepo() # cnt = 0 # for zvh in REP.objectValues(): # for vid in zvh.getVersionIds(): # data = zvh.getVersionById(vid)._data # wob = data.getWrappedObject() # if not hasattr(wob, 'object'): # continue # rob = wob.object # if hasattr(rob, 'pagePictures'): # pp = rob.pagePictures # if len(pp)>0 and type(pp[0]) == type(''): # print "found one" # rob.pagePictures = [] # rob._p_changed = 1 # #
def run_conversion(self): file_id = 'dump' ext = '.html' filename = file_id + ext inputfilepath = self.html_dump(filename) if not inputfilepath: return cmd = [ docsplit.binary, 'pdf', inputfilepath, '--output', self.storage_dir ] docsplit._run_command(cmd) pdf_path = os.path.join(self.storage_dir, file_id + '.pdf') annotations = IAnnotations(self.context) gsettings = self.gsettings sizes = ( ('large', gsettings.large_size), ('normal', gsettings.normal_size), ('small', gsettings.thumb_size), ) outputfilepath = os.path.join(self.storage_dir, file_id + '.pdf') with codecs.open(outputfilepath, 'r') as pdf_file: annotations[PDF_VERSION_KEY] = pdf_file.read() docsplit.dump_images(pdf_path, self.storage_dir, sizes=sizes, format='gif') thumb_dir = os.path.join(self.storage_dir, 'small') thumbnails = sorted(os.listdir(thumb_dir)) preview_dir = os.path.join(self.storage_dir, 'large') previews = sorted(os.listdir(preview_dir)) previewdata = [] thumbdata = [] for filename in previews[:20]: IF = ImageField() with open(os.path.join(preview_dir, filename)) as img: IF.set(self.context, img.read()) previewdata.append(IF) for filename in thumbnails[:20]: IF = ImageField() with open(os.path.join(thumb_dir, filename)) as img: IF.set(self.context, img.read()) thumbdata.append(IF) annotations[PREVIEW_IMAGES_KEY] = previewdata annotations[THUMBNAIL_KEY] = thumbdata
def __call__(self): annotations = IAnnotations(self.context) # get the contents of the context mimetype, payload = self.getPayload() if mimetype: basetype = mimetype.split('/')[0] else: basetype = None if basetype in EXCLUDE_TYPES: logger.warn('Type {0} is in excluded types, ' 'skipping {1}'.format( basetype, self.context.getId()) ) annotations[PREVIEW_MESSAGE_KEY] = ('There is no preview for this ' 'file type') return try: converted = self.convert_on_server(payload, mimetype) except ServerError as e: if e.args and e.args[0].startswith("Error connecting"): annotations[PREVIEW_MESSAGE_KEY] = ( 'Could not contact conversion server') else: annotations[PREVIEW_MESSAGE_KEY] = ( 'Sorry, this document type cannot be converted. There is ' 'no preview available.') return except ConfigError: converted = self.convert_locally(payload, mimetype) pdfdata = FileField() pdfdata.set(self.context, converted['pdfs'][0]) previewdata = [] thumbdata = [] for filedata in converted['previews'][:20]: IF = ImageField() IF.set(self.context, filedata) previewdata.append(IF) for filedata in converted['thumbnails'][:20]: IF = ImageField() IF.set(self.context, filedata) thumbdata.append(IF) annotations[PDF_VERSION_KEY] = pdfdata annotations[PREVIEW_IMAGES_KEY] = previewdata annotations[THUMBNAIL_KEY] = thumbdata
default=False, widget=atapi.BooleanWidget( label=_(u'label_issueHideImage', default=u'Hide banner image.'), description=_( u'enl_issue_help_hide_image', default=u'If checked, the banner image defined on newsletter \ or on this issue will not be used.'), i18n_domain='EasyNewsletter', )), ImageField( 'image', schemata='settings', max_size=(600, 600), widget=atapi.ImageWidget( display_threshold=512000, label=_(u"ENL_image_label", default=u"Banner image"), description=_( u"ENL_image_desc", default=u"Banner image, you can include in the templates by" + u"\n adding the {{banner}} placeholder into it." + u" By default it should be 600x200 pixel."), ), ), atapi.TextField( 'header', schemata='settings', allowable_content_types=('text/html', 'text/x-plone-outputfilters-html'), default_output_type='text/x-plone-outputfilters-html', default_method='get_default_header', widget=RichTextWidget( rows=10,
storage=atapi.AnnotationStorage(migrate=True), validators=('isTidyHtmlWithCleanup', ), default_output_type='text/x-html-safe', widget=atapi.RichWidget( label=_(u'label_text', u'Texto'), rows=20, allow_file_upload=False, ), ), ImageField( name='image', sizes={ 'large': (768, 768), 'preview': (400, 400), 'mini': (200, 200), 'thumb': (128, 128), 'tile': (64, 64), 'icon': (32, 32), 'listing': (16, 16), }, required=False, widget=atapi.ImageWidget(label=_(u'label_image', u'Imagem'), ), ), )) schema['description'].widget.visible['edit'] = 'invisible' schemata.finalizeATCTSchema(schema) class Destaque(ATCTContent, HistoryAwareMixin): """ """
atapi.StringField('testStringField'), atapi.BooleanField('testBooleanField'), atapi.IntegerField('testIntegerField'), atapi.FloatField('testFloatField'), atapi.FixedPointField('testFixedPointField'), atapi.DateTimeField('testDateTimeField'), atapi.LinesField('testLinesField'), atapi.FileField('testFileField'), atapi.TextField('testTextField'), atapi.ImageField('testImageField'), atapi.ReferenceField('testReferenceField', relationship='testrelation'), atapi.ReferenceField( 'testMVReferenceField', relationship='testrelation', multiValued=True), BlobField('testBlobField'), FileField('testBlobFileField'), ImageField('testBlobImageField'), QueryField('testQueryField'), atapi.StringField('testRequiredField', required=True), atapi.StringField('testReadonlyField', mode='r'), atapi.StringField('testWriteonlyField', mode='w'), atapi.StringField('testReadPermissionField', read_permission=permissions.ManagePortal), atapi.StringField('testWritePermissionField', write_permission=permissions.ManagePortal), atapi.StringField('testURLField', validators=('isURL', )), )) class ATTestDocument(ATDocumentBase): """A test type containing a set of standard Archetypes fields."""
from Products.EEAContentTypes.config import PROJECTNAME from Products.EEAContentTypes.content.interfaces import ICloudVideo from Products.EEAContentTypes.content.ThemeTaggable import ( ThemeTaggable, ThemeTaggable_schema, ) from eea.forms.fields.ManagementPlanField import ManagementPlanField from eea.forms.widgets.ManagementPlanWidget import ManagementPlanWidget schema = Schema(( ImageField('image', required=False, storage=public.AnnotationStorage(migrate=True), languageIndependent=True, widget=ImageWidget( label='Image', label_msgid='EEAContentTypes_label_image', description_msgid='EEAContentTypes_help_image', i18n_domain='eea', show_content_type=False)), TextField('cloudUrl', languageIndependent=True, required=True, schemata='default', storage=AnnotationStorage(migrate=True), default_content_type='text/plain', validators=('videoCloudUrlValidator', ), allowable_content_types=('text/plain', ), default_output_type='text/plain', widget=TextAreaWidget( description='The embedding code for the video from'
widget=ReferenceBrowserWidget( label=_(u'Link Interno'), description= _(u'Caso selecionado o link sera apontado para o local de sua escolha.' ), allow_search=True, allow_browse=True, ), #allowed_types=('Folder',), relationship='link_interno', multiValued=False, ), ImageField( name='imagem', widget=atapi.ImageWidget( label=_(u'Imagem do Banner'), description=_(u'Escolha da imagem do banner.'), ), required=False, ), atapi.BooleanField( name='linkTarget', default=False, widget=atapi.BooleanWidget( label=_(u'Abrir link em nova janela'), description=_( u'Caso selecionado o link sera exibido em uma nova janela'), ), required=False, ), ))
from ftw.subsite import _ from ftw.subsite.config import PROJECTNAME from ftw.subsite.interfaces import ISubsite from plone.app.blob.field import ImageField from plone.app.layout.navigation.interfaces import INavigationRoot from Products.Archetypes import atapi from Products.ATContentTypes.content import folder from Products.ATContentTypes.content import schemata from zope.interface import implements schema = atapi.Schema( (ImageField(name='logo', required=False, storage=atapi.AnnotationStorage(), schemata='subsite', widget=atapi.ImageWidget(label=_(u'label_logo', default=u'Logo'), description=_(u'help_logo', default=u''))), atapi.TextField(name='additional_css', storage=atapi.AnnotationStorage(), schemata='subsite', allowable_content_types=('text/plain', ), default_content_type='text/plain', default_input_type='text/plain', default_output_type='text/plain', widget=atapi.TextAreaWidget( rows=15, label=_(u'label_additional_css', default=u'Additional CSS'), description=_(u'help_additional_css', default=u''))),
description=_( u"EasyNewsletter_help_unsubscribe_string", default=u'This will replace the placeholder {{UNSUBSCRIBE}}.'), i18n_domain='EasyNewsletter', ), ), ImageField( 'image', schemata='personalization', max_size=(600, 600), widget=atapi.ImageWidget( display_threshold=512000, label=_( u"ENL_image_label", default=u"Banner image"), description=_( u"ENL_image_desc", default=u"Banner image, you can include in the templates by" + u"\n adding the {{banner}} placeholder into it." + u" By default it should be 600x200 pixel." ), ), ), ImageField( 'logo', schemata='personalization', max_size=(768, 768), widget=atapi.ImageWidget( display_threshold=512000,
validators=('isURL',), ), ImageField('image', required=True, languageIndependent=True, storage=AnnotationStorage(migrate=True), swallowResizeExceptions= \ zconf.swallowImageResizeExceptions.enable, pil_quality=zconf.pil_config.quality, pil_resize_algo=zconf.pil_config.resize_algo, max_size=zconf.ATImage.max_image_dimension, sizes={'large': (768, 768), 'preview': (400, 400), 'mini': (200, 200), 'thumb': (128, 128), 'tile': (64, 64), 'icon': (32, 32), 'listing': (16, 16), }, validators=(('isNonEmptyFile', V_REQUIRED), ('imageMinSize', V_REQUIRED)), widget=ImageWidget( description='High-res preview image' ' (at least 1024px width)', label='Preview image', show_content_type=False, ) ), TextField( name='body',
u"Total maximum children items to be included " u"while generating PDF for collection " u"or folderish content-types."))), atapi.LinesField( 'types', schemata='default', vocabulary_factory='plone.app.vocabularies.ReallyUserFriendlyTypes', multiValued=1, widget=atapi.MultiSelectionWidget( format='checkbox', label=_(u'Portal types'), description=_( u"Use this PDF Theme for the following Portal-Types."))), ImageField("image", schemata="default", sizes=None, widget=atapi.ImageWidget( label=_(u"Preview"), description=_(u"Upload a preview image for this theme"))), )) THEME_SCHEMA = ATFolder.schema.copy() + EditSchema.copy() def finalize_schema(schema=THEME_SCHEMA): """ Update schema """ for field in schema.fields(): field.write_permission = 'Manage portal' if field.schemata != 'default': field.required = False field.mode = 'r'
def _getAllPageImages(context, size=(320,452)): """ Generate the preview images for a pdf """ pdf = context.get_review_pdf() # import pdb; pdb.set_trace() if pdf: pdf_data = pdf["blob"].open().read() if not pdf or not pdf_data: return "%s has no pdf" %( context.absolute_url()), None else: # Split the pdf, one file per page try: split_pdf_pages = RunSubprocess( "pdftk", output_params="burst output") except SubprocessException, e: return e split_pdf_pages.create_tmp_input(suffix=".pdf", data=pdf_data) split_pdf_pages.create_tmp_output_dir() split_pdf_pages.output_path = os.path.join( split_pdf_pages.tmp_output_dir, "%04d.pdf") split_pdf_pages.run() msg = tuple() if split_pdf_pages.errors != "": msg += ("Message from split_pdf_pages:" "\n%s\n" % split_pdf_pages.errors,) # Convert the pages to .gifs # rewritten to have one converter step per page as we have seen process # sizes larger than 2GB for 60 pages in a batch for filename in glob.glob(split_pdf_pages.tmp_output_dir+"/*.pdf"): pdf_to_image = RunSubprocess( "convert", input_params="-density 250", input_path=filename, output_params= "-resize %sx%s -background white -flatten" % ( size[0], size[1])) outputname = '.'.join(filename.split("/")[-1].split('.')[:-1])+'.gif' pdf_to_image.output_path = os.path.join( split_pdf_pages.tmp_output_dir, outputname) pdf_to_image.run() if pdf_to_image.errors != "": msg += ("Message from pdfs_to_images:" "\n%s\n" % pdf_to_image.errors,) pdf_to_image.clean_up() imgfiles = [gif for gif in os.listdir(split_pdf_pages.tmp_output_dir) if os.path.splitext(gif)[1] == '.gif'] imgfiles.sort() pages = [] for img in imgfiles: img = open(os.path.join( split_pdf_pages.tmp_output_dir, img), "r") img_data = img.read() pages.append(img_data) img.close() # Remove temporary files split_pdf_pages.clean_up() if pages: imgfields = [] for img in pages: IF = ImageField() IF.set(context, img) imgfields.append(IF) setattr(context, 'pagePictures', imgfields) return msg or "Successfully converted %s pages" % len(pages)
"losId", required=False, languageIndependent=True, #widget=atapi.StringWidget(label=_(u"LOS Id"), visible=False), widget=atapi.StringWidget(label=_(u"LOS Id")), ), atapi.TextField( 'text', required=False, searchable=True, validators=('isTidyHtmlWithCleanup', ), default_output_type='text/x-html-safe', widget=atapi.RichWidget(description='', label=_(u'LOS text'), rows=25), ), ImageField('image', widget=atapi.ImageWidget(label=_(u"Image")), validators=('isNonEmptyFile'), languageIndependent=True), backref.BackReferenceField( 'services', relationship='sd_los', multiValued=True, widget=backref.BackReferenceWidget(label=_(u"Services"), ), ), atapi.LinesField( 'synonyms', multiValued=1, searchable=True, #widget=atapi.LinesWidget(label=_(u'Synonyms'), visible=False), widget=atapi.LinesWidget(label=_(u'Synonyms')), ), atapi.LinesField(
schemata="default", required=False, default_output_type="text/x-html-safe", widget=atapi.RichWidget( label=_(u'References and endnotes'), description=_(u'References, endnotes, footnotes, ' u'abbreviations and definitions'), rows=25)), ImageField( name="image", schemata="default", sizes=None, widget=atapi.ImageWidget( label=_("Image"), description= _("Image used for cover, thumbnail and listings, image width should be of minimum 1920px" ), i18n_domain='eea', ), validators=( ('isNonEmptyFile', V_REQUIRED), ('imageMinSize', V_REQUIRED), ('checkFileMaxSize', V_REQUIRED), )), atapi.StringField( name='imageCopyright', schemata="default", widget=atapi.StringWidget( label=_("Image Copyright"), description=_("Enter the copyright information for this image."), i18n_domain='eea', )),
from Products.LinguaPlone import atapi except ImportError: from Products.Archetypes import atapi TransparencySectionSchema = schemata.ATContentTypeSchema.copy() + atapi.Schema( ( # noqa # -*- Your Archetypes field definitions here ... -*- ImageField( "image", required=False, sizes={ "large": (768, 768), "preview": (400, 400), "mini": (200, 200), "thumb": (128, 128), "tile": (64, 64), "icon": (32, 32), "listing": (16, 16), }, widget=ImageWidget( label=_(u"Logo"), show_content_type=False, ), ), atapi.StringField( "category_id", languageIndependent=True, required=True, widget=atapi.StringWidget( label=_(u"Category id"), description=_(u"Enter the transparency portal "
), atapi.BooleanField( name='showImages', required=False, default=True, schemata='default', widget=atapi.BooleanWidget( label=_('label_show_images', default=u'Show images as gallery'), description=_('description_show_images', default=u'Decide you want to show all uploaded ' u'images as gallery'), ), ), ImageField(name='leadimage', required=False, schemata='image', widget=atapi.ImageWidget( label=_(u'label_lead_image', default=u'Lead image'))), )) # Set storage on fields copied from ATFolderSchema, making sure # they work well with the python bridge properties. schemata.finalizeATCTSchema(BlogEntrySchema, folderish=True, moveDiscussion=False) #finalizeZugSchema(BlogEntrySchema, folderish=True, moveDiscussion=False) BlogEntrySchema['effectiveDate'].widget.visible = { 'view': 'visible', 'edit': 'visible' }
atapi.StringField("testStringField"), atapi.BooleanField("testBooleanField"), atapi.IntegerField("testIntegerField"), atapi.FloatField("testFloatField"), atapi.FixedPointField("testFixedPointField"), atapi.DateTimeField("testDateTimeField"), atapi.LinesField("testLinesField"), atapi.FileField("testFileField"), atapi.TextField("testTextField"), atapi.ImageField("testImageField"), atapi.ReferenceField("testReferenceField", relationship="testrelation"), atapi.ReferenceField( "testMVReferenceField", relationship="testrelation", multiValued=True), BlobField("testBlobField"), FileField("testBlobFileField"), ImageField("testBlobImageField"), QueryField("testQueryField"), atapi.StringField("testRequiredField", required=True), atapi.StringField("testReadonlyField", mode="r"), atapi.StringField("testWriteonlyField", mode="w"), atapi.StringField("testReadPermissionField", read_permission=permissions.ManagePortal), atapi.StringField("testWritePermissionField", write_permission=permissions.ManagePortal), atapi.StringField("testURLField", validators=("isURL", )), )) class ATTestDocument(ATDocumentBase): """A test type containing a set of standard Archetypes fields."""
label=_(u"Email address"), description=_(u"Contact email address."), ), required=False, languageIndependent=True), atapi.StringField('phone', widget=atapi.StringWidget( label=_(u"Phone number"), description=_(u"Contact phone number"), ), required=False, languageIndependent=True), ImageField('photo', widget=atapi.ImageWidget( label=_(u"Photo"), description=_(u"A portrait of the person."), ), validators=('isNonEmptyFile'), languageIndependent=True), atapi.StringField('department', widget=atapi.StringWidget(label=_(u"Department"), description=''), required=False), )) PersonSchema["title"].widget.label = _(u"Fullname") PersonSchema["title"].languageIndependent = True schemata.finalizeATCTSchema(PersonSchema, moveDiscussion=False)
from observatorio.conteudo.interfaces import IPublicacao PublicacaoSchema = ATContentTypeSchema.copy() + atapi.Schema(( BlobField( name='arquivo', widget=atapi.FileWidget( label=_(u'Arquivo'), description=_(u'Arquivo da publicacao.'), ), required=True, primary=True, ), ImageField( name='image', widget=atapi.ImageWidget( label=_(u'Imagem Capa'), description=_(u'Imagem da capa da publicacao.'), ), required=False, ), )) schemata.finalizeATCTSchema(PublicacaoSchema) class Publicacao(ATCTFileContent): """ """ implements(IPublicacao) meta_type = "Publicacao"
from plone.app.blob.field import FileField from plone.app.blob.field import ImageField from plone.app.blob.tests.base import changeAllowedSizes from plone.app.blob.tests.base import ReplacementTestCase from plone.app.blob.tests.utils import getFile from Products.Archetypes.public import BaseContent from Products.Archetypes.public import BaseSchema from Products.Archetypes.public import FileWidget from Products.Archetypes.public import ImageWidget from Products.Archetypes.public import registerType from Products.Archetypes.public import Schema SampleSchema = BaseSchema.copy() + Schema(( FileField(name='foo', widget=FileWidget(label='File', description='a file')), ImageField(name='bar', widget=ImageWidget(label='Image', description='an image')), ImageField(name='hmm', sizes={'tiny': (42, 42)}, widget=ImageWidget(label='Image', description='an image')), )) class SampleType(BaseContent): portal_type = 'SampleType' schema = SampleSchema permissions['SampleType'] = packageName + ': SampleType' registerType(SampleType, packageName)
label="Embed code", description=("Tableau embed code should be pasted here."), label_msgid='EEAContentTypes_label_embed', i18n_domain='eea',), ), ImageField('image', required=False, languageIndependent=True, storage=AnnotationStorage(migrate=True), swallowResizeExceptions= \ zconf.swallowImageResizeExceptions.enable, pil_quality=zconf.pil_config.quality, pil_resize_algo=zconf.pil_config.resize_algo, max_size=zconf.ATImage.max_image_dimension, sizes=None, validators=(('isNonEmptyFile', V_REQUIRED), ('imageMinSize', V_REQUIRED)), widget=ImageWidget( description='High-res preview image ' \ '(at least FHD 1920x1080). ' \ 'If the image is removed, a new image will ' \ 'automatically be created after saving', label='Preview image', show_content_type=False, ) ), TextField( name='body', searchable=True, required_for_published=False, required=False,
allowable_content_types=('text/html', ), default_content_type="text/html", default_output_type="text/x-html-safe", widget=RichWidget( label="Body Text", description="Body text used for the country/region intro page", label_msgid='EEAContentTypes_label_body', i18n_domain='eea', ), ), ImageField('image', required=True, storage=public.AnnotationStorage(migrate=True), languageIndependent=True, widget=ImageWidget( label='Background image, use image with minimum width of ' '1920px', label_msgid='EEAContentTypes_label_image', description_msgid='EEAContentTypes_help_image', i18n_domain='eea', show_content_type=False), validators=(('imageMinSize', V_REQUIRED), )), LinesField( name='externalLinks', languageIndependent=True, required=False, widget=LinesWidget( label="External links", description="External links, add one per line as: Title|url", label_msgid='EEAContentTypes_label_external_links', i18n_domain='eea', ),