Plone/Dexterity schema.Choice not allowing Spanish characters -
Plone/Dexterity schema.Choice not allowing Spanish characters -
in plone 4.1.2 created mycontenttype dexterity. has 3 zope.schema.choice
fields. 2 of them take values hardcoded vocabulary , other 1 dynamic vocabulary. in both cases, if take value has spanish accents, when save add together form selection gone , doesn't show in view form (without showing error message). if take non accented value works fine.
any advise on how solve problem?
(david; hope asked me for)
# -*- coding: utf-8 -*- 5 import grok zope import schema plone.directives import form, dexterity zope.component import getmultiadapter plone.namedfile.interfaces import iimagescaletraversable plone.namedfile.field import namedblobfile, namedblobimage plone.formwidget.contenttree import objpathsourcebinder zope.schema.vocabulary import simplevocabulary, simpleterm zope.schema.interfaces import ivocabularyfactory z3c.formwidget.query.interfaces import iquerysource zope.component import queryutility plone.formwidget.masterselect import ( _, masterselectfield, masterselectboolfield, ) plone.app.textfield.interfaces import itransformer plone.indexer import indexer oaxaca.newcontent import contentmessagefactory _ oaxaca.newcontent.config import oaxaca types import unicodetype _default_encoding = 'utf-8' def _encode(s, encoding=_default_encoding): try: homecoming s.encode(encoding) except (typeerror, unicodedecodeerror, valueerror): homecoming s def _decode(s, encoding=_default_encoding): try: homecoming unicode(s, encoding) except (typeerror, unicodedecodeerror, valueerror): homecoming s view = view.encode('utf-8') def getslavevocab(master): results = [] if master in oaxaca: results = sorted(oaxaca[master]) homecoming simplevocabulary.fromvalues(results) class ificha(form.schema, iimagescaletraversable): """describes ficha """ tipomenu = schema.choice( title=_(u"tipo de evento"), description=_(u"marque la opción que aplique o " "seleccione otro si ninguna aplica"), values=( u'manifestación en lugar público', u'toma de instalaciones municipales', u'toma de instalaciones estatales', u'toma de instalaciones federales', u'bloqueo de carretera municipal', u'bloqueo de carretera estatal', u'bloqueo de carretera federal', u'secuestro de funcionario', u'otro',), required=false, ) tipoadicional = schema.textline( title=_(u"registre united nations nuevo tipo de evento"), description=_(u"use este campo solo si marcó otro en el menú de arriba"), required=false ) fecha = schema.date( title=_(u"fecha"), description=_(u"seleccione el día en que ocurrió el evento"), required=false ) municipio = masterselectfield( title=_(u"municipio"), description=_(u"seleccione el municipio donde ocurrió el evento"), required=false, vocabulary="oaxaca.newcontent.municipios", slave_fields=( {'name': 'localidad', 'action': 'vocabulary', 'vocab_method': getslavevocab, 'control_param': 'master', }, ) ) localidad = schema.choice( title=_(u"localidad"), description=_(u"seleccione la localidad donde ocurrió el evento."), values=[u'',], required=false, ) actores = schema.text( title=_(u"actores"), description=_(u"liste las agrupaciones y los individuos que participaron en el evento"), required=false, ) demandas = schema.text( title=_(u"demandas"), description=_(u"liste las demandas o exigencias de los participantes"), required=false ) depresponsable = schema.text( title=_(u"dependencias"), description=_(u"liste las dependencias gubernamentales responsables de atender las demandas"), required=false ) seguimiento = schema.text( title=_(u"acciones de seguimiento"), description=_(u"anote cualquier accion de seguimiento que se haya realizado"), required=false ) modulo = schema.choice( title=_(u"informa"), description=_(u"seleccione el módulo que llena esta ficha"), values=( u'm1', u'm2', u'm3', u'm4', u'm5', u'm6', u'm7', u'm8', u'm9', u'm10', u'm11', u'm12', u'm13', u'm14', u'm15', u'm16', u'm17', u'm18', u'm19', u'm20', u'm21', u'm22', u'm23', u'm24', u'm25', u'm26', u'm27', u'm28', u'm29', u'm30',), required=false ) imagen1 = namedblobimage( title=_(u"imagen 1"), description=_(u"subir imagen 1"), required=false ) imagen2 = namedblobimage( title=_(u"imagen 2"), description=_(u"subir imagen 2"), required=false ) anexo1 = namedblobfile( title=_(u"anexo 1"), description=_(u"subir archivo 1"), required=false ) anexo2 = namedblobfile( title=_(u"anexo 2"), description=_(u"subir archivo 2"), required=false ) @indexer(ificha) def textindexer(obj): """searchabletext contains fechaficha, actores, demandas, municipio , localidad plain text. """ transformer = itransformer(obj) text = transformer(obj.text, 'text/plain') homecoming '%s %s %s %s %s' % (obj.fecha, obj.actores, obj.demandas, obj.municipio, obj.localidad) grok.global_adapter(textindexer, name='searchabletext') class view(grok.view): """default view (called "@@view"") ficha. associated template found in ficha_templates/view.pt. """ grok.context(ificha) grok.require('zope2.view') grok.name('view')
i found same problem months ago on development of collective.nitf.
the tokens on vocabulary must normalized; how solved it:
# -*- coding: utf-8 -*- import unicodedata … class sectionsvocabulary(object): """creates vocabulary sections stored in registry; vocabulary normalized allow utilize of non-ascii characters. """ grok.implements(ivocabularyfactory) def __call__(self, context): registry = getutility(iregistry) settings = registry.forinterface(initfsettings) items = [] section in settings.sections: token = unicodedata.normalize('nfkd', section).encode('ascii', 'ignore').lower() items.append(simplevocabulary.createterm(section, token, section)) homecoming simplevocabulary(items) grok.global_utility(sectionsvocabulary, name=u'collective.nitf.sections')
character-encoding plone dexterity
Comments
Post a Comment