Coverage for apis_core/history/utils.py: 28%

25 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-09-16 07:42 +0000

1from django.contrib.contenttypes.models import ContentType 

2from django.db.models import Q 

3from django_tables2 import RequestConfig 

4 

5from apis_core.apis_relations.tables import get_generic_triple_table 

6from apis_core.utils.helpers import get_content_types_with_allowed_relation_from 

7from apis_core.utils.settings import get_entity_settings_by_modelname 

8 

9 

10def triple_sidebar_history(obj: object, request, detail=True): 

11 side_bar = [] 

12 

13 triples_related_all = obj.get_triples_for_version() 

14 if obj.version_tag is not None: 

15 triples_related_all = triples_related_all.filter( 

16 Q(version_tag=obj.version_tag) 

17 | Q(version_tag__contains=f"{obj.version_tag},") 

18 ) 

19 content_type = ContentType.objects.get_for_model(obj.instance_type) 

20 for other_content_type in get_content_types_with_allowed_relation_from( 

21 content_type 

22 ): 

23 triples_related_by_entity = triples_related_all.filter( 

24 (Q(subj__self_contenttype=other_content_type) & Q(obj__pk=obj.instance.pk)) 

25 | ( 

26 Q(obj__self_contenttype=other_content_type) 

27 & Q(subj__pk=obj.instance.pk) 

28 ) 

29 ) 

30 

31 table_class = get_generic_triple_table( 

32 other_entity_class_name=other_content_type.model, 

33 entity_pk_self=obj.instance.pk, 

34 detail=detail, 

35 ) 

36 

37 prefix = f"{other_content_type.model}" 

38 title_card = other_content_type.name 

39 tb_object = table_class(data=triples_related_by_entity, prefix=prefix) 

40 tb_object_open = request.GET.get(prefix + "page", None) 

41 entity_settings = get_entity_settings_by_modelname(content_type.model) 

42 per_page = entity_settings.get("relations_per_page", 10) 

43 RequestConfig(request, paginate={"per_page": per_page}).configure(tb_object) 

44 tab_id = f"triple_form_{content_type.model}_to_{other_content_type.model}" 

45 side_bar.append( 

46 ( 

47 title_card, 

48 tb_object, 

49 tab_id, 

50 tb_object_open, 

51 ) 

52 ) 

53 return side_bar