territories-dashboard-lib 0.1.0__py3-none-any.whl → 0.1.1__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 (67) 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_content.py +20 -0
  60. territories_dashboard_lib/website_lib/templatetags/htmlparams.py +75 -0
  61. territories_dashboard_lib/website_lib/templatetags/other_filters.py +30 -0
  62. territories_dashboard_lib/website_lib/views.py +212 -0
  63. {territories_dashboard_lib-0.1.0.dist-info → territories_dashboard_lib-0.1.1.dist-info}/METADATA +1 -1
  64. territories_dashboard_lib-0.1.1.dist-info/RECORD +67 -0
  65. territories_dashboard_lib-0.1.0.dist-info/RECORD +0 -5
  66. {territories_dashboard_lib-0.1.0.dist-info → territories_dashboard_lib-0.1.1.dist-info}/WHEEL +0 -0
  67. {territories_dashboard_lib-0.1.0.dist-info → territories_dashboard_lib-0.1.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,75 @@
1
+ from django import template
2
+
3
+ register = template.Library()
4
+
5
+ """
6
+ This tag is used to give some html as argument to an {% include %} tag.
7
+
8
+ For instance:
9
+
10
+ {% htmlparams %}
11
+ {% htmlparam content %}
12
+ <span>click me</span>
13
+ {% endhtmlparam %}
14
+ {% include "website/components/button.html"%}
15
+ {% endhtmlparams %}
16
+
17
+ you have to wrap {% include %} within {% htmlparams %} then you can add {% htmlparam VARIABLE_NAME %} with some html within and use the variable within the component.
18
+
19
+ Included button:
20
+
21
+ <button>
22
+ {{ content }}
23
+ </button>
24
+
25
+ """
26
+
27
+
28
+ class HtmlParamNode(template.Node):
29
+ def __init__(self, var_name, nodelist):
30
+ self.var_name = var_name
31
+ self.nodelist = nodelist
32
+
33
+ def render(self, context):
34
+ # do not render anything but stores the output in the context
35
+ output = self.nodelist.render(context)
36
+ context[self.var_name] = output
37
+ return ""
38
+
39
+
40
+ class HtmlParamsNode(template.Node):
41
+ def __init__(self, nodelist):
42
+ self.nodelist = template.NodeList()
43
+ self.paramnodelist = template.NodeList()
44
+ for node in nodelist:
45
+ if isinstance(node, HtmlParamNode):
46
+ self.paramnodelist.append(node)
47
+ else:
48
+ self.nodelist.append(node)
49
+
50
+ def render(self, context):
51
+ with context.push():
52
+ ## Render the htmlparam nodes to update the context
53
+ self.paramnodelist.render(context)
54
+ output = self.nodelist.render(context)
55
+ return output
56
+
57
+
58
+ @register.tag(name="htmlparam")
59
+ def do_htmlparam(parser, token):
60
+ try:
61
+ tag_name, var_name = token.split_contents()
62
+ except ValueError:
63
+ raise template.TemplateSyntaxError(
64
+ "%r tag requires a single argument" % token.contents.split()[0]
65
+ )
66
+ nodelist = parser.parse(("endhtmlparam",))
67
+ parser.delete_first_token()
68
+ return HtmlParamNode(var_name, nodelist)
69
+
70
+
71
+ @register.tag(name="htmlparams")
72
+ def do_htmlparams(parser, token):
73
+ nodelist = parser.parse(("endhtmlparams",))
74
+ parser.delete_first_token()
75
+ return HtmlParamsNode(nodelist)
@@ -0,0 +1,30 @@
1
+ from django import template
2
+ from django.urls import reverse
3
+
4
+ register = template.Library()
5
+
6
+
7
+ @register.filter
8
+ def get_item(dictionary, key):
9
+ return dictionary.get(key)
10
+
11
+
12
+ @register.filter
13
+ def indicator_api_urls(indicator_dict):
14
+ view_names = [
15
+ "download-indicator-methodo",
16
+ "statistics",
17
+ "values",
18
+ "histogram",
19
+ "top-10",
20
+ "details-table",
21
+ "details-table-export",
22
+ "comparison-histogram",
23
+ "proportions",
24
+ ]
25
+ return {
26
+ view_name: reverse(
27
+ f"indicators-api:{view_name}", kwargs={"name": indicator_dict["name"]}
28
+ )
29
+ for view_name in view_names
30
+ }
@@ -0,0 +1,212 @@
1
+ from django.shortcuts import get_object_or_404, redirect, render
2
+ from django.urls import reverse
3
+ from django.views.decorators.gzip import gzip_page
4
+
5
+ from territories_dashboard_lib.indicators_lib.models import Indicator, Theme
6
+ from territories_dashboard_lib.superset_lib.logic import make_filter
7
+ from territories_dashboard_lib.superset_lib.models import Dashboard
8
+ from territories_dashboard_lib.superset_lib.serializers import serialize_dashboard
9
+ from territories_dashboard_lib.tracking_lib.logic import track_page
10
+ from territories_dashboard_lib.website_lib.models import (
11
+ GlossaryItem,
12
+ LandingPage,
13
+ StaticPage,
14
+ )
15
+ from territories_dashboard_lib.website_lib.params import with_params
16
+ from territories_dashboard_lib.website_lib.serializers import (
17
+ serialize_indicator,
18
+ serialize_sub_themes,
19
+ )
20
+
21
+
22
+ @gzip_page
23
+ def landing_page_view(request):
24
+ landing_page = LandingPage.objects.first()
25
+ response = render(
26
+ request,
27
+ "territories_dashboard_lib/website/pages/page.html",
28
+ {"landing_page": landing_page},
29
+ )
30
+ response = track_page(request=request, response=response)
31
+ return response
32
+
33
+
34
+ @gzip_page
35
+ def static_page_view(request, page_url):
36
+ static_page = get_object_or_404(StaticPage, url=page_url)
37
+ return render(
38
+ request,
39
+ "territories_dashboard_lib/website/pages/static/page.html",
40
+ {"static_page": static_page},
41
+ )
42
+
43
+
44
+ @gzip_page
45
+ def lexique_page_view(request):
46
+ lexique = GlossaryItem.objects.all()
47
+ context = {"lexique": lexique}
48
+ response = render(
49
+ request, "territories_dashboard_lib/website/pages/lexique/page.html", context
50
+ )
51
+ return response
52
+
53
+
54
+ def themes_redirect_view(request):
55
+ first_theme = Theme.objects.order_by("ordering").first()
56
+ target_url = reverse("website:theme", kwargs={"theme_name": first_theme.name})
57
+ get_params = request.GET.urlencode()
58
+ if get_params:
59
+ target_url = f"{target_url}?{get_params}"
60
+ return redirect(target_url)
61
+
62
+
63
+ @gzip_page
64
+ @with_params
65
+ def comparison_view(request, *, theme_name, context):
66
+ theme = get_object_or_404(Theme, name=theme_name)
67
+ sub_themes = serialize_sub_themes(theme)
68
+ themes = Theme.objects.order_by("ordering")
69
+ context["theme"] = theme
70
+ context["themes"] = themes
71
+ context["sub_themes"] = sub_themes
72
+ response = render(
73
+ request,
74
+ "territories_dashboard_lib/website/pages/indicators/comparaison/[theme]/page.html",
75
+ context,
76
+ )
77
+ response = track_page(
78
+ request=request,
79
+ response=response,
80
+ params=context["params"],
81
+ theme=theme,
82
+ )
83
+ return response
84
+
85
+
86
+ def comparison_redirect_view(request):
87
+ first_theme = Theme.objects.order_by("ordering").first()
88
+ target_url = reverse("website:comparison", kwargs={"theme_name": first_theme.name})
89
+ get_params = request.GET.urlencode()
90
+ if get_params:
91
+ target_url = f"{target_url}?{get_params}"
92
+ return redirect(target_url)
93
+
94
+
95
+ @gzip_page
96
+ @with_params
97
+ def theme_page_view(request, *, theme_name, context):
98
+ theme = get_object_or_404(Theme, name=theme_name)
99
+ sub_themes = serialize_sub_themes(theme)
100
+ themes = Theme.objects.all().order_by("ordering")
101
+ context["theme"] = theme
102
+ context["themes"] = themes
103
+ context["sub_themes"] = sub_themes
104
+ response = render(
105
+ request,
106
+ "territories_dashboard_lib/website/pages/indicators/themes/page.html",
107
+ context,
108
+ )
109
+ response = track_page(
110
+ request=request,
111
+ response=response,
112
+ params=context["params"],
113
+ theme=theme,
114
+ )
115
+ return response
116
+
117
+
118
+ def apply_filters(request, indicator):
119
+ filters = []
120
+ for dimension in indicator.dimensions.all():
121
+ url_filters = request.GET.getlist(dimension.db_name)
122
+ db_filters = [f for f in dimension.filters.all()]
123
+ for f in db_filters:
124
+ f.set_from_url = "!" + f.db_name in url_filters or f.db_name in url_filters
125
+ f.current = (
126
+ f.default
127
+ and "!" + f.db_name not in url_filters
128
+ or f.db_name in url_filters
129
+ )
130
+ filters.append([dimension, db_filters])
131
+ return filters
132
+
133
+
134
+ @gzip_page
135
+ @with_params
136
+ def indicator_details_view(request, *, indicator_name, context):
137
+ indicator = get_object_or_404(Indicator, name=indicator_name)
138
+ theme = indicator.sub_theme.theme
139
+ sub_themes = serialize_sub_themes(theme)
140
+ themes = Theme.objects.all().order_by("ordering")
141
+ filters = apply_filters(request, indicator)
142
+ context["indicator"] = serialize_indicator(indicator)
143
+ context["themes"] = themes
144
+ context["theme"] = theme
145
+ context["subtheme"] = indicator.sub_theme
146
+ context["sub_themes"] = sub_themes
147
+ context["filters"] = filters
148
+ response = render(
149
+ request,
150
+ "territories_dashboard_lib/website/pages/indicators/details/page.html",
151
+ context=context,
152
+ )
153
+ response = track_page(
154
+ request=request,
155
+ response=response,
156
+ params=context["params"],
157
+ indicator=indicator,
158
+ theme=theme,
159
+ )
160
+ return response
161
+
162
+
163
+ @with_params
164
+ def superset_view(request, dashboard_name, context):
165
+ dashboard = get_object_or_404(Dashboard, short_name=dashboard_name)
166
+ context["dashboard"] = serialize_dashboard(dashboard)
167
+ filter_string = make_filter(
168
+ dashboard,
169
+ context["params"]["territory_id"],
170
+ context["params"]["territory_mesh"],
171
+ )
172
+ if filter_string:
173
+ context["dashboard_filter"] = filter_string
174
+ response = render(
175
+ request,
176
+ "territories_dashboard_lib/website/pages/superset/page.html",
177
+ context=context,
178
+ )
179
+ response = track_page(request=request, response=response)
180
+ return response
181
+
182
+
183
+ def handler_404_view(request, exception):
184
+ return render(request, "territories_dashboard_lib/website/404.html", status=404)
185
+
186
+
187
+ def handler_500_view(request):
188
+ return render(request, "territories_dashboard_lib/website/500.html", status=500)
189
+
190
+
191
+ @gzip_page
192
+ def sitemap_view(request):
193
+ context = {
194
+ "themes": [
195
+ {"title": theme.title, "name": theme.name}
196
+ for theme in Theme.objects.all().order_by("ordering")
197
+ ],
198
+ "indicators": [
199
+ {"title": indicator.title, "name": indicator.name}
200
+ for indicator in Indicator.objects.all().order_by("index_in_theme")
201
+ ],
202
+ "static_pages": [
203
+ {"title": static_page.name, "url": static_page.url}
204
+ for static_page in StaticPage.objects.all()
205
+ ],
206
+ "lexique": GlossaryItem.objects.exists(),
207
+ }
208
+ response = render(
209
+ request, "territories_dashboard_lib/website/pages/sitemap/page.html", context
210
+ )
211
+ response = track_page(request=request, response=response)
212
+ return response
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: territories-dashboard-lib
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Librairie pour la visualisation d'indicateurs territoriaux.
5
5
  Author-email: Bastien <bastien@prune.sh>
6
6
  License: LICENCE OUVERTE 2.0/OPEN LICENCE 2.0
@@ -0,0 +1,67 @@
1
+ territories_dashboard_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ territories_dashboard_lib/commons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ territories_dashboard_lib/commons/decorators.py,sha256=_ACVnbaiCPuplT_81oA0nf_d6l7z0wTCFXMYwXIabew,1225
4
+ territories_dashboard_lib/commons/models.py,sha256=TQIvoXHSFrnIOQcVptHiMe4ZOdw5byse8sVLjnyeWTI,215
5
+ territories_dashboard_lib/geo_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ territories_dashboard_lib/geo_lib/admin.py,sha256=4Ek5WP-D3o1mBgPMqIBTPEsT7GeNo9REaw_FguIRw-M,1664
7
+ territories_dashboard_lib/geo_lib/enums.py,sha256=AwMKwYQP5Z9Qm_5FlO7AtHlJUU92obHXpSpAO1vGuwY,135
8
+ territories_dashboard_lib/geo_lib/models.py,sha256=r7lPzm0akEnbVTFSG3B_7dtDzFMSHzqpgt2MeNNhL8c,2191
9
+ territories_dashboard_lib/geo_lib/urls.py,sha256=W0Zc2z7dn06p4pyFAf0EKATpXAbM0byxCpJK-LRYLak,602
10
+ territories_dashboard_lib/geo_lib/views.py,sha256=OYpT70suyDUSqJbzJ5tXjYJqpgoh2ou-rFVDs3pLAUs,7512
11
+ territories_dashboard_lib/geo_lib/migrations/0001_initial.py,sha256=-H_5uG0IaPesUfGDkYWdtqHqfWOIKvoQQuAZkfGAu-E,3092
12
+ territories_dashboard_lib/geo_lib/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ territories_dashboard_lib/indicators_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ territories_dashboard_lib/indicators_lib/admin.py,sha256=IhmZEYuxt0WCr8rDjc6Iht-uOL7gRgDQNYjq6B0_uaI,4057
15
+ territories_dashboard_lib/indicators_lib/enums.py,sha256=0HZcKtq97AbV2hbPPn7_BtUtSefp5EvgvTWhqx6rn3o,1267
16
+ territories_dashboard_lib/indicators_lib/export.py,sha256=bvrqa2K4aSw17JWF-P2sGBryeab2JZjoE25Ntf68dIk,859
17
+ territories_dashboard_lib/indicators_lib/format.py,sha256=W-ajQjrH6E2mseSq4Lozl0bhmEq481tGFIGsjYS8MMo,891
18
+ territories_dashboard_lib/indicators_lib/methodo_pdf.py,sha256=LpDHMFSNavvfJOI7gDicdY7uF27JpUd-ceUMnOY_FNU,2920
19
+ territories_dashboard_lib/indicators_lib/models.py,sha256=xTi4_Exoc9AdBICRCpN2oLhZPiRdCwa9GX8bo1xb1GQ,8058
20
+ territories_dashboard_lib/indicators_lib/payloads.py,sha256=I03bgoNoLTehd8lfby0xbSy2zUXKRILMUOqYGqvg-Ig,1288
21
+ territories_dashboard_lib/indicators_lib/refresh_filters.py,sha256=loO3Iw97AAWnwQnkRg77q1zUPU7kY5mGlkTCe_glKzs,654
22
+ territories_dashboard_lib/indicators_lib/table.py,sha256=BsvimE68NxXdRI7xnUVYK1axZRZTywVpSUDEtAYWlMo,5332
23
+ territories_dashboard_lib/indicators_lib/urls.py,sha256=BrizGcGJzvcijMvkImMzsi4zRzsgw4fl_cIScsfDYcU,2482
24
+ territories_dashboard_lib/indicators_lib/views.py,sha256=NH-Mppel-A5eT0gxbdfnU0B5UT1RZTSW1kIn8q7_zrs,16755
25
+ territories_dashboard_lib/indicators_lib/migrations/0001_initial.py,sha256=3EyizMGkqve5Gtxrmf-mADzzmOhcAVWe-P0y1TIBKCs,8092
26
+ territories_dashboard_lib/indicators_lib/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ territories_dashboard_lib/indicators_lib/query/commons.py,sha256=6UlN7lYArYt2BKPaweBMtfwUg2cZtl3UCEHb9ecWmjA,7838
28
+ territories_dashboard_lib/indicators_lib/query/comparison.py,sha256=ypT8jed99NubgBWqsjZ_4vs9xX2rArnxeGFQ2IY3cKM,2540
29
+ territories_dashboard_lib/indicators_lib/query/details.py,sha256=NHFO3yat7kRtxsuEuOUAgt0yuMzAVVAumzI2auxffSg,2277
30
+ territories_dashboard_lib/indicators_lib/query/histogram.py,sha256=NpQdAqVzm-bB5AuMZF3jOzEJKLjecwafhlorkYQY6IU,2964
31
+ territories_dashboard_lib/indicators_lib/query/indicator_card.py,sha256=pu-oGTQ8-niIFtZP09HIgJJWkFfJb1CGX99EdsojJDw,3232
32
+ territories_dashboard_lib/indicators_lib/query/top_10.py,sha256=ugx2FD9_IHyaZHkOS0rEDxy3L-dE-F_Gl8sRsQPu2qw,3516
33
+ territories_dashboard_lib/indicators_lib/query/utils.py,sha256=nCeQCLzfq35KZzun9hpM5U34TN7JowB4t3NshIzfLAo,649
34
+ territories_dashboard_lib/superset_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ territories_dashboard_lib/superset_lib/admin.py,sha256=3Yj3PjCd-jC0g4uMNmah-OST-yoE7DDEzJkx2kWlrXg,563
36
+ territories_dashboard_lib/superset_lib/guest_token.py,sha256=smsl11NS2Sgsuz5UJlvI_lDaBi6Fj9rdpSVmuUol8Fs,2300
37
+ territories_dashboard_lib/superset_lib/logic.py,sha256=t3Fl4trVOX9tPeAZTerraHvWGzzV5mml8ZQTsas51AI,2391
38
+ territories_dashboard_lib/superset_lib/models.py,sha256=D_IKcYggr8OeH4Gc9KxmU0ArQ3lq8DFN-e0JDQs9Dng,2613
39
+ territories_dashboard_lib/superset_lib/serializers.py,sha256=k5DcdwN-k5w9dPchiyxBZtG3BAULp8c00JTO3DR6rA4,250
40
+ territories_dashboard_lib/superset_lib/urls.py,sha256=URXJLciWDTlzU7gIymlK0nWwAm3Iq8bMkhO0P7RwMuk,254
41
+ territories_dashboard_lib/superset_lib/views.py,sha256=AdFNT81Z61zWsyXRqCzGsVXb--lZ2xRfpYVNDiOAyyw,586
42
+ territories_dashboard_lib/superset_lib/migrations/0001_initial.py,sha256=Y6iY33EVPMg0XIJu8EErKRJMguYqE7IaZhthZ69OxXA,3461
43
+ territories_dashboard_lib/superset_lib/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ territories_dashboard_lib/tracking_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ territories_dashboard_lib/tracking_lib/enums.py,sha256=9aK0giXZaXTaEJhNj7LeHGilRdVBGLuEAK4lqxO_u-g,128
46
+ territories_dashboard_lib/tracking_lib/logic.py,sha256=9kr3Q1dwRfkNB1mWq3EQd5KViziZ6ur0lyFVVMIuhGY,2507
47
+ territories_dashboard_lib/tracking_lib/models.py,sha256=hvB5gu3o-zZH2hjUsRf_8YF57XkVqQSsnTjSOWRoGIY,3110
48
+ territories_dashboard_lib/tracking_lib/migrations/0001_initial.py,sha256=eH6eegaxN6LuSerZ80_N8iXixF6-YKw79nqmIPimXPY,3494
49
+ territories_dashboard_lib/tracking_lib/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ territories_dashboard_lib/website_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ territories_dashboard_lib/website_lib/admin.py,sha256=TUDxtX3O-ga33jvSowX6HMBHxdqprM9-nSFmsZ2m6Bk,876
52
+ territories_dashboard_lib/website_lib/context_processors.py,sha256=Xq9W_w86Oh242VSGAjScHlgpnXuNcnNt3kSRIqK-ETc,863
53
+ territories_dashboard_lib/website_lib/forms.py,sha256=BNbHx6CgMlA33z6eD-1VaI7AkyO20ZsloJKsec4BcoU,1146
54
+ territories_dashboard_lib/website_lib/models.py,sha256=bsvSKXSQJaG5oKcXqRNN3rC5Ra8M3uZhqou4FkjgAcI,4750
55
+ territories_dashboard_lib/website_lib/navigation.py,sha256=D9YNfBVPpO9bRgNT02j99sp0A0_uqDaBgc25BbQOako,3994
56
+ territories_dashboard_lib/website_lib/params.py,sha256=xmROBlWVv-T8ABTGaGEEuJjFan50yq44iwLYAn5Hzh8,9466
57
+ territories_dashboard_lib/website_lib/serializers.py,sha256=-QvQx0jpbGaBrHcrqLG0Lrb9z4TRIu6VbxOqSfWKtHo,3680
58
+ territories_dashboard_lib/website_lib/static_content.py,sha256=08Fw3190RsTZ8wXwZkmskh-86widq7NRmTD9Ve-9PJY,589
59
+ territories_dashboard_lib/website_lib/views.py,sha256=ZNz23Vrws-L49xeZzrhSJA8KFpqSnURn-9-b0RdR9JE,6760
60
+ territories_dashboard_lib/website_lib/migrations/0001_initial.py,sha256=4g2YgUUBEdak_iW717cJojCv5kqnNV_46GVnw8u8eAw,5701
61
+ territories_dashboard_lib/website_lib/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
+ territories_dashboard_lib/website_lib/templatetags/htmlparams.py,sha256=jWXlmT-nFh7YefVP_zJSXEA1YgT37wnWqelPhmj7UoM,2092
63
+ territories_dashboard_lib/website_lib/templatetags/other_filters.py,sha256=7jcQB8LmnlrDycLyRYuOA62O9nBHROCvogOpegdrarY,661
64
+ territories_dashboard_lib-0.1.1.dist-info/METADATA,sha256=306CuYRMWozn0vPR0us8KYHUESMpIVYKujrqvBxsUR4,9518
65
+ territories_dashboard_lib-0.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
66
+ territories_dashboard_lib-0.1.1.dist-info/top_level.txt,sha256=Cih-lil8CSXTpDZV6fgHKIKIBtUjDaNpmkiuW2TSzsk,26
67
+ territories_dashboard_lib-0.1.1.dist-info/RECORD,,
@@ -1,5 +0,0 @@
1
- territories_dashboard_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- territories_dashboard_lib-0.1.0.dist-info/METADATA,sha256=12Eurxjrz439a8GAt8IIQqDy1Pfzgify-QRX9p9_Itg,9518
3
- territories_dashboard_lib-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
4
- territories_dashboard_lib-0.1.0.dist-info/top_level.txt,sha256=Cih-lil8CSXTpDZV6fgHKIKIBtUjDaNpmkiuW2TSzsk,26
5
- territories_dashboard_lib-0.1.0.dist-info/RECORD,,