def test_field_dicts(): print # [Dict, TextLine] f = zope.schema.Dict( title=u"A map of keywords", key_type=zope.schema.Choice(vocabulary=SimpleVocabulary.fromValues(("alpha", "alpha-el", "nonsence"))), value_type=zope.schema.TextLine(title=u"Keyword"), ) v = {"alpha": u"alpha", "alpha-el": u"αλφα", "nonsence": u'ειμαι "βράχος"'} f.validate(v) for name in ["default"]: formatter = formatter_for_field(f, name) verifyObject(IFormatter, formatter) s = formatter.format(v) print " -- format:%s %s -- " % (name, type(f)) print s # [Dict, *] f = schemata.IFooMetadata.get("contacts") v = {"personal": fixtures.contact1, "office": fixtures.contact2} f.validate(v) for name in ["default"]: formatter = formatter_for_field(f, name) verifyObject(IFormatter, formatter) s = formatter.format(v) print " -- format:%s %s -- " % (name, type(f)) print s
def test_field_lists(): print # [List, TextLine] for name in ['default']: f = zope.schema.List(title=u'A list of keywords', value_type=zope.schema.TextLine(title=u'Keyword')) v = [u'alpha', u'αλφα', u'ειμαι "βράχος"'] f.validate(v) formatter = formatter_for_field(f, name) verifyObject(IFormatter, formatter) s = formatter.format(v) print ' -- format:%s %s -- ' % (name, type(f)) print s # [List, NativeStringLine] for name in [ 'default', ]: f = zope.schema.List( title=u'A list of keywords', value_type=zope.schema.NativeStringLine(title=u'Keyword')) v = ['alphA', 'beta', 'i am a "rock"'] f.validate(v) formatter = formatter_for_field(f, name) verifyObject(IFormatter, formatter) s = formatter.format(v) print ' -- format:%s %s -- ' % (name, type(f)) print s # [List, *] for name in [ 'default', ]: f = schemata.IInspireMetadata.get('bounding_box') v = [fixtures.bbox1] f.validate(v) formatter = formatter_for_field(f, name) verifyObject(IFormatter, formatter) s = formatter.format(v) print ' -- format:%s %s -- ' % (name, type(f)) print s f = zope.schema.List( title=u'A list of spatial resolution objects', value_type=zope.schema.Object(schema=schemata.ISpatialResolution)) v = [fixtures.spatialres2, fixtures.spatialres1] f = f.bind(FieldContext(key='f', value=v)) formatter = formatter_for_field(f, 'booo') s = formatter.format(v) print ' -- format:booo %s -- ' % (type(f)) print s
def test_field_lists(): print # [List, TextLine] for name in ["default"]: f = zope.schema.List(title=u"A list of keywords", value_type=zope.schema.TextLine(title=u"Keyword")) v = [u"alpha", u"αλφα", u'ειμαι "βράχος"'] f.validate(v) formatter = formatter_for_field(f, name) verifyObject(IFormatter, formatter) s = formatter.format(v) print " -- format:%s %s -- " % (name, type(f)) print s # [List, NativeStringLine] for name in ["default"]: f = zope.schema.List(title=u"A list of keywords", value_type=zope.schema.NativeStringLine(title=u"Keyword")) v = ["alphA", "beta", 'i am a "rock"'] f.validate(v) formatter = formatter_for_field(f, name) verifyObject(IFormatter, formatter) s = formatter.format(v) print " -- format:%s %s -- " % (name, type(f)) print s # [List, *] for name in ["default"]: f = schemata.IInspireMetadata.get("bounding_box") v = [fixtures.bbox1] f.validate(v) formatter = formatter_for_field(f, name) verifyObject(IFormatter, formatter) s = formatter.format(v) print " -- format:%s %s -- " % (name, type(f)) print s f = zope.schema.List( title=u"A list of spatial resolution objects", value_type=zope.schema.Object(schema=schemata.ISpatialResolution) ) v = [fixtures.spatialres2, fixtures.spatialres1] f = f.bind(FieldContext(key="f", value=v)) formatter = formatter_for_field(f, "booo") s = formatter.format(v) print " -- format:booo %s -- " % (type(f)) print s
def test_field_dicts(): print # [Dict, TextLine] f = zope.schema.Dict( title=u'A map of keywords', key_type=zope.schema.Choice( vocabulary=SimpleVocabulary.fromValues(('alpha', 'alpha-el', 'nonsence'))), value_type=zope.schema.TextLine(title=u'Keyword')) v = { 'alpha': u'alpha', 'alpha-el': u'αλφα', 'nonsence': u'ειμαι "βράχος"', } f.validate(v) for name in ['default']: formatter = formatter_for_field(f, name) verifyObject(IFormatter, formatter) s = formatter.format(v) print ' -- format:%s %s -- ' % (name, type(f)) print s # [Dict, *] f = schemata.IFooMetadata.get('contacts') v = { 'personal': fixtures.contact1, 'office': fixtures.contact2, } f.validate(v) for name in ['default']: formatter = formatter_for_field(f, name) verifyObject(IFormatter, formatter) s = formatter.format(v) print ' -- format:%s %s -- ' % (name, type(f)) print s
def _get_field_value(self, v, field): '''Get the value of a field considered a leaf. Serialize or format (not both!) this value, if requested so. ''' assert v is not None, 'This was supposed to be checked at dictize()' # Check if value needs to be serialized serializer_name = self.opts.get('serialize-values', False) if serializer_name: ser = serializer_for_field(field, serializer_name) if ser: try: v = ser.dumps(v) except Exception as ex: logger.warn( 'Failed to serialize value %r for field %r (%s): %s' % (v, field.__name__, field.__class__.__name__, ex)) v = None # Return here, no need to do anything more return v # Check if value needs to be formatted format_spec = self.opts.get('format-values', False) if format_spec: assert isinstance(format_spec, FormatSpec) fo = formatter_for_field(field, format_spec.name) if fo: fo_opts = format_spec.opts # Fetch any extra field-level extra options fo_conf = formatters.config_for_field( field, format_spec.name) if fo_conf and 'extra-opts' in fo_conf: fo_opts = copy.copy(fo_opts) fo_opts.update(fo_conf.get('extra-opts')) # Try to format try: v = fo.format(v, opts=fo_opts) except Exception as ex: logger.warn( 'Failed to format value %r for field %r (%s): %s' % (v, field.__name__, field.__class__.__name__, ex)) v = None return v
def test_field_float(): print f = zope.schema.Float(title=u"Grade") v = random.random() v1 = random.random() f = f.bind(FieldContext(key="f", value=v)) formatter = formatter_for_field(f, "default") verifyObject(IFormatter, formatter) s = formatter.format(v) print " -- format:default %s -- " % (type(f)) print s
def test_field_float(): print f = zope.schema.Float(title=u'Grade') v = random.random() v1 = random.random() f = f.bind(FieldContext(key='f', value=v)) formatter = formatter_for_field(f, 'default') verifyObject(IFormatter, formatter) s = formatter.format(v) print ' -- format:default %s -- ' % (type(f)) print s
def test_field_datetime(): f = schemata.IFooMetadata.get("created") v = datetime.datetime.now() f.validate(v) f = f.bind(FieldContext(key="f", value=v)) formatter = formatter_for_field(f, "default") verifyObject(IFormatter, formatter) s = formatter.format(v) print " -- format:default %s -- " % (type(f)) print s assert formatter.format(v) == v.isoformat() assert formatter.format() == v.isoformat()
def test_field_datetime(): f = schemata.IFooMetadata.get('created') v = datetime.datetime.now() f.validate(v) f = f.bind(FieldContext(key='f', value=v)) formatter = formatter_for_field(f, 'default') verifyObject(IFormatter, formatter) s = formatter.format(v) print ' -- format:default %s -- ' % (type(f)) print s assert formatter.format(v) == v.isoformat() assert formatter.format() == v.isoformat()
def _format(self, obj, opts): '''Format the object according to our named format. If possible, all contained fields will be formatted under the same format, and will be passed the same options. ''' # Note We want to pass a 'quote' option to all our fields (this will be # interpreted by the field formatter itself). If not allready set, we # need to create a copy of opts, in order not to break our caller's # formatting (sharing the same opts dict). if not opts.get('quote'): opts = copy.copy(opts) opts['quote'] = True name = self.requested_name argv = list() for k, field in obj.iter_fields(): v = field.get(obj) if v is None: continue # Find a proper formatter for field fo = formatter_for_field(field, name) if fo: fo_opts = opts fo_conf = formatters.config_for_field(field, name) if fo_conf and 'extra-opts' in fo_conf: fo_opts = copy.copy(fo_opts) fo_opts.update(fo_conf.get('extra-opts')) v = fo.format(v, opts=fo_opts) else: v = format(v) argv.append((k, v)) args = ' '.join(map(lambda t: '%s=%s' % t, argv)) s = '<%s %s>' % (type(obj).__name__, args) return s
def test_field_choice(): f = schemata.IFooMetadata.get("thematic_category") v = "health" f.validate(v) f = f.bind(FieldContext(key="f", value=v)) formatter = formatter_for_field(f, "default") verifyObject(IFormatter, formatter) s = formatter.format(v) print " -- format:default %s -- " % (type(f)) print s assert formatter.format(v) == u"Health" assert formatter.format() == u"Health" try: formatter.format("not-a-term") except ValueError: pass else: assert False, "The formatter should fail"
def test_field_choice(): f = schemata.IFooMetadata.get('thematic_category') v = 'health' f.validate(v) f = f.bind(FieldContext(key='f', value=v)) formatter = formatter_for_field(f, 'default') verifyObject(IFormatter, formatter) s = formatter.format(v) print ' -- format:default %s -- ' % (type(f)) print s assert formatter.format(v) == u'Health' assert formatter.format() == u'Health' try: formatter.format('not-a-term') except ValueError: pass else: assert False, 'The formatter should fail'