def test_true(self): self.assertTrue(PydanticAdapter.is_item(PydanticModel())) self.assertTrue( PydanticAdapter.is_item(PydanticModel(name="asdf", value=1234))) # field metadata self.assertEqual( get_field_meta_from_class(PydanticModel, "name"), MappingProxyType({"serializer": str}), ) self.assertEqual( get_field_meta_from_class(PydanticModel, "value"), MappingProxyType({"serializer": int}), ) self.assertEqual( get_field_meta_from_class(PydanticSpecialCasesModel, "special_cases"), MappingProxyType({ "alias": "special_cases", "allow_mutation": False }), ) with self.assertRaises( KeyError, msg="PydanticModel does not support field: non_existent"): get_field_meta_from_class(PydanticModel, "non_existent")
def test_module_not_available(self): self.assertFalse( ScrapyItemAdapter.is_item( ScrapySubclassedItem(name="asdf", value=1234))) with self.assertRaises( TypeError, msg="ScrapySubclassedItem is not a valid item class"): get_field_meta_from_class(ScrapySubclassedItem, "name")
def test_empty_meta_for_dict(self): class DictSubclass(dict): pass self.assertEqual(get_field_meta_from_class(DictSubclass, "name"), MappingProxyType({})) self.assertEqual(get_field_meta_from_class(dict, "name"), MappingProxyType({}))
def test_module_not_available(self): from itemadapter.adapter import AttrsAdapter self.assertFalse( AttrsAdapter.is_item(AttrsItem(name="asdf", value=1234))) with self.assertRaises(TypeError, msg="AttrsItem is not a valid item class"): get_field_meta_from_class(AttrsItem, "name")
def test_module_not_available(self): from itemadapter.adapter import PydanticAdapter self.assertFalse( PydanticAdapter.is_item(PydanticModel(name="asdf", value=1234))) with self.assertRaises(TypeError, msg="PydanticModel is not a valid item class"): get_field_meta_from_class(PydanticModel, "name")
def test_module_import_error(self): with clear_itemadapter_imports(): from itemadapter.adapter import ScrapyItemAdapter self.assertFalse( ScrapyItemAdapter.is_item( ScrapySubclassedItem(name="asdf", value=1234))) with self.assertRaises( TypeError, msg="ScrapySubclassedItem is not a valid item class"): get_field_meta_from_class(ScrapySubclassedItem, "name")
def test_true(self): self.assertTrue(AttrsAdapter.is_item(AttrsItem())) self.assertTrue( AttrsAdapter.is_item(AttrsItem(name="asdf", value=1234))) # field metadata self.assertEqual(get_field_meta_from_class(AttrsItem, "name"), MappingProxyType({"serializer": str})) self.assertEqual(get_field_meta_from_class(AttrsItem, "value"), MappingProxyType({"serializer": int})) with self.assertRaises( KeyError, msg="AttrsItem does not support field: non_existent"): get_field_meta_from_class(AttrsItem, "non_existent")
def test_true(self): self.assertTrue(ScrapyItemAdapter.is_item(ScrapyItem())) self.assertTrue(ScrapyItemAdapter.is_item(ScrapySubclassedItem())) self.assertTrue( ScrapyItemAdapter.is_item( ScrapySubclassedItem(name="asdf", value=1234))) # field metadata self.assertEqual( get_field_meta_from_class(ScrapySubclassedItem, "name"), MappingProxyType({"serializer": str}), ) self.assertEqual( get_field_meta_from_class(ScrapySubclassedItem, "value"), MappingProxyType({"serializer": int}), )
def test_removed_baseitem(self): """Mock the scrapy.item module so it does not contain the deprecated _BaseItem class.""" class MockItemModule: Item = ScrapyItem with mock.patch("scrapy.item", MockItemModule): self.assertFalse(ScrapyItemAdapter.is_item(dict())) self.assertEqual( get_field_meta_from_class(ScrapySubclassedItem, "name"), MappingProxyType({"serializer": str}), ) self.assertEqual( get_field_meta_from_class(ScrapySubclassedItem, "value"), MappingProxyType({"serializer": int}), )
def test_module_import_error(self): with clear_itemadapter_imports(): from itemadapter.adapter import AttrsAdapter self.assertFalse( AttrsAdapter.is_item(AttrsItem(name="asdf", value=1234))) with self.assertRaises(RuntimeError, msg="attr module is not available"): AttrsAdapter(AttrsItem(name="asdf", value=1234)) with self.assertRaises(RuntimeError, msg="attr module is not available"): AttrsAdapter.get_field_meta_from_class(AttrsItem, "name") with self.assertRaises(TypeError, msg="AttrsItem is not a valid item class"): get_field_meta_from_class(AttrsItem, "name")
def test_invalid_item_class(self): with self.assertRaises(TypeError, msg="1 is not a valid item class"): get_field_meta_from_class(1, "field") with self.assertRaises(TypeError, msg="list is not a valid item class"): get_field_meta_from_class(list, "field")