Beispiel #1
0
class INamedImageField(interfaces.INamedImageField):

    default = field.NamedImage(
        title=interfaces.INamedImageField['default'].title,
        description=interfaces.INamedImageField['default'].description,
        required=False)

    missing_value = field.NamedImage(
        title=interfaces.INamedImageField['missing_value'].title,
        description=interfaces.INamedImageField['missing_value'].description,
        required=False)
class ISchemaWithNamedImage(Interface):
    field = field.NamedImage()
Beispiel #3
0
class IDXTestDocumentSchema(model.Schema):

    # zope.schema fields
    test_ascii_field = schema.ASCII(required=False)
    test_asciiline_field = schema.ASCIILine(required=False)
    test_bool_field = schema.Bool(required=False)
    test_bytes_field = schema.Bytes(required=False)
    test_bytesline_field = schema.BytesLine(required=False)
    test_choice_field = schema.Choice(values=[u"foo", u"bar"], required=False)
    test_choice_field_with_vocabulary = schema.Choice(
        vocabulary=SimpleVocabulary([
            SimpleTerm(u"value1", "token1", u"title1"),
            SimpleTerm(u"value2", "token2", u"title2"),
        ]),
        required=False,
    )
    test_date_field = schema.Date(required=False)
    test_datetime_field = schema.Datetime(required=False)
    test_datetime_tz_field = schema.Datetime(
        required=False,
        defaultFactory=lambda: timezone("Europe/Zurich").localize(
            datetime(2017, 10, 31, 10, 0)),
    )
    test_decimal_field = schema.Decimal(required=False)
    test_dict_field = schema.Dict(required=False)
    test_float_field = schema.Float(required=False)
    test_frozenset_field = schema.FrozenSet(required=False)
    test_int_field = schema.Int(required=False)
    test_list_field = schema.List(required=False)
    test_list_field_with_choice_with_vocabulary = schema.List(
        value_type=schema.Choice(vocabulary=SimpleVocabulary([
            SimpleTerm(u"value1", "token1", u"title1"),
            SimpleTerm(u"value2", "token2", u"title2"),
            SimpleTerm(u"value3", "token3", u"title3"),
        ])),
        required=False,
    )
    test_set_field = schema.Set(required=False)
    test_text_field = schema.Text(required=False)
    test_textline_field = schema.TextLine(required=False)
    test_time_field = schema.Time(required=False)
    test_timedelta_field = schema.Timedelta(required=False)
    test_tuple_field = schema.Tuple(required=False)
    test_nested_list_field = schema.List(required=False,
                                         value_type=schema.Tuple())
    test_nested_dict_field = schema.Dict(required=False,
                                         key_type=schema.ASCIILine(),
                                         value_type=schema.Tuple())
    test_list_choice_with_context_vocabulary_field = schema.List(
        title=u"Field",
        value_type=schema.Choice(
            vocabulary="plone.restapi.testing.context_vocabulary"),
        required=False,
    )

    # plone.app.textfield
    test_richtext_field = RichText(
        required=False, allowed_mime_types=["text/html", "text/plain"])

    # plone.namedfile fields
    test_namedfile_field = namedfile.NamedFile(required=False)
    test_namedimage_field = namedfile.NamedImage(required=False)
    test_namedblobfile_field = namedfile.NamedBlobFile(required=False)
    test_namedblobimage_field = namedfile.NamedBlobImage(required=False)

    # z3c.relationfield
    test_relationchoice_field = RelationChoice(
        required=False, source=CatalogSource(id=["doc1", "doc2"]))
    test_relationlist_field = RelationList(
        required=False,
        value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"),
    )

    # Test fields for validation
    test_required_field = schema.TextLine(required=True)
    test_readonly_field = schema.TextLine(required=False, readonly=True)
    test_maxlength_field = schema.TextLine(required=False, max_length=10)
    test_constraint_field = schema.TextLine(required=False,
                                            constraint=lambda x: u"00" in x)
    test_datetime_min_field = schema.Datetime(required=False,
                                              min=datetime(2000, 1, 1))
    test_time_min_field = schema.Time(required=False, min=time(1))
    test_timedelta_min_field = schema.Timedelta(required=False,
                                                min=timedelta(100))
    test_list_value_type_field = schema.List(required=False,
                                             value_type=schema.Int())
    test_dict_key_type_field = schema.Dict(required=False,
                                           key_type=schema.Int())

    read_permission(test_read_permission_field="cmf.ManagePortal")
    test_read_permission_field = schema.TextLine(required=False)
    write_permission(test_write_permission_field="cmf.ManagePortal")
    test_write_permission_field = schema.TextLine(required=False)

    read_permission(test_read_permission_field="cmf.ManagePortal")
    test_read_permission_field = schema.TextLine(required=False)

    test_invariant_field1 = schema.TextLine(required=False)
    test_invariant_field2 = schema.TextLine(required=False)

    test_missing_value_field = schema.TextLine(required=False,
                                               missing_value=u"missing",
                                               default=u"default")

    test_missing_value_required_field = schema.TextLine(
        required=True, missing_value=u"missing", default=u"some value")

    @invariant
    def validate_same_value(data):
        if data.test_invariant_field1 != data.test_invariant_field2:
            raise Invalid(u"Must have same values")

    # Test fields with default values
    test_default_value_field = schema.TextLine(required=True,
                                               default=u"Default")

    @provider(IContextAwareDefaultFactory)
    def default_factory(context):
        return u"DefaultFactory"

    test_default_factory_field = schema.TextLine(
        required=True, defaultFactory=default_factory)
Beispiel #4
0
class IDXTestDocumentSchema(model.Schema):

    # zope.schema fields
    test_ascii_field = schema.ASCII(required=False)
    test_asciiline_field = schema.ASCIILine(required=False)
    test_bool_field = schema.Bool(required=False)
    test_bytes_field = schema.Bytes(required=False)
    test_bytesline_field = schema.BytesLine(required=False)
    test_choice_field = schema.Choice(values=[u'foo', u'bar'], required=False)
    test_date_field = schema.Date(required=False)
    test_datetime_field = schema.Datetime(required=False)
    test_datetime_tz_field = schema.Datetime(
        required=False,
        defaultFactory=lambda: timezone("Europe/Zurich").localize(
            datetime(2017, 10, 31, 10, 0)))
    test_decimal_field = schema.Decimal(required=False)
    test_dict_field = schema.Dict(required=False)
    test_float_field = schema.Float(required=False)
    test_frozenset_field = schema.FrozenSet(required=False)
    test_int_field = schema.Int(required=False)
    test_list_field = schema.List(required=False)
    test_set_field = schema.Set(required=False)
    test_text_field = schema.Text(required=False)
    test_textline_field = schema.TextLine(required=False)
    test_time_field = schema.Time(required=False)
    test_timedelta_field = schema.Timedelta(required=False)
    test_tuple_field = schema.Tuple(required=False)
    test_nested_list_field = schema.List(
        required=False, value_type=schema.Tuple())
    test_nested_dict_field = schema.Dict(
        required=False, key_type=schema.ASCIILine(), value_type=schema.Tuple())
    test_list_choice_with_context_vocabulary_field = schema.List(
        title=u'Field',
        value_type=schema.Choice(
            vocabulary='plone.restapi.testing.context_vocabulary'),
        required=False)

    # plone.app.textfield
    test_richtext_field = RichText(
        required=False, allowed_mime_types=['text/html', 'text/plain'])

    # plone.namedfile fields
    test_namedfile_field = namedfile.NamedFile(required=False)
    test_namedimage_field = namedfile.NamedImage(required=False)
    test_namedblobfile_field = namedfile.NamedBlobFile(required=False)
    test_namedblobimage_field = namedfile.NamedBlobImage(required=False)

    # z3c.relationfield
    test_relationchoice_field = RelationChoice(
        required=False, source=CatalogSource(id=['doc1', 'doc2']))
    test_relationlist_field = RelationList(
        required=False, value_type=RelationChoice(
            vocabulary="plone.app.vocabularies.Catalog"))

    # Test fields for validation
    test_required_field = schema.TextLine(required=True)
    test_readonly_field = schema.TextLine(required=False, readonly=True)
    test_maxlength_field = schema.TextLine(required=False, max_length=10)
    test_constraint_field = schema.TextLine(required=False,
                                            constraint=lambda x: u'00' in x)
    test_datetime_min_field = schema.Datetime(required=False,
                                              min=datetime(2000, 1, 1))
    test_time_min_field = schema.Time(required=False, min=time(1))
    test_timedelta_min_field = schema.Timedelta(required=False,
                                                min=timedelta(100))
    test_list_value_type_field = schema.List(required=False,
                                             value_type=schema.Int())
    test_dict_key_type_field = schema.Dict(required=False,
                                           key_type=schema.Int())

    read_permission(test_read_permission_field='cmf.ManagePortal')
    test_read_permission_field = schema.TextLine(required=False)
    write_permission(test_write_permission_field='cmf.ManagePortal')
    test_write_permission_field = schema.TextLine(required=False)

    read_permission(test_read_permission_field='cmf.ManagePortal')
    test_read_permission_field = schema.TextLine(required=False)

    test_invariant_field1 = schema.TextLine(required=False)
    test_invariant_field2 = schema.TextLine(required=False)

    @invariant
    def validate_same_value(data):
        if data.test_invariant_field1 != data.test_invariant_field2:
            raise Invalid(u'Must have same values')

    # Test fields with default values
    test_default_value_field = schema.TextLine(
        required=True, default=u'Default')

    @provider(IContextAwareDefaultFactory)
    def default_factory(context):
        return u'DefaultFactory'

    test_default_factory_field = schema.TextLine(
        required=True, defaultFactory=default_factory)
Beispiel #5
0
class IDocumentoPersonale(model.Schema):
    """Marker interface for DocumentoPersonale"""

    protocollo = schema.TextLine(title=_("protocollo", default="Protocollo"),
                                 required=True)

    data_protocollo = schema.Date(
        title=_("data_protocollo", default="Data del protocollo"),
        required=True,
    )

    immagine = field.NamedImage(title=_("immagine", default="Immagine"),
                                required=False)

    pratica_associata = field.NamedFile(
        title=_("pratica_associata", default="Pratica associata"),
        required=True,
    )

    servizio_origine = schema.Choice(
        title=_("servizio_origine",
                default="Servizio che genera il documento"),
        vocabulary="design.plone.contenttypes.Mockup",
        required=True,
    )

    # TODO: come gestiamo i campi "Tipologia del documento", "sottotipologia
    # del documento" e "lingua del documento"?

    # TODO: il vocabolario controllato da usare sara' "Argomenti di interesse
    #  pere gli utenti di un comune"
    argomenti_utenti = schema.Choice(
        title=_("argomenti_utenti", default="Argomenti utenti"),
        vocabulary="design.plone.contenttypes.Mockup",
        required=True,
    )

    oggetto = BlocksField(
        title=_("oggetto", default="Oggetto"),
        # non viene specificato se il campo e' obbligatorio o meno
        required=False,
    )

    # TODO: decidere se "link al documento" sara' un folder o un file. Se e'
    # un folder "formati disponibili" diventa un campo
    # generato facendo una query dei file presenti all'interno di "link al
    #  documento"?
    # Inserito come folder "Allegati" per il momento, magari si chiede

    # TODO: usare vocabolario dinamico per le tipologie di uffici (dovrebbe
    # rientrare nel content type "Unita' organizzativa")
    ufficio_responsabile = schema.Choice(
        title=_(
            "ufficio_responsabile_documento_personale",
            default="Ufficio responsabile",
        ),
        required=True,
        vocabulary="design.plone.contenttypes.Mockup",
    )

    # TODO: usare vocabolario dinamico per le tipologie di aree amministrative
    # (dovrebbe rientrare nel content type "Unita' organizzativa")
    area_responsabile = schema.Choice(
        title=_(
            "area_responsabile_documento_personale",
            default="Area responsabile",
        ),
        required=True,
        vocabulary="design.plone.contenttypes.Mockup",
    )

    # TODO: usare vocabolario dinamico per le gli autori?
    autori = RelationList(
        title="Autore/i",
        default=[],
        value_type=RelationChoice(title=_("Autore"),
                                  vocabulary="plone.app.vocabularies.Catalog"),
        required=False,
    )

    licenza_distribuzione = schema.TextLine(
        title=_("licenza_distribuzione", default="Licenza di distribuzione"),
        required=False,
    )

    # TODO: usare vocabolario dinamico per i servizi collegati?
    servizi_collegati = RelationList(
        title="Servizi collegati",
        default=[],
        value_type=RelationChoice(
            title=_("Servizio collegato"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
        required=False,
    )

    canale_digitale_servizio = schema.TextLine(
        title=_(
            "canale_digitale_servizio",
            default="Canale digitale servizio collegato",
        ),
        required=False,
    )

    data_inizio = schema.Date(title=_("data_inizio", default="Data di inizio"),
                              required=False)

    data_e_fasi_intermedie = BlocksField(
        title=_("data_e_fasi_intermedie", default="Data e fasi intermedie"),
        required=False,
    )

    data_inizio = schema.Date(title=_("data_inizio", default="Data di inizio"),
                              required=False)

    # TODO: vocabolario per i dataset collegati ad un documento
    dataset = RelationList(
        title=_("Dataset"),
        required=False,
        default=[],
        value_type=RelationChoice(
            title=_("Dataset collegato"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
    )

    informazioni = BlocksField(
        title=_("informazioni", default="Ulteriori informazioni"),
        required=False,
    )

    riferimenti_normativi = BlocksField(
        title=_("riferimenti_normativi", default="Riferimenti normativi"),
        required=False,
    )
Beispiel #6
0
class IPerson(model.Schema):
    """ Marker interface and Dexterity Python Schema for Person
        Reference Schema Popolo-spec Person JSON Schema
        https://www.popoloproject.com/specs/person.html
    """
    # If you want, you can load a xml model created TTW here
    # and customize it in Python:

    # model.load('person.xml')

    # directives.widget(level=RadioFieldWidget)
    # level = schema.Choice(
    #     title=_(u'Sponsoring Level'),
    #     vocabulary=LevelVocabulary,
    #     required=True
    # )

    dexteritytextindexer.searchable('name')
    name = schema.TextLine(
        title=_(u'Name'),
        description=_(u'A person\'s preferred full name'),
    )

    dexteritytextindexer.searchable('summary')
    summary = schema.Text(
        title=_(u'Summary'),
        description=_(u'One line description of this person'),
    )

    gender = schema.Choice(
        title=_(u'Gender'),
        vocabulary=SimpleVocabulary([
            SimpleTerm(value=u'male', title=_(u'Male')),
            SimpleTerm(value=u'female', title=_(u'Female')),
            SimpleTerm(value=u'other', title=_(u'Other'))
        ]),
        required=False,
    )

    birth_date = schema.Date(
        title=_(u'Date of Birth'),
        required=False,
    )

    death_date = schema.Date(
        title=_(u'Date of Death'),
        required=False,
    )

    image = field.NamedImage(
        title=_(u"Headshot"),
        description=_(u'Image file of a headshot person'),
        required=False,
    )

    dexteritytextindexer.searchable('biography')
    biography = RichText(
        title=_(u'Biography'),
        description=_(u'Detailed biography of this person'),
        required=False,
    )

    dexteritytextindexer.searchable('notes')
    notes = RichText(title=_(u'Notes'), required=False)
class IOrganization(model.Schema):
    """ Marker interface and Dexterity Python Schema for Organization
        Reference Schema Popolo-spec Organization JSON Schema
        https://www.popoloproject.com/specs/organization.html
    """

    dexteritytextindexer.searchable('name')
    name = schema.TextLine(
        title=_(u'Organization Name'),
        description=_(u"A primary name, e.g. a legally recognized " +
                      "name"),
        required=True,)

    # other_names implemented as content type

    # identifiers applied as content type

    # TODO area field use popolo Area class (content type)
    # https://github.com/Sinar/popolo.contenttypes/issues/12

    # We will not use abstract (one liner) field from popolo-spec for
    # now
    '''
    abstract = schema.Text(
        title=_(u'One-line Description'),
        description=_(u'One line to tell what is the organization about'),
        required=False,)
    '''

    directives.widget('parent_organization',
                      RelatedItemsFieldWidget,
                      pattern_options={
                        'basePath': '/',
                        'mode': 'auto',
                        'favourites': [],
                        }
                      )

    parent_organization = RelationChoice(
            title=u'Parent Org',
            source=CatalogSource(portal_type='Organization'),
            required=False,
            )

    dexteritytextindexer.searchable('description')
    description = schema.Text(
        title=_(u'Description'),
        required=False,)

    classification = schema.Choice(
        title=_('Organization Classification'),
        required=False,
        vocabulary='popolo.contenttypes.organizationcategories',
        )

    founding_date = schema.Date(
        title=_('Date of Founding'),
        required=False,)

    dissolution_date = schema.Date(
        title=_('Date of Dissolution'),
        required=False,)

    image = field.NamedImage(
        title=_(u"Logo"),
        description=_(u'Official logo or emblem of organization'),
        required=False,
        )

    # contact_details implemented as content type in container

    # links implemented as content type in container

    # TODO memberships to be implemented as content type

    # TODO posts to be implemeted as content type

    # motions not implemented for now
    # votes not implemented for now

    # children to be implemented as view of back references to parent_id

    # created, updated using Plone/Dublin Core effective
    # and expiry date fields

    # sources to use content type

    dexteritytextindexer.searchable('notes')
    notes = RichText(
         title=_(u'Notes'),
         required=False
     )
Beispiel #8
0
class IPersona(model.Schema, IDesignPloneContentType):
    """Marker interface for contenttype Persona"""

    foto_persona = field.NamedImage(
        title=_("foto_persona_label", default="Foto della persona"),
        required=False,
        description=_(
            "foto_persona_help",
            default="Foto da mostrare della persona. "
            "La dimensione suggerita è 180x100 px.",
        ),
    )
    ruolo = schema.Choice(
        title=_("ruolo_label", default="Ruolo"),
        description=_(
            "ruolo_help",
            default="Seleziona il ruolo della persona tra quelli disponibili.",
        ),
        vocabulary="design.plone.contenttypes.RuoliPersona",
        required=True,
    )

    organizzazione_riferimento = RelationList(
        title=_(
            "organizzazione_riferimento_label",
            default="Organizzazione di riferimento",
        ),
        description=_(
            "organizzazione_riferimento_help",
            default="Seleziona una lista di organizzazioni a cui la persona"
            " appartiene.",
        ),
        value_type=RelationChoice(
            title=_("Organizzazione di riferimento"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
        default=[],
        required=False,
    )

    data_conclusione_incarico = schema.Date(
        title=_(
            "data_conclusione_incarico_label",
            default="Data conclusione incarico",
        ),
        description=_(
            "data_conclusione_incarico_help",
            default="Data di conclusione dell'incarico.",
        ),
        required=False,
    )

    competenze = BlocksField(
        title=_("competenze_label", default="Competenze"),
        description=_(
            "competenze_help",
            default="Descrizione del ruolo e dei compiti della persona.",
        ),
        required=False,
    )
    deleghe = BlocksField(
        title=_("deleghe_label", default="Deleghe"),
        description=_(
            "deleghe_help",
            default="Elenco delle deleghe a capo della persona.",
        ),
        required=False,
    )

    tipologia_persona = schema.Choice(
        title=_("tipologia_persona_label", default="Tipologia persona"),
        description=_(
            "tipologia_persona_help",
            default="Seleziona la tipologia di persona: politica,"
            " amministrativa o di altro tipo.",
        ),
        vocabulary="design.plone.contenttypes.TipologiaPersona",
        required=True,
    )

    data_insediamento = schema.Date(
        title=_("data_insediamento_label", default="Data insediamento"),
        description=_(
            "data_insediamento_help",
            default="Solo per persona politica: specificare la data di"
            " insediamento.",
        ),
        required=False,
    )

    biografia = BlocksField(
        title=_("biografia_label", default="Biografia"),
        description=_(
            "biografia_help",
            default="Solo per persona politica: testo descrittivo che riporta"
            " la biografia della persona.",
        ),
        required=False,
    )

    telefono = schema.List(
        title=_("telefono_persona_label", default="Numero di telefono"),
        description=_(
            "telefono_persona_help",
            default="Contatto telefonico della persona. E' possibile inserire "
            'più di un numero. Premendo "Invio" o "tab" si può passare al '
            "successivo da inserire.",
        ),
        value_type=schema.TextLine(),
        missing_value=[],
        default=[],
        required=False,
    )
    fax = schema.TextLine(
        title=_("fax_persona_label", default="Fax"),
        description=_("fax_persona_help",
                      default="Indicare un numero di fax."),
        required=False,
    )
    email = schema.List(
        title=_("email_persona_label", default="Indirizzo email"),
        description=_(
            "email_persona_help",
            default="Contatto mail della persona. E' possibile inserire più"
            ' di un indirizzo. Premendo "Invio" o "tab" si può passare al '
            "successivo da inserire.",
        ),
        value_type=schema.TextLine(),
        missing_value=[],
        default=[],
        required=False,
    )
    curriculum_vitae = field.NamedBlobFile(
        title=_("curriculum_vitae_label", default="Curriculum vitae"),
        required=False,
        description=_(
            "curriculum_vitae_help",
            default=
            "Allega un file contenente il curriculum vitae della persona. "
            "Se ha più file da allegare, utilizza questo campo per quello principale "
            'e gli altri mettili dentro alla cartella "Curriculum vitae" che troverai dentro alla Persona.',
        ),
    )

    atto_nomina = field.NamedFile(
        title=_("atto_nomina_label", default="Atto di nomina"),
        required=False,
        description=_(
            "atto_nomina_help",
            default="Inserire un file contenente l'atto di nomina della"
            " persona.",
        ),
    )

    # custom widgets
    form.widget(
        "organizzazione_riferimento",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["UnitaOrganizzativa"],
        },
    )

    # custom fieldsets
    model.fieldset(
        "ruolo",
        label=_("ruolo_label", default="Ruolo"),
        fields=[
            "ruolo",
            "organizzazione_riferimento",
            "data_conclusione_incarico",
            "competenze",
            "deleghe",
            "tipologia_persona",
            "data_insediamento",
            "biografia",
        ],
    )
    model.fieldset(
        "contatti",
        label=_("contatti_label", default="Contatti"),
        fields=["telefono", "fax", "email"],
    )
    model.fieldset(
        "documenti",
        label=_("documenti_label", default="Documenti"),
        fields=["curriculum_vitae", "atto_nomina"],
    )
    # SearchableText fields
    dexteritytextindexer.searchable("ruolo")
    dexteritytextindexer.searchable("competenze")
    dexteritytextindexer.searchable("deleghe")
    dexteritytextindexer.searchable("tipologia_persona")
    dexteritytextindexer.searchable("telefono")
    dexteritytextindexer.searchable("fax")
    dexteritytextindexer.searchable("email")