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

1from django.contrib.contenttypes.models import ContentType 

2from django.core.exceptions import ImproperlyConfigured 

3 

4from apis_core.apis_metainfo.models import Uri 

5from apis_core.utils.helpers import get_importer_for_model 

6 

7 

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