コード例 #1
0
 def test_get_field_meta_from_class(self):
     """Metadata is always empty for the default implementation."""
     self.assertEqual(
         ItemAdapter.get_field_meta_from_class(self.item_class,
                                               "_undefined_"),
         MappingProxyType({}),
     )
     self.assertEqual(
         ItemAdapter.get_field_meta_from_class(self.item_class, "name"),
         MappingProxyType({}))
     self.assertEqual(
         ItemAdapter.get_field_meta_from_class(self.item_class, "value"),
         MappingProxyType({}))
コード例 #2
0
 def test_get_field_meta_from_class(self):
     self.assertEqual(
         ItemAdapter.get_field_meta_from_class(self.item_class,
                                               "_undefined_"),
         MappingProxyType({}),
     )
     self.assertEqual(
         ItemAdapter.get_field_meta_from_class(self.item_class, "name"),
         MappingProxyType({"serializer": str}),
     )
     self.assertEqual(
         ItemAdapter.get_field_meta_from_class(self.item_class, "value"),
         MappingProxyType({"serializer": int}),
     )
コード例 #3
0
def get_field_meta_from_class(item_class: type,
                              field_name: str) -> MappingProxyType:
    """Return a read-only mapping with metadata for the given field name, within the given item class.
    If there is no metadata for the field, or the item class does not support field metadata,
    an empty object is returned.

    Field metadata is taken from different sources, depending on the item type:
    * scrapy.item.Item: corresponding scrapy.item.Field object
    * dataclass items: "metadata" attribute for the corresponding field
    * attrs items: "metadata" attribute for the corresponding field
    * pydantic models: corresponding pydantic.field.FieldInfo/ModelField object

    The returned value is an instance of types.MappingProxyType, i.e. a dynamic read-only view
    of the original mapping, which gets automatically updated if the original mapping changes.
    """

    from itemadapter.adapter import ItemAdapter

    return ItemAdapter.get_field_meta_from_class(item_class, field_name)