def test_serialize_field(self): a = ItemAdapter(self.i) res = self.ie.serialize_field(a.get_field_meta('name'), 'name', a['name']) self.assertEqual(res, 'John\xa3') res = self.ie.serialize_field(a.get_field_meta('age'), 'age', a['age']) self.assertEqual(res, '22')
def test_serialize_field(self): a = ItemAdapter(self.i) res = self.ie.serialize_field(a.get_field_meta("name"), "name", a["name"]) self.assertEqual(res, "John\xa3") res = self.ie.serialize_field(a.get_field_meta("age"), "age", a["age"]) self.assertEqual(res, "22")
def test_field_custom_serializer(self): i = self.custom_field_item_class(name='John\xa3', age='22') a = ItemAdapter(i) ie = self._get_exporter() self.assertEqual( ie.serialize_field(a.get_field_meta('name'), 'name', a['name']), 'John\xa3') self.assertEqual( ie.serialize_field(a.get_field_meta('age'), 'age', a['age']), '24')
def test_field_custom_serializer(self): i = self.custom_field_item_class(name="John\xa3", age="22") a = ItemAdapter(i) ie = self._get_exporter() self.assertEqual( ie.serialize_field(a.get_field_meta("name"), "name", a["name"]), "John\xa3") self.assertEqual( ie.serialize_field(a.get_field_meta("age"), "age", a["age"]), "24")
def _get_serialized_fields(self, item, default_value=None, include_empty=None): """Return the fields to export as an iterable of tuples (name, serialized_value) """ item = ItemAdapter(item) if include_empty is None: include_empty = self.export_empty_fields if self.fields_to_export is None: if include_empty: field_iter = item.field_names() else: field_iter = item.keys() else: if include_empty: field_iter = self.fields_to_export else: field_iter = (x for x in self.fields_to_export if x in item) for field_name in field_iter: if field_name in item: field_meta = item.get_field_meta(field_name) value = self.serialize_field(field_meta, field_name, item[field_name]) else: value = default_value yield field_name, value
def _get_serialized_fields(self, item, default_value=None, include_empty=None): """Return the fields to export as an iterable of tuples (name, serialized_value) 用serialize_field 序列化当前所选的item项 """ item = ItemAdapter(item) if include_empty is None: include_empty = self.export_empty_fields if self.fields_to_export is None: if include_empty: # 包含空值(item定义有但是传入没有的key) field_iter = item.field_names() else: # 只包含item传递过来的值 field_iter = item.keys() else: if include_empty: # 指定特定值 field_iter = self.fields_to_export else: field_iter = (x for x in self.fields_to_export if x in item) #取交集 for field_name in field_iter: if field_name in item: field_meta = item.get_field_meta(field_name) value = self.serialize_field(field_meta, field_name, item[field_name]) else: value = default_value yield field_name, value
def test_exporter_custom_serializer(self): class CustomItemExporter(BaseItemExporter): def serialize_field(self, field, name, value): if name == 'age': return str(int(value) + 1) else: return super().serialize_field(field, name, value) i = self.item_class(name='John', age='22') a = ItemAdapter(i) ie = CustomItemExporter() self.assertEqual(ie.serialize_field(a.get_field_meta('name'), 'name', a['name']), 'John') self.assertEqual(ie.serialize_field(a.get_field_meta('age'), 'age', a['age']), '23') i2 = {'name': 'John', 'age': '22'} self.assertEqual(ie.serialize_field({}, 'name', i2['name']), 'John') self.assertEqual(ie.serialize_field({}, 'age', i2['age']), '23')
def test_exporter_custom_serializer(self): class CustomItemExporter(BaseItemExporter): def serialize_field(self, field, name, value): if name == "age": return str(int(value) + 1) else: return super().serialize_field(field, name, value) i = self.item_class(name="John", age="22") a = ItemAdapter(i) ie = CustomItemExporter() self.assertEqual( ie.serialize_field(a.get_field_meta("name"), "name", a["name"]), "John") self.assertEqual( ie.serialize_field(a.get_field_meta("age"), "age", a["age"]), "23") i2 = {"name": "John", "age": "22"} self.assertEqual(ie.serialize_field({}, "name", i2["name"]), "John") self.assertEqual(ie.serialize_field({}, "age", i2["age"]), "23")
def _get_serialized_fields(self, item, default_value=None, include_empty=None, pre=None, field_filter=None): """Copy from BaseItemExporter """ item = ItemAdapter(item) if include_empty is None: include_empty = self.export_empty_fields if self.fields_to_export is None: if include_empty: field_iter = item.field_names() else: field_iter = item.keys() else: if include_empty: field_iter = self.fields_to_export else: field_iter = (x for x in self.fields_to_export if x in item) for field_name in field_iter: k = None if field_filter: if pre is not None: k = pre_join(pre, field_name) if k in field_filter: continue if field_name in item: field_meta = item.get_field_meta(field_name) value = self.serialize_field( field_meta, field_name, item[field_name], pre=k, field_filter=field_filter, ) else: value = default_value yield field_name, value
def _get_serialized_fields(self, item, default_value=None, include_empty=None): """Return the fields to export as an iterable of tuples (name, serialized_value) """ item = ItemAdapter(item) if include_empty is None: include_empty = self.export_empty_fields if self.fields_to_export is None: if include_empty: field_iter = item.field_names() else: field_iter = item.keys() elif isinstance(self.fields_to_export, Mapping): if include_empty: field_iter = self.fields_to_export.items() else: field_iter = ((x, y) for x, y in self.fields_to_export.items() if x in item) else: if include_empty: field_iter = self.fields_to_export else: field_iter = (x for x in self.fields_to_export if x in item) for field_name in field_iter: if isinstance(field_name, str): item_field, output_field = field_name, field_name else: item_field, output_field = field_name if item_field in item: field_meta = item.get_field_meta(item_field) value = self.serialize_field(field_meta, output_field, item[item_field]) else: value = default_value yield output_field, value