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
#       
#       
示例#3
0
    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
示例#4
0
    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,
示例#6
0
        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):
    """
    """
示例#7
0
    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."""
示例#8
0
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'
示例#9
0
        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,
    ),
))
示例#10
0
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''))),
示例#11
0
            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',
示例#13
0
                               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)
示例#15
0
     "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(
示例#16
0
                 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',
     )),
示例#17
0
    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 "
示例#18
0
    ),
    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'
}
示例#19
0
    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."""
示例#20
0
                          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)

示例#21
0
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"
示例#22
0
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)
示例#23
0
            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,
示例#24
0
     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',
      ),