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
« 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
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
10def triple_sidebar_history(obj: object, request, detail=True):
11 side_bar = []
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 )
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 )
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