simo 2.4.2__py3-none-any.whl → 2.5.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 simo might be problematic. Click here for more details.
- simo/backups/tasks.py +11 -1
- simo/core/__pycache__/admin.cpython-38.pyc +0 -0
- simo/core/__pycache__/api.cpython-38.pyc +0 -0
- simo/core/__pycache__/app_widgets.cpython-38.pyc +0 -0
- simo/core/__pycache__/controllers.cpython-38.pyc +0 -0
- simo/core/__pycache__/events.cpython-38.pyc +0 -0
- simo/core/__pycache__/forms.cpython-38.pyc +0 -0
- simo/core/__pycache__/middleware.cpython-38.pyc +0 -0
- simo/core/__pycache__/models.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/admin.py +4 -4
- simo/core/api.py +20 -4
- simo/core/app_widgets.py +5 -0
- simo/core/controllers.py +2 -2
- simo/core/events.py +2 -0
- simo/core/forms.py +2 -0
- simo/core/management/commands/gateways_manager.py +0 -3
- simo/core/middleware.py +7 -1
- simo/core/models.py +26 -6
- simo/core/serializers.py +17 -17
- simo/core/tasks.py +10 -7
- simo/fleet/__pycache__/controllers.cpython-38.pyc +0 -0
- simo/fleet/__pycache__/forms.cpython-38.pyc +0 -0
- simo/fleet/__pycache__/models.cpython-38.pyc +0 -0
- simo/fleet/controllers.py +86 -22
- simo/fleet/forms.py +84 -9
- simo/fleet/migrations/0039_auto_20241016_1047.py +28 -0
- simo/fleet/migrations/0040_alter_colonel_pwm_frequency.py +18 -0
- simo/fleet/migrations/__pycache__/0039_auto_20241016_1047.cpython-38.pyc +0 -0
- simo/fleet/migrations/__pycache__/0040_alter_colonel_pwm_frequency.cpython-38.pyc +0 -0
- simo/fleet/models.py +2 -2
- simo/generic/__pycache__/controllers.cpython-38.pyc +0 -0
- simo/generic/__pycache__/forms.cpython-38.pyc +0 -0
- simo/generic/__pycache__/gateways.cpython-38.pyc +0 -0
- simo/generic/__pycache__/models.cpython-38.pyc +0 -0
- simo/generic/controllers.py +41 -2
- simo/generic/forms.py +71 -7
- simo/generic/models.py +0 -1
- simo/generic/scripting/__init__.py +16 -0
- simo/generic/scripting/__pycache__/__init__.cpython-38.pyc +0 -0
- simo/generic/scripting/__pycache__/serializers.cpython-38.pyc +0 -0
- simo/generic/scripting/helpers.py +35 -0
- simo/generic/scripting/serializers.py +77 -0
- simo/generic/templates/admin/controller_widgets/weather_forecast.html +2 -2
- simo/notifications/__pycache__/utils.cpython-38.pyc +0 -0
- simo/notifications/utils.py +30 -12
- simo/scripting.py +2 -2
- simo/users/__pycache__/api.cpython-38.pyc +0 -0
- simo/users/__pycache__/managers.cpython-38.pyc +0 -0
- simo/users/__pycache__/models.cpython-38.pyc +0 -0
- simo/users/__pycache__/serializers.cpython-38.pyc +0 -0
- simo/users/__pycache__/utils.cpython-38.pyc +0 -0
- simo/users/api.py +36 -7
- simo/users/managers.py +5 -1
- simo/users/migrations/0034_instanceuser_last_seen_location_and_more.py +24 -0
- simo/users/migrations/__pycache__/0034_instanceuser_last_seen_location_and_more.cpython-38.pyc +0 -0
- simo/users/models.py +37 -32
- simo/users/serializers.py +11 -8
- simo/users/utils.py +14 -3
- {simo-2.4.2.dist-info → simo-2.5.1.dist-info}/METADATA +1 -1
- {simo-2.4.2.dist-info → simo-2.5.1.dist-info}/RECORD +66 -54
- {simo-2.4.2.dist-info → simo-2.5.1.dist-info}/WHEEL +1 -1
- {simo-2.4.2.dist-info → simo-2.5.1.dist-info}/LICENSE.md +0 -0
- {simo-2.4.2.dist-info → simo-2.5.1.dist-info}/entry_points.txt +0 -0
- {simo-2.4.2.dist-info → simo-2.5.1.dist-info}/top_level.txt +0 -0
simo/users/models.py
CHANGED
|
@@ -22,6 +22,7 @@ from simo.conf import dynamic_settings
|
|
|
22
22
|
from simo.core.utils.mixins import SimoAdminMixin
|
|
23
23
|
from simo.core.utils.helpers import get_random_string
|
|
24
24
|
from simo.core.events import OnChangeMixin
|
|
25
|
+
from simo.core.middleware import get_current_instance
|
|
25
26
|
from .middleware import get_current_user
|
|
26
27
|
from .utils import rebuild_authorized_keys
|
|
27
28
|
from .managers import ActiveInstanceManager
|
|
@@ -98,6 +99,12 @@ class InstanceUser(DirtyFieldsMixin, models.Model, OnChangeMixin):
|
|
|
98
99
|
role = models.ForeignKey(PermissionsRole, on_delete=models.CASCADE)
|
|
99
100
|
at_home = models.BooleanField(default=False, db_index=True)
|
|
100
101
|
is_active = models.BooleanField(default=True, db_index=True)
|
|
102
|
+
last_seen_location = PlainLocationField(
|
|
103
|
+
zoom=7, null=True, blank=True, help_text="Sent by user mobile app"
|
|
104
|
+
)
|
|
105
|
+
last_seen_location_datetime = models.DateTimeField(
|
|
106
|
+
null=True, blank=True,
|
|
107
|
+
)
|
|
101
108
|
|
|
102
109
|
objects = ActiveInstanceManager()
|
|
103
110
|
|
|
@@ -123,17 +130,18 @@ def post_instance_user_save(sender, instance, created, **kwargs):
|
|
|
123
130
|
return
|
|
124
131
|
from simo.core.events import ObjectChangeEvent
|
|
125
132
|
dirty_fields = instance.get_dirty_fields()
|
|
126
|
-
if 'at_home' in dirty_fields:
|
|
133
|
+
if 'at_home' in dirty_fields or 'last_seen_location' in dirty_fields:
|
|
127
134
|
def post_update():
|
|
128
|
-
if
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
if 'at_home' in dirty_fields:
|
|
136
|
+
if instance.at_home:
|
|
137
|
+
verb = 'came home'
|
|
138
|
+
else:
|
|
139
|
+
verb = 'left'
|
|
140
|
+
action.send(
|
|
141
|
+
instance.user, verb=verb,
|
|
142
|
+
instance_id=instance.instance.id,
|
|
143
|
+
action_type='user_presence', value=instance.at_home
|
|
144
|
+
)
|
|
137
145
|
ObjectChangeEvent(
|
|
138
146
|
instance.instance, instance, dirty_fields=dirty_fields
|
|
139
147
|
).publish()
|
|
@@ -182,8 +190,6 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
182
190
|
USERNAME_FIELD = 'email'
|
|
183
191
|
REQUIRED_FIELDS = ['name']
|
|
184
192
|
|
|
185
|
-
_instance = None
|
|
186
|
-
|
|
187
193
|
class Meta:
|
|
188
194
|
verbose_name = _('user')
|
|
189
195
|
verbose_name_plural = _('users')
|
|
@@ -206,12 +212,10 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
206
212
|
obj = super().save(*args, **kwargs)
|
|
207
213
|
|
|
208
214
|
if org:
|
|
209
|
-
if org.can_ssh() != self.can_ssh():
|
|
215
|
+
if org.can_ssh() != self.can_ssh() or org.ssh_key != self.ssh_key:
|
|
210
216
|
rebuild_authorized_keys()
|
|
211
217
|
elif self.can_ssh():
|
|
212
218
|
rebuild_authorized_keys()
|
|
213
|
-
elif org and org.ssh_key != self.ssh_key:
|
|
214
|
-
rebuild_authorized_keys()
|
|
215
219
|
|
|
216
220
|
if not org or (org.secret_key != self.secret_key):
|
|
217
221
|
self.update_mqtt_secret()
|
|
@@ -230,7 +234,7 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
230
234
|
)
|
|
231
235
|
|
|
232
236
|
def can_ssh(self):
|
|
233
|
-
return self.is_active and self.
|
|
237
|
+
return self.is_active and self.is_master
|
|
234
238
|
|
|
235
239
|
def get_role(self, instance):
|
|
236
240
|
cache_key = f'user-{self.id}_instance-{instance.id}_role'
|
|
@@ -244,19 +248,17 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
244
248
|
cache.set(cache_key, role, 20)
|
|
245
249
|
return role
|
|
246
250
|
|
|
247
|
-
def set_instance(self, instance):
|
|
248
|
-
self._instance = instance
|
|
249
|
-
|
|
250
251
|
@property
|
|
251
252
|
def role_id(self):
|
|
252
253
|
'''Used by API serializer to get users role on a given instance.'''
|
|
253
|
-
|
|
254
|
+
instance = get_current_instance()
|
|
255
|
+
if not instance:
|
|
254
256
|
return None
|
|
255
|
-
cache_key = f'user-{self.id}_instance-{
|
|
257
|
+
cache_key = f'user-{self.id}_instance-{instance.id}-role-id'
|
|
256
258
|
cached_val = cache.get(cache_key, 'expired')
|
|
257
259
|
if cached_val == 'expired':
|
|
258
260
|
for role in self.roles.all().select_related('instance'):
|
|
259
|
-
if role.instance ==
|
|
261
|
+
if role.instance == instance:
|
|
260
262
|
cached_val = role.id
|
|
261
263
|
cache.set(cache_key, role.id, 20)
|
|
262
264
|
return cached_val
|
|
@@ -264,16 +266,17 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
264
266
|
|
|
265
267
|
@role_id.setter
|
|
266
268
|
def role_id(self, id):
|
|
267
|
-
|
|
269
|
+
instance = get_current_instance()
|
|
270
|
+
if not instance:
|
|
268
271
|
return
|
|
269
272
|
role = PermissionsRole.objects.filter(
|
|
270
|
-
id=id, instance=
|
|
273
|
+
id=id, instance=instance
|
|
271
274
|
).first()
|
|
272
275
|
if not role:
|
|
273
276
|
raise ValueError("There is no such a role on this instance")
|
|
274
277
|
|
|
275
278
|
InstanceUser.objects.update_or_create(
|
|
276
|
-
user=self, instance=
|
|
279
|
+
user=self, instance=instance, defaults={
|
|
277
280
|
'role': role
|
|
278
281
|
}
|
|
279
282
|
)
|
|
@@ -305,20 +308,21 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
305
308
|
|
|
306
309
|
@property
|
|
307
310
|
def is_active(self):
|
|
308
|
-
|
|
311
|
+
instance = get_current_instance()
|
|
312
|
+
if not instance:
|
|
309
313
|
cache_key = f'user-{self.id}_is_active'
|
|
310
314
|
else:
|
|
311
|
-
cache_key = f'user-{self.id}_is_active_instance-{
|
|
315
|
+
cache_key = f'user-{self.id}_is_active_instance-{instance.id}'
|
|
312
316
|
cached_value = cache.get(cache_key, 'expired')
|
|
313
317
|
if cached_value == 'expired':
|
|
314
318
|
if self.is_master and not self.instance_roles.all():
|
|
315
319
|
# Master who have no roles on any instance are in GOD mode!
|
|
316
320
|
# It can not be disabled by anybody, nor it is seen by anybody. :)
|
|
317
321
|
cached_value = True
|
|
318
|
-
elif
|
|
322
|
+
elif instance:
|
|
319
323
|
cached_value = bool(
|
|
320
324
|
self.instance_roles.filter(
|
|
321
|
-
instance=
|
|
325
|
+
instance=instance, is_active=True
|
|
322
326
|
).first()
|
|
323
327
|
)
|
|
324
328
|
else:
|
|
@@ -331,13 +335,14 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
331
335
|
|
|
332
336
|
@is_active.setter
|
|
333
337
|
def is_active(self, val):
|
|
334
|
-
|
|
338
|
+
instance = get_current_instance()
|
|
339
|
+
if not instance:
|
|
335
340
|
return
|
|
336
341
|
|
|
337
342
|
self.instance_roles.filter(
|
|
338
|
-
instance=
|
|
343
|
+
instance=instance
|
|
339
344
|
).update(is_active=bool(val))
|
|
340
|
-
cache_key = f'user-{self.id}_is_active_instance-{
|
|
345
|
+
cache_key = f'user-{self.id}_is_active_instance-{instance.id}'
|
|
341
346
|
try:
|
|
342
347
|
cache.delete(cache_key)
|
|
343
348
|
except:
|
simo/users/serializers.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from rest_framework import serializers
|
|
2
2
|
from collections.abc import Iterable
|
|
3
|
-
from simo.core.middleware import get_current_request
|
|
3
|
+
from simo.core.middleware import get_current_request, get_current_instance
|
|
4
4
|
from simo.core.utils.api import ReadWriteSerializerMethodField
|
|
5
5
|
from .models import (
|
|
6
|
-
User, PermissionsRole,
|
|
6
|
+
User, PermissionsRole, ComponentPermission,
|
|
7
|
+
InstanceInvitation, InstanceUser, Fingerprint
|
|
7
8
|
)
|
|
8
9
|
|
|
9
10
|
|
|
@@ -15,11 +16,6 @@ class UserSerializer(serializers.ModelSerializer):
|
|
|
15
16
|
|
|
16
17
|
def __init__(self, *args, **kwargs):
|
|
17
18
|
super().__init__(*args, **kwargs)
|
|
18
|
-
if isinstance(self.instance, Iterable):
|
|
19
|
-
for inst in self.instance:
|
|
20
|
-
inst.set_instance(self.context['instance'])
|
|
21
|
-
elif self.instance:
|
|
22
|
-
self.instance.set_instance(self.context['instance'])
|
|
23
19
|
|
|
24
20
|
class Meta:
|
|
25
21
|
model = User
|
|
@@ -53,7 +49,7 @@ class UserSerializer(serializers.ModelSerializer):
|
|
|
53
49
|
|
|
54
50
|
def get_at_home(self, obj):
|
|
55
51
|
iu = InstanceUser.objects.filter(
|
|
56
|
-
user=obj, instance=
|
|
52
|
+
user=obj, instance=get_current_instance()
|
|
57
53
|
).first()
|
|
58
54
|
if iu:
|
|
59
55
|
return iu.at_home
|
|
@@ -68,6 +64,13 @@ class PermissionsRoleSerializer(serializers.ModelSerializer):
|
|
|
68
64
|
fields = '__all__'
|
|
69
65
|
|
|
70
66
|
|
|
67
|
+
class ComponentPermissionSerializer(serializers.ModelSerializer):
|
|
68
|
+
|
|
69
|
+
class Meta:
|
|
70
|
+
model = ComponentPermission
|
|
71
|
+
fields = '__all__'
|
|
72
|
+
|
|
73
|
+
|
|
71
74
|
class InstanceInvitationSerializer(serializers.ModelSerializer):
|
|
72
75
|
|
|
73
76
|
class Meta:
|
simo/users/utils.py
CHANGED
|
@@ -29,10 +29,21 @@ def rebuild_authorized_keys():
|
|
|
29
29
|
try:
|
|
30
30
|
with open('/root/.ssh/authorized_keys', 'w') as keys_file:
|
|
31
31
|
for user in User.objects.filter(
|
|
32
|
-
ssh_key__isnull=False
|
|
32
|
+
ssh_key__isnull=False, is_master=True
|
|
33
33
|
):
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
has_roles = user.instance_roles.filter(
|
|
35
|
+
instance__is_active=True
|
|
36
|
+
).first()
|
|
37
|
+
has_active_roles = user.instance_roles.filter(
|
|
38
|
+
instance__is_active=True, is_active=True
|
|
39
|
+
).first()
|
|
40
|
+
# if master user has active roles on some instances
|
|
41
|
+
# but no longer has a single active role on an instance
|
|
42
|
+
# he is most probably has been disabled by the property owner
|
|
43
|
+
# therefore he should no longer be able to ssh in to this hub!
|
|
44
|
+
if has_roles and not has_active_roles:
|
|
45
|
+
continue
|
|
46
|
+
keys_file.write(user.ssh_key + '\n')
|
|
36
47
|
except:
|
|
37
48
|
print(traceback.format_exc(), file=sys.stderr)
|
|
38
49
|
pass
|
|
@@ -2,7 +2,7 @@ simo/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
|
2
2
|
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
|
-
simo/scripting.py,sha256=
|
|
5
|
+
simo/scripting.py,sha256=ixgi6mKzxHJD5d9-TDl4YhG9n8dZWIoCFNzku_I648g,931
|
|
6
6
|
simo/settings.py,sha256=BcirAAKau1KiJ5qKTD0ni8hTk3jHAASBcUCBNZPGNCk,6962
|
|
7
7
|
simo/urls.py,sha256=fRmAsNQ_pzFloimLmxNeDcR6hHRJ3rOoZ3kGy8zOQ_A,2402
|
|
8
8
|
simo/__pycache__/__init__.cpython-38.pyc,sha256=j81de0BqHMr6bs0C7cuYrXl7HwtK_vv8hDEtAdSwDJc,153
|
|
@@ -16,7 +16,7 @@ simo/backups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
16
16
|
simo/backups/admin.py,sha256=cEakxnQlOHvUf8LdBdekXpDAvnqPoVN8y7pnN3WK29A,2487
|
|
17
17
|
simo/backups/dynamic_settings.py,sha256=Q52RLa3UQsmAhqkwR16cM6pbBnIbXqmVQ2oIUP2ZVD0,416
|
|
18
18
|
simo/backups/models.py,sha256=-tgILgkqmBEuxBwoymKZN1a0UVQzmJvqWrIGYMMFDaQ,695
|
|
19
|
-
simo/backups/tasks.py,sha256=
|
|
19
|
+
simo/backups/tasks.py,sha256=Vz6hJGWzlfaHtXRkLMhCg8e3oH80aQtgc3YfDsRLpgg,13372
|
|
20
20
|
simo/backups/__pycache__/__init__.cpython-38.pyc,sha256=vzOf-JIMeZ6P85FyvTpYev3mscFosUy-SJTshcQbOHU,161
|
|
21
21
|
simo/backups/__pycache__/admin.cpython-38.pyc,sha256=KnVH67nEpTeoOzSFB-x1i-XMcC9fMgW8Y_C-hANs9jw,3065
|
|
22
22
|
simo/backups/__pycache__/dynamic_settings.cpython-38.pyc,sha256=51gJFjn_XqQBRoHeubo6ppb9pNuFQKI5hAR0ms9flE8,731
|
|
@@ -33,67 +33,67 @@ simo/backups/migrations/__pycache__/0003_alter_backuplog_options_alter_backup_si
|
|
|
33
33
|
simo/backups/migrations/__pycache__/0004_alter_backup_options_alter_backuplog_options_and_more.cpython-38.pyc,sha256=f4leTBkOB2kraQYyCkz9B_2pb6aKn7srV2unQA5HV1Q,710
|
|
34
34
|
simo/backups/migrations/__pycache__/__init__.cpython-38.pyc,sha256=Lz1fs6V05h2AoxTOLNye0do9bEMnyuaXB_hHOjG5-HU,172
|
|
35
35
|
simo/core/__init__.py,sha256=_s2TjJfQImsMrTIxqLAx9AZie1Ojmm6sCHASdl3WLGU,50
|
|
36
|
-
simo/core/admin.py,sha256=
|
|
37
|
-
simo/core/api.py,sha256=
|
|
36
|
+
simo/core/admin.py,sha256=5mi0Qe9TM-OILCxbcRfGJvq397QCPxjYX30K3CIZrPs,18133
|
|
37
|
+
simo/core/api.py,sha256=A8P47OFFcqw-AXQPF3XqIV3pshEyqQGwLdM8aByddns,28288
|
|
38
38
|
simo/core/api_auth.py,sha256=vCxvczA8aWNcW0VyKs5WlC_ytlqeGP_H_hkKUNVkCwM,1247
|
|
39
39
|
simo/core/api_meta.py,sha256=EaiY-dCADP__9MvLpoHvhjytFT92IrxPZDv95xgqasU,4955
|
|
40
|
-
simo/core/app_widgets.py,sha256=
|
|
40
|
+
simo/core/app_widgets.py,sha256=ReWXLolUX6xW7QgB_qXTrrYyNvzustj9tXCXnUyCvJ8,2224
|
|
41
41
|
simo/core/apps.py,sha256=CsqpiQerhmrMsH-wGiG-gQgXd9qEkIi-LUaA9cXpKSw,425
|
|
42
42
|
simo/core/auto_urls.py,sha256=nNXEgLAAAQAhRWQDA9AbDtw-zcPKmu_pufJaSa8g818,1102
|
|
43
43
|
simo/core/autocomplete_views.py,sha256=JT5LA2_Wtr60XYSAIqaXFKFYPjrmkEf6yunXD9y2zco,4022
|
|
44
44
|
simo/core/base_types.py,sha256=qVh6MrXZEfN7bFOyFftC7u0yyz0PkvpsjllLBc6SCp4,616
|
|
45
45
|
simo/core/context.py,sha256=snfPIGcZQTrx8iiZc5PI91A0dRQH6y5kH4uG_lfhU6Q,1486
|
|
46
|
-
simo/core/controllers.py,sha256=
|
|
46
|
+
simo/core/controllers.py,sha256=nX6AtkYX6GjRnHuywWesrvRwA8EBHt_fR7yB_8BGA_I,29932
|
|
47
47
|
simo/core/dynamic_settings.py,sha256=bUs58XEZOCIEhg1TigR3LmYggli13KMryBZ9pC7ugAQ,1872
|
|
48
|
-
simo/core/events.py,sha256=
|
|
48
|
+
simo/core/events.py,sha256=HXapr_aLPM-T42yl4RB3M_HC76Bg_KmGJry5M8AlNK8,4493
|
|
49
49
|
simo/core/filters.py,sha256=ghtOZcrwNAkIyF5_G9Sn73NkiI71mXv0NhwCk4IyMIM,411
|
|
50
50
|
simo/core/form_fields.py,sha256=9tIjiEN3IE55GPyB4tOlfkd51JDne3-h8pKhpL3tLFE,2220
|
|
51
|
-
simo/core/forms.py,sha256=
|
|
51
|
+
simo/core/forms.py,sha256=nL_trDNs7RLic11zLSen4EobtywGx8igUMYe7Ojuv1k,21988
|
|
52
52
|
simo/core/gateways.py,sha256=m0eS3XjVe34Dge6xtoCq16kFWCKJcdQrT0JW0REqoq8,3715
|
|
53
53
|
simo/core/loggers.py,sha256=EBdq23gTQScVfQVH-xeP90-wII2DQFDjoROAW6ggUP4,1645
|
|
54
54
|
simo/core/managers.py,sha256=n-b3I4uXzfHKTeB1VMjSaMsDUxp8FegFJwnbV1IsWQ4,3019
|
|
55
|
-
simo/core/middleware.py,sha256=
|
|
56
|
-
simo/core/models.py,sha256=
|
|
55
|
+
simo/core/middleware.py,sha256=aEHwnyR9IFGWxmrYuViJiXIWcCpD5GUeCxcTCpfX_Q8,2934
|
|
56
|
+
simo/core/models.py,sha256=fEbRVY128-FdjG2ueQhBlSMRpvKcxY2VKCJUqXsSMPI,22441
|
|
57
57
|
simo/core/permissions.py,sha256=v0iJM4LOeYoEfMiw3OLPYio272G1aUEAg_z9Wd1q5m0,2993
|
|
58
58
|
simo/core/routing.py,sha256=X1_IHxyA-_Q7hw1udDoviVP4_FSBDl8GYETTC2zWTbY,499
|
|
59
|
-
simo/core/serializers.py,sha256=
|
|
59
|
+
simo/core/serializers.py,sha256=Pa2lhJ6VgNalbH4awbKdGJCYAPNsu5WQWfo6Tz6LbOQ,20782
|
|
60
60
|
simo/core/signal_receivers.py,sha256=9-qFCCeSLcMFEMg6QUtKOVgUsoNoqhzGoI98nuNSTEo,6228
|
|
61
61
|
simo/core/socket_consumers.py,sha256=n7VE2Fvqt4iEAYLTRbTPOcI-7tszMAADu7gimBxB-Fg,9635
|
|
62
62
|
simo/core/storage.py,sha256=_5igjaoWZAiExGWFEJMElxUw55DzJG1jqFty33xe8BE,342
|
|
63
|
-
simo/core/tasks.py,sha256
|
|
63
|
+
simo/core/tasks.py,sha256=wYCaARytOqnBkoZ1zV59yCtZBqmu3Sd-eNpyZsv4LW0,14572
|
|
64
64
|
simo/core/todos.py,sha256=eYVXfLGiapkxKK57XuviSNe3WsUYyIWZ0hgQJk7ThKo,665
|
|
65
65
|
simo/core/types.py,sha256=WJEq48mIbFi_5Alt4wxWMGXxNxUTXqfQU5koH7wqHHI,1108
|
|
66
66
|
simo/core/views.py,sha256=3SRZr00fyLQf8ja3U-9eekKt-ld5TvU1WQqUWprXfQ4,2390
|
|
67
67
|
simo/core/widgets.py,sha256=J9e06C6I22F6xKic3VMgG7WeX07glAcl-4bF2Mg180A,2827
|
|
68
68
|
simo/core/__pycache__/__init__.cpython-38.pyc,sha256=ZJFM_XN0RmJMULQulgA_wFiOnEtsMoedcOWnXjH-Y8o,208
|
|
69
|
-
simo/core/__pycache__/admin.cpython-38.pyc,sha256=
|
|
70
|
-
simo/core/__pycache__/api.cpython-38.pyc,sha256=
|
|
69
|
+
simo/core/__pycache__/admin.cpython-38.pyc,sha256=ksoB8Jz8PxcFQ3FlgPJtShwTnBR0LayaVZv6ezDe9OE,13723
|
|
70
|
+
simo/core/__pycache__/api.cpython-38.pyc,sha256=OFl3_PMd48Is0ohUEXeN-eQv_V2oAlphKyWS4FzKGhY,21862
|
|
71
71
|
simo/core/__pycache__/api_auth.cpython-38.pyc,sha256=6M9Cl_ha4y_Vf8Rv4GMYL8dcBCmp0KzYi6jn3SQTgys,1712
|
|
72
72
|
simo/core/__pycache__/api_meta.cpython-38.pyc,sha256=VYx5ZeDyNBI4B_CBEIhV5B3GnLsMOx9s3rNZTSMODco,3703
|
|
73
|
-
simo/core/__pycache__/app_widgets.cpython-38.pyc,sha256=
|
|
73
|
+
simo/core/__pycache__/app_widgets.cpython-38.pyc,sha256=fmZhynYrx5X5gidhXovhnf8-FdbCLfUB9NS_lpHBF3s,3830
|
|
74
74
|
simo/core/__pycache__/apps.cpython-38.pyc,sha256=JL0BEqgXcSQvMlcK48PBpPfyDEkPMdO1Y0teqMRGirs,713
|
|
75
75
|
simo/core/__pycache__/auto_urls.cpython-38.pyc,sha256=Tyf8PYHq5YqSwTp25Joy-eura_Fm86fpX9zKLSklhvo,872
|
|
76
76
|
simo/core/__pycache__/autocomplete_views.cpython-38.pyc,sha256=hJ6JILI1LqrAtpQMvxnLvljGdW1v1gpvBsD79vFkZ58,3972
|
|
77
77
|
simo/core/__pycache__/base_types.cpython-38.pyc,sha256=hmq22vvGyCmhbYyuV6bFAOOSIupspgW5yq_VzqWd-vY,759
|
|
78
78
|
simo/core/__pycache__/context.cpython-38.pyc,sha256=ck1FcBljLB4__5F6poS2tEEn8IDDgK7pU3FcXDPc_mI,1329
|
|
79
|
-
simo/core/__pycache__/controllers.cpython-38.pyc,sha256=
|
|
79
|
+
simo/core/__pycache__/controllers.cpython-38.pyc,sha256=P90-jhkH086_z3Mawo-gYjBWRnZtsxTffqtsSiTTDDU,26864
|
|
80
80
|
simo/core/__pycache__/dynamic_settings.cpython-38.pyc,sha256=wGpnscX1DxFpRl54MQURhjz2aD3NJohSzw9JCFnzh2Y,2384
|
|
81
|
-
simo/core/__pycache__/events.cpython-38.pyc,sha256=
|
|
81
|
+
simo/core/__pycache__/events.cpython-38.pyc,sha256=wMN1cxlAKSGVzBU4rAsnbIJwMgbKImBCoSBgdZhkPUg,5131
|
|
82
82
|
simo/core/__pycache__/filters.cpython-38.pyc,sha256=VIMADCBiYhziIyRmxAyUDJluZvuZmiC4bNYWTRsGSao,721
|
|
83
83
|
simo/core/__pycache__/form_fields.cpython-38.pyc,sha256=u0voKXkA64xbH6LY_-jMBHQS4mOJZZeuB9WTvtv9JWE,3433
|
|
84
|
-
simo/core/__pycache__/forms.cpython-38.pyc,sha256=
|
|
84
|
+
simo/core/__pycache__/forms.cpython-38.pyc,sha256=O_mCWAQHAJhiqcKLUina7tIFbw5uXwnLOYlJoWxqUDQ,17918
|
|
85
85
|
simo/core/__pycache__/gateways.cpython-38.pyc,sha256=D1ooHL-iSpQrxnD8uAl4xWFJmm-QWZfbkLiLlFOMtdU,4553
|
|
86
86
|
simo/core/__pycache__/loggers.cpython-38.pyc,sha256=Z-cdQnC6XlIonPV4Sl4E52tP4NMEdPAiHK0cFaIL7I8,1623
|
|
87
87
|
simo/core/__pycache__/managers.cpython-38.pyc,sha256=6RTIxyjOgpQGtAqcUyE2vFPS09w1V5Wmd_vOV7rHRRI,3370
|
|
88
|
-
simo/core/__pycache__/middleware.cpython-38.pyc,sha256=
|
|
89
|
-
simo/core/__pycache__/models.cpython-38.pyc,sha256=
|
|
88
|
+
simo/core/__pycache__/middleware.cpython-38.pyc,sha256=Ae2NvZ8sv-AeYoFS-xzuA196ajCuE411Ao-U1SY5HXU,2500
|
|
89
|
+
simo/core/__pycache__/models.cpython-38.pyc,sha256=vq7ysMUjqPdcPl6DfLzAzmJWPC9_WNR5W789w8fZirc,18460
|
|
90
90
|
simo/core/__pycache__/permissions.cpython-38.pyc,sha256=fH4iyqd9DdzRLEu2b621-FeM-napR0M7hzBUTHo9Q3g,2972
|
|
91
91
|
simo/core/__pycache__/routing.cpython-38.pyc,sha256=3T3FPJ8Cn99xZCGvMyg2xjl7al-Shm9CelbSpkJtNP8,599
|
|
92
|
-
simo/core/__pycache__/serializers.cpython-38.pyc,sha256=
|
|
92
|
+
simo/core/__pycache__/serializers.cpython-38.pyc,sha256=qIHxrurPk555mHc9P8Udg9eGv-ODw1FTmBS_jXrPuws,19220
|
|
93
93
|
simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=3Bt9S47DR_ZFS3O-crElFgLLXPIYyDgPIc2ibwEkaic,4904
|
|
94
94
|
simo/core/__pycache__/socket_consumers.cpython-38.pyc,sha256=NJUr7nRyHFvmAumxxWpsod5wzVVZM99rCEuJs1utHA4,8432
|
|
95
95
|
simo/core/__pycache__/storage.cpython-38.pyc,sha256=9R1Xu0FJDflfRXUPsqEgt0SpwiP7FGk7HaR8s8XRyI8,721
|
|
96
|
-
simo/core/__pycache__/tasks.cpython-38.pyc,sha256=
|
|
96
|
+
simo/core/__pycache__/tasks.cpython-38.pyc,sha256=HCp_TnVN3_q7WlAXrLbTbux30OG0hyTOqOHYvqcz1hU,9989
|
|
97
97
|
simo/core/__pycache__/todos.cpython-38.pyc,sha256=lOqGZ58siHM3isoJV4r7sg8igrfE9fFd-jSfeBa0AQI,253
|
|
98
98
|
simo/core/__pycache__/views.cpython-38.pyc,sha256=ySH8l-clhUdpkIVm9aMQOlt1VoZoJgNrqoE_sEiYMR8,2495
|
|
99
99
|
simo/core/__pycache__/widgets.cpython-38.pyc,sha256=sR0ZeHCHrhnNDBJuRrxp3zUsfBp0xrtF0xrK2TkQv1o,3520
|
|
@@ -158,7 +158,7 @@ simo/core/management/_hub_template/hub/supervisor.conf,sha256=MOsMo8QjBKUl5EUWG4
|
|
|
158
158
|
simo/core/management/_hub_template/hub/urls.py,sha256=Ydm-1BkYAzWeEF-MKSDIFf-7aE4qNLPm48-SA51XgJQ,25
|
|
159
159
|
simo/core/management/_hub_template/hub/wsgi.py,sha256=Lo-huLHnMDTxSmMBOodVFMWBls9poddrV2KRzXU0xGo,280
|
|
160
160
|
simo/core/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
161
|
-
simo/core/management/commands/gateways_manager.py,sha256=
|
|
161
|
+
simo/core/management/commands/gateways_manager.py,sha256=oHzgC-eV4w_KHkiz6eCAlt3XMIwtS8_7mHDQ4UsU5y0,6967
|
|
162
162
|
simo/core/management/commands/on_http_start.py,sha256=A2V40pyGY7AfONhtnxiGATOkqd0i9FUvRRxkwyAJF9k,2252
|
|
163
163
|
simo/core/management/commands/run_gateway.py,sha256=bp0FQQoBeOSoxjHCCMicDL1fxPZZGyLgnq2QKht3bJo,645
|
|
164
164
|
simo/core/management/commands/__pycache__/__init__.cpython-38.pyc,sha256=WKpfZZpAB9D7U4X6oWQIrU_H-6rUmq8Gl9fj9XaY2fw,178
|
|
@@ -10220,11 +10220,11 @@ simo/fleet/api.py,sha256=Hxn84xI-Q77HxjINgRbjSJQOv9jii4OL20LxK0VSrS8,2499
|
|
|
10220
10220
|
simo/fleet/auto_urls.py,sha256=UX66eR2ykMqFgfIllW-RTdjup5-FieCWl_BVm3CcXKg,702
|
|
10221
10221
|
simo/fleet/base_types.py,sha256=wL9RVkHr0gA7HI1wZq0pruGEIgvQqpfnCL4cC3ywsvw,102
|
|
10222
10222
|
simo/fleet/ble.py,sha256=eHA_9ABjbmH1vUVCv9hiPXQL2GZZSEVwfO0xyI1S0nI,1081
|
|
10223
|
-
simo/fleet/controllers.py,sha256=
|
|
10224
|
-
simo/fleet/forms.py,sha256=
|
|
10223
|
+
simo/fleet/controllers.py,sha256=i1GwbT6apIvdyfuVQYNkliBNlKmffCOdpjall3o3NxQ,32735
|
|
10224
|
+
simo/fleet/forms.py,sha256=yyb9KhhqbcfBBXh5PbzKH1uKP2ZH-LW6UZXD9AwT7rw,59079
|
|
10225
10225
|
simo/fleet/gateways.py,sha256=lKEJW0MgaOEiNnijH50DNSVChvaUT3TA3UurcI57P8k,5677
|
|
10226
10226
|
simo/fleet/managers.py,sha256=XOpDOA9L-f_550TNSyXnJbun2EmtGz1TenVTMlUSb8E,807
|
|
10227
|
-
simo/fleet/models.py,sha256=
|
|
10227
|
+
simo/fleet/models.py,sha256=DiO82bXZTH6e2mcN0TkTyR7n1YUYnMX_SNzR-lYjiY8,16542
|
|
10228
10228
|
simo/fleet/routing.py,sha256=cofGsVWXMfPDwsJ6HM88xxtRxHwERhJ48Xyxc8mxg5o,149
|
|
10229
10229
|
simo/fleet/serializers.py,sha256=-16BjY_bp9VbDOYuD0V54h7r_RHpuLNkJX0SydWL9aU,2247
|
|
10230
10230
|
simo/fleet/socket_consumers.py,sha256=aBNTxvYIw5a5l2ns9x0LnjVJvp4NValEJG4MT4hGAT0,17903
|
|
@@ -10237,11 +10237,11 @@ simo/fleet/__pycache__/api.cpython-38.pyc,sha256=rL9fb7cCQatyFvXyKmlNOKmxVo8vHYe
|
|
|
10237
10237
|
simo/fleet/__pycache__/auto_urls.cpython-38.pyc,sha256=Tc6a6BCXHjijP8U2jE2ghlJwnSNrGm59-hW5t-80wF0,689
|
|
10238
10238
|
simo/fleet/__pycache__/base_types.cpython-38.pyc,sha256=deyPwjpT6xZiFxBGFnj5b7R-lbdOTh2krgpJhrcGVhc,274
|
|
10239
10239
|
simo/fleet/__pycache__/ble.cpython-38.pyc,sha256=Nrof9w7cm4OlpFWHeVnmvvanh2_oF9oQ3TknJiV93-0,1267
|
|
10240
|
-
simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=
|
|
10241
|
-
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256
|
|
10240
|
+
simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=K_UMv4Vnc1JBd7GHIekm_6YBHApWONFBql5Plnm73nw,26901
|
|
10241
|
+
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=IRHNJ4RXP17cm9jcZdf96YCeV-AMeVDgvFA8isgiC2E,40489
|
|
10242
10242
|
simo/fleet/__pycache__/gateways.cpython-38.pyc,sha256=0RKVn0ndreVKhsrukqeLPSdMnRrsQ_W7yeVeBkRLfIk,5058
|
|
10243
10243
|
simo/fleet/__pycache__/managers.cpython-38.pyc,sha256=8uz-xpUiqbGDgXIZ_XRZtFb-Tju6NGxflGg-Ee4Yo6k,1310
|
|
10244
|
-
simo/fleet/__pycache__/models.cpython-38.pyc,sha256=
|
|
10244
|
+
simo/fleet/__pycache__/models.cpython-38.pyc,sha256=fMjWveEDpdGNgffMBPW2IPPz2w_umlSu6UB7BW8z6g4,13802
|
|
10245
10245
|
simo/fleet/__pycache__/routing.cpython-38.pyc,sha256=aPrCmxFKVyB8R8ZbJDwdPdFfvT7CvobovvZeq_mqRgY,314
|
|
10246
10246
|
simo/fleet/__pycache__/serializers.cpython-38.pyc,sha256=9ljhwoHkolcVrJwOVbYCbGPAUKgALRwor_M3W_K0adE,3173
|
|
10247
10247
|
simo/fleet/__pycache__/socket_consumers.cpython-38.pyc,sha256=oAnUJbrKjhC3-G-o4F-bx3ZztQf7JhmHi-Sh3cm4-4s,13549
|
|
@@ -10286,6 +10286,8 @@ simo/fleet/migrations/0035_auto_20240514_0855.py,sha256=qt1r-zC5EiB43255DkZuCBDQ
|
|
|
10286
10286
|
simo/fleet/migrations/0036_auto_20240605_0702.py,sha256=BfDypoqXEukcR8-R-fP09BUSmKZ-_jXv_YyhwCklths,2325
|
|
10287
10287
|
simo/fleet/migrations/0037_alter_colonelpin_options_alter_colonelpin_no_and_more.py,sha256=1YDmFYG4gkhS7AzUWJqage1XYftb5B88W737O0tNWiY,843
|
|
10288
10288
|
simo/fleet/migrations/0038_alter_colonel_type.py,sha256=3NCAJc5M5BilQynd3lIvub3VJJnVhcONMoGInkd1Los,584
|
|
10289
|
+
simo/fleet/migrations/0039_auto_20241016_1047.py,sha256=c75iDlPH9NPQohkNBt58NPl31tNmctk5rww8wWQJmxA,801
|
|
10290
|
+
simo/fleet/migrations/0040_alter_colonel_pwm_frequency.py,sha256=AiiYeLXEmBAFj1O3WdJB0xQy1KqfiErYR8yPpL8W7e4,498
|
|
10289
10291
|
simo/fleet/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10290
10292
|
simo/fleet/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=9kc1UyMEYkRNVnZ7iwZbiW1t3qWXROvWrI2G1BdzIaA,1250
|
|
10291
10293
|
simo/fleet/migrations/__pycache__/0002_auto_20220422_0743.cpython-38.pyc,sha256=8oxhGb7rL8QYKlBLU3pOYcd8aHeQWDB9I8awkK04mXg,841
|
|
@@ -10325,27 +10327,34 @@ simo/fleet/migrations/__pycache__/0035_auto_20240514_0855.cpython-38.pyc,sha256=
|
|
|
10325
10327
|
simo/fleet/migrations/__pycache__/0036_auto_20240605_0702.cpython-38.pyc,sha256=SDGibhEg0SYDF6fCte8l8NLChvHKn1qhLIrNZ_WoZQk,1654
|
|
10326
10328
|
simo/fleet/migrations/__pycache__/0037_alter_colonelpin_options_alter_colonelpin_no_and_more.cpython-38.pyc,sha256=ZappGrTStz3EIHlQ94y5ieXI-SkM9J1ashPey13ncFA,955
|
|
10327
10329
|
simo/fleet/migrations/__pycache__/0038_alter_colonel_type.cpython-38.pyc,sha256=8qbVMh7Hy3YngqjKuOEMCV29J5cZtRoF3MF1bWesC54,793
|
|
10330
|
+
simo/fleet/migrations/__pycache__/0039_auto_20241016_1047.cpython-38.pyc,sha256=6QU9LBUexU9GFSwPoBgLznO6xZU0N-HbWITah-W1xWo,1088
|
|
10331
|
+
simo/fleet/migrations/__pycache__/0040_alter_colonel_pwm_frequency.cpython-38.pyc,sha256=o_trHQUyQfYzWO_iWmZpvzc-uVJlBjK-GfyKhPOVSjc,736
|
|
10328
10332
|
simo/fleet/migrations/__pycache__/__init__.cpython-38.pyc,sha256=5k1KW0jeSDzw6RnVPRq4CaO13Lg7M0F-pxA_gqqZ6Mg,170
|
|
10329
10333
|
simo/fleet/templates/fleet/controllers_info/Button.md,sha256=GIuxqG617174NEtpPeCGVocxO4YMe7-CacgVSu_L5-E,739
|
|
10330
10334
|
simo/fleet/templates/fleet/controllers_info/ENS160AirQualitySensor.md,sha256=3LSTY9YPFuVPIbVsYCAifcotrXJcOXl2k774_vo6nAE,770
|
|
10331
10335
|
simo/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10332
10336
|
simo/generic/app_widgets.py,sha256=E_pnpA1hxMIhenRCrHoQ5cik06jm2BAHCkl_eo-OudU,1264
|
|
10333
10337
|
simo/generic/base_types.py,sha256=djymox_boXTHX1BTTCLXrCH7ED-uAsV_idhaDOc3OLI,409
|
|
10334
|
-
simo/generic/controllers.py,sha256=
|
|
10335
|
-
simo/generic/forms.py,sha256=
|
|
10338
|
+
simo/generic/controllers.py,sha256=qqtIj9G3KzPi_IEA2IP1OEYujxCjYbGSKNVUUO8iim0,59825
|
|
10339
|
+
simo/generic/forms.py,sha256=QiVRQ-l2jgiEsnnUYqhCZkKwprMy-D-Wu_EDlBSLz60,32304
|
|
10336
10340
|
simo/generic/gateways.py,sha256=cc_q_g2HsI2_rWmr8yZ3spnMPwsgoYS5ApWRimc11wU,18831
|
|
10337
|
-
simo/generic/models.py,sha256=
|
|
10341
|
+
simo/generic/models.py,sha256=YEAFfkARsAellfDwmmqGSx7nKkEF5XngciRB4qP1MKk,7596
|
|
10338
10342
|
simo/generic/routing.py,sha256=elQVZmgnPiieEuti4sJ7zITk1hlRxpgbotcutJJgC60,228
|
|
10339
10343
|
simo/generic/socket_consumers.py,sha256=K2OjphIhKJH48BvfFfoCOyCQZ1NmXb_phs6y1IP-qaQ,1757
|
|
10340
10344
|
simo/generic/__pycache__/__init__.cpython-38.pyc,sha256=mLu54WS9KIl-pHwVCBKpsDFIlOqml--JsOVzAUHg6cU,161
|
|
10341
10345
|
simo/generic/__pycache__/app_widgets.cpython-38.pyc,sha256=0IoKRG9n1tkNRRkrqAeOQwWBPd_33u98JBcVtMVVCio,2374
|
|
10342
10346
|
simo/generic/__pycache__/base_types.cpython-38.pyc,sha256=ptw6axyAqemZA35oa6vzr7EihzvbhW9w7Y-G6kfDedU,555
|
|
10343
|
-
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=
|
|
10344
|
-
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=
|
|
10345
|
-
simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=
|
|
10346
|
-
simo/generic/__pycache__/models.cpython-38.pyc,sha256=
|
|
10347
|
+
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=NFTFX_Hn4XqDdsOw3L02rY8CwWpi9sJ03gxfdPMu_uE,37681
|
|
10348
|
+
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=Gi4adctjk9FOCr55FsNbZyRASUzewgGly0iEepayUJw,23077
|
|
10349
|
+
simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=S7p2HSbXqYcsoOjj998pwpRlA7LfHStrdxS3UhPNsP8,13979
|
|
10350
|
+
simo/generic/__pycache__/models.cpython-38.pyc,sha256=ES8wXkdKn0m-yaJlvhyaIOSppuX9Ckz-bOs9DCpVvaQ,5825
|
|
10347
10351
|
simo/generic/__pycache__/routing.cpython-38.pyc,sha256=xtxTUTBTdivzFyA5Wh7k-hUj1WDO_FiRq6HYXdbr9Ks,382
|
|
10348
10352
|
simo/generic/__pycache__/socket_consumers.cpython-38.pyc,sha256=qJO5kvQLWhsQDOr1AtAtsAybuRWioxSkQei3Pc7rdP0,1737
|
|
10353
|
+
simo/generic/scripting/__init__.py,sha256=aZZvNBae7unnux_zGHCIWCV2z47hVJc-DIL72Hqfkeo,600
|
|
10354
|
+
simo/generic/scripting/helpers.py,sha256=cuJ7B79auIw6CmgkcPoQsJekUPIXq00ucneRALdPWwE,919
|
|
10355
|
+
simo/generic/scripting/serializers.py,sha256=PjyFrjdPK1mBsgbNhyqMi9SWzcymqTa742ipy0LhAN4,1996
|
|
10356
|
+
simo/generic/scripting/__pycache__/__init__.cpython-38.pyc,sha256=eHncoNpv5dy35IO1_htWd8CK0sHFBnU_WJ0hl5TKOHQ,794
|
|
10357
|
+
simo/generic/scripting/__pycache__/serializers.cpython-38.pyc,sha256=JD9KCNO27H18mkFaeSMdybTMdTvodqcZSLNbC3pheHU,3412
|
|
10349
10358
|
simo/generic/static/weather_icons/01d@2x.png,sha256=TZfWi6Rfddb2P-oldWWcjUiuCHiU9Yrc5hyrQAhF26I,948
|
|
10350
10359
|
simo/generic/static/weather_icons/01n@2x.png,sha256=e9RleTa0T7To9Wi2wJ-9waeTbfHOsUB_xGwkx-89eEg,945
|
|
10351
10360
|
simo/generic/static/weather_icons/02d@2x.png,sha256=ex522OxNzNNpSRGGzh7EmsBZi_MOFY-1IkQXTOMLL3I,1628
|
|
@@ -10369,7 +10378,7 @@ simo/generic/templates/admin/controller_widgets/gate.html,sha256=rqtgEQTmyK8Q66o
|
|
|
10369
10378
|
simo/generic/templates/admin/controller_widgets/ip_camera.html,sha256=ZmWm21EswkgT6XR9x1GgzDIkSU2j_GpdOTfbPINg6jY,657
|
|
10370
10379
|
simo/generic/templates/admin/controller_widgets/script.html,sha256=biUEMo5V35wqSrM97d5WqNDi47GNaDpi53I3YBfDLOs,1484
|
|
10371
10380
|
simo/generic/templates/admin/controller_widgets/thermostat.html,sha256=iH7j631AY6ahsI7dTMyMYHL_EuX6Q_aRxQgQcPIVxvI,288
|
|
10372
|
-
simo/generic/templates/admin/controller_widgets/weather_forecast.html,sha256=
|
|
10381
|
+
simo/generic/templates/admin/controller_widgets/weather_forecast.html,sha256=QXR2rIXu-qF6L9bkPKN8CNvT_YVHv-V63ABEnLBwaUY,484
|
|
10373
10382
|
simo/generic/templates/generic/controllers_info/dummy.md,sha256=DcdkpYXpK7sroINukZZPUQs9uekN9kkE7p5hfnArgFo,147
|
|
10374
10383
|
simo/generic/templates/generic/controllers_info/stateselect.md,sha256=T0w3vJg02W3RMSsljN1EPRnkVaeRW5acSZaSq9FYvZw,135
|
|
10375
10384
|
simo/multimedia/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -10406,12 +10415,13 @@ simo/notifications/admin.py,sha256=y_gmHYXbDh98LUUa-lp9DilTIgM6-pIujWPQPLQsJo8,8
|
|
|
10406
10415
|
simo/notifications/api.py,sha256=GXQpq68ULBaJpU8w3SJKaCKuxYGWYehKnGeocGB1RVc,1783
|
|
10407
10416
|
simo/notifications/models.py,sha256=VZcvweii59j89nPKlWeUSJ44Qz3ZLjJ6mXN6uB9F1Sw,2506
|
|
10408
10417
|
simo/notifications/serializers.py,sha256=altDEAPWwOhxRcEzE9-34jL8EFpyf3vPoEdAPoVLfGc,523
|
|
10409
|
-
simo/notifications/utils.py,sha256=
|
|
10418
|
+
simo/notifications/utils.py,sha256=uBl-Y7WGu00iaGM5rrdogcq0OMRVtyVfJF39-mdB3_k,1853
|
|
10410
10419
|
simo/notifications/__pycache__/__init__.cpython-38.pyc,sha256=YvucUfu98XFvEEg1LYFMlOZJpo_jSGxTVrM-ylAFLOg,167
|
|
10411
10420
|
simo/notifications/__pycache__/admin.cpython-38.pyc,sha256=Fl4crSZTFQOTYQioV6ff9fBRV4MhNiwQgMS2VnmCI4M,1632
|
|
10412
10421
|
simo/notifications/__pycache__/api.cpython-38.pyc,sha256=ys6E4AFghX6bq-rQ0gtA9s0Y2Hh-ypsWH8-Yz4edMrc,2073
|
|
10413
10422
|
simo/notifications/__pycache__/models.cpython-38.pyc,sha256=rrYjYOEzDZ3Eos2O7aof5wuIo0VUgGt6LLzhXwORDuc,2559
|
|
10414
10423
|
simo/notifications/__pycache__/serializers.cpython-38.pyc,sha256=7-eRGKYuQ4g1SpKOMpz17SIiu1HmaMoYv-cJbaO9QGA,1028
|
|
10424
|
+
simo/notifications/__pycache__/utils.cpython-38.pyc,sha256=yqxzplE-_9khsyMvMpXe8nk4eJAwk_62GUV0sCtfY7k,1460
|
|
10415
10425
|
simo/notifications/migrations/0001_initial.py,sha256=Zh69AQ-EKlQKfqfnMDVRcxvo1MxRY-TFLCdnNcgqi6g,2003
|
|
10416
10426
|
simo/notifications/migrations/0002_notification_instance.py,sha256=B3msbMeKvsuq-V7gvRADRjj5PFLayhi3pQvHZjqzO5g,563
|
|
10417
10427
|
simo/notifications/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -10420,37 +10430,37 @@ simo/notifications/migrations/__pycache__/0002_notification_instance.cpython-38.
|
|
|
10420
10430
|
simo/notifications/migrations/__pycache__/__init__.cpython-38.pyc,sha256=YMBRHVon2nWDtIUbghckjnC12sIg_ykPWhV5aM0tto4,178
|
|
10421
10431
|
simo/users/__init__.py,sha256=6a7uBpCWB_DR7p54rbHusc0xvi1qfT1ZCCQGb6TiBh8,52
|
|
10422
10432
|
simo/users/admin.py,sha256=oaLFTrjDaruKC_l79BB0etru4p8nP8eJFV3F4TSYGp4,6305
|
|
10423
|
-
simo/users/api.py,sha256=
|
|
10433
|
+
simo/users/api.py,sha256=MoURNgcdGl5eS881SbO5nw-zgwSEnbXzb-FrOyA7Vbc,11599
|
|
10424
10434
|
simo/users/apps.py,sha256=cq0A8-U1HALEwev0TicgFhr4CAu7Icz8rwq0HfOaL4E,207
|
|
10425
10435
|
simo/users/auth_backends.py,sha256=bBSNXQJ88TRXaQxyh1aETfmOIfiDr08Jnj8rSY9sHDk,4074
|
|
10426
10436
|
simo/users/auto_urls.py,sha256=lcJvteBsbHQMJieZpDz-63tDYejLApqsW3CUnDakd7k,272
|
|
10427
10437
|
simo/users/dynamic_settings.py,sha256=sEIsi4yJw3kH46Jq_aOkSuK7QTfQACGUE-lkyBogCaM,570
|
|
10428
|
-
simo/users/managers.py,sha256=
|
|
10438
|
+
simo/users/managers.py,sha256=Fajwpm3wdMES73iPqoa_66J8g13bvUhjUtrexLKIcIU,312
|
|
10429
10439
|
simo/users/middleware.py,sha256=GMCrnWSc_2qCleyQIkfQGdL-pU-UTEcSg1wPvIKZ9uk,1210
|
|
10430
|
-
simo/users/models.py,sha256=
|
|
10440
|
+
simo/users/models.py,sha256=xzkLAspcHL0D3kdukEKOwdr4QuLFbocuxkr0BZaJHS4,20590
|
|
10431
10441
|
simo/users/permissions.py,sha256=IwtYS8yQdupWbYKR9VimSRDV3qCJ2jXP57Lyjpb2EQM,242
|
|
10432
|
-
simo/users/serializers.py,sha256=
|
|
10442
|
+
simo/users/serializers.py,sha256=zzw1KONTnaTNBaU0r4rNVxJ827KzD6Z5LuQt27ZsQ98,2516
|
|
10433
10443
|
simo/users/sso_urls.py,sha256=gQOaPvGMYFD0NCVSwyoWO-mTEHe5j9sbzV_RK7kdvp0,251
|
|
10434
10444
|
simo/users/sso_views.py,sha256=-XI67TvQ7SN3goU4OuAHyn84u_1vtusvpn7Pu0K97zo,4648
|
|
10435
10445
|
simo/users/tasks.py,sha256=HJAqiyWGsaN3wSfquU0UyQ20jL-njXeaaTOdDT3TQ3s,979
|
|
10436
|
-
simo/users/utils.py,sha256=
|
|
10446
|
+
simo/users/utils.py,sha256=1HGSZyHRqQvdJ4RtAiZDg1juvgG8aOlrGXR7CcvsyQc,1886
|
|
10437
10447
|
simo/users/views.py,sha256=dOQVvmlHG7ihWKJLFUBcqKOA0UDctlMKR0pTc36JZqg,3487
|
|
10438
10448
|
simo/users/__pycache__/__init__.cpython-38.pyc,sha256=VFoDJE_SKKaPqqYaaBYd1Ndb1hjakkTo_u0EG_XJ1GM,211
|
|
10439
10449
|
simo/users/__pycache__/admin.cpython-38.pyc,sha256=UgkqzfrSQU8Hyqig03Z5Qq29434wU27ttufxtvGEJYw,7433
|
|
10440
|
-
simo/users/__pycache__/api.cpython-38.pyc,sha256=
|
|
10450
|
+
simo/users/__pycache__/api.cpython-38.pyc,sha256=ptN4kOcpA185pPGbU70aVbZQmzr8myOuAndzqXaKZKk,9852
|
|
10441
10451
|
simo/users/__pycache__/apps.cpython-38.pyc,sha256=dgbWL8CxzzISJQTmq_4IztPJ2UzykNVdqA2Ae1PmeGk,605
|
|
10442
10452
|
simo/users/__pycache__/auth_backends.cpython-38.pyc,sha256=n5nx2QSXNj2idzRcGE6bAagMN-8qxoCs580H1EFZXls,3105
|
|
10443
10453
|
simo/users/__pycache__/auto_urls.cpython-38.pyc,sha256=K-3sz2h-cEitoflSmZk1t0eUg5mQMMGLNZFREVwG7_o,430
|
|
10444
10454
|
simo/users/__pycache__/dynamic_settings.cpython-38.pyc,sha256=6F8JBjZkHykySnmZjNEzjS0ijbmPdcp9yUAZ5kqq_Fo,864
|
|
10445
|
-
simo/users/__pycache__/managers.cpython-38.pyc,sha256=
|
|
10455
|
+
simo/users/__pycache__/managers.cpython-38.pyc,sha256=8NvEXbI795f-BXs6CvE_Kp0PpWfYmEJIZ8Bh8H6S2PQ,705
|
|
10446
10456
|
simo/users/__pycache__/middleware.cpython-38.pyc,sha256=Tj4nVEAvxEW3xA63fBRiJWRJpz_M848ZOqbHioc_IPE,1149
|
|
10447
|
-
simo/users/__pycache__/models.cpython-38.pyc,sha256=
|
|
10457
|
+
simo/users/__pycache__/models.cpython-38.pyc,sha256=ZPwHo7woKL0Tlj3q8MWHeqFKpvh1AKkAslrjr8860to,18550
|
|
10448
10458
|
simo/users/__pycache__/permissions.cpython-38.pyc,sha256=ez5NxoL_JUeeH6GsKhvFreuA3FCBgGf9floSypdXUtM,633
|
|
10449
|
-
simo/users/__pycache__/serializers.cpython-38.pyc,sha256=
|
|
10459
|
+
simo/users/__pycache__/serializers.cpython-38.pyc,sha256=Dy8RAcwNkNSXoJHvLp8fozURyHCtucqpSPyqZtbnMZc,3732
|
|
10450
10460
|
simo/users/__pycache__/sso_urls.cpython-38.pyc,sha256=uAwDozpOmrhUald-8tOHANILXkH7-TI8fNYXOtPkSY8,402
|
|
10451
10461
|
simo/users/__pycache__/sso_views.cpython-38.pyc,sha256=sHEoxLOac3U3Epmhm197huFnW_J3gGCDZSji57itijU,3969
|
|
10452
10462
|
simo/users/__pycache__/tasks.cpython-38.pyc,sha256=XLMKt3suT7BlcXrJZoH9ZIhhtBuqyiW4lsOB9IbBkko,1225
|
|
10453
|
-
simo/users/__pycache__/utils.cpython-38.pyc,sha256=
|
|
10463
|
+
simo/users/__pycache__/utils.cpython-38.pyc,sha256=S-2i_Y11eTcUpmn-RkX1B4_tDvZJdqkZqqoewpkcsUM,1739
|
|
10454
10464
|
simo/users/__pycache__/views.cpython-38.pyc,sha256=AXuUnVYRD0ai4FSFDp4qJwryukujAoN6LD3oIj-Cv3o,2426
|
|
10455
10465
|
simo/users/migrations/0001_initial.py,sha256=_SnJemhNOs8Jjj-PjyvTVCBoxfs5V3lR_4ypUHUdLUg,7017
|
|
10456
10466
|
simo/users/migrations/0002_componentpermission.py,sha256=rH9pC9HERf_5WWn3LCsNiu03BiHqURTF62pSNfswStI,918
|
|
@@ -10485,6 +10495,7 @@ simo/users/migrations/0030_userdevice_users.py,sha256=cYY7yChsxOOauHAPIQUzLjLLiO
|
|
|
10485
10495
|
simo/users/migrations/0031_auto_20240923_1115.py,sha256=RyhmpsxpSXK9Ejbh3cHm9fTnDOcLFQsTH9-2MpNK5YU,514
|
|
10486
10496
|
simo/users/migrations/0032_remove_userdevice_user_alter_userdevice_users.py,sha256=pM0B4ghsw6LWDvT_9owUmqIHQiraauTGYm_EePhVBUQ,570
|
|
10487
10497
|
simo/users/migrations/0033_alter_user_ssh_key.py,sha256=yR7rI2K3FThEp6zEXWx29Zej4HzG5QufKPcj-m8pFuE,519
|
|
10498
|
+
simo/users/migrations/0034_instanceuser_last_seen_location_and_more.py,sha256=_W7qUsVosxBgeQ4oogfJiDryNnGbQTWiusrDVW70JZU,716
|
|
10488
10499
|
simo/users/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10489
10500
|
simo/users/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=e4XOKaYRb7l0P7cBnHHi5FQQJMlwjK0g7iqgM-xKmNI,4215
|
|
10490
10501
|
simo/users/migrations/__pycache__/0002_componentpermission.cpython-38.pyc,sha256=pknJnpic8p6Vdx9DX41FfODXNnvexDswJtUCmC5w1tg,995
|
|
@@ -10521,6 +10532,7 @@ simo/users/migrations/__pycache__/0030_userdevice_users.cpython-38.pyc,sha256=PW
|
|
|
10521
10532
|
simo/users/migrations/__pycache__/0031_auto_20240923_1115.cpython-38.pyc,sha256=0nT2ftDPi0yV6j-p9Am-nVsTy2kY0msM_f2k0eP9EoU,866
|
|
10522
10533
|
simo/users/migrations/__pycache__/0032_remove_userdevice_user_alter_userdevice_users.cpython-38.pyc,sha256=SDKPEIkt9DYEBRm63GAnxG1yRKKm-JP3pizaJdbAUks,772
|
|
10523
10534
|
simo/users/migrations/__pycache__/0033_alter_user_ssh_key.cpython-38.pyc,sha256=HCdJw3La6yFkA9v8QcTMAKub_BKhqIH6U4lVY8G4JII,733
|
|
10535
|
+
simo/users/migrations/__pycache__/0034_instanceuser_last_seen_location_and_more.cpython-38.pyc,sha256=YHxGkhAaI2Es3OK61kdNWViyM7UlEiuFGOV5oAyaL_E,871
|
|
10524
10536
|
simo/users/migrations/__pycache__/__init__.cpython-38.pyc,sha256=NKq7WLgktK8WV1oOqCPbAbdkrPV5GRGhYx4VxxI4dcs,170
|
|
10525
10537
|
simo/users/templates/conf/mosquitto.conf,sha256=1eIGNuRu4Y3hfAU6qiWix648eCRrw0oOT24PnyFI4ys,189
|
|
10526
10538
|
simo/users/templates/conf/mosquitto_acls.conf,sha256=ga44caTDNQE0CBKw55iM2jOuna6-9fKGwAhjyERZdRE,500
|
|
@@ -10530,9 +10542,9 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
10530
10542
|
simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10531
10543
|
simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10532
10544
|
simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10533
|
-
simo-2.
|
|
10534
|
-
simo-2.
|
|
10535
|
-
simo-2.
|
|
10536
|
-
simo-2.
|
|
10537
|
-
simo-2.
|
|
10538
|
-
simo-2.
|
|
10545
|
+
simo-2.5.1.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
|
|
10546
|
+
simo-2.5.1.dist-info/METADATA,sha256=4wMPIMMJH6YZClBFHahVA57OeiMpv_NjJrqPwhoGAm4,1923
|
|
10547
|
+
simo-2.5.1.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
|
10548
|
+
simo-2.5.1.dist-info/entry_points.txt,sha256=S9PwnUYmTSW7681GKDCxUbL0leRJIaRk6fDQIKgbZBA,135
|
|
10549
|
+
simo-2.5.1.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
|
|
10550
|
+
simo-2.5.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|