simo 2.3.3__py3-none-any.whl → 2.3.5__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 simo might be problematic. Click here for more details.
- simo/__pycache__/asgi.cpython-38.pyc +0 -0
- simo/__pycache__/settings.cpython-38.pyc +0 -0
- simo/backups/__init__.py +0 -0
- simo/backups/__pycache__/__init__.cpython-38.pyc +0 -0
- simo/backups/__pycache__/admin.cpython-38.pyc +0 -0
- simo/backups/__pycache__/dynamic_settings.cpython-38.pyc +0 -0
- simo/backups/__pycache__/models.cpython-38.pyc +0 -0
- simo/backups/admin.py +19 -0
- simo/backups/dynamic_settings.py +21 -0
- simo/backups/migrations/0001_initial.py +27 -0
- simo/backups/migrations/__init__.py +0 -0
- simo/backups/migrations/__pycache__/0001_initial.cpython-38.pyc +0 -0
- simo/backups/migrations/__pycache__/__init__.cpython-38.pyc +0 -0
- simo/backups/models.py +18 -0
- simo/backups/tasks.py +272 -0
- simo/core/__pycache__/context.cpython-38.pyc +0 -0
- simo/core/__pycache__/dynamic_settings.cpython-38.pyc +0 -0
- simo/core/__pycache__/middleware.cpython-38.pyc +0 -0
- simo/core/__pycache__/serializers.cpython-38.pyc +0 -0
- simo/core/__pycache__/tasks.cpython-38.pyc +0 -0
- simo/core/context.py +2 -2
- simo/core/middleware.py +16 -0
- simo/core/serializers.py +3 -1
- simo/core/tasks.py +0 -2
- simo/fleet/__pycache__/controllers.cpython-38.pyc +0 -0
- simo/fleet/__pycache__/forms.cpython-38.pyc +0 -0
- simo/fleet/controllers.py +1 -2
- simo/fleet/forms.py +6 -0
- simo/generic/__pycache__/forms.cpython-38.pyc +0 -0
- simo/generic/__pycache__/socket_consumers.cpython-38.pyc +0 -0
- simo/generic/forms.py +4 -2
- simo/settings.py +1 -0
- simo/users/__pycache__/admin.cpython-38.pyc +0 -0
- simo/users/__pycache__/models.cpython-38.pyc +0 -0
- simo/users/admin.py +14 -15
- simo/users/models.py +22 -20
- {simo-2.3.3.dist-info → simo-2.3.5.dist-info}/METADATA +1 -1
- {simo-2.3.3.dist-info → simo-2.3.5.dist-info}/RECORD +42 -32
- simo/core/templates/admin/formset_widget_old.html +0 -122
- simo/core/templates/setup_wizard/clearable_easy_thumbnails_widget.html +0 -15
- simo/core/templates/setup_wizard/form.html +0 -225
- {simo-2.3.3.dist-info → simo-2.3.5.dist-info}/LICENSE.md +0 -0
- {simo-2.3.3.dist-info → simo-2.3.5.dist-info}/WHEEL +0 -0
- {simo-2.3.3.dist-info → simo-2.3.5.dist-info}/entry_points.txt +0 -0
- {simo-2.3.3.dist-info → simo-2.3.5.dist-info}/top_level.txt +0 -0
simo/users/models.py
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
import requests
|
|
3
3
|
import subprocess
|
|
4
|
-
from django.utils.functional import cached_property
|
|
5
4
|
from django.urls import reverse
|
|
6
5
|
from django.utils.translation import gettext_lazy as _
|
|
7
6
|
from django.db import models
|
|
8
7
|
from django.db import transaction
|
|
9
8
|
from django.db.models.signals import post_save, post_delete, m2m_changed
|
|
10
9
|
from django.dispatch import receiver
|
|
10
|
+
from django.core.cache import cache
|
|
11
11
|
from dirtyfields import DirtyFieldsMixin
|
|
12
12
|
from django.contrib.gis.geos import Point
|
|
13
13
|
from geopy.distance import distance
|
|
@@ -182,9 +182,7 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
182
182
|
USERNAME_FIELD = 'email'
|
|
183
183
|
REQUIRED_FIELDS = ['name']
|
|
184
184
|
|
|
185
|
-
_instances = None
|
|
186
185
|
_instance = None
|
|
187
|
-
_instance_roles = {}
|
|
188
186
|
|
|
189
187
|
class Meta:
|
|
190
188
|
verbose_name = _('user')
|
|
@@ -235,13 +233,16 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
235
233
|
return self.is_active and self.ssh_key and self.is_master
|
|
236
234
|
|
|
237
235
|
def get_role(self, instance):
|
|
238
|
-
|
|
239
|
-
|
|
236
|
+
cache_key = f'user-{self.id}_instance-{instance.id}_role'
|
|
237
|
+
role = cache.get(cache_key, 'expired')
|
|
238
|
+
if role == 'expired':
|
|
239
|
+
role = self.roles.filter(
|
|
240
240
|
instance=instance
|
|
241
241
|
).prefetch_related(
|
|
242
242
|
'component_permissions', 'component_permissions__component'
|
|
243
243
|
).first()
|
|
244
|
-
|
|
244
|
+
cache.set(cache_key, role, 20)
|
|
245
|
+
return role
|
|
245
246
|
|
|
246
247
|
def set_instance(self, instance):
|
|
247
248
|
self._instance = instance
|
|
@@ -274,22 +275,23 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
274
275
|
|
|
275
276
|
@property
|
|
276
277
|
def instances(self):
|
|
277
|
-
if self._instances != None:
|
|
278
|
-
return self._instances
|
|
279
278
|
from simo.core.models import Instance
|
|
280
|
-
|
|
281
|
-
self._instances = set()
|
|
282
279
|
if not self.is_active:
|
|
283
|
-
return
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
280
|
+
return Instance.objects.none()
|
|
281
|
+
cache_key = f'user-{self.id}_instances'
|
|
282
|
+
instances = cache.get(cache_key, 'expired')
|
|
283
|
+
if instances == 'expired':
|
|
284
|
+
if self.is_master:
|
|
285
|
+
instances = Instance.objects.all()
|
|
286
|
+
else:
|
|
287
|
+
instances = Instance.objects.filter(id__in=[
|
|
288
|
+
r.instance.id for r in self.instance_roles.filter(
|
|
289
|
+
is_active=True, instance__isnull=False
|
|
290
|
+
)
|
|
291
|
+
])
|
|
292
|
+
cache.set(cache_key, instances, 10)
|
|
293
|
+
print("INSTANCES: ", instances)
|
|
294
|
+
return instances
|
|
293
295
|
|
|
294
296
|
@property
|
|
295
297
|
def component_permissions(self):
|
|
@@ -3,15 +3,28 @@ simo/asgi.py,sha256=L8CUVZLM32IMzWDZ4IShdDN-m69t7oxAUeHods4-xNM,822
|
|
|
3
3
|
simo/celeryc.py,sha256=eab7_e9rw0c__DCeoUFUh_tjAGVlulxVrk75BaJf57Q,1512
|
|
4
4
|
simo/conf.py,sha256=H2BhXAV8MEDVXF8AbkaLSfR4ULd-9_bS4bnhE5sE5fg,112
|
|
5
5
|
simo/scripting.py,sha256=PVIkGsiMDWj4CNTbOM3rq7pJ6ruavuns-ZMU7VudLa4,923
|
|
6
|
-
simo/settings.py,sha256=
|
|
6
|
+
simo/settings.py,sha256=bwri9NuM9wjCacmUxzB1joy79Bu64tO0jEBZlJUeakc,6933
|
|
7
7
|
simo/urls.py,sha256=fRmAsNQ_pzFloimLmxNeDcR6hHRJ3rOoZ3kGy8zOQ_A,2402
|
|
8
8
|
simo/__pycache__/__init__.cpython-38.pyc,sha256=j81de0BqHMr6bs0C7cuYrXl7HwtK_vv8hDEtAdSwDJc,153
|
|
9
|
-
simo/__pycache__/asgi.cpython-38.pyc,sha256=
|
|
9
|
+
simo/__pycache__/asgi.cpython-38.pyc,sha256=5W_YSKOIrRd6NQQuJDuA3Yuj688GzirXVVOyLe8wJIQ,845
|
|
10
10
|
simo/__pycache__/celeryc.cpython-38.pyc,sha256=eSRoaKwfYlxVaxAiwqpQ2ndEcx7W-VpZtbxRFSV8UYg,1653
|
|
11
11
|
simo/__pycache__/conf.cpython-38.pyc,sha256=MYP2yk3ULxiYwZsZR6tCLjKnU-z03A3avzQzIn66y3k,273
|
|
12
|
-
simo/__pycache__/settings.cpython-38.pyc,sha256=
|
|
12
|
+
simo/__pycache__/settings.cpython-38.pyc,sha256=NdG2wtrRDI5YO1CfMzJuSGRARls5OnNJs7_XpLxGOQI,6083
|
|
13
13
|
simo/__pycache__/urls.cpython-38.pyc,sha256=u0x6EqT8S1YfDOSPgbI8Kf-RDlveY9OV-EDXMYKAQ7w,2125
|
|
14
14
|
simo/__pycache__/wsgi.cpython-38.pyc,sha256=TpRxO7VM_ql31hbKphVdanydC5RI1nHB4l0QA2pdWxo,322
|
|
15
|
+
simo/backups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
+
simo/backups/admin.py,sha256=doPMTahbMtWHBpYDW2xh3tz2bkb6KqJXfH2cAeHUalM,533
|
|
17
|
+
simo/backups/dynamic_settings.py,sha256=MrXECAxnpQjBf8yWug6qusSAyxRCtzBuQxfhFX8uV-c,560
|
|
18
|
+
simo/backups/models.py,sha256=wjXvb8uXWGk_iqmbMBnX8owp5AYpj1WS0KteW4a0Fbk,463
|
|
19
|
+
simo/backups/tasks.py,sha256=GueIJLZazeUZTfupe24k1m2IiflceSE610bL6KTXuAo,8496
|
|
20
|
+
simo/backups/__pycache__/__init__.cpython-38.pyc,sha256=vzOf-JIMeZ6P85FyvTpYev3mscFosUy-SJTshcQbOHU,161
|
|
21
|
+
simo/backups/__pycache__/admin.cpython-38.pyc,sha256=yT_AJOT6ypJl2iCQqphioMw2h0qm7N8IxDzEVF9RJWw,1027
|
|
22
|
+
simo/backups/__pycache__/dynamic_settings.cpython-38.pyc,sha256=Ko0le9M96_zv4jv4zUsGUZTjEzNFQxr7NNjEwp2FRqU,900
|
|
23
|
+
simo/backups/__pycache__/models.cpython-38.pyc,sha256=ifXK00chQNJZQL9QohBMTwH343Kt_CqVWUkuUQjnUX4,922
|
|
24
|
+
simo/backups/migrations/0001_initial.py,sha256=0LzCusTUyYf61ksiepdnqXIuYYNTNd_djh_Wa484HA0,770
|
|
25
|
+
simo/backups/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
simo/backups/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=jumm0xjwRhiYPOAXi4o-AGpcRi-GVOj5bSJkOTYtT7w,834
|
|
27
|
+
simo/backups/migrations/__pycache__/__init__.cpython-38.pyc,sha256=Lz1fs6V05h2AoxTOLNye0do9bEMnyuaXB_hHOjG5-HU,172
|
|
15
28
|
simo/core/__init__.py,sha256=_s2TjJfQImsMrTIxqLAx9AZie1Ojmm6sCHASdl3WLGU,50
|
|
16
29
|
simo/core/admin.py,sha256=hoJ0OhfWL9T0d6JCY6_Gm3GR-nrgtDR2UQM67rMsjiE,18141
|
|
17
30
|
simo/core/api.py,sha256=laWtqQUL0ngjTtdDGqcUH42WYzWd9WYJwcKL3yCsDk4,27952
|
|
@@ -22,7 +35,7 @@ simo/core/apps.py,sha256=CsqpiQerhmrMsH-wGiG-gQgXd9qEkIi-LUaA9cXpKSw,425
|
|
|
22
35
|
simo/core/auto_urls.py,sha256=nNXEgLAAAQAhRWQDA9AbDtw-zcPKmu_pufJaSa8g818,1102
|
|
23
36
|
simo/core/autocomplete_views.py,sha256=JT5LA2_Wtr60XYSAIqaXFKFYPjrmkEf6yunXD9y2zco,4022
|
|
24
37
|
simo/core/base_types.py,sha256=qVh6MrXZEfN7bFOyFftC7u0yyz0PkvpsjllLBc6SCp4,616
|
|
25
|
-
simo/core/context.py,sha256=
|
|
38
|
+
simo/core/context.py,sha256=x8ejZuyQsCRkbtlAyk2rLZ95RuI_5VPSWLolkfNOAf8,1360
|
|
26
39
|
simo/core/controllers.py,sha256=rLgJqnEMzRC0GpZnQb0m_Cz43Gp2zaYbODU7UUxE5oA,29602
|
|
27
40
|
simo/core/dynamic_settings.py,sha256=bUs58XEZOCIEhg1TigR3LmYggli13KMryBZ9pC7ugAQ,1872
|
|
28
41
|
simo/core/events.py,sha256=LvtonJGNyCb6HLozs4EG0WZItnDwNdtnGQ4vTcnKvUs,4438
|
|
@@ -32,15 +45,15 @@ simo/core/forms.py,sha256=sFVz8tENhi4QSudORu_e5tlGEC0aXumy6wzJqQNYBPk,21904
|
|
|
32
45
|
simo/core/gateways.py,sha256=m0eS3XjVe34Dge6xtoCq16kFWCKJcdQrT0JW0REqoq8,3715
|
|
33
46
|
simo/core/loggers.py,sha256=EBdq23gTQScVfQVH-xeP90-wII2DQFDjoROAW6ggUP4,1645
|
|
34
47
|
simo/core/managers.py,sha256=n-b3I4uXzfHKTeB1VMjSaMsDUxp8FegFJwnbV1IsWQ4,3019
|
|
35
|
-
simo/core/middleware.py,sha256=
|
|
48
|
+
simo/core/middleware.py,sha256=Kh5tOkPs3WCOd3XF3PZ3XdYjNi_OVRLpMq9T_xiabgc,2732
|
|
36
49
|
simo/core/models.py,sha256=hQA8SeAPtGRSs4gk-bci2Ni3ZANtS62V-IDgCyJh2qE,21563
|
|
37
50
|
simo/core/permissions.py,sha256=v0iJM4LOeYoEfMiw3OLPYio272G1aUEAg_z9Wd1q5m0,2993
|
|
38
51
|
simo/core/routing.py,sha256=X1_IHxyA-_Q7hw1udDoviVP4_FSBDl8GYETTC2zWTbY,499
|
|
39
|
-
simo/core/serializers.py,sha256=
|
|
52
|
+
simo/core/serializers.py,sha256=1hcCnLnItw8T3jLWivKBjSAt7kwqjcOYE0vaepw55Z0,20966
|
|
40
53
|
simo/core/signal_receivers.py,sha256=9-qFCCeSLcMFEMg6QUtKOVgUsoNoqhzGoI98nuNSTEo,6228
|
|
41
54
|
simo/core/socket_consumers.py,sha256=n7VE2Fvqt4iEAYLTRbTPOcI-7tszMAADu7gimBxB-Fg,9635
|
|
42
55
|
simo/core/storage.py,sha256=_5igjaoWZAiExGWFEJMElxUw55DzJG1jqFty33xe8BE,342
|
|
43
|
-
simo/core/tasks.py,sha256=
|
|
56
|
+
simo/core/tasks.py,sha256=SMrs1vjVgsHO9-QBLg4hTyTrd6gAUMchPXY6zHHkqOs,14205
|
|
44
57
|
simo/core/todos.py,sha256=eYVXfLGiapkxKK57XuviSNe3WsUYyIWZ0hgQJk7ThKo,665
|
|
45
58
|
simo/core/types.py,sha256=WJEq48mIbFi_5Alt4wxWMGXxNxUTXqfQU5koH7wqHHI,1108
|
|
46
59
|
simo/core/views.py,sha256=VVqfEPzK0EdbVMMarkG8rd7cODG5QHpXnr3e8UdrTQE,2600
|
|
@@ -55,9 +68,9 @@ simo/core/__pycache__/apps.cpython-38.pyc,sha256=JL0BEqgXcSQvMlcK48PBpPfyDEkPMdO
|
|
|
55
68
|
simo/core/__pycache__/auto_urls.cpython-38.pyc,sha256=Tyf8PYHq5YqSwTp25Joy-eura_Fm86fpX9zKLSklhvo,872
|
|
56
69
|
simo/core/__pycache__/autocomplete_views.cpython-38.pyc,sha256=hJ6JILI1LqrAtpQMvxnLvljGdW1v1gpvBsD79vFkZ58,3972
|
|
57
70
|
simo/core/__pycache__/base_types.cpython-38.pyc,sha256=hmq22vvGyCmhbYyuV6bFAOOSIupspgW5yq_VzqWd-vY,759
|
|
58
|
-
simo/core/__pycache__/context.cpython-38.pyc,sha256=
|
|
71
|
+
simo/core/__pycache__/context.cpython-38.pyc,sha256=EbjtX2vOdl7-NA02zEwp_iUMKI2SSs-NZ-sHryo0GGY,1278
|
|
59
72
|
simo/core/__pycache__/controllers.cpython-38.pyc,sha256=LA5Bnzev4kS3S8Ta0nfaVHQMIPfUDPYDL1GvfgHtIWg,26584
|
|
60
|
-
simo/core/__pycache__/dynamic_settings.cpython-38.pyc,sha256=
|
|
73
|
+
simo/core/__pycache__/dynamic_settings.cpython-38.pyc,sha256=wGpnscX1DxFpRl54MQURhjz2aD3NJohSzw9JCFnzh2Y,2384
|
|
61
74
|
simo/core/__pycache__/events.cpython-38.pyc,sha256=A1Axx-qftd1r7st7wkO3DkvTdt9-RkcJe5KJhpzJVk8,5109
|
|
62
75
|
simo/core/__pycache__/filters.cpython-38.pyc,sha256=VIMADCBiYhziIyRmxAyUDJluZvuZmiC4bNYWTRsGSao,721
|
|
63
76
|
simo/core/__pycache__/form_fields.cpython-38.pyc,sha256=u0voKXkA64xbH6LY_-jMBHQS4mOJZZeuB9WTvtv9JWE,3433
|
|
@@ -65,15 +78,15 @@ simo/core/__pycache__/forms.cpython-38.pyc,sha256=JDCNYJQrZHUaMb4qZ6A0f1JptoCHQK
|
|
|
65
78
|
simo/core/__pycache__/gateways.cpython-38.pyc,sha256=D1ooHL-iSpQrxnD8uAl4xWFJmm-QWZfbkLiLlFOMtdU,4553
|
|
66
79
|
simo/core/__pycache__/loggers.cpython-38.pyc,sha256=Z-cdQnC6XlIonPV4Sl4E52tP4NMEdPAiHK0cFaIL7I8,1623
|
|
67
80
|
simo/core/__pycache__/managers.cpython-38.pyc,sha256=6RTIxyjOgpQGtAqcUyE2vFPS09w1V5Wmd_vOV7rHRRI,3370
|
|
68
|
-
simo/core/__pycache__/middleware.cpython-38.pyc,sha256=
|
|
81
|
+
simo/core/__pycache__/middleware.cpython-38.pyc,sha256=C9v8kFb4BvD8TCvbSGpRRYH0xtoOM3nId2VaId5jmiA,2408
|
|
69
82
|
simo/core/__pycache__/models.cpython-38.pyc,sha256=h_neN4zzReOTuou4NX9RbgVJ8T47z0tLqSr37Fm1iHU,17874
|
|
70
83
|
simo/core/__pycache__/permissions.cpython-38.pyc,sha256=fH4iyqd9DdzRLEu2b621-FeM-napR0M7hzBUTHo9Q3g,2972
|
|
71
84
|
simo/core/__pycache__/routing.cpython-38.pyc,sha256=3T3FPJ8Cn99xZCGvMyg2xjl7al-Shm9CelbSpkJtNP8,599
|
|
72
|
-
simo/core/__pycache__/serializers.cpython-38.pyc,sha256=
|
|
85
|
+
simo/core/__pycache__/serializers.cpython-38.pyc,sha256=xsGMcx9ISHmvY_PzWqosUdkWRBNqYKOtVkFDYNEHc1A,19479
|
|
73
86
|
simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=3Bt9S47DR_ZFS3O-crElFgLLXPIYyDgPIc2ibwEkaic,4904
|
|
74
87
|
simo/core/__pycache__/socket_consumers.cpython-38.pyc,sha256=NJUr7nRyHFvmAumxxWpsod5wzVVZM99rCEuJs1utHA4,8432
|
|
75
88
|
simo/core/__pycache__/storage.cpython-38.pyc,sha256=9R1Xu0FJDflfRXUPsqEgt0SpwiP7FGk7HaR8s8XRyI8,721
|
|
76
|
-
simo/core/__pycache__/tasks.cpython-38.pyc,sha256=
|
|
89
|
+
simo/core/__pycache__/tasks.cpython-38.pyc,sha256=arMCRz9NTDmE13KLvE4MCGwknvmmhYjTTqDpjZS93FI,9767
|
|
77
90
|
simo/core/__pycache__/todos.cpython-38.pyc,sha256=lOqGZ58siHM3isoJV4r7sg8igrfE9fFd-jSfeBa0AQI,253
|
|
78
91
|
simo/core/__pycache__/views.cpython-38.pyc,sha256=D7X_fFxYySe-mKNB4bEnIt9ubYM7CbbRcIpX52Ou4RE,2809
|
|
79
92
|
simo/core/__pycache__/widgets.cpython-38.pyc,sha256=sR0ZeHCHrhnNDBJuRrxp3zUsfBp0xrtF0xrK2TkQv1o,3520
|
|
@@ -10124,7 +10137,6 @@ simo/core/templates/admin/clearable_easy_thumbnails_widget.html,sha256=Gh0z_KIEt
|
|
|
10124
10137
|
simo/core/templates/admin/component_change_list.html,sha256=N3seVjTkIRXIXKGsleB7oWUnPlMRXDIqOPqfEyq4PNE,3320
|
|
10125
10138
|
simo/core/templates/admin/component_history.html,sha256=xiACt0w7EPrdmTOsi5XO07O-8LcL_XpCu9pSynmNNpI,541
|
|
10126
10139
|
simo/core/templates/admin/formset_widget.html,sha256=NAonHNLyicsoE4Iir3My4AlVSz4Q7-1OA19zgsIOjJA,3563
|
|
10127
|
-
simo/core/templates/admin/formset_widget_old.html,sha256=rehM_tXl54d93vH0zbIv0QDJZb9rwmBqm5yiiHG31oM,4085
|
|
10128
10140
|
simo/core/templates/admin/index.html,sha256=AJpt1FA4g6IAFQA99-3glJ88RmoWJ0YXBIz_DUt-R14,4015
|
|
10129
10141
|
simo/core/templates/admin/item_name_display.html,sha256=Y3zk-rc-y8_6dC6_WrSy6tx6Z-6IZzZ5w3a1hMxlpz4,357
|
|
10130
10142
|
simo/core/templates/admin/msg_page.html,sha256=C1T9fniV7cIiSBQXRFcSAsbt5Y_fshf6T6ZAE1e8hNw,738
|
|
@@ -10151,8 +10163,6 @@ simo/core/templates/core/object_acutocomplete_select_item.html,sha256=pS8APlv1Id
|
|
|
10151
10163
|
simo/core/templates/core/openvpn_client.conf,sha256=z1838G8v8vmIiQKyfE8URCCMpLsges5jbX3hDJkztF4,249
|
|
10152
10164
|
simo/core/templates/gis/my-openlayers-osm.html,sha256=ze4Gcl4fjrkKS1lONZHgpD-ybdI_N4zZcWBsBeyL4-A,1790
|
|
10153
10165
|
simo/core/templates/gis/js/OLMapWidget.js,sha256=QOOHCR4CyAljFTtXTP_MNKN5RTplp3lvDKxHJj3J4KY,8813
|
|
10154
|
-
simo/core/templates/setup_wizard/clearable_easy_thumbnails_widget.html,sha256=DaN-86hqYMgi9j0zNFKEoqKMLsylrsJjj5FfUlhud4M,719
|
|
10155
|
-
simo/core/templates/setup_wizard/form.html,sha256=gBPXeB5d4e38iUguyEJi5CIIJWNPeb8tVVLEjuTRb8I,6630
|
|
10156
10166
|
simo/core/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10157
10167
|
simo/core/templatetags/components_list.py,sha256=dcwXEgVrP2xuRpGpv1yQ_DHvmitsuF93PhDa9y69F2M,18540
|
|
10158
10168
|
simo/core/templatetags/__pycache__/__init__.cpython-38.pyc,sha256=cvoEO0D7kCdN58Rztay2GihwqCVH0-FA8XRoFiQBSmk,171
|
|
@@ -10201,8 +10211,8 @@ simo/fleet/api.py,sha256=Hxn84xI-Q77HxjINgRbjSJQOv9jii4OL20LxK0VSrS8,2499
|
|
|
10201
10211
|
simo/fleet/auto_urls.py,sha256=UX66eR2ykMqFgfIllW-RTdjup5-FieCWl_BVm3CcXKg,702
|
|
10202
10212
|
simo/fleet/base_types.py,sha256=wL9RVkHr0gA7HI1wZq0pruGEIgvQqpfnCL4cC3ywsvw,102
|
|
10203
10213
|
simo/fleet/ble.py,sha256=eHA_9ABjbmH1vUVCv9hiPXQL2GZZSEVwfO0xyI1S0nI,1081
|
|
10204
|
-
simo/fleet/controllers.py,sha256=
|
|
10205
|
-
simo/fleet/forms.py,sha256=
|
|
10214
|
+
simo/fleet/controllers.py,sha256=A9Bawj9x9JOjd_u8lmNhnWbGlZgqIIS7kbAuO0cNR6c,30506
|
|
10215
|
+
simo/fleet/forms.py,sha256=EG0QkxCePDMTTD6GPxj1TAwcUYEGyybsitUTx7CPiFM,57917
|
|
10206
10216
|
simo/fleet/gateways.py,sha256=lKEJW0MgaOEiNnijH50DNSVChvaUT3TA3UurcI57P8k,5677
|
|
10207
10217
|
simo/fleet/managers.py,sha256=XOpDOA9L-f_550TNSyXnJbun2EmtGz1TenVTMlUSb8E,807
|
|
10208
10218
|
simo/fleet/models.py,sha256=dJYDTHBz1OizzP51G0fdKHSuW98CsqBX-NhgjcVqYHY,16518
|
|
@@ -10218,8 +10228,8 @@ simo/fleet/__pycache__/api.cpython-38.pyc,sha256=rL9fb7cCQatyFvXyKmlNOKmxVo8vHYe
|
|
|
10218
10228
|
simo/fleet/__pycache__/auto_urls.cpython-38.pyc,sha256=Tc6a6BCXHjijP8U2jE2ghlJwnSNrGm59-hW5t-80wF0,689
|
|
10219
10229
|
simo/fleet/__pycache__/base_types.cpython-38.pyc,sha256=deyPwjpT6xZiFxBGFnj5b7R-lbdOTh2krgpJhrcGVhc,274
|
|
10220
10230
|
simo/fleet/__pycache__/ble.cpython-38.pyc,sha256=Nrof9w7cm4OlpFWHeVnmvvanh2_oF9oQ3TknJiV93-0,1267
|
|
10221
|
-
simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=
|
|
10222
|
-
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=
|
|
10231
|
+
simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=7_GWIGJ2cNjrct6Vu3tSTjvxx6kNJDtTdyTTwsQ1k_8,25373
|
|
10232
|
+
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=8LoC9PAnEEpQ2cVWT4REYvKcLKh7WPsHrJjNNogYgik,39202
|
|
10223
10233
|
simo/fleet/__pycache__/gateways.cpython-38.pyc,sha256=0RKVn0ndreVKhsrukqeLPSdMnRrsQ_W7yeVeBkRLfIk,5058
|
|
10224
10234
|
simo/fleet/__pycache__/managers.cpython-38.pyc,sha256=8uz-xpUiqbGDgXIZ_XRZtFb-Tju6NGxflGg-Ee4Yo6k,1310
|
|
10225
10235
|
simo/fleet/__pycache__/models.cpython-38.pyc,sha256=pEiMWANjJpKXSR60PosKCUQOKpo6tSvCeWX4VP-0Lns,13796
|
|
@@ -10311,7 +10321,7 @@ simo/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
10311
10321
|
simo/generic/app_widgets.py,sha256=E_pnpA1hxMIhenRCrHoQ5cik06jm2BAHCkl_eo-OudU,1264
|
|
10312
10322
|
simo/generic/base_types.py,sha256=djymox_boXTHX1BTTCLXrCH7ED-uAsV_idhaDOc3OLI,409
|
|
10313
10323
|
simo/generic/controllers.py,sha256=tVI0Gz35dcHt3_5xlkAaXOy3fxlmtZ8L7ODQBtBumV0,58275
|
|
10314
|
-
simo/generic/forms.py,sha256=
|
|
10324
|
+
simo/generic/forms.py,sha256=qS7BDI2_w01XsgBKjisGE6XNSMNpmdrdxCEJqorapwA,29481
|
|
10315
10325
|
simo/generic/gateways.py,sha256=cc_q_g2HsI2_rWmr8yZ3spnMPwsgoYS5ApWRimc11wU,18831
|
|
10316
10326
|
simo/generic/models.py,sha256=flpK2jsBFghrvRHzl6IKT-t3WZ-hNOj4ZP2vmBzx0K8,7657
|
|
10317
10327
|
simo/generic/routing.py,sha256=elQVZmgnPiieEuti4sJ7zITk1hlRxpgbotcutJJgC60,228
|
|
@@ -10320,11 +10330,11 @@ simo/generic/__pycache__/__init__.cpython-38.pyc,sha256=mLu54WS9KIl-pHwVCBKpsDFI
|
|
|
10320
10330
|
simo/generic/__pycache__/app_widgets.cpython-38.pyc,sha256=0IoKRG9n1tkNRRkrqAeOQwWBPd_33u98JBcVtMVVCio,2374
|
|
10321
10331
|
simo/generic/__pycache__/base_types.cpython-38.pyc,sha256=ptw6axyAqemZA35oa6vzr7EihzvbhW9w7Y-G6kfDedU,555
|
|
10322
10332
|
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=I9sGJNnAm9UOnnEoK5KR6IJ9q442El31AiY2hBnx1pI,36480
|
|
10323
|
-
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=
|
|
10333
|
+
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=bbuuS_Q7q7232hYrAPu-pn0WrGpKoMZSiGArOkQfHpc,21103
|
|
10324
10334
|
simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=8NbsLVDww3Ov5DKF--LKgyrgnrn8yVcKrY21cdvV5aA,13979
|
|
10325
10335
|
simo/generic/__pycache__/models.cpython-38.pyc,sha256=n3FeTMJYh4B6nCPiPKeXiWsUOOWkLHca7qTvfTK6Iik,5844
|
|
10326
10336
|
simo/generic/__pycache__/routing.cpython-38.pyc,sha256=xtxTUTBTdivzFyA5Wh7k-hUj1WDO_FiRq6HYXdbr9Ks,382
|
|
10327
|
-
simo/generic/__pycache__/socket_consumers.cpython-38.pyc,sha256=
|
|
10337
|
+
simo/generic/__pycache__/socket_consumers.cpython-38.pyc,sha256=qJO5kvQLWhsQDOr1AtAtsAybuRWioxSkQei3Pc7rdP0,1737
|
|
10328
10338
|
simo/generic/static/weather_icons/01d@2x.png,sha256=TZfWi6Rfddb2P-oldWWcjUiuCHiU9Yrc5hyrQAhF26I,948
|
|
10329
10339
|
simo/generic/static/weather_icons/01n@2x.png,sha256=e9RleTa0T7To9Wi2wJ-9waeTbfHOsUB_xGwkx-89eEg,945
|
|
10330
10340
|
simo/generic/static/weather_icons/02d@2x.png,sha256=ex522OxNzNNpSRGGzh7EmsBZi_MOFY-1IkQXTOMLL3I,1628
|
|
@@ -10398,7 +10408,7 @@ simo/notifications/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=YnO
|
|
|
10398
10408
|
simo/notifications/migrations/__pycache__/0002_notification_instance.cpython-38.pyc,sha256=Gkb3Qwr_zglGibQg9g5ekIgxtGapS4ENXVWQVHqM56I,794
|
|
10399
10409
|
simo/notifications/migrations/__pycache__/__init__.cpython-38.pyc,sha256=YMBRHVon2nWDtIUbghckjnC12sIg_ykPWhV5aM0tto4,178
|
|
10400
10410
|
simo/users/__init__.py,sha256=6a7uBpCWB_DR7p54rbHusc0xvi1qfT1ZCCQGb6TiBh8,52
|
|
10401
|
-
simo/users/admin.py,sha256=
|
|
10411
|
+
simo/users/admin.py,sha256=oaLFTrjDaruKC_l79BB0etru4p8nP8eJFV3F4TSYGp4,6305
|
|
10402
10412
|
simo/users/api.py,sha256=kUcdHm-WUn6z_AnFEXHnjYu8YX2MW1Z-NlAysRmSdLI,10333
|
|
10403
10413
|
simo/users/apps.py,sha256=cq0A8-U1HALEwev0TicgFhr4CAu7Icz8rwq0HfOaL4E,207
|
|
10404
10414
|
simo/users/auth_backends.py,sha256=bBSNXQJ88TRXaQxyh1aETfmOIfiDr08Jnj8rSY9sHDk,4074
|
|
@@ -10406,7 +10416,7 @@ simo/users/auto_urls.py,sha256=lcJvteBsbHQMJieZpDz-63tDYejLApqsW3CUnDakd7k,272
|
|
|
10406
10416
|
simo/users/dynamic_settings.py,sha256=sEIsi4yJw3kH46Jq_aOkSuK7QTfQACGUE-lkyBogCaM,570
|
|
10407
10417
|
simo/users/managers.py,sha256=M_51bk9z4jn8e2Ci3pJfIqbf6cRNqfQNSOAg0vPl6Vo,175
|
|
10408
10418
|
simo/users/middleware.py,sha256=GMCrnWSc_2qCleyQIkfQGdL-pU-UTEcSg1wPvIKZ9uk,1210
|
|
10409
|
-
simo/users/models.py,sha256=
|
|
10419
|
+
simo/users/models.py,sha256=0KGZZjXdzNHPRuS6uYo8PE3DBZDw6N9TU3zxiLpCQxs,19370
|
|
10410
10420
|
simo/users/permissions.py,sha256=IwtYS8yQdupWbYKR9VimSRDV3qCJ2jXP57Lyjpb2EQM,242
|
|
10411
10421
|
simo/users/serializers.py,sha256=a4R408ZgWVbF7OFw4bBfN33Wnn8ljqS8iFcsqmllkWU,2552
|
|
10412
10422
|
simo/users/sso_urls.py,sha256=gQOaPvGMYFD0NCVSwyoWO-mTEHe5j9sbzV_RK7kdvp0,251
|
|
@@ -10415,7 +10425,7 @@ simo/users/tasks.py,sha256=HJAqiyWGsaN3wSfquU0UyQ20jL-njXeaaTOdDT3TQ3s,979
|
|
|
10415
10425
|
simo/users/utils.py,sha256=7gU_TDnAOsDYqJM0CFo8efPah2bTXfGpXxRqzD5RiSs,1270
|
|
10416
10426
|
simo/users/views.py,sha256=dOQVvmlHG7ihWKJLFUBcqKOA0UDctlMKR0pTc36JZqg,3487
|
|
10417
10427
|
simo/users/__pycache__/__init__.cpython-38.pyc,sha256=VFoDJE_SKKaPqqYaaBYd1Ndb1hjakkTo_u0EG_XJ1GM,211
|
|
10418
|
-
simo/users/__pycache__/admin.cpython-38.pyc,sha256=
|
|
10428
|
+
simo/users/__pycache__/admin.cpython-38.pyc,sha256=UgkqzfrSQU8Hyqig03Z5Qq29434wU27ttufxtvGEJYw,7433
|
|
10419
10429
|
simo/users/__pycache__/api.cpython-38.pyc,sha256=25he7r5DHfcLYveXWhn6gQDV2R6YnpKbUVBNInR1q_s,8714
|
|
10420
10430
|
simo/users/__pycache__/apps.cpython-38.pyc,sha256=dgbWL8CxzzISJQTmq_4IztPJ2UzykNVdqA2Ae1PmeGk,605
|
|
10421
10431
|
simo/users/__pycache__/auth_backends.cpython-38.pyc,sha256=n5nx2QSXNj2idzRcGE6bAagMN-8qxoCs580H1EFZXls,3105
|
|
@@ -10423,7 +10433,7 @@ simo/users/__pycache__/auto_urls.cpython-38.pyc,sha256=K-3sz2h-cEitoflSmZk1t0eUg
|
|
|
10423
10433
|
simo/users/__pycache__/dynamic_settings.cpython-38.pyc,sha256=6F8JBjZkHykySnmZjNEzjS0ijbmPdcp9yUAZ5kqq_Fo,864
|
|
10424
10434
|
simo/users/__pycache__/managers.cpython-38.pyc,sha256=C5-diljm874RAFMTkZdcfzPhkHzlUGPAhz2gTvqkDy8,604
|
|
10425
10435
|
simo/users/__pycache__/middleware.cpython-38.pyc,sha256=Tj4nVEAvxEW3xA63fBRiJWRJpz_M848ZOqbHioc_IPE,1149
|
|
10426
|
-
simo/users/__pycache__/models.cpython-38.pyc,sha256=
|
|
10436
|
+
simo/users/__pycache__/models.cpython-38.pyc,sha256=MMCLklK0yVxhSsl2m8Z2xnAmnxSSCpFJcnXzx5TdQQM,18096
|
|
10427
10437
|
simo/users/__pycache__/permissions.cpython-38.pyc,sha256=ez5NxoL_JUeeH6GsKhvFreuA3FCBgGf9floSypdXUtM,633
|
|
10428
10438
|
simo/users/__pycache__/serializers.cpython-38.pyc,sha256=PuMy6H0PhEhq89RFmdnFH4pMHB0N3w7opJEFS90JUCY,3477
|
|
10429
10439
|
simo/users/__pycache__/sso_urls.cpython-38.pyc,sha256=uAwDozpOmrhUald-8tOHANILXkH7-TI8fNYXOtPkSY8,402
|
|
@@ -10507,9 +10517,9 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
10507
10517
|
simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10508
10518
|
simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10509
10519
|
simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10510
|
-
simo-2.3.
|
|
10511
|
-
simo-2.3.
|
|
10512
|
-
simo-2.3.
|
|
10513
|
-
simo-2.3.
|
|
10514
|
-
simo-2.3.
|
|
10515
|
-
simo-2.3.
|
|
10520
|
+
simo-2.3.5.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
|
|
10521
|
+
simo-2.3.5.dist-info/METADATA,sha256=2xG3zs115tsP3PXghxzrOBEh1zMucXq5_Pygm6Sf05M,1878
|
|
10522
|
+
simo-2.3.5.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
|
10523
|
+
simo-2.3.5.dist-info/entry_points.txt,sha256=S9PwnUYmTSW7681GKDCxUbL0leRJIaRk6fDQIKgbZBA,135
|
|
10524
|
+
simo-2.3.5.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
|
|
10525
|
+
simo-2.3.5.dist-info/RECORD,,
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
{% load i18n admin_urls static admin_modify %}
|
|
2
|
-
<style>
|
|
3
|
-
.formset-table th, .formset-table th .label{
|
|
4
|
-
font-weight: normal;
|
|
5
|
-
color: var(--body-quiet-color);
|
|
6
|
-
}
|
|
7
|
-
.formset-table .label.required{
|
|
8
|
-
font-weight: bold;
|
|
9
|
-
}
|
|
10
|
-
form .aligned .formset-table ul{
|
|
11
|
-
margin-left:0;
|
|
12
|
-
}
|
|
13
|
-
.errors .formset-table input, .errors .formset-table select,
|
|
14
|
-
.errors .formset-table textarea{
|
|
15
|
-
border: 1px solid var(--border-color);
|
|
16
|
-
}
|
|
17
|
-
.errors .formset-table .select2-selection{
|
|
18
|
-
border-color: #aaa;
|
|
19
|
-
}
|
|
20
|
-
.formset-table td.errors input, .formset-table td.errors select,
|
|
21
|
-
.formset-table td.errors textarea{
|
|
22
|
-
border: 1px solid var(--error-fg);
|
|
23
|
-
}
|
|
24
|
-
.formset-table td.errors .select2-selection{
|
|
25
|
-
border-color: var(--error-fg);
|
|
26
|
-
}
|
|
27
|
-
.formset-table td.drag {
|
|
28
|
-
cursor: pointer;
|
|
29
|
-
background-image: url(/static/adminsortable2/icons/drag.png);
|
|
30
|
-
background-repeat: repeat;
|
|
31
|
-
width: 20px;
|
|
32
|
-
}
|
|
33
|
-
.formset-table .inline-deletelink{
|
|
34
|
-
float: left
|
|
35
|
-
}
|
|
36
|
-
</style>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class="inline-group sortable" id="{{ formset.prefix }}-group">
|
|
40
|
-
<div class="tabular inline-related">
|
|
41
|
-
{{ formset.management_form }}
|
|
42
|
-
<fieldset class="module">
|
|
43
|
-
{{ formset.non_form_errors }}
|
|
44
|
-
<table class="formset-table">
|
|
45
|
-
<thead><tr>
|
|
46
|
-
<th>{% trans "Sort" %}</th>
|
|
47
|
-
{% for field in empty_form %}
|
|
48
|
-
{% if not field.is_hidden and not field.name == 'DELETE' %}
|
|
49
|
-
<th{% if field.required %} class="required"{% endif %}>{{ field.label|capfirst }}
|
|
50
|
-
{% if field.help_text %} <img src="{% static "admin/img/icon-unknown.svg" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.help_text|striptags }})" title="{{ field.help_text|striptags }}" />{% endif %}
|
|
51
|
-
</th>
|
|
52
|
-
{% endif %}
|
|
53
|
-
{% endfor %}
|
|
54
|
-
{% if formset.can_delete %}<th>{% trans "Delete?" %}</th>{% endif %}
|
|
55
|
-
</tr></thead>
|
|
56
|
-
|
|
57
|
-
<tbody>
|
|
58
|
-
{% for form in formset %}
|
|
59
|
-
{% if form.non_field_errors %}
|
|
60
|
-
<tr><td colspan="{{ total_org_forms }}">{{ form.non_field_errors }}</td></tr>
|
|
61
|
-
{% endif %}
|
|
62
|
-
|
|
63
|
-
<tr class="form-row has_original" id="{{ formset.prefix }}-{{ forloop.counter0 }}">
|
|
64
|
-
<td class="drag"> </td>
|
|
65
|
-
<td class="original hidden">
|
|
66
|
-
{% for field in form %}
|
|
67
|
-
{% if field.is_hidden %} {{ field }} {% endif %}
|
|
68
|
-
{% endfor %}
|
|
69
|
-
</td>
|
|
70
|
-
|
|
71
|
-
{% for field in form %}
|
|
72
|
-
{% if not field.is_hidden and not field.name == 'DELETE' %}
|
|
73
|
-
<td{% if field.name %} class="field-{{ field.name }}"{% endif %}>
|
|
74
|
-
{{ field }}
|
|
75
|
-
{{ field.errors.as_ul }}
|
|
76
|
-
</td>
|
|
77
|
-
{% endif %}
|
|
78
|
-
{% endfor %}
|
|
79
|
-
|
|
80
|
-
{% if formset.can_delete %}
|
|
81
|
-
<td class="delete">{% if total_org_forms >= forloop.counter0 %}{{ form.DELETE }}{% endif %}</td>
|
|
82
|
-
{% endif %}
|
|
83
|
-
</tr>
|
|
84
|
-
|
|
85
|
-
{% endfor %}
|
|
86
|
-
|
|
87
|
-
<tr class="form-row empty-form" id="{{ formset.prefix }}-empty">
|
|
88
|
-
<td class="drag"> </td>
|
|
89
|
-
<td class="original hidden">
|
|
90
|
-
{% for field in empty_form %}
|
|
91
|
-
{% if field.is_hidden %} {{ field }} {% endif %}
|
|
92
|
-
{% endfor %}
|
|
93
|
-
</td>
|
|
94
|
-
|
|
95
|
-
{% for field in empty_form %}
|
|
96
|
-
{% if not field.is_hidden and not field.name == 'DELETE' %}
|
|
97
|
-
<td{% if field.name %} class="field-{{ field.name }}"{% endif %}>
|
|
98
|
-
{{ field }}
|
|
99
|
-
{{ field.errors.as_ul }}
|
|
100
|
-
</td>
|
|
101
|
-
{% endif %}
|
|
102
|
-
{% endfor %}
|
|
103
|
-
|
|
104
|
-
{% if formset.can_delete %}
|
|
105
|
-
<td class="delete"></td>
|
|
106
|
-
{% endif %}
|
|
107
|
-
</tr>
|
|
108
|
-
|
|
109
|
-
</tbody>
|
|
110
|
-
</table>
|
|
111
|
-
</fieldset>
|
|
112
|
-
</div>
|
|
113
|
-
</div>
|
|
114
|
-
|
|
115
|
-
<script type="application/json" class="inline-tabular-config">
|
|
116
|
-
{
|
|
117
|
-
"prefix": "{{ formset.prefix|escapejs }}",
|
|
118
|
-
"addText": "{% filter escapejs %}Add another{% endfilter %}",
|
|
119
|
-
"deleteText": "{% filter escapejs %}{% trans 'Remove' %}{% endfilter %}"
|
|
120
|
-
}
|
|
121
|
-
</script>
|
|
122
|
-
<div class="default_order_field" default_order_field="ORDER" default_order_direction=""></div>
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{% if widget.is_initial %}
|
|
2
|
-
|
|
3
|
-
<img style="width:100%; max-width:500px; margin-top: -20px; margin-bottom: 20px;" src="{{ widget.value.url }}">
|
|
4
|
-
{% if not widget.required %}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"{% if widget.attrs.disabled %} disabled{% endif %}>
|
|
8
|
-
<span for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</span>
|
|
9
|
-
|
|
10
|
-
{% endif %}<br><br>
|
|
11
|
-
|
|
12
|
-
{% comment %} <span class="text-muted">{{ widget.input_text }}:</span> {% endcomment %}
|
|
13
|
-
{% endif %}
|
|
14
|
-
|
|
15
|
-
<input style="margin-top: -20px;" class="btn btn-secondary" type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>
|