simo 2.5.20__py3-none-any.whl → 2.5.22__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/core/__pycache__/api_auth.cpython-38.pyc +0 -0
- simo/core/__pycache__/autocomplete_views.cpython-38.pyc +0 -0
- simo/core/__pycache__/permissions.cpython-38.pyc +0 -0
- simo/core/__pycache__/tasks.cpython-38.pyc +0 -0
- simo/core/autocomplete_views.py +0 -13
- simo/core/permissions.py +1 -1
- simo/core/tasks.py +16 -11
- simo/fleet/__pycache__/utils.cpython-38.pyc +0 -0
- simo/fleet/__pycache__/views.cpython-38.pyc +0 -0
- simo/fleet/utils.py +1 -0
- simo/fleet/views.py +5 -4
- simo/users/__pycache__/api.cpython-38.pyc +0 -0
- simo/users/__pycache__/models.cpython-38.pyc +0 -0
- simo/users/api.py +8 -8
- simo/users/models.py +31 -24
- {simo-2.5.20.dist-info → simo-2.5.22.dist-info}/METADATA +1 -1
- {simo-2.5.20.dist-info → simo-2.5.22.dist-info}/RECORD +21 -21
- {simo-2.5.20.dist-info → simo-2.5.22.dist-info}/LICENSE.md +0 -0
- {simo-2.5.20.dist-info → simo-2.5.22.dist-info}/WHEEL +0 -0
- {simo-2.5.20.dist-info → simo-2.5.22.dist-info}/entry_points.txt +0 -0
- {simo-2.5.20.dist-info → simo-2.5.22.dist-info}/top_level.txt +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
simo/core/autocomplete_views.py
CHANGED
|
@@ -10,9 +10,6 @@ class IconModelAutocomplete(autocomplete.Select2QuerySetView):
|
|
|
10
10
|
def get_queryset(self):
|
|
11
11
|
qs = Icon.objects.all()
|
|
12
12
|
|
|
13
|
-
if not self.request.user.is_staff:
|
|
14
|
-
return qs.none()
|
|
15
|
-
|
|
16
13
|
if self.forwarded.get("id"):
|
|
17
14
|
return qs.filter(pk=self.forwarded.get("id"))
|
|
18
15
|
|
|
@@ -55,10 +52,6 @@ class CategoryAutocomplete(autocomplete.Select2QuerySetView):
|
|
|
55
52
|
def get_queryset(self):
|
|
56
53
|
qs = Category.objects.all()
|
|
57
54
|
|
|
58
|
-
|
|
59
|
-
if not self.request.user.is_staff:
|
|
60
|
-
return qs.none()
|
|
61
|
-
|
|
62
55
|
if self.forwarded.get("id"):
|
|
63
56
|
return qs.filter(pk=self.forwarded.get("id"))
|
|
64
57
|
|
|
@@ -83,9 +76,6 @@ class ZoneAutocomplete(autocomplete.Select2QuerySetView):
|
|
|
83
76
|
def get_queryset(self):
|
|
84
77
|
qs = Zone.objects.all()
|
|
85
78
|
|
|
86
|
-
if not self.request.user.is_staff:
|
|
87
|
-
return qs.none()
|
|
88
|
-
|
|
89
79
|
if self.forwarded.get("id"):
|
|
90
80
|
return qs.filter(pk=self.forwarded.get("id"))
|
|
91
81
|
|
|
@@ -109,9 +99,6 @@ class ComponentAutocomplete(autocomplete.Select2QuerySetView):
|
|
|
109
99
|
def get_queryset(self):
|
|
110
100
|
qs = Component.objects.all()
|
|
111
101
|
|
|
112
|
-
if not self.request.user.is_staff:
|
|
113
|
-
return qs.none()
|
|
114
|
-
|
|
115
102
|
if self.forwarded.get("id"):
|
|
116
103
|
if isinstance(self.forwarded['id'], list):
|
|
117
104
|
return qs.filter(pk__in=self.forwarded["id"])
|
simo/core/permissions.py
CHANGED
simo/core/tasks.py
CHANGED
|
@@ -141,21 +141,26 @@ def sync_with_remote():
|
|
|
141
141
|
'users': [],
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
+
for iuser in instance.instance_users.all().select_related('user', 'role'):
|
|
145
|
+
instance_data['users'].append({
|
|
146
|
+
'email': iuser.user.email,
|
|
147
|
+
'is_hub_master': iuser.user.is_master,
|
|
148
|
+
'is_superuser': iuser.role.is_superuser,
|
|
149
|
+
'is_owner': iuser.role.is_owner,
|
|
150
|
+
'is_active': iuser.is_active,
|
|
151
|
+
'device_token': iuser.user.primary_device_token
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
# Include god mode users!
|
|
144
155
|
for user in User.objects.filter(
|
|
145
|
-
|
|
156
|
+
roles=None, is_master=True
|
|
146
157
|
).exclude(email__in=('system@simo.io', 'device@simo.io')).distinct():
|
|
147
|
-
is_superuser = False
|
|
148
|
-
user_role = user.get_role(instance)
|
|
149
|
-
if user_role and user_role.is_superuser:
|
|
150
|
-
is_superuser = True
|
|
151
|
-
is_owner = False
|
|
152
|
-
if user_role and user_role.is_owner:
|
|
153
|
-
is_owner = True
|
|
154
158
|
instance_data['users'].append({
|
|
155
159
|
'email': user.email,
|
|
156
|
-
'is_hub_master':
|
|
157
|
-
'is_superuser':
|
|
158
|
-
'is_owner':
|
|
160
|
+
'is_hub_master': True,
|
|
161
|
+
'is_superuser': False,
|
|
162
|
+
'is_owner': False,
|
|
163
|
+
'is_active': True,
|
|
159
164
|
'device_token': user.primary_device_token
|
|
160
165
|
})
|
|
161
166
|
|
|
Binary file
|
|
Binary file
|
simo/fleet/utils.py
CHANGED
|
@@ -139,6 +139,7 @@ def get_all_control_input_choices():
|
|
|
139
139
|
This is called multiple times by component form,
|
|
140
140
|
so we cache the data to speed things up!
|
|
141
141
|
'''
|
|
142
|
+
# TODO: filter by instance!
|
|
142
143
|
def get_control_input_choices():
|
|
143
144
|
from .models import ColonelPin
|
|
144
145
|
from simo.core.models import Component
|
simo/fleet/views.py
CHANGED
|
@@ -3,6 +3,7 @@ from django.db.models import Q
|
|
|
3
3
|
from dal import autocomplete
|
|
4
4
|
from simo.core.utils.helpers import search_queryset
|
|
5
5
|
from simo.core.models import Component
|
|
6
|
+
from simo.core.middleware import get_current_instance
|
|
6
7
|
from .models import Colonel, ColonelPin, Interface
|
|
7
8
|
|
|
8
9
|
|
|
@@ -13,12 +14,14 @@ def colonels_ping(request):
|
|
|
13
14
|
class PinsSelectAutocomplete(autocomplete.Select2QuerySetView):
|
|
14
15
|
|
|
15
16
|
def get_queryset(self):
|
|
16
|
-
|
|
17
|
+
|
|
18
|
+
instance = get_current_instance()
|
|
19
|
+
if not instance:
|
|
17
20
|
return ColonelPin.objects.none()
|
|
18
21
|
|
|
19
22
|
try:
|
|
20
23
|
colonel = Colonel.objects.get(
|
|
21
|
-
pk=self.forwarded.get("colonel")
|
|
24
|
+
pk=self.forwarded.get("colonel"), instance=instance
|
|
22
25
|
)
|
|
23
26
|
except:
|
|
24
27
|
return ColonelPin.objects.none()
|
|
@@ -46,8 +49,6 @@ class PinsSelectAutocomplete(autocomplete.Select2QuerySetView):
|
|
|
46
49
|
class InterfaceSelectAutocomplete(autocomplete.Select2QuerySetView):
|
|
47
50
|
|
|
48
51
|
def get_queryset(self):
|
|
49
|
-
if not self.request.user.is_staff:
|
|
50
|
-
return Interface.objects.none()
|
|
51
52
|
|
|
52
53
|
try:
|
|
53
54
|
colonel = Colonel.objects.get(
|
|
Binary file
|
|
Binary file
|
simo/users/api.py
CHANGED
|
@@ -204,10 +204,10 @@ class UserDeviceReport(InstanceMixin, viewsets.GenericViewSet):
|
|
|
204
204
|
if request.META.get('HTTP_HOST', '').endswith('.simo.io'):
|
|
205
205
|
relay = request.META.get('HTTP_HOST')
|
|
206
206
|
|
|
207
|
-
|
|
207
|
+
last_seen_location = None
|
|
208
208
|
user_device.last_seen = timezone.now()
|
|
209
209
|
if location:
|
|
210
|
-
|
|
210
|
+
last_seen_location = ','.join(
|
|
211
211
|
[str(i) for i in location]
|
|
212
212
|
) if location else None
|
|
213
213
|
|
|
@@ -218,24 +218,24 @@ class UserDeviceReport(InstanceMixin, viewsets.GenericViewSet):
|
|
|
218
218
|
).exclude(id=user_device.id).update(is_primary=False)
|
|
219
219
|
user_device.save()
|
|
220
220
|
|
|
221
|
+
phone_on_charge = False
|
|
222
|
+
if request.data.get('is_charging'):
|
|
223
|
+
phone_on_charge = True
|
|
221
224
|
speed_kmh = request.data.get('speed', 0) * 3.6
|
|
222
225
|
for iu in request.user.instance_roles.filter(is_active=True):
|
|
223
226
|
if location:
|
|
224
227
|
iu.at_home = haversine_distance(
|
|
225
|
-
iu.instance.location,
|
|
228
|
+
iu.instance.location, last_seen_location
|
|
226
229
|
) < dynamic_settings['users__at_home_radius']
|
|
227
230
|
elif not relay:
|
|
228
231
|
iu.at_home = True
|
|
229
232
|
|
|
230
233
|
iu.last_seen = user_device.last_seen
|
|
231
|
-
iu.last_seen_location =
|
|
234
|
+
iu.last_seen_location = last_seen_location
|
|
232
235
|
iu.last_seen_speed_kmh = speed_kmh
|
|
233
|
-
iu.phone_on_charge =
|
|
236
|
+
iu.phone_on_charge = phone_on_charge
|
|
234
237
|
iu.save()
|
|
235
238
|
|
|
236
|
-
phone_on_charge = False
|
|
237
|
-
if request.data.get('is_charging'):
|
|
238
|
-
phone_on_charge = True
|
|
239
239
|
UserDeviceReportLog.objects.create(
|
|
240
240
|
user_device=user_device, instance=self.instance,
|
|
241
241
|
app_open=request.data.get('app_open', False),
|
simo/users/models.py
CHANGED
|
@@ -43,8 +43,7 @@ class PermissionsRole(models.Model):
|
|
|
43
43
|
can_manage_users = models.BooleanField(default=False)
|
|
44
44
|
is_superuser = models.BooleanField(
|
|
45
45
|
default=False,
|
|
46
|
-
help_text="
|
|
47
|
-
"possible permissions everywhere."
|
|
46
|
+
help_text="Has 100% management control of an instance via mobile app."
|
|
48
47
|
)
|
|
49
48
|
is_default = models.BooleanField(
|
|
50
49
|
default=False, help_text="Default new user role."
|
|
@@ -237,8 +236,8 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
237
236
|
|
|
238
237
|
def get_role(self, instance):
|
|
239
238
|
cache_key = f'user-{self.id}_instance-{instance.id}_role'
|
|
240
|
-
role = cache.get(cache_key
|
|
241
|
-
if role
|
|
239
|
+
role = cache.get(cache_key)
|
|
240
|
+
if role is None:
|
|
242
241
|
role = self.roles.filter(
|
|
243
242
|
instance=instance
|
|
244
243
|
).prefetch_related(
|
|
@@ -255,8 +254,8 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
255
254
|
if not instance:
|
|
256
255
|
return None
|
|
257
256
|
cache_key = f'user-{self.id}_instance-{instance.id}-role-id'
|
|
258
|
-
cached_val = cache.get(cache_key
|
|
259
|
-
if cached_val
|
|
257
|
+
cached_val = cache.get(cache_key)
|
|
258
|
+
if cached_val is None:
|
|
260
259
|
cached_val = None
|
|
261
260
|
for role in self.roles.all().select_related('instance'):
|
|
262
261
|
if role.instance == instance:
|
|
@@ -288,14 +287,14 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
288
287
|
if not self.is_active:
|
|
289
288
|
return Instance.objects.none()
|
|
290
289
|
cache_key = f'user-{self.id}_instances'
|
|
291
|
-
instances = cache.get(cache_key
|
|
292
|
-
if instances
|
|
290
|
+
instances = cache.get(cache_key)
|
|
291
|
+
if instances is None:
|
|
293
292
|
if self.is_master:
|
|
294
293
|
instances = Instance.objects.filter(is_active=True)
|
|
295
294
|
else:
|
|
296
295
|
instances = Instance.objects.filter(id__in=[
|
|
297
296
|
r.instance.id for r in self.instance_roles.filter(
|
|
298
|
-
is_active=True
|
|
297
|
+
is_active=True
|
|
299
298
|
)
|
|
300
299
|
], is_active=True)
|
|
301
300
|
cache.set(cache_key, instances, 10)
|
|
@@ -307,28 +306,42 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
307
306
|
role__in=self.roles.all()
|
|
308
307
|
)
|
|
309
308
|
|
|
309
|
+
|
|
310
310
|
@property
|
|
311
311
|
def is_active(self):
|
|
312
|
+
# Things are getting messed up when no
|
|
312
313
|
instance = get_current_instance()
|
|
313
314
|
if not instance:
|
|
314
315
|
cache_key = f'user-{self.id}_is_active'
|
|
315
316
|
else:
|
|
316
317
|
cache_key = f'user-{self.id}_is_active_instance-{instance.id}'
|
|
317
|
-
cached_value = cache.get(cache_key
|
|
318
|
-
if cached_value
|
|
319
|
-
if self.is_master
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
318
|
+
cached_value = cache.get(cache_key)
|
|
319
|
+
if cached_value is None:
|
|
320
|
+
if self.is_master:
|
|
321
|
+
if not self.instance_roles.all():
|
|
322
|
+
# Master who have no roles on any instance are in GOD mode!
|
|
323
|
+
# It can not be disabled by anybody, nor it is seen by anybody. :)
|
|
324
|
+
cached_value = True
|
|
325
|
+
else:
|
|
326
|
+
# Masters who have roles on instances but are all disabled
|
|
327
|
+
# on all instances are then fully disabled
|
|
328
|
+
# Common scenario is - installer made smart home installation
|
|
329
|
+
# owner disabled installer once everything is done, so that
|
|
330
|
+
# installer no longer has any access to his home, however
|
|
331
|
+
# home owner can enable back installer at any time so that
|
|
332
|
+
# he could make any additional necessary changes.
|
|
333
|
+
cached_value = bool(
|
|
334
|
+
self.instance_roles.filter(is_active=True).count()
|
|
335
|
+
)
|
|
323
336
|
elif instance:
|
|
324
337
|
cached_value = bool(
|
|
325
338
|
self.instance_roles.filter(
|
|
326
339
|
instance=instance, is_active=True
|
|
327
|
-
).
|
|
340
|
+
).count()
|
|
328
341
|
)
|
|
329
342
|
else:
|
|
330
|
-
cached_value =
|
|
331
|
-
|
|
343
|
+
cached_value = bool(
|
|
344
|
+
self.instance_roles.filter(is_active=True).count()
|
|
332
345
|
)
|
|
333
346
|
cache.set(cache_key, cached_value, 20)
|
|
334
347
|
return cached_value
|
|
@@ -356,9 +369,6 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
356
369
|
def is_superuser(self):
|
|
357
370
|
if self.is_master:
|
|
358
371
|
return True
|
|
359
|
-
# for role in self.roles.all():
|
|
360
|
-
# if role.is_superuser:
|
|
361
|
-
# return True
|
|
362
372
|
return False
|
|
363
373
|
|
|
364
374
|
@property
|
|
@@ -368,9 +378,6 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
368
378
|
return False
|
|
369
379
|
if self.is_master:
|
|
370
380
|
return True
|
|
371
|
-
# for role in self.roles.all():
|
|
372
|
-
# if role.is_superuser:
|
|
373
|
-
# return True
|
|
374
381
|
return False
|
|
375
382
|
|
|
376
383
|
@property
|
|
@@ -39,7 +39,7 @@ simo/core/api_meta.py,sha256=EaiY-dCADP__9MvLpoHvhjytFT92IrxPZDv95xgqasU,4955
|
|
|
39
39
|
simo/core/app_widgets.py,sha256=VxZzapuc-a29wBH7JzpvNF2SK1ECrgNUySId5ke1ffc,2509
|
|
40
40
|
simo/core/apps.py,sha256=CsqpiQerhmrMsH-wGiG-gQgXd9qEkIi-LUaA9cXpKSw,425
|
|
41
41
|
simo/core/auto_urls.py,sha256=nNXEgLAAAQAhRWQDA9AbDtw-zcPKmu_pufJaSa8g818,1102
|
|
42
|
-
simo/core/autocomplete_views.py,sha256=
|
|
42
|
+
simo/core/autocomplete_views.py,sha256=l7DmpoeXcwjmBda--tT6zFQTNcyfYpgTaryWP-ghETU,3846
|
|
43
43
|
simo/core/base_types.py,sha256=WypW8hTfzveuTQtruGjLYAGQZIuczxTlW-SdRk3iQug,666
|
|
44
44
|
simo/core/context.py,sha256=snfPIGcZQTrx8iiZc5PI91A0dRQH6y5kH4uG_lfhU6Q,1486
|
|
45
45
|
simo/core/controllers.py,sha256=JvXdwXD7iotA7fIjZmBVshKLQGSt9Na48FMAyHRDh84,35615
|
|
@@ -53,13 +53,13 @@ simo/core/loggers.py,sha256=EBdq23gTQScVfQVH-xeP90-wII2DQFDjoROAW6ggUP4,1645
|
|
|
53
53
|
simo/core/managers.py,sha256=n-b3I4uXzfHKTeB1VMjSaMsDUxp8FegFJwnbV1IsWQ4,3019
|
|
54
54
|
simo/core/middleware.py,sha256=hExD7Vmw7eitk0vAjOwKzkwrtuw8YxpflF92j_CA2YY,3193
|
|
55
55
|
simo/core/models.py,sha256=DXJXTtNdpn9yC4VArHp0yrhpRb7vGpwH2c-JvqLE56M,22784
|
|
56
|
-
simo/core/permissions.py,sha256=
|
|
56
|
+
simo/core/permissions.py,sha256=INQPrUAIM3WXCvd7e6cmYytKaak8fMEn7VooX-fIds0,3002
|
|
57
57
|
simo/core/routing.py,sha256=X1_IHxyA-_Q7hw1udDoviVP4_FSBDl8GYETTC2zWTbY,499
|
|
58
58
|
simo/core/serializers.py,sha256=WgksN1Ombv240nfQR_UtmKslTWM9vz9Y0yTdN5usiHU,21892
|
|
59
59
|
simo/core/signal_receivers.py,sha256=WYBRCFJhP83Ukd-Ipc1HlNyTXdTHD1rl0tV3uOKnYWY,8861
|
|
60
60
|
simo/core/socket_consumers.py,sha256=trRZvBGTJ7xIbfdmVvn7zoiWp_qssSkMZykDrI5YQyE,9783
|
|
61
61
|
simo/core/storage.py,sha256=_5igjaoWZAiExGWFEJMElxUw55DzJG1jqFty33xe8BE,342
|
|
62
|
-
simo/core/tasks.py,sha256=
|
|
62
|
+
simo/core/tasks.py,sha256=0DUXplfS25DxbzVXgomo_q73rQjddo3kS5J-S04cJkk,16128
|
|
63
63
|
simo/core/todos.py,sha256=eYVXfLGiapkxKK57XuviSNe3WsUYyIWZ0hgQJk7ThKo,665
|
|
64
64
|
simo/core/types.py,sha256=WJEq48mIbFi_5Alt4wxWMGXxNxUTXqfQU5koH7wqHHI,1108
|
|
65
65
|
simo/core/views.py,sha256=3SRZr00fyLQf8ja3U-9eekKt-ld5TvU1WQqUWprXfQ4,2390
|
|
@@ -67,12 +67,12 @@ simo/core/widgets.py,sha256=J9e06C6I22F6xKic3VMgG7WeX07glAcl-4bF2Mg180A,2827
|
|
|
67
67
|
simo/core/__pycache__/__init__.cpython-38.pyc,sha256=ZJFM_XN0RmJMULQulgA_wFiOnEtsMoedcOWnXjH-Y8o,208
|
|
68
68
|
simo/core/__pycache__/admin.cpython-38.pyc,sha256=uM58xiBAbbstmKZ0CoxLSk_RRu5TDVuHJNOveXUhFqM,13723
|
|
69
69
|
simo/core/__pycache__/api.cpython-38.pyc,sha256=z5IT2AoH_Y7iXJELeGlgaxJ2RNe-Wwk8YIt_rJcOGMw,21851
|
|
70
|
-
simo/core/__pycache__/api_auth.cpython-38.pyc,sha256=
|
|
70
|
+
simo/core/__pycache__/api_auth.cpython-38.pyc,sha256=mi3mu5qEKio_PvfQEvr3Q6AhdPLAHxzxAxrMbAz_pKU,1712
|
|
71
71
|
simo/core/__pycache__/api_meta.cpython-38.pyc,sha256=VYx5ZeDyNBI4B_CBEIhV5B3GnLsMOx9s3rNZTSMODco,3703
|
|
72
72
|
simo/core/__pycache__/app_widgets.cpython-38.pyc,sha256=oN657XMMZ6GYN9nblv7fX3kdnTEzSP9XV6PXM6Z0wl4,4358
|
|
73
73
|
simo/core/__pycache__/apps.cpython-38.pyc,sha256=JL0BEqgXcSQvMlcK48PBpPfyDEkPMdO1Y0teqMRGirs,713
|
|
74
74
|
simo/core/__pycache__/auto_urls.cpython-38.pyc,sha256=Tyf8PYHq5YqSwTp25Joy-eura_Fm86fpX9zKLSklhvo,872
|
|
75
|
-
simo/core/__pycache__/autocomplete_views.cpython-38.pyc,sha256=
|
|
75
|
+
simo/core/__pycache__/autocomplete_views.cpython-38.pyc,sha256=YoF9mTXfQtZ0ZC4wIVvYe4RUUnfV8OlCkIDTVT0LwBw,3953
|
|
76
76
|
simo/core/__pycache__/base_types.cpython-38.pyc,sha256=CX-qlF7CefRi_mCE954wYa9rUFR88mOl6g7fybDRu7g,803
|
|
77
77
|
simo/core/__pycache__/context.cpython-38.pyc,sha256=ck1FcBljLB4__5F6poS2tEEn8IDDgK7pU3FcXDPc_mI,1329
|
|
78
78
|
simo/core/__pycache__/controllers.cpython-38.pyc,sha256=6Ts1BeGND9Uy5eeqC5dNeme1yYilEV_emRnjTjJ9WNw,30701
|
|
@@ -86,13 +86,13 @@ simo/core/__pycache__/loggers.cpython-38.pyc,sha256=Z-cdQnC6XlIonPV4Sl4E52tP4NME
|
|
|
86
86
|
simo/core/__pycache__/managers.cpython-38.pyc,sha256=6RTIxyjOgpQGtAqcUyE2vFPS09w1V5Wmd_vOV7rHRRI,3370
|
|
87
87
|
simo/core/__pycache__/middleware.cpython-38.pyc,sha256=iOSTXSQl3sEsa-9kx_6w5zbEByRtfzJHT6XkUIYMGdE,2469
|
|
88
88
|
simo/core/__pycache__/models.cpython-38.pyc,sha256=HGL3TiaMy-0oobgCGGxH2nvDhh4RnOBeD00rwQsuklU,18591
|
|
89
|
-
simo/core/__pycache__/permissions.cpython-38.pyc,sha256=
|
|
89
|
+
simo/core/__pycache__/permissions.cpython-38.pyc,sha256=bO13B8uGCv4AiWNBoU2Gxt3mNuQ3gCxb7eKFihwFb5o,2974
|
|
90
90
|
simo/core/__pycache__/routing.cpython-38.pyc,sha256=3T3FPJ8Cn99xZCGvMyg2xjl7al-Shm9CelbSpkJtNP8,599
|
|
91
91
|
simo/core/__pycache__/serializers.cpython-38.pyc,sha256=d4wpUjFuo8GxaNWbin9GdHKik06IZN32uZL1SnXiL_s,19616
|
|
92
92
|
simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=ZxsQUC_bijcKs2A9BifeqdI5JVS0RCsZpdcBTRoT8o8,6733
|
|
93
93
|
simo/core/__pycache__/socket_consumers.cpython-38.pyc,sha256=KqbO1cOewodVPcy0-htVefyUjCuELKV0o7fOfYqfgPc,8490
|
|
94
94
|
simo/core/__pycache__/storage.cpython-38.pyc,sha256=9R1Xu0FJDflfRXUPsqEgt0SpwiP7FGk7HaR8s8XRyI8,721
|
|
95
|
-
simo/core/__pycache__/tasks.cpython-38.pyc,sha256=
|
|
95
|
+
simo/core/__pycache__/tasks.cpython-38.pyc,sha256=AkLMqXd-wW2sEI1A3RgSE0iF1s0S3nh9bAq9d4kW7bw,10790
|
|
96
96
|
simo/core/__pycache__/todos.cpython-38.pyc,sha256=lOqGZ58siHM3isoJV4r7sg8igrfE9fFd-jSfeBa0AQI,253
|
|
97
97
|
simo/core/__pycache__/views.cpython-38.pyc,sha256=K_QM967bIJeU02DJu0Dm7j8RiFDKn_TLzX77YzNkA7c,2495
|
|
98
98
|
simo/core/__pycache__/widgets.cpython-38.pyc,sha256=sR0ZeHCHrhnNDBJuRrxp3zUsfBp0xrtF0xrK2TkQv1o,3520
|
|
@@ -10232,8 +10232,8 @@ simo/fleet/routing.py,sha256=cofGsVWXMfPDwsJ6HM88xxtRxHwERhJ48Xyxc8mxg5o,149
|
|
|
10232
10232
|
simo/fleet/serializers.py,sha256=X2M0DFKVaxM6JFGDsdg3S2nJlLIcBvbujidZdfxD88w,2169
|
|
10233
10233
|
simo/fleet/socket_consumers.py,sha256=8RLEmKQ0Q7nVgJJ6IrU4ioocsWBJrgBVH_AUpVas1no,18095
|
|
10234
10234
|
simo/fleet/tasks.py,sha256=AGq9BXFNAqkhOANsPvId8yjEbDtVCB3MRsi_AKDpgIM,821
|
|
10235
|
-
simo/fleet/utils.py,sha256=
|
|
10236
|
-
simo/fleet/views.py,sha256=
|
|
10235
|
+
simo/fleet/utils.py,sha256=wNJvURzLP3-aho3D3rfg07N9kWCaMIw5gOsmeeO9Nlg,4740
|
|
10236
|
+
simo/fleet/views.py,sha256=jT3GcGv_JEj3dqyfHH2whCnGqwT8YEAuFxRgIX4Dk9w,3237
|
|
10237
10237
|
simo/fleet/__pycache__/__init__.cpython-38.pyc,sha256=pIZE7EL6-cuJ3pQtaSwjKLrKLsTYelp1k9sRhXKLh6s,159
|
|
10238
10238
|
simo/fleet/__pycache__/admin.cpython-38.pyc,sha256=IqVvpyyOnHChnEc07GubvtH6Tk1PA0rcYGYrJDg0hm4,6503
|
|
10239
10239
|
simo/fleet/__pycache__/api.cpython-38.pyc,sha256=Ntc1sYKZMygW2eNTxVUgoeCF3StoUZcZA7ST7iYKrlg,3846
|
|
@@ -10249,8 +10249,8 @@ simo/fleet/__pycache__/routing.cpython-38.pyc,sha256=aPrCmxFKVyB8R8ZbJDwdPdFfvT7
|
|
|
10249
10249
|
simo/fleet/__pycache__/serializers.cpython-38.pyc,sha256=gIWHJaSUbTe9H_xerD29Fz7BxIqXNzBI60GsIVXbNdY,3134
|
|
10250
10250
|
simo/fleet/__pycache__/socket_consumers.cpython-38.pyc,sha256=phXtf8df1cToGMuJLSj0rnxeLs3NIgEmFy3BqpWvtsE,13893
|
|
10251
10251
|
simo/fleet/__pycache__/tasks.cpython-38.pyc,sha256=RoNxL2WUiW67s9O9DjaYVVjCBSZu2nje0Qn9FJkWVS0,1116
|
|
10252
|
-
simo/fleet/__pycache__/utils.cpython-38.pyc,sha256=
|
|
10253
|
-
simo/fleet/__pycache__/views.cpython-38.pyc,sha256=
|
|
10252
|
+
simo/fleet/__pycache__/utils.cpython-38.pyc,sha256=obUd-X2Y-ybx4icqUWq_qwIxrP9yyarJjexWAfO4MTI,3344
|
|
10253
|
+
simo/fleet/__pycache__/views.cpython-38.pyc,sha256=wilxSvZliSKQ5qC7JjWneYBSdbeZeTsF5uDrOQVmvms,3181
|
|
10254
10254
|
simo/fleet/migrations/0001_initial.py,sha256=lce8nkD8Sz6pYr-XJSpDm4CMDuB6TA__WtnHpIp-eA4,1326
|
|
10255
10255
|
simo/fleet/migrations/0002_auto_20220422_0743.py,sha256=sFOfAjnQOzcJjE8lHrrHgTaGilJNYswMdXphgVzUZqY,825
|
|
10256
10256
|
simo/fleet/migrations/0003_auto_20220422_0752.py,sha256=VcH7DyMAniEwT76hDVofS8FTNpM3nxz_J9AC2zKHDSA,543
|
|
@@ -10443,14 +10443,14 @@ simo/notifications/migrations/__pycache__/0003_alter_notification_instance.cpyth
|
|
|
10443
10443
|
simo/notifications/migrations/__pycache__/__init__.cpython-38.pyc,sha256=YMBRHVon2nWDtIUbghckjnC12sIg_ykPWhV5aM0tto4,178
|
|
10444
10444
|
simo/users/__init__.py,sha256=6a7uBpCWB_DR7p54rbHusc0xvi1qfT1ZCCQGb6TiBh8,52
|
|
10445
10445
|
simo/users/admin.py,sha256=WDRJJtEkbYBQFtLg_5VOIlBV0eeJhgmrsFL51ttme0w,6760
|
|
10446
|
-
simo/users/api.py,sha256=
|
|
10446
|
+
simo/users/api.py,sha256=xe__HFxzOaKgrh75PFpP4nkSs5DvmJp8QvMDNhP5kLU,12127
|
|
10447
10447
|
simo/users/apps.py,sha256=cq0A8-U1HALEwev0TicgFhr4CAu7Icz8rwq0HfOaL4E,207
|
|
10448
10448
|
simo/users/auth_backends.py,sha256=1gy1-R1U8AOixJ3Ou2LTILjKOHTUxavm_zDiQtCAA9Q,4040
|
|
10449
10449
|
simo/users/auto_urls.py,sha256=lcJvteBsbHQMJieZpDz-63tDYejLApqsW3CUnDakd7k,272
|
|
10450
10450
|
simo/users/dynamic_settings.py,sha256=sEIsi4yJw3kH46Jq_aOkSuK7QTfQACGUE-lkyBogCaM,570
|
|
10451
10451
|
simo/users/managers.py,sha256=Dm21Avmu38-h8MsZ5ljtpgKihMGUBU4hHGpiPvp4NtM,323
|
|
10452
10452
|
simo/users/middleware.py,sha256=GMCrnWSc_2qCleyQIkfQGdL-pU-UTEcSg1wPvIKZ9uk,1210
|
|
10453
|
-
simo/users/models.py,sha256=
|
|
10453
|
+
simo/users/models.py,sha256=Ds7WOUVLxljsK_73qGcfnnyJO4EIBXY9GS9FcJGx1bs,19716
|
|
10454
10454
|
simo/users/permissions.py,sha256=IwtYS8yQdupWbYKR9VimSRDV3qCJ2jXP57Lyjpb2EQM,242
|
|
10455
10455
|
simo/users/serializers.py,sha256=zzw1KONTnaTNBaU0r4rNVxJ827KzD6Z5LuQt27ZsQ98,2516
|
|
10456
10456
|
simo/users/sso_urls.py,sha256=gQOaPvGMYFD0NCVSwyoWO-mTEHe5j9sbzV_RK7kdvp0,251
|
|
@@ -10460,14 +10460,14 @@ simo/users/utils.py,sha256=1HGSZyHRqQvdJ4RtAiZDg1juvgG8aOlrGXR7CcvsyQc,1886
|
|
|
10460
10460
|
simo/users/views.py,sha256=dOQVvmlHG7ihWKJLFUBcqKOA0UDctlMKR0pTc36JZqg,3487
|
|
10461
10461
|
simo/users/__pycache__/__init__.cpython-38.pyc,sha256=VFoDJE_SKKaPqqYaaBYd1Ndb1hjakkTo_u0EG_XJ1GM,211
|
|
10462
10462
|
simo/users/__pycache__/admin.cpython-38.pyc,sha256=5LEDivt0AydPmqk9PCKvlKRRtc3QBxA6hZgcy_8bEQU,7680
|
|
10463
|
-
simo/users/__pycache__/api.cpython-38.pyc,sha256=
|
|
10463
|
+
simo/users/__pycache__/api.cpython-38.pyc,sha256=laiJ17ZN-Bj8fL-AjKpcjPm0hOVEd83vYkOqxfmHa7c,10218
|
|
10464
10464
|
simo/users/__pycache__/apps.cpython-38.pyc,sha256=dgbWL8CxzzISJQTmq_4IztPJ2UzykNVdqA2Ae1PmeGk,605
|
|
10465
10465
|
simo/users/__pycache__/auth_backends.cpython-38.pyc,sha256=n5nx2QSXNj2idzRcGE6bAagMN-8qxoCs580H1EFZXls,3105
|
|
10466
10466
|
simo/users/__pycache__/auto_urls.cpython-38.pyc,sha256=K-3sz2h-cEitoflSmZk1t0eUg5mQMMGLNZFREVwG7_o,430
|
|
10467
10467
|
simo/users/__pycache__/dynamic_settings.cpython-38.pyc,sha256=6F8JBjZkHykySnmZjNEzjS0ijbmPdcp9yUAZ5kqq_Fo,864
|
|
10468
10468
|
simo/users/__pycache__/managers.cpython-38.pyc,sha256=oAy5mRBI-FQWgx9xgQsHmCiknKqojuVY363mfEVK0i8,697
|
|
10469
10469
|
simo/users/__pycache__/middleware.cpython-38.pyc,sha256=Tj4nVEAvxEW3xA63fBRiJWRJpz_M848ZOqbHioc_IPE,1149
|
|
10470
|
-
simo/users/__pycache__/models.cpython-38.pyc,sha256=
|
|
10470
|
+
simo/users/__pycache__/models.cpython-38.pyc,sha256=E8JT94NAdffXhAWvuK2RG0kPO9YBtX4Cy7Ofs-wIFNw,17577
|
|
10471
10471
|
simo/users/__pycache__/permissions.cpython-38.pyc,sha256=ez5NxoL_JUeeH6GsKhvFreuA3FCBgGf9floSypdXUtM,633
|
|
10472
10472
|
simo/users/__pycache__/serializers.cpython-38.pyc,sha256=Dy8RAcwNkNSXoJHvLp8fozURyHCtucqpSPyqZtbnMZc,3732
|
|
10473
10473
|
simo/users/__pycache__/sso_urls.cpython-38.pyc,sha256=uAwDozpOmrhUald-8tOHANILXkH7-TI8fNYXOtPkSY8,402
|
|
@@ -10561,9 +10561,9 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
10561
10561
|
simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10562
10562
|
simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10563
10563
|
simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10564
|
-
simo-2.5.
|
|
10565
|
-
simo-2.5.
|
|
10566
|
-
simo-2.5.
|
|
10567
|
-
simo-2.5.
|
|
10568
|
-
simo-2.5.
|
|
10569
|
-
simo-2.5.
|
|
10564
|
+
simo-2.5.22.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
|
|
10565
|
+
simo-2.5.22.dist-info/METADATA,sha256=KaAMA15RMBlsmAnbx_HODBYLnPYZXG66HDn17nQ_gE4,1924
|
|
10566
|
+
simo-2.5.22.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
10567
|
+
simo-2.5.22.dist-info/entry_points.txt,sha256=S9PwnUYmTSW7681GKDCxUbL0leRJIaRk6fDQIKgbZBA,135
|
|
10568
|
+
simo-2.5.22.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
|
|
10569
|
+
simo-2.5.22.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|