def getFieldsForATTypeWithFTI(self, typename): '''Returns schema fields (name and type) from the fti.''' results = [] typesTool = getToolByName(self.context, 'portal_types') fti = typesTool.getTypeInfo(typename) archetype_tool = getToolByName(self.context, 'archetype_tool', None) if not fti or not archetype_tool: return results schema = None # a schema instance is stored in the archetype_tool for regType in archetype_tool.listRegisteredTypes(): if regType['meta_type'] == fti.content_meta_type: if HAS_EXTENDER: schema = instanceSchemaFactory(regType['klass']) else: schema = regType['schema'] break if not schema: return results for field in schema.fields(): if not field.getName() in self.at_metadata_fields: translated_label = translate(field.widget.label) results.append( {'id': field.getName(), 'title': '%s (%s)' % (translated_label, field.getType()), 'type': field.getType()}) return results
def getFieldsForATTypeWithFTI(self, typename): '''Returns schema fields (name and type) from the fti.''' results = [] typesTool = getToolByName(self.context, 'portal_types') fti = typesTool.getTypeInfo(typename) archetype_tool = getToolByName(self.context, 'archetype_tool', None) if not fti or not archetype_tool: return results schema = None # a schema instance is stored in the archetype_tool for regType in archetype_tool.listRegisteredTypes(): if regType['meta_type'] == fti.content_meta_type: if HAS_EXTENDER: schema = instanceSchemaFactory(regType['klass']) else: schema = regType['schema'] break if not schema: return results for field in schema.fields(): if not field.getName() in self.at_metadata_fields: translated_label = translate(field.widget.label) results.append({ 'id': field.getName(), 'title': '%s (%s)' % (translated_label, field.getType()), 'type': field.getType() }) return results
def test_event_date_to_be_confirmed(self): """ Ticket #2341: Events need an extra field to show if the date is provisional and still needs to be confirmed. This field should appear directly after the date fields. """ ttool = getToolByName(self.portal, 'portal_types') info = ttool.getTypeInfo("Event") event = info.constructInstance(self.portal, "Event") schema = instanceSchemaFactory(event) fields = [f.getName() for f in schema.getSchemataFields("default")] assert ('dateToBeConfirmed' in fields) self.assertEquals(fields.index('dateToBeConfirmed'), fields.index('endDate') + 1)
def test_event_date_to_be_confirmed(self): """ Ticket #2341: Events need an extra field to show if the date is provisional and still needs to be confirmed. This field should appear directly after the date fields. """ ttool = getToolByName(self.portal, 'portal_types') info = ttool.getTypeInfo("Event") event = info.constructInstance(self.portal, "Event") schema = instanceSchemaFactory(event) fields = [f.getName() for f in schema.getSchemataFields("default")] assert('dateToBeConfirmed' in fields) self.assertEquals( fields.index('dateToBeConfirmed'), fields.index('endDate') + 1 )
def test_schema_modifications(self): """ Test that the extended types have the right fields in the correct order. """ from AccessControl.unauthorized import Unauthorized for type_name in types_dict: #order = None pt = getToolByName(self.portal, 'portal_types') info = pt.getTypeInfo(type_name) try: obj = info.constructInstance(self.portal, type_name) except Unauthorized: continue schema = instanceSchemaFactory(obj) field_obs = schema.getSchemataFields('default') fields = [f.getName() for f in field_obs] config_fields = types_dict[type_name].keys() self.assertEquals( set(config_fields), set(fields), "%s has the following Default fields: %s but should " \ "have %s" % \ (type_name, set(fields), set(config_fields), ) ) for i in range(0, len(fields)): self.assertEquals( field_obs[i].widget.visible, types_dict[type_name][fields[i]], "%s has field %s with widget visibility: %s but it " "should be %s" % \ (type_name, fields[i], field_obs[i].widget.visible, types_dict[type_name][fields[i]], ) )
def to_dict(self, *args, **kwargs): ret = super(ATSerializer, self).to_dict(*args, **kwargs) ret['portal_type'] = portal_type = self.instance.portal_type schema = instanceSchemaFactory(self.instance) for field_id in schema.keys(): if field_id in self.skip_fields: continue field = schema[field_id] _schema = schema if field_id in self.instance.schema: _schema = self.instance.schema value = self._get_from_schema(field_id, _schema) if isinstance(field, ReferenceField): value = [ ReferenceSerializer(item).to_dict() for item in value] elif isinstance(field.widget, RichWidget): value = self.rich_text(value) elif isinstance(value, Item): serializer = interfaces.ISerializer(value) value = serializer.to_dict(recursive=True) elif field_id == 'image' and self.instance.portal_type == 'Image': continue elif field_id == 'leadImage': if value: value = { 'dimensions': self.dimensionize(value, field_id), 'width': value.width, 'height': value.height, } else: value = "" elif hasattr(value, 'blob'): # file or image content, ignore continue ret[field_id] = value return ret
def testNopExtender(self): schema = instanceSchemaFactory(self.instance) self.assertEqual(schema.signature(), self.instance.schema.signature())
def testExtendTwiceCreateOnce(self): Extender.fields = [MockField(), MockField()] schema = instanceSchemaFactory(self.instance) self.assertEqual(schema.keys().count("MockField"), 1)
def testFieldOrder(self): Extender.fields = [MockField()] schema = instanceSchemaFactory(self.instance) order = [f.getName() for f in schema.getSchemataFields("default")] self.assertEqual(order[0], "MockField")
def testExtendWithSingleField(self): Extender.fields = [MockField()] schema = instanceSchemaFactory(self.instance) self.assertTrue("MockField" in schema)
def testNoExtenderMeansNoChanges(self): schema = instanceSchemaFactory(self.instance) self.assertTrue(schema is self.instance.schema)
def testExtendWithSingleField(self): Extender.fields=[MockField()] schema=instanceSchemaFactory(self.instance) self.failUnless("MockField" in schema)
def testNoExtenderMeansNoChanges(self): schema=instanceSchemaFactory(self.instance) self.failUnless(schema is self.instance.schema)