diff --git a/aas/model/provider.py b/aas/model/provider.py index e6886ea582a48d8a266c8ec092eeb7e8813163df..05089ae08b3b1c891386fc82a379460d82f97780 100644 --- a/aas/model/provider.py +++ b/aas/model/provider.py @@ -40,6 +40,19 @@ class AbstractObjectProvider(metaclass=abc.ABCMeta): """ pass + def get(self, identifier: Identifier, default: Optional[Identifiable] = None) -> Optional[Identifiable]: + """ + Find an object in this set by its identification, with fallback parameter + + :param default: An object to be returned, if no object with the given identification is found + :return: The Identifiable object with the given identification in the provider. Otherwise the `default` object + or None, if none is given. + """ + try: + return self.get_identifiable(identifier) + except KeyError: + return default + _IT = TypeVar('_IT', bound=Identifiable) diff --git a/test/model/test_provider.py b/test/model/test_provider.py index 49f987745a1de816e66ade2fde074d875a240318..bbcb527afa180340f3e3d3790a44c0be0d46c959 100644 --- a/test/model/test_provider.py +++ b/test/model/test_provider.py @@ -39,10 +39,13 @@ class ProvidersTest(unittest.TestCase): self.assertEqual(2, len(object_store)) self.assertIs(self.aas1, object_store.get_identifiable(model.Identifier("urn:x-test:aas1", model.IdentifierType.IRI))) + self.assertIs(self.aas1, + object_store.get(model.Identifier("urn:x-test:aas1", model.IdentifierType.IRI))) object_store.discard(self.aas1) object_store.discard(self.aas1) with self.assertRaises(KeyError) as cm: object_store.get_identifiable(model.Identifier("urn:x-test:aas1", model.IdentifierType.IRI)) + self.assertIsNone(object_store.get(model.Identifier("urn:x-test:aas1", model.IdentifierType.IRI))) self.assertEqual("Identifier(IRI=urn:x-test:aas1)", str(cm.exception)) self.assertIs(self.aas2, object_store.pop()) self.assertEqual(0, len(object_store))