simo 2.1.12__py3-none-any.whl → 2.1.14__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__/managers.cpython-38.pyc +0 -0
- simo/core/managers.py +3 -3
- simo/fleet/__pycache__/models.cpython-38.pyc +0 -0
- simo/fleet/models.py +4 -1
- simo/generic/__pycache__/models.cpython-38.pyc +0 -0
- simo/generic/models.py +19 -13
- simo/users/__pycache__/api.cpython-38.pyc +0 -0
- simo/users/__pycache__/auth_backends.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/api.py +16 -3
- simo/users/auth_backends.py +5 -3
- simo/users/managers.py +7 -0
- simo/users/migrations/0001_initial.py +1 -1
- simo/users/migrations/__pycache__/0001_initial.cpython-38.pyc +0 -0
- simo/users/models.py +8 -9
- simo/users/serializers.py +0 -1
- {simo-2.1.12.dist-info → simo-2.1.14.dist-info}/METADATA +1 -1
- {simo-2.1.12.dist-info → simo-2.1.14.dist-info}/RECORD +24 -22
- {simo-2.1.12.dist-info → simo-2.1.14.dist-info}/WHEEL +1 -1
- {simo-2.1.12.dist-info → simo-2.1.14.dist-info}/LICENSE.md +0 -0
- {simo-2.1.12.dist-info → simo-2.1.14.dist-info}/entry_points.txt +0 -0
- {simo-2.1.12.dist-info → simo-2.1.14.dist-info}/top_level.txt +0 -0
|
Binary file
|
simo/core/managers.py
CHANGED
|
@@ -25,7 +25,7 @@ class InstanceManager(models.Manager):
|
|
|
25
25
|
class ZonesManager(models.Manager):
|
|
26
26
|
|
|
27
27
|
def get_queryset(self):
|
|
28
|
-
qs = super().get_queryset()
|
|
28
|
+
qs = super().get_queryset().filter(instance__is_active=True)
|
|
29
29
|
instance = get_current_instance()
|
|
30
30
|
if instance:
|
|
31
31
|
qs = qs.filter(instance=instance)
|
|
@@ -35,7 +35,7 @@ class ZonesManager(models.Manager):
|
|
|
35
35
|
class CategoriesManager(models.Manager):
|
|
36
36
|
|
|
37
37
|
def get_queryset(self):
|
|
38
|
-
qs = super().get_queryset()
|
|
38
|
+
qs = super().get_queryset().filter(instance__is_active=True)
|
|
39
39
|
instance = get_current_instance()
|
|
40
40
|
if instance:
|
|
41
41
|
qs = qs.filter(instance=instance)
|
|
@@ -45,7 +45,7 @@ class CategoriesManager(models.Manager):
|
|
|
45
45
|
class ComponentsManager(models.Manager):
|
|
46
46
|
|
|
47
47
|
def get_queryset(self):
|
|
48
|
-
qs = super().get_queryset()
|
|
48
|
+
qs = super().get_queryset().filter(zone__instance__is_active=True)
|
|
49
49
|
instance = get_current_instance()
|
|
50
50
|
if instance:
|
|
51
51
|
qs = qs.filter(zone__instance=instance)
|
|
Binary file
|
simo/fleet/models.py
CHANGED
|
@@ -11,7 +11,6 @@ from dirtyfields import DirtyFieldsMixin
|
|
|
11
11
|
from simo.core.models import Instance, Gateway, Component
|
|
12
12
|
from simo.core.utils.helpers import get_random_string
|
|
13
13
|
from simo.core.events import GatewayObjectCommand
|
|
14
|
-
from .gateways import FleetGatewayHandler
|
|
15
14
|
from .managers import ColonelsManager, ColonelPinsManager, InterfacesManager
|
|
16
15
|
from .utils import GPIO_PINS, INTERFACES_PINS_MAP
|
|
17
16
|
|
|
@@ -146,6 +145,7 @@ class Colonel(DirtyFieldsMixin, models.Model):
|
|
|
146
145
|
return resp.json()
|
|
147
146
|
|
|
148
147
|
def update_firmware(self, to_version):
|
|
148
|
+
from .gateways import FleetGatewayHandler
|
|
149
149
|
for gateway in Gateway.objects.filter(type=FleetGatewayHandler.uid):
|
|
150
150
|
GatewayObjectCommand(
|
|
151
151
|
gateway, self,
|
|
@@ -153,12 +153,14 @@ class Colonel(DirtyFieldsMixin, models.Model):
|
|
|
153
153
|
).publish()
|
|
154
154
|
|
|
155
155
|
def restart(self):
|
|
156
|
+
from .gateways import FleetGatewayHandler
|
|
156
157
|
for gateway in Gateway.objects.filter(type=FleetGatewayHandler.uid):
|
|
157
158
|
GatewayObjectCommand(
|
|
158
159
|
gateway, self, command='restart'
|
|
159
160
|
).publish()
|
|
160
161
|
|
|
161
162
|
def update_config(self):
|
|
163
|
+
from .gateways import FleetGatewayHandler
|
|
162
164
|
for gateway in Gateway.objects.filter(type=FleetGatewayHandler.uid):
|
|
163
165
|
GatewayObjectCommand(
|
|
164
166
|
gateway, self, command='update_config'
|
|
@@ -371,6 +373,7 @@ class Interface(models.Model):
|
|
|
371
373
|
|
|
372
374
|
|
|
373
375
|
def broadcast_reset(self):
|
|
376
|
+
from .gateways import FleetGatewayHandler
|
|
374
377
|
gw = Gateway.objects.filter(type=FleetGatewayHandler.uid).first()
|
|
375
378
|
if not gw:
|
|
376
379
|
return
|
|
Binary file
|
simo/generic/models.py
CHANGED
|
@@ -6,8 +6,6 @@ from django.db.models.signals import pre_save, post_save, post_delete
|
|
|
6
6
|
from django.dispatch import receiver
|
|
7
7
|
from simo.core.models import Instance, Component
|
|
8
8
|
from simo.users.models import InstanceUser
|
|
9
|
-
from .controllers import AlarmGroup
|
|
10
|
-
|
|
11
9
|
|
|
12
10
|
|
|
13
11
|
@receiver(post_save, sender=Component)
|
|
@@ -20,6 +18,8 @@ def handle_alarm_groups(sender, instance, *args, **kwargs):
|
|
|
20
18
|
if 'arm_status' not in dirty_fields:
|
|
21
19
|
return
|
|
22
20
|
|
|
21
|
+
from .controllers import AlarmGroup
|
|
22
|
+
|
|
23
23
|
for alarm_group in Component.objects.filter(
|
|
24
24
|
controller_uid=AlarmGroup.uid,
|
|
25
25
|
config__components__contains=instance.id,
|
|
@@ -76,6 +76,8 @@ def handle_alarm_groups(sender, instance, *args, **kwargs):
|
|
|
76
76
|
|
|
77
77
|
@receiver(pre_save, sender=Component)
|
|
78
78
|
def manage_alarm_groups(sender, instance, *args, **kwargs):
|
|
79
|
+
from .controllers import AlarmGroup
|
|
80
|
+
|
|
79
81
|
if instance.controller_uid != AlarmGroup.uid:
|
|
80
82
|
return
|
|
81
83
|
|
|
@@ -104,6 +106,8 @@ def manage_alarm_groups(sender, instance, *args, **kwargs):
|
|
|
104
106
|
def clear_alarm_group_config_on_component_delete(
|
|
105
107
|
sender, instance, *args, **kwargs
|
|
106
108
|
):
|
|
109
|
+
from .controllers import AlarmGroup
|
|
110
|
+
|
|
107
111
|
for ag in Component.objects.filter(
|
|
108
112
|
base_type=AlarmGroup.base_type,
|
|
109
113
|
config__components__contains=instance.id
|
|
@@ -120,17 +124,16 @@ def bind_controlling_locks_to_alarm_groups(sender, instance, *args, **kwargs):
|
|
|
120
124
|
return
|
|
121
125
|
if 'value' not in instance.get_dirty_fields():
|
|
122
126
|
return
|
|
127
|
+
|
|
128
|
+
from .controllers import AlarmGroup
|
|
129
|
+
|
|
123
130
|
if instance.value == 'locked':
|
|
124
131
|
for ag in Component.objects.filter(
|
|
125
132
|
base_type=AlarmGroup.base_type,
|
|
126
133
|
config__arming_locks__contains=instance.id
|
|
127
134
|
):
|
|
128
|
-
if ag.config.get('arm_on_away') in (None, 'on_away'):
|
|
129
|
-
|
|
130
|
-
base_type=AlarmGroup.base_type,
|
|
131
|
-
config__arming_locks__contains=instance.id
|
|
132
|
-
):
|
|
133
|
-
ag.arm()
|
|
135
|
+
if ag.config.get('arm_on_away') in (None, '', 'on_away'):
|
|
136
|
+
ag.controller.arm()
|
|
134
137
|
continue
|
|
135
138
|
|
|
136
139
|
users_at_home = InstanceUser.objects.filter(
|
|
@@ -140,7 +143,7 @@ def bind_controlling_locks_to_alarm_groups(sender, instance, *args, **kwargs):
|
|
|
140
143
|
continue
|
|
141
144
|
if ag.config.get('arm_on_away') == 'on_away_and_locked':
|
|
142
145
|
print(f"Nobody is at home, lock was locked. Arm {ag}!")
|
|
143
|
-
ag.arm()
|
|
146
|
+
ag.controller.arm()
|
|
144
147
|
continue
|
|
145
148
|
locked_states = [
|
|
146
149
|
True if l['value'] == 'locked' else False
|
|
@@ -150,14 +153,14 @@ def bind_controlling_locks_to_alarm_groups(sender, instance, *args, **kwargs):
|
|
|
150
153
|
]
|
|
151
154
|
if all(locked_states):
|
|
152
155
|
print(f"Nobody is at home, all locks are now locked. Arm {ag}!")
|
|
153
|
-
ag.arm()
|
|
156
|
+
ag.controller.arm()
|
|
154
157
|
|
|
155
158
|
elif instance.value == 'unlocked':
|
|
156
159
|
for ag in Component.objects.filter(
|
|
157
160
|
base_type=AlarmGroup.base_type,
|
|
158
161
|
config__arming_locks__contains=instance.id
|
|
159
162
|
):
|
|
160
|
-
ag.disarm()
|
|
163
|
+
ag.controller.disarm()
|
|
161
164
|
|
|
162
165
|
|
|
163
166
|
@receiver(post_save, sender=InstanceUser)
|
|
@@ -173,6 +176,9 @@ def bind_alarm_groups(sender, instance, created, *args, **kwargs):
|
|
|
173
176
|
).exclude(is_active=False).exclude(id=instance.id).count()
|
|
174
177
|
if users_at_home:
|
|
175
178
|
return
|
|
179
|
+
|
|
180
|
+
from .controllers import AlarmGroup
|
|
181
|
+
|
|
176
182
|
for ag in Component.objects.filter(
|
|
177
183
|
zone__instance=instance.instance,
|
|
178
184
|
base_type=AlarmGroup.base_type,
|
|
@@ -189,10 +195,10 @@ def bind_alarm_groups(sender, instance, created, *args, **kwargs):
|
|
|
189
195
|
continue
|
|
190
196
|
if ag.config['arm_on_away'] == 'on_away_and_locked':
|
|
191
197
|
print(f"Everybody is away, single lock is locked, arm {ag}!")
|
|
192
|
-
ag.arm()
|
|
198
|
+
ag.controller.arm()
|
|
193
199
|
continue
|
|
194
200
|
if ag.config['arm_on_away'] == 'on_away_and_locked_all' \
|
|
195
201
|
and all(locked_states):
|
|
196
202
|
print(f"Everybody is away, all locks are locked, arm {ag}!")
|
|
197
|
-
ag.arm()
|
|
203
|
+
ag.controller.arm()
|
|
198
204
|
continue
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
simo/users/api.py
CHANGED
|
@@ -211,9 +211,22 @@ class InvitationsViewSet(InstanceMixin, viewsets.ModelViewSet):
|
|
|
211
211
|
return InstanceInvitation.objects.none()
|
|
212
212
|
return InstanceInvitation.objects.filter(instance=self.instance)
|
|
213
213
|
|
|
214
|
-
def
|
|
215
|
-
|
|
216
|
-
|
|
214
|
+
def create(self, request, *args, **kwargs):
|
|
215
|
+
role = PermissionsRole.objects.filter(
|
|
216
|
+
instance=self.instance, is_default=True
|
|
217
|
+
).first()
|
|
218
|
+
if not role:
|
|
219
|
+
role = PermissionsRole.objects.filter(
|
|
220
|
+
instance=self.instance
|
|
221
|
+
).first()
|
|
222
|
+
if role:
|
|
223
|
+
request.data['role'] = role.id
|
|
224
|
+
serializer = self.get_serializer(data=request.data)
|
|
225
|
+
serializer.is_valid(raise_exception=True)
|
|
226
|
+
serializer.save(instance=self.instance, from_user=self.request.user)
|
|
227
|
+
headers = self.get_success_headers(serializer.data)
|
|
228
|
+
return RESTResponse(
|
|
229
|
+
serializer.data, status=status.HTTP_201_CREATED, headers=headers
|
|
217
230
|
)
|
|
218
231
|
|
|
219
232
|
@action(detail=True, methods=['post'])
|
simo/users/auth_backends.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import io
|
|
3
3
|
import requests
|
|
4
|
+
from django.db import transaction
|
|
4
5
|
from django.utils import timezone
|
|
5
6
|
from django.contrib.auth import get_user_model
|
|
6
7
|
from django.contrib.auth.models import Permission
|
|
@@ -54,6 +55,7 @@ class SIMOUserBackend(ModelBackend):
|
|
|
54
55
|
|
|
55
56
|
class SSOBackend(ModelBackend):
|
|
56
57
|
|
|
58
|
+
@transaction.atomic
|
|
57
59
|
def authenticate(self, request, user_data=None, **kwargs):
|
|
58
60
|
system_user_emails = ('system@simo.io', 'device@simo.io')
|
|
59
61
|
if not user_data:
|
|
@@ -93,9 +95,9 @@ class SSOBackend(ModelBackend):
|
|
|
93
95
|
if invitation:
|
|
94
96
|
invitation.taken_by = user
|
|
95
97
|
invitation.save()
|
|
96
|
-
InstanceUser.objects.
|
|
97
|
-
user=user,
|
|
98
|
-
|
|
98
|
+
InstanceUser.objects.update_or_create(
|
|
99
|
+
user=user, instance=invitation.instance,
|
|
100
|
+
defaults={'role': invitation.role}
|
|
99
101
|
)
|
|
100
102
|
|
|
101
103
|
if user_data.get('name'):
|
simo/users/managers.py
ADDED
|
@@ -103,7 +103,7 @@ class Migration(migrations.Migration):
|
|
|
103
103
|
('last_sent', models.DateTimeField(blank=True, null=True)),
|
|
104
104
|
('taken_date', models.DateTimeField(blank=True, null=True)),
|
|
105
105
|
('from_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='issued_hub_invitations', to=settings.AUTH_USER_MODEL)),
|
|
106
|
-
('role', models.ForeignKey(
|
|
106
|
+
('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.permissionsrole')),
|
|
107
107
|
('taken_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='accepted_hub_invitations', to=settings.AUTH_USER_MODEL)),
|
|
108
108
|
],
|
|
109
109
|
options={
|
|
Binary file
|
simo/users/models.py
CHANGED
|
@@ -24,7 +24,7 @@ from simo.core.utils.helpers import get_random_string
|
|
|
24
24
|
from simo.core.events import OnChangeMixin
|
|
25
25
|
from .middleware import get_current_user
|
|
26
26
|
from .utils import rebuild_authorized_keys
|
|
27
|
-
from .
|
|
27
|
+
from .managers import ActiveInstanceManager
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class PermissionsRole(models.Model):
|
|
@@ -49,6 +49,8 @@ class PermissionsRole(models.Model):
|
|
|
49
49
|
default=False, help_text="Default new user role."
|
|
50
50
|
)
|
|
51
51
|
|
|
52
|
+
objects = ActiveInstanceManager()
|
|
53
|
+
|
|
52
54
|
class Meta:
|
|
53
55
|
verbose_name = "role"
|
|
54
56
|
verbose_name_plural = "roles"
|
|
@@ -97,6 +99,8 @@ class InstanceUser(DirtyFieldsMixin, models.Model, OnChangeMixin):
|
|
|
97
99
|
at_home = models.BooleanField(default=False, db_index=True)
|
|
98
100
|
is_active = models.BooleanField(default=True, db_index=True)
|
|
99
101
|
|
|
102
|
+
objects = ActiveInstanceManager()
|
|
103
|
+
|
|
100
104
|
class Meta:
|
|
101
105
|
unique_together = 'user', 'instance'
|
|
102
106
|
|
|
@@ -529,12 +533,6 @@ def get_default_inviation_expire_date():
|
|
|
529
533
|
return timezone.now() + datetime.timedelta(days=14)
|
|
530
534
|
|
|
531
535
|
|
|
532
|
-
def get_default_invitation_role():
|
|
533
|
-
role = PermissionsRole.objects.filter(is_default=True).first()
|
|
534
|
-
if not role:
|
|
535
|
-
return PermissionsRole.objects.all().first().id
|
|
536
|
-
return role.id
|
|
537
|
-
|
|
538
536
|
|
|
539
537
|
class InstanceInvitation(models.Model):
|
|
540
538
|
instance = models.ForeignKey('core.Instance', on_delete=models.CASCADE)
|
|
@@ -542,8 +540,7 @@ class InstanceInvitation(models.Model):
|
|
|
542
540
|
max_length=50, default=get_random_string, db_index=True
|
|
543
541
|
)
|
|
544
542
|
role = models.ForeignKey(
|
|
545
|
-
PermissionsRole, on_delete=models.CASCADE
|
|
546
|
-
default=get_default_invitation_role
|
|
543
|
+
PermissionsRole, on_delete=models.CASCADE
|
|
547
544
|
)
|
|
548
545
|
issue_date = models.DateTimeField(auto_now_add=True)
|
|
549
546
|
expire_date = models.DateTimeField(
|
|
@@ -561,6 +558,8 @@ class InstanceInvitation(models.Model):
|
|
|
561
558
|
)
|
|
562
559
|
taken_date = models.DateTimeField(null=True, blank=True)
|
|
563
560
|
|
|
561
|
+
objects = ActiveInstanceManager()
|
|
562
|
+
|
|
564
563
|
|
|
565
564
|
class Meta:
|
|
566
565
|
verbose_name = "invitation"
|
simo/users/serializers.py
CHANGED
|
@@ -31,7 +31,7 @@ simo/core/form_fields.py,sha256=9tIjiEN3IE55GPyB4tOlfkd51JDne3-h8pKhpL3tLFE,2220
|
|
|
31
31
|
simo/core/forms.py,sha256=QTPEe7nxzhg8NNCQFsVJpoO1LQW6MNNTHkEhBs7keYw,21386
|
|
32
32
|
simo/core/gateways.py,sha256=m0eS3XjVe34Dge6xtoCq16kFWCKJcdQrT0JW0REqoq8,3715
|
|
33
33
|
simo/core/loggers.py,sha256=EBdq23gTQScVfQVH-xeP90-wII2DQFDjoROAW6ggUP4,1645
|
|
34
|
-
simo/core/managers.py,sha256=
|
|
34
|
+
simo/core/managers.py,sha256=n-b3I4uXzfHKTeB1VMjSaMsDUxp8FegFJwnbV1IsWQ4,3019
|
|
35
35
|
simo/core/middleware.py,sha256=Go4DAdnXWd7i0ZEbftwfcZI5YGjZ31aQqDzWE4s676c,1970
|
|
36
36
|
simo/core/models.py,sha256=Mg6UjGQjA5WtxO2kq9fO-iW2f9UzDh58etcZ9-X5RSU,21570
|
|
37
37
|
simo/core/permissions.py,sha256=D8JA3gdsbSfA1Lz6-AIP5ILsYYZ59_Rw4csLqVpuKuE,2928
|
|
@@ -64,7 +64,7 @@ simo/core/__pycache__/form_fields.cpython-38.pyc,sha256=u0voKXkA64xbH6LY_-jMBHQS
|
|
|
64
64
|
simo/core/__pycache__/forms.cpython-38.pyc,sha256=gDYKULuBTMLxrKfzWXaLDbxuCJvhi2rwR5rIMC_IIVI,17672
|
|
65
65
|
simo/core/__pycache__/gateways.cpython-38.pyc,sha256=D1ooHL-iSpQrxnD8uAl4xWFJmm-QWZfbkLiLlFOMtdU,4553
|
|
66
66
|
simo/core/__pycache__/loggers.cpython-38.pyc,sha256=Z-cdQnC6XlIonPV4Sl4E52tP4NMEdPAiHK0cFaIL7I8,1623
|
|
67
|
-
simo/core/__pycache__/managers.cpython-38.pyc,sha256=
|
|
67
|
+
simo/core/__pycache__/managers.cpython-38.pyc,sha256=6RTIxyjOgpQGtAqcUyE2vFPS09w1V5Wmd_vOV7rHRRI,3370
|
|
68
68
|
simo/core/__pycache__/middleware.cpython-38.pyc,sha256=94jRByEYOhsIuiMgPq_oHrRKrvD8rgQw8plS0n1Mrz8,1933
|
|
69
69
|
simo/core/__pycache__/models.cpython-38.pyc,sha256=rKg-_vQ-3L3_NKbCd0HIij7Nyev1t7SOz32-6PS4Rds,17907
|
|
70
70
|
simo/core/__pycache__/permissions.cpython-38.pyc,sha256=pg11ulzmKh4IeWGPIDJ-KYG-S0dKyY5lHh-S3iljb0E,2930
|
|
@@ -10195,7 +10195,7 @@ simo/fleet/controllers.py,sha256=ounEUw51X6EYA8xDcGNIik1bDbw4JR3DOGr1FKo4hHs,288
|
|
|
10195
10195
|
simo/fleet/forms.py,sha256=CbrLN_gMCTo8u6fg0ovztkhdYEjHZmSr_3gzsDRMP84,54425
|
|
10196
10196
|
simo/fleet/gateways.py,sha256=lKEJW0MgaOEiNnijH50DNSVChvaUT3TA3UurcI57P8k,5677
|
|
10197
10197
|
simo/fleet/managers.py,sha256=XOpDOA9L-f_550TNSyXnJbun2EmtGz1TenVTMlUSb8E,807
|
|
10198
|
-
simo/fleet/models.py,sha256=
|
|
10198
|
+
simo/fleet/models.py,sha256=t_oi6EYSkg8Y5p3trJPv4MqW6AyUcylge9Bfw83mWCg,16462
|
|
10199
10199
|
simo/fleet/routing.py,sha256=cofGsVWXMfPDwsJ6HM88xxtRxHwERhJ48Xyxc8mxg5o,149
|
|
10200
10200
|
simo/fleet/serializers.py,sha256=-16BjY_bp9VbDOYuD0V54h7r_RHpuLNkJX0SydWL9aU,2247
|
|
10201
10201
|
simo/fleet/socket_consumers.py,sha256=aBNTxvYIw5a5l2ns9x0LnjVJvp4NValEJG4MT4hGAT0,17903
|
|
@@ -10212,7 +10212,7 @@ simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=61dvQDl2nIuB4iaCzdBMwQn
|
|
|
10212
10212
|
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=7B6NZnY6yS8qrmv5zlTa07iUYmdv4nW7PTpOVfRn3OY,37436
|
|
10213
10213
|
simo/fleet/__pycache__/gateways.cpython-38.pyc,sha256=0RKVn0ndreVKhsrukqeLPSdMnRrsQ_W7yeVeBkRLfIk,5058
|
|
10214
10214
|
simo/fleet/__pycache__/managers.cpython-38.pyc,sha256=8uz-xpUiqbGDgXIZ_XRZtFb-Tju6NGxflGg-Ee4Yo6k,1310
|
|
10215
|
-
simo/fleet/__pycache__/models.cpython-38.pyc,sha256=
|
|
10215
|
+
simo/fleet/__pycache__/models.cpython-38.pyc,sha256=GZ01BjdvTn6_XJBfV8VrSldJ67X06ne-xW4CsQ6N6Wc,13756
|
|
10216
10216
|
simo/fleet/__pycache__/routing.cpython-38.pyc,sha256=aPrCmxFKVyB8R8ZbJDwdPdFfvT7CvobovvZeq_mqRgY,314
|
|
10217
10217
|
simo/fleet/__pycache__/serializers.cpython-38.pyc,sha256=9ljhwoHkolcVrJwOVbYCbGPAUKgALRwor_M3W_K0adE,3173
|
|
10218
10218
|
simo/fleet/__pycache__/socket_consumers.cpython-38.pyc,sha256=oAnUJbrKjhC3-G-o4F-bx3ZztQf7JhmHi-Sh3cm4-4s,13549
|
|
@@ -10302,7 +10302,7 @@ simo/generic/base_types.py,sha256=djymox_boXTHX1BTTCLXrCH7ED-uAsV_idhaDOc3OLI,40
|
|
|
10302
10302
|
simo/generic/controllers.py,sha256=gojeCP_vSyLTaP4h56LqqLDykny5lEG-nLclieyVrRg,58292
|
|
10303
10303
|
simo/generic/forms.py,sha256=IAfDtmEk1-CP0JBoetOD_ahLm64nK41GOUXjmbUzNtY,29550
|
|
10304
10304
|
simo/generic/gateways.py,sha256=cc_q_g2HsI2_rWmr8yZ3spnMPwsgoYS5ApWRimc11wU,18831
|
|
10305
|
-
simo/generic/models.py,sha256=
|
|
10305
|
+
simo/generic/models.py,sha256=flpK2jsBFghrvRHzl6IKT-t3WZ-hNOj4ZP2vmBzx0K8,7657
|
|
10306
10306
|
simo/generic/routing.py,sha256=elQVZmgnPiieEuti4sJ7zITk1hlRxpgbotcutJJgC60,228
|
|
10307
10307
|
simo/generic/socket_consumers.py,sha256=NfTQGYtVAc864IoogZRxf_0xpDPM0eMCWn0SlKA5P7Y,1751
|
|
10308
10308
|
simo/generic/__pycache__/__init__.cpython-38.pyc,sha256=mLu54WS9KIl-pHwVCBKpsDFIlOqml--JsOVzAUHg6cU,161
|
|
@@ -10311,7 +10311,7 @@ simo/generic/__pycache__/base_types.cpython-38.pyc,sha256=ptw6axyAqemZA35oa6vzr7
|
|
|
10311
10311
|
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=9ZnI6Z084og6Q-9fmhT-PZEM5w_yOC1rwMAHHA6af_Q,36460
|
|
10312
10312
|
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=v85YEQR9l0QyUgYW_uTKr5qFCjp8TYOAAnfYQvYActI,21227
|
|
10313
10313
|
simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=8NbsLVDww3Ov5DKF--LKgyrgnrn8yVcKrY21cdvV5aA,13979
|
|
10314
|
-
simo/generic/__pycache__/models.cpython-38.pyc,sha256=
|
|
10314
|
+
simo/generic/__pycache__/models.cpython-38.pyc,sha256=n3FeTMJYh4B6nCPiPKeXiWsUOOWkLHca7qTvfTK6Iik,5844
|
|
10315
10315
|
simo/generic/__pycache__/routing.cpython-38.pyc,sha256=xtxTUTBTdivzFyA5Wh7k-hUj1WDO_FiRq6HYXdbr9Ks,382
|
|
10316
10316
|
simo/generic/__pycache__/socket_consumers.cpython-38.pyc,sha256=piFHces0J9QuXu_CNBCQCYjoZEeoaxyVjLfJ9KaR8C8,1898
|
|
10317
10317
|
simo/generic/static/weather_icons/01d@2x.png,sha256=TZfWi6Rfddb2P-oldWWcjUiuCHiU9Yrc5hyrQAhF26I,948
|
|
@@ -10402,15 +10402,16 @@ simo/notifications/migrations/__pycache__/0002_notification_instance.cpython-38.
|
|
|
10402
10402
|
simo/notifications/migrations/__pycache__/__init__.cpython-38.pyc,sha256=YMBRHVon2nWDtIUbghckjnC12sIg_ykPWhV5aM0tto4,178
|
|
10403
10403
|
simo/users/__init__.py,sha256=6a7uBpCWB_DR7p54rbHusc0xvi1qfT1ZCCQGb6TiBh8,52
|
|
10404
10404
|
simo/users/admin.py,sha256=6RKGnwcrmewJFPzpqnxYn8rxjHO4tJPVFJvA3eMum2s,6746
|
|
10405
|
-
simo/users/api.py,sha256=
|
|
10405
|
+
simo/users/api.py,sha256=HUY4H9kK_HZKeN4VFERcbNDp6Mmp6p2LdDKBDFvWGUE,10096
|
|
10406
10406
|
simo/users/apps.py,sha256=cq0A8-U1HALEwev0TicgFhr4CAu7Icz8rwq0HfOaL4E,207
|
|
10407
|
-
simo/users/auth_backends.py,sha256=
|
|
10407
|
+
simo/users/auth_backends.py,sha256=bBSNXQJ88TRXaQxyh1aETfmOIfiDr08Jnj8rSY9sHDk,4074
|
|
10408
10408
|
simo/users/auto_urls.py,sha256=lcJvteBsbHQMJieZpDz-63tDYejLApqsW3CUnDakd7k,272
|
|
10409
10409
|
simo/users/dynamic_settings.py,sha256=sEIsi4yJw3kH46Jq_aOkSuK7QTfQACGUE-lkyBogCaM,570
|
|
10410
|
+
simo/users/managers.py,sha256=M_51bk9z4jn8e2Ci3pJfIqbf6cRNqfQNSOAg0vPl6Vo,175
|
|
10410
10411
|
simo/users/middleware.py,sha256=GMCrnWSc_2qCleyQIkfQGdL-pU-UTEcSg1wPvIKZ9uk,1210
|
|
10411
|
-
simo/users/models.py,sha256=
|
|
10412
|
+
simo/users/models.py,sha256=ud-OOiFuDn8yJK2xrae3Qx-ku9vYBljIHNd3BCHAhM4,19708
|
|
10412
10413
|
simo/users/permissions.py,sha256=IwtYS8yQdupWbYKR9VimSRDV3qCJ2jXP57Lyjpb2EQM,242
|
|
10413
|
-
simo/users/serializers.py,sha256=
|
|
10414
|
+
simo/users/serializers.py,sha256=a4R408ZgWVbF7OFw4bBfN33Wnn8ljqS8iFcsqmllkWU,2552
|
|
10414
10415
|
simo/users/sso_urls.py,sha256=gQOaPvGMYFD0NCVSwyoWO-mTEHe5j9sbzV_RK7kdvp0,251
|
|
10415
10416
|
simo/users/sso_views.py,sha256=-XI67TvQ7SN3goU4OuAHyn84u_1vtusvpn7Pu0K97zo,4648
|
|
10416
10417
|
simo/users/tasks.py,sha256=HJAqiyWGsaN3wSfquU0UyQ20jL-njXeaaTOdDT3TQ3s,979
|
|
@@ -10418,21 +10419,22 @@ simo/users/utils.py,sha256=7gU_TDnAOsDYqJM0CFo8efPah2bTXfGpXxRqzD5RiSs,1270
|
|
|
10418
10419
|
simo/users/views.py,sha256=dOQVvmlHG7ihWKJLFUBcqKOA0UDctlMKR0pTc36JZqg,3487
|
|
10419
10420
|
simo/users/__pycache__/__init__.cpython-38.pyc,sha256=VFoDJE_SKKaPqqYaaBYd1Ndb1hjakkTo_u0EG_XJ1GM,211
|
|
10420
10421
|
simo/users/__pycache__/admin.cpython-38.pyc,sha256=paoWxwJgOyDF7RT7LIviDqggdELG9-fbydc9UfqHV10,7500
|
|
10421
|
-
simo/users/__pycache__/api.cpython-38.pyc,sha256=
|
|
10422
|
+
simo/users/__pycache__/api.cpython-38.pyc,sha256=QqQL0MyG8-_7HkqPvqwINuYoco-pJEQ8zT8Crr7t3Rc,8602
|
|
10422
10423
|
simo/users/__pycache__/apps.cpython-38.pyc,sha256=dgbWL8CxzzISJQTmq_4IztPJ2UzykNVdqA2Ae1PmeGk,605
|
|
10423
|
-
simo/users/__pycache__/auth_backends.cpython-38.pyc,sha256=
|
|
10424
|
+
simo/users/__pycache__/auth_backends.cpython-38.pyc,sha256=n5nx2QSXNj2idzRcGE6bAagMN-8qxoCs580H1EFZXls,3105
|
|
10424
10425
|
simo/users/__pycache__/auto_urls.cpython-38.pyc,sha256=K-3sz2h-cEitoflSmZk1t0eUg5mQMMGLNZFREVwG7_o,430
|
|
10425
10426
|
simo/users/__pycache__/dynamic_settings.cpython-38.pyc,sha256=6F8JBjZkHykySnmZjNEzjS0ijbmPdcp9yUAZ5kqq_Fo,864
|
|
10427
|
+
simo/users/__pycache__/managers.cpython-38.pyc,sha256=C5-diljm874RAFMTkZdcfzPhkHzlUGPAhz2gTvqkDy8,604
|
|
10426
10428
|
simo/users/__pycache__/middleware.cpython-38.pyc,sha256=Tj4nVEAvxEW3xA63fBRiJWRJpz_M848ZOqbHioc_IPE,1149
|
|
10427
|
-
simo/users/__pycache__/models.cpython-38.pyc,sha256=
|
|
10429
|
+
simo/users/__pycache__/models.cpython-38.pyc,sha256=RiBi5YNHt38s4uUd8Xliswnv7s--v72mjUrBvpal_is,18179
|
|
10428
10430
|
simo/users/__pycache__/permissions.cpython-38.pyc,sha256=ez5NxoL_JUeeH6GsKhvFreuA3FCBgGf9floSypdXUtM,633
|
|
10429
|
-
simo/users/__pycache__/serializers.cpython-38.pyc,sha256=
|
|
10431
|
+
simo/users/__pycache__/serializers.cpython-38.pyc,sha256=PuMy6H0PhEhq89RFmdnFH4pMHB0N3w7opJEFS90JUCY,3477
|
|
10430
10432
|
simo/users/__pycache__/sso_urls.cpython-38.pyc,sha256=uAwDozpOmrhUald-8tOHANILXkH7-TI8fNYXOtPkSY8,402
|
|
10431
10433
|
simo/users/__pycache__/sso_views.cpython-38.pyc,sha256=sHEoxLOac3U3Epmhm197huFnW_J3gGCDZSji57itijU,3969
|
|
10432
10434
|
simo/users/__pycache__/tasks.cpython-38.pyc,sha256=XLMKt3suT7BlcXrJZoH9ZIhhtBuqyiW4lsOB9IbBkko,1225
|
|
10433
10435
|
simo/users/__pycache__/utils.cpython-38.pyc,sha256=CGaRBk-y9A-8lWWY4bYkI9faAziO0pVYdr5BJNmqbUg,1600
|
|
10434
10436
|
simo/users/__pycache__/views.cpython-38.pyc,sha256=AXuUnVYRD0ai4FSFDp4qJwryukujAoN6LD3oIj-Cv3o,2426
|
|
10435
|
-
simo/users/migrations/0001_initial.py,sha256=
|
|
10437
|
+
simo/users/migrations/0001_initial.py,sha256=_SnJemhNOs8Jjj-PjyvTVCBoxfs5V3lR_4ypUHUdLUg,7017
|
|
10436
10438
|
simo/users/migrations/0002_componentpermission.py,sha256=rH9pC9HERf_5WWn3LCsNiu03BiHqURTF62pSNfswStI,918
|
|
10437
10439
|
simo/users/migrations/0003_create_roles_and_system_user.py,sha256=24kNpyPF_DzCRJbx5wi9pvR78YNNNKRJg6TGI8kQiUY,1141
|
|
10438
10440
|
simo/users/migrations/0004_user_secret_key.py,sha256=ptNOxBVOkkqoowvu_Y9z8uScDzIoq9yokBxIAkG6P5w,491
|
|
@@ -10462,7 +10464,7 @@ simo/users/migrations/0027_permissionsrole_can_manage_components.py,sha256=VcGZE
|
|
|
10462
10464
|
simo/users/migrations/0028_auto_20240506_1146.py,sha256=7RUFF2rJH-bnPeHwc77p8Q4kEAc3owyG4qp9Kc4aKhU,716
|
|
10463
10465
|
simo/users/migrations/0029_alter_instanceuser_instance.py,sha256=5ebO0vX9lCnTXBMkWg8633sBCBLNtMLfbocVY-uyQhE,588
|
|
10464
10466
|
simo/users/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10465
|
-
simo/users/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=
|
|
10467
|
+
simo/users/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=e4XOKaYRb7l0P7cBnHHi5FQQJMlwjK0g7iqgM-xKmNI,4215
|
|
10466
10468
|
simo/users/migrations/__pycache__/0002_componentpermission.cpython-38.pyc,sha256=pknJnpic8p6Vdx9DX41FfODXNnvexDswJtUCmC5w1tg,995
|
|
10467
10469
|
simo/users/migrations/__pycache__/0003_create_roles_and_system_user.cpython-38.pyc,sha256=jcxB_WItrY8APyG_ZiCs3sBvaIVQonm8GSakK82Dc7s,750
|
|
10468
10470
|
simo/users/migrations/__pycache__/0004_user_secret_key.cpython-38.pyc,sha256=fPLGDwNli7BAThDaXhNWOjJzAzF1wB45hQugim1dcWc,733
|
|
@@ -10502,9 +10504,9 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
10502
10504
|
simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10503
10505
|
simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10504
10506
|
simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10505
|
-
simo-2.1.
|
|
10506
|
-
simo-2.1.
|
|
10507
|
-
simo-2.1.
|
|
10508
|
-
simo-2.1.
|
|
10509
|
-
simo-2.1.
|
|
10510
|
-
simo-2.1.
|
|
10507
|
+
simo-2.1.14.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
|
|
10508
|
+
simo-2.1.14.dist-info/METADATA,sha256=ciR_wlaOnCRk7dYaoHrnRJHcDnBiH7rv14fZdxxT3A8,1848
|
|
10509
|
+
simo-2.1.14.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
|
10510
|
+
simo-2.1.14.dist-info/entry_points.txt,sha256=SJBxiDpH7noO0STxVI_eRIsGR-nLgdXXeqCDe8cXlbM,65
|
|
10511
|
+
simo-2.1.14.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
|
|
10512
|
+
simo-2.1.14.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|