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()
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)
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)
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, )
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 )
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")