Esempio n. 1
0
    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')
Esempio n. 2
0
    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")
Esempio n. 3
0
 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')
Esempio n. 4
0
 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")
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
0
    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')
Esempio n. 8
0
    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")
Esempio n. 9
0
    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
Esempio n. 10
0
    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