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_repr_pydantic(self): item = PydanticModel(name="asdf", value=1234) adapter = ItemAdapter(item) self.assertEqual( repr(adapter), "<ItemAdapter for PydanticModel(name='asdf', value=1234)>", )
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_false(self): self.assertFalse(ScrapyItemAdapter.is_item(int)) self.assertFalse(ScrapyItemAdapter.is_item(sum)) self.assertFalse(ScrapyItemAdapter.is_item(1234)) self.assertFalse(ScrapyItemAdapter.is_item(object())) self.assertFalse(ScrapyItemAdapter.is_item(AttrsItem())) self.assertFalse(ScrapyItemAdapter.is_item(DataClassItem())) self.assertFalse(ScrapyItemAdapter.is_item(PydanticModel())) self.assertFalse(ScrapyItemAdapter.is_item("a string")) self.assertFalse(ScrapyItemAdapter.is_item(b"some bytes")) self.assertFalse(ScrapyItemAdapter.is_item({"a": "dict"})) self.assertFalse(ScrapyItemAdapter.is_item(["a", "list"])) self.assertFalse(ScrapyItemAdapter.is_item(("a", "tuple"))) self.assertFalse(ScrapyItemAdapter.is_item({"a", "set"})) self.assertFalse(ScrapyItemAdapter.is_item(ScrapySubclassedItem))
def test_true_pydantic(self): self.assertTrue(is_item(PydanticModel(name="asdf", value=1234))) self.assertTrue(ItemAdapter.is_item_class(PydanticModel))