Coverage for apis_core/apis_metainfo/utils.py: 25%
20 statements
« prev ^ index » next coverage.py v7.5.3, created at 2025-06-25 10:00 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2025-06-25 10:00 +0000
1from django.contrib.contenttypes.models import ContentType
2from django.core.exceptions import ImproperlyConfigured
4from apis_core.apis_metainfo.models import Uri
5from apis_core.utils.helpers import get_importer_for_model
8def create_object_from_uri(uri: str, model: object, raise_on_fail=False) -> object:
9 if uri.startswith("http"):
10 try:
11 uri = Uri.objects.get(uri=uri)
12 return uri.content_object
13 except Uri.DoesNotExist:
14 Importer = get_importer_for_model(model)
15 importer = Importer(uri, model)
16 instance = importer.create_instance()
17 content_type = ContentType.objects.get_for_model(instance)
18 uri = Uri.objects.create(
19 uri=importer.get_uri,
20 content_type=content_type,
21 object_id=instance.id,
22 )
23 return instance
24 if raise_on_fail:
25 content_type = ContentType.objects.get_for_model(model)
26 raise ImproperlyConfigured(
27 f'Could not create {content_type.name} from string "{uri}"'
28 )
29 return False