territories-dashboard-lib 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of territories-dashboard-lib might be problematic. Click here for more details.

Files changed (138) hide show
  1. territories_dashboard_lib/commons/__init__.py +0 -0
  2. territories_dashboard_lib/commons/decorators.py +36 -0
  3. territories_dashboard_lib/commons/models.py +9 -0
  4. territories_dashboard_lib/geo_lib/__init__.py +0 -0
  5. territories_dashboard_lib/geo_lib/admin.py +64 -0
  6. territories_dashboard_lib/geo_lib/enums.py +7 -0
  7. territories_dashboard_lib/geo_lib/migrations/0001_initial.py +51 -0
  8. territories_dashboard_lib/geo_lib/migrations/__init__.py +0 -0
  9. territories_dashboard_lib/geo_lib/models.py +58 -0
  10. territories_dashboard_lib/geo_lib/urls.py +27 -0
  11. territories_dashboard_lib/geo_lib/views.py +239 -0
  12. territories_dashboard_lib/indicators_lib/__init__.py +0 -0
  13. territories_dashboard_lib/indicators_lib/admin.py +140 -0
  14. territories_dashboard_lib/indicators_lib/enums.py +59 -0
  15. territories_dashboard_lib/indicators_lib/export.py +29 -0
  16. territories_dashboard_lib/indicators_lib/format.py +34 -0
  17. territories_dashboard_lib/indicators_lib/methodo_pdf.py +99 -0
  18. territories_dashboard_lib/indicators_lib/migrations/0001_initial.py +138 -0
  19. territories_dashboard_lib/indicators_lib/migrations/__init__.py +0 -0
  20. territories_dashboard_lib/indicators_lib/models.py +230 -0
  21. territories_dashboard_lib/indicators_lib/payloads.py +54 -0
  22. territories_dashboard_lib/indicators_lib/query/commons.py +223 -0
  23. territories_dashboard_lib/indicators_lib/query/comparison.py +70 -0
  24. territories_dashboard_lib/indicators_lib/query/details.py +64 -0
  25. territories_dashboard_lib/indicators_lib/query/histogram.py +82 -0
  26. territories_dashboard_lib/indicators_lib/query/indicator_card.py +102 -0
  27. territories_dashboard_lib/indicators_lib/query/top_10.py +100 -0
  28. territories_dashboard_lib/indicators_lib/query/utils.py +20 -0
  29. territories_dashboard_lib/indicators_lib/refresh_filters.py +17 -0
  30. territories_dashboard_lib/indicators_lib/table.py +154 -0
  31. territories_dashboard_lib/indicators_lib/urls.py +97 -0
  32. territories_dashboard_lib/indicators_lib/views.py +490 -0
  33. territories_dashboard_lib/superset_lib/__init__.py +0 -0
  34. territories_dashboard_lib/superset_lib/admin.py +22 -0
  35. territories_dashboard_lib/superset_lib/guest_token.py +64 -0
  36. territories_dashboard_lib/superset_lib/logic.py +67 -0
  37. territories_dashboard_lib/superset_lib/migrations/0001_initial.py +45 -0
  38. territories_dashboard_lib/superset_lib/migrations/__init__.py +0 -0
  39. territories_dashboard_lib/superset_lib/models.py +52 -0
  40. territories_dashboard_lib/superset_lib/serializers.py +10 -0
  41. territories_dashboard_lib/superset_lib/urls.py +10 -0
  42. territories_dashboard_lib/superset_lib/views.py +19 -0
  43. territories_dashboard_lib/tracking_lib/__init__.py +0 -0
  44. territories_dashboard_lib/tracking_lib/enums.py +7 -0
  45. territories_dashboard_lib/tracking_lib/logic.py +78 -0
  46. territories_dashboard_lib/tracking_lib/migrations/0001_initial.py +45 -0
  47. territories_dashboard_lib/tracking_lib/migrations/__init__.py +0 -0
  48. territories_dashboard_lib/tracking_lib/models.py +79 -0
  49. territories_dashboard_lib/website_lib/__init__.py +0 -0
  50. territories_dashboard_lib/website_lib/admin.py +40 -0
  51. territories_dashboard_lib/website_lib/context_processors.py +27 -0
  52. territories_dashboard_lib/website_lib/forms.py +47 -0
  53. territories_dashboard_lib/website_lib/migrations/0001_initial.py +91 -0
  54. territories_dashboard_lib/website_lib/migrations/__init__.py +0 -0
  55. territories_dashboard_lib/website_lib/models.py +148 -0
  56. territories_dashboard_lib/website_lib/navigation.py +124 -0
  57. territories_dashboard_lib/website_lib/params.py +268 -0
  58. territories_dashboard_lib/website_lib/serializers.py +105 -0
  59. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/css/website.css +956 -0
  60. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/chart.js +13 -0
  61. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/chartjs-plugin-datalabels.js +1 -0
  62. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/html2canvas.js +20 -0
  63. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/data.mjs +62 -0
  64. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/history.mjs +98 -0
  65. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/main-values.mjs +30 -0
  66. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/page.mjs +105 -0
  67. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/territory-chart.mjs +141 -0
  68. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/data.mjs +59 -0
  69. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/histogram.mjs +130 -0
  70. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/map.mjs +25 -0
  71. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/page.mjs +96 -0
  72. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/proportions.mjs +77 -0
  73. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/sankey.mjs +27 -0
  74. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/table.mjs +229 -0
  75. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/top10.mjs +76 -0
  76. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/utils.mjs +8 -0
  77. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/dom.mjs +92 -0
  78. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/enums.mjs +104 -0
  79. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/export-graph.mjs +15 -0
  80. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/export.mjs +20 -0
  81. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/filters.mjs +159 -0
  82. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/format.mjs +54 -0
  83. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/side_panel.mjs +103 -0
  84. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/history.mjs +89 -0
  85. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/main-value.mjs +22 -0
  86. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/page.mjs +162 -0
  87. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/statistics.mjs +42 -0
  88. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/utils.mjs +93 -0
  89. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/static/page.mjs +35 -0
  90. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/patternomaly.js +1452 -0
  91. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/react18.js +31 -0
  92. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/reactdom18.js +267 -0
  93. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/supersetEmbed.js +355 -0
  94. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/indicatorMap.bundle.js +2 -0
  95. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/sankeyGraph.bundle.js +2 -0
  96. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/vendors-node_modules_mapbox-gl_dist_mapbox-gl_js.bundle.js +2 -0
  97. territories_dashboard_lib/website_lib/static_content.py +20 -0
  98. territories_dashboard_lib/website_lib/templates/admin/indicators_lib/indicator/change_form.html +8 -0
  99. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/404.html +10 -0
  100. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/500.html +10 -0
  101. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/base.html +42 -0
  102. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/base.js +47 -0
  103. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/footer.html +96 -0
  104. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/header.html +101 -0
  105. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/header.js +102 -0
  106. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/comparaison/[theme]/components/indicateur-card.html +48 -0
  107. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/comparaison/[theme]/page.html +52 -0
  108. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/chart-buttons.html +29 -0
  109. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/geo_params.html +71 -0
  110. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/indicator-card.html +52 -0
  111. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/loader.html +28 -0
  112. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel.html +27 -0
  113. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_geo.html +80 -0
  114. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_geo.js +85 -0
  115. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_methodo.html +45 -0
  116. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_methodo.js +19 -0
  117. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/themes-list.html +9 -0
  118. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/themes-nav.html +33 -0
  119. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/title.html +28 -0
  120. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/components/filters-reminder.html +19 -0
  121. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/components/table.html +123 -0
  122. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/page.html +166 -0
  123. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/themes/components/extremum.html +15 -0
  124. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/themes/components/indicateur-card.html +76 -0
  125. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/themes/page.html +66 -0
  126. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/lexique/page.html +17 -0
  127. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/page.html +14 -0
  128. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/sitemap/page.html +71 -0
  129. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/static/page.html +16 -0
  130. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/superset/page.html +55 -0
  131. territories_dashboard_lib/website_lib/templatetags/htmlparams.py +75 -0
  132. territories_dashboard_lib/website_lib/templatetags/other_filters.py +30 -0
  133. territories_dashboard_lib/website_lib/views.py +212 -0
  134. {territories_dashboard_lib-0.1.0.dist-info → territories_dashboard_lib-0.1.2.dist-info}/METADATA +1 -1
  135. territories_dashboard_lib-0.1.2.dist-info/RECORD +138 -0
  136. territories_dashboard_lib-0.1.0.dist-info/RECORD +0 -5
  137. {territories_dashboard_lib-0.1.0.dist-info → territories_dashboard_lib-0.1.2.dist-info}/WHEEL +0 -0
  138. {territories_dashboard_lib-0.1.0.dist-info → territories_dashboard_lib-0.1.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,154 @@
1
+ from .payloads import IndicatorTablePayload
2
+ from .query.commons import add_optional_filters, get_table_data_for_geography
3
+ from .query.utils import run_custom_query
4
+
5
+
6
+ def _get_query(
7
+ *, indicator, props: IndicatorTablePayload, columns, orders, filters, limit=None
8
+ ):
9
+ columns = [c for c in columns if c is not None]
10
+ orders = [o for o in orders if o is not None]
11
+ order_clause = f"ORDER BY {', '.join(orders)}" if len(orders) > 0 else ""
12
+ limitation = f"LIMIT {limit}" if limit is not None else ""
13
+ offset = f"OFFSET {(props.pagination - 1) * limit}" if limit is not None else ""
14
+ dimension_search_where = (
15
+ f"OR (unaccent(LOWER({indicator.flows_dimension})) LIKE unaccent(LOWER('%' || '{props.search}' || '%')))"
16
+ if props.flows
17
+ else " ".join(
18
+ [
19
+ f"OR (unaccent(LOWER({dimension.db_name})) LIKE unaccent(LOWER('%' || '{props.search}' || '%')))"
20
+ for dimension in indicator.dimensions.all()
21
+ ]
22
+ )
23
+ )
24
+ territory_search_where = (
25
+ f"OR (unaccent(LOWER(territory_1)) LIKE unaccent(LOWER('%' || '{props.search}' || '%'))) OR (unaccent(LOWER(territory_2)) LIKE unaccent(LOWER('%' || '{props.search}' || '%')))"
26
+ if props.flows
27
+ else (
28
+ f"OR (unaccent(LOWER(lieu)) LIKE unaccent(LOWER('%' || '{props.search}' || '%')))"
29
+ )
30
+ )
31
+ where = (
32
+ f"""
33
+ AND (
34
+ (LENGTH(TRIM('{props.search}')) = 0)
35
+ {territory_search_where}
36
+ {dimension_search_where}
37
+ OR (CAST(annee AS TEXT) LIKE '%' || '{props.search}' || '%')
38
+ )
39
+ """
40
+ if props.search
41
+ else ""
42
+ )
43
+ where_year = f"AND annee = {props.year}" if props.year else ""
44
+ regular_dimensions_filters = (
45
+ "" if props.flows else add_optional_filters(indicator, filters)
46
+ )
47
+ return f"""
48
+ SELECT
49
+ {", ".join(columns)}
50
+ FROM
51
+ {get_table_data_for_geography(indicator, props.territory, props.submesh, True, props.flows)}
52
+ {regular_dimensions_filters}
53
+ {where} {where_year}
54
+ {order_clause}
55
+ {f"{limitation} {offset}"}
56
+ """
57
+
58
+
59
+ def get_values_columns(indicator, props, *, for_export=False):
60
+ if props.flows:
61
+ columns = [
62
+ "annee",
63
+ "territory_1",
64
+ "territory_2",
65
+ f"{indicator.flows_dimension} AS dimension"
66
+ if indicator.flows_dimension
67
+ else None,
68
+ "CAST(valeur AS int) as valeur",
69
+ ]
70
+ if for_export:
71
+ columns += ["territory_1_id", "territory_2_id"]
72
+ else:
73
+ columns = (
74
+ ["annee", "lieu"]
75
+ + [f"{dimension.db_name}" for dimension in indicator.dimensions.all()]
76
+ + [
77
+ f"valeur * {indicator.aggregation_constant if indicator.unite == '%' else 1} AS valeur",
78
+ "CASE WHEN valeur IS NULL THEN NULL ELSE composante_1 END AS valeur_alternative"
79
+ if indicator.is_composite and indicator.show_alternative
80
+ else None,
81
+ ]
82
+ )
83
+ if for_export:
84
+ columns += ["territoryid"]
85
+ return columns
86
+
87
+
88
+ def get_values_orders(indicator, props: IndicatorTablePayload):
89
+ territory_order = None
90
+ if props.column_order not in ["lieu", "territory_1", "territory_2"]:
91
+ territory_order = (
92
+ "LOWER(territory_1) ASC, LOWER(territory_2) ASC"
93
+ if props.flows
94
+ else "LOWER(lieu) ASC"
95
+ )
96
+ year_order = "annee DESC" if props.column_order != "annee" else None
97
+ dimension_order = None
98
+ if props.flows:
99
+ dimension = indicator.flows_dimension
100
+ if props.column_order != dimension:
101
+ dimension_order = f"{dimension} DESC"
102
+ else:
103
+ dimensions = [dimension.db_name for dimension in indicator.dimensions.all()]
104
+ if props.column_order not in [dimensions]:
105
+ dimension_order = (
106
+ ", ".join([f"{dimension} DESC" for dimension in dimensions])
107
+ if dimensions
108
+ else None
109
+ )
110
+ orders = [
111
+ f"{props.column_order} {props.column_order_flow} NULLS LAST"
112
+ if props.column_order
113
+ else None,
114
+ year_order,
115
+ territory_order,
116
+ dimension_order,
117
+ ]
118
+ return orders
119
+
120
+
121
+ def get_count_and_data_for_indicator_table(
122
+ indicator, props: IndicatorTablePayload, filters
123
+ ):
124
+ count_query = _get_query(
125
+ indicator=indicator,
126
+ props=props,
127
+ columns=["COUNT(*)"],
128
+ orders=[],
129
+ filters=filters,
130
+ )
131
+ count = run_custom_query(count_query)
132
+ columns = get_values_columns(indicator, props)
133
+ orders = get_values_orders(indicator, props)
134
+ data_query = _get_query(
135
+ indicator=indicator,
136
+ props=props,
137
+ columns=columns,
138
+ orders=orders,
139
+ limit=props.limit,
140
+ filters=filters,
141
+ )
142
+ data = run_custom_query(data_query)
143
+ return count[0]["count"], data
144
+
145
+
146
+ def get_export_indicator_table_values(indicator, props: IndicatorTablePayload, filters):
147
+ query = _get_query(
148
+ indicator=indicator,
149
+ props=props,
150
+ columns=get_values_columns(indicator, props, for_export=True),
151
+ orders=get_values_orders(indicator, props),
152
+ filters=filters,
153
+ )
154
+ return run_custom_query(query)
@@ -0,0 +1,97 @@
1
+ from django.urls import path
2
+
3
+ from .views import (
4
+ comparison_histogram_export_view,
5
+ comparison_histogram_view,
6
+ download_indicator_methodo_view,
7
+ flows_view,
8
+ indicator_details_table_export_view,
9
+ indicator_details_table_view,
10
+ indicator_histogram_export_view,
11
+ indicator_histogram_view,
12
+ indicator_proportions_export_view,
13
+ indicator_statistics_view,
14
+ indicator_submesh_territories_view,
15
+ indicator_top_10_export_view,
16
+ indicator_top_10_view,
17
+ indicator_values_export_view,
18
+ indicator_values_view,
19
+ proportions_chart_view,
20
+ )
21
+
22
+ app_name = "indicators-api"
23
+
24
+ urlpatterns = [
25
+ path("flows/", flows_view, name="flows"),
26
+ path(
27
+ "<str:name>/methodo/",
28
+ download_indicator_methodo_view,
29
+ name="download-indicator-methodo",
30
+ ),
31
+ path(
32
+ "<str:name>/statistics/",
33
+ indicator_statistics_view,
34
+ name="statistics",
35
+ ),
36
+ path(
37
+ "<str:name>/values/export/",
38
+ indicator_values_export_view,
39
+ name="values",
40
+ ),
41
+ path(
42
+ "<str:name>/values/",
43
+ indicator_values_view,
44
+ name="values",
45
+ ),
46
+ path(
47
+ "<str:name>/histogram/export/",
48
+ indicator_histogram_export_view,
49
+ name="histogram-export",
50
+ ),
51
+ path(
52
+ "<str:name>/histogram/",
53
+ indicator_histogram_view,
54
+ name="histogram",
55
+ ),
56
+ path(
57
+ "<str:name>/top-10/export/",
58
+ indicator_top_10_export_view,
59
+ name="top-10-export",
60
+ ),
61
+ path(
62
+ "<str:name>/top-10/",
63
+ indicator_top_10_view,
64
+ name="top-10",
65
+ ),
66
+ path(
67
+ "<str:name>/details/table/",
68
+ indicator_details_table_view,
69
+ name="details-table",
70
+ ),
71
+ path(
72
+ "<str:name>/details/table/export/",
73
+ indicator_details_table_export_view,
74
+ name="details-table-export",
75
+ ),
76
+ path(
77
+ "<str:name>/comparison-histogram/export/",
78
+ comparison_histogram_export_view,
79
+ name="comparison-histogram-export",
80
+ ),
81
+ path(
82
+ "<str:name>/comparison-histogram/",
83
+ comparison_histogram_view,
84
+ name="comparison-histogram",
85
+ ),
86
+ path(
87
+ "<str:name>/proportions/export/",
88
+ indicator_proportions_export_view,
89
+ name="proportions-export",
90
+ ),
91
+ path(
92
+ "<str:name>/proportions/",
93
+ proportions_chart_view,
94
+ name="proportions",
95
+ ),
96
+ path("<str:name>/submesh/", indicator_submesh_territories_view, name="submesh"),
97
+ ]