simo 2.0.39__py3-none-any.whl → 2.0.41__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.cpython-38.pyc +0 -0
- simo/core/__pycache__/permissions.cpython-38.pyc +0 -0
- simo/core/api.py +18 -17
- simo/core/permissions.py +4 -4
- simo/core/utils/__pycache__/json.cpython-38.pyc +0 -0
- simo/core/utils/json.py +7 -5
- simo/fleet/__pycache__/forms.cpython-38.pyc +0 -0
- simo/fleet/forms.py +28 -6
- simo/generic/__pycache__/controllers.cpython-38.pyc +0 -0
- simo/generic/controllers.py +3 -3
- simo/users/__pycache__/models.cpython-38.pyc +0 -0
- simo/users/models.py +9 -1
- {simo-2.0.39.dist-info → simo-2.0.41.dist-info}/METADATA +1 -1
- {simo-2.0.39.dist-info → simo-2.0.41.dist-info}/RECORD +17 -17
- {simo-2.0.39.dist-info → simo-2.0.41.dist-info}/LICENSE.md +0 -0
- {simo-2.0.39.dist-info → simo-2.0.41.dist-info}/WHEEL +0 -0
- {simo-2.0.39.dist-info → simo-2.0.41.dist-info}/top_level.txt +0 -0
|
Binary file
|
|
Binary file
|
simo/core/api.py
CHANGED
|
@@ -147,6 +147,8 @@ def get_components_queryset(instance, user):
|
|
|
147
147
|
if user.is_superuser:
|
|
148
148
|
return qs
|
|
149
149
|
|
|
150
|
+
c_ids = set()
|
|
151
|
+
|
|
150
152
|
from simo.generic.controllers import WeatherForecast
|
|
151
153
|
general_components = []
|
|
152
154
|
if instance.indoor_climate_sensor:
|
|
@@ -156,22 +158,21 @@ def get_components_queryset(instance, user):
|
|
|
156
158
|
controller_uid=WeatherForecast.uid, config__is_main=True
|
|
157
159
|
).values('id').first()
|
|
158
160
|
if wf_c:
|
|
159
|
-
|
|
161
|
+
c_ids.add(wf_c['id'])
|
|
160
162
|
main_alarm_group = Component.objects.filter(
|
|
161
163
|
zone__instance=instance,
|
|
162
164
|
base_type='alarm-group', config__is_main=True
|
|
163
165
|
).values('id').first()
|
|
164
166
|
if main_alarm_group:
|
|
165
|
-
|
|
167
|
+
c_ids.add(main_alarm_group['id'])
|
|
168
|
+
|
|
169
|
+
user_role = user.get_role(instance)
|
|
166
170
|
|
|
167
|
-
|
|
168
|
-
cp.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
]
|
|
173
|
-
qs = qs.filter(Q(id__in=c_ids) | Q(id__in=general_components))
|
|
174
|
-
return qs
|
|
171
|
+
for cp in user_role.component_permissions.all():
|
|
172
|
+
if cp.read:
|
|
173
|
+
c_ids.add(cp.id)
|
|
174
|
+
|
|
175
|
+
return qs.filter(id__in=c_ids)
|
|
175
176
|
|
|
176
177
|
|
|
177
178
|
class ComponentViewSet(
|
|
@@ -188,9 +189,7 @@ class ComponentViewSet(
|
|
|
188
189
|
return permissions
|
|
189
190
|
|
|
190
191
|
def get_queryset(self):
|
|
191
|
-
return get_components_queryset(self.instance, self.request.user)
|
|
192
|
-
zone__instance=self.instance
|
|
193
|
-
)
|
|
192
|
+
return get_components_queryset(self.instance, self.request.user)
|
|
194
193
|
|
|
195
194
|
def get_view_name(self):
|
|
196
195
|
singular = "Component"
|
|
@@ -209,7 +208,7 @@ class ComponentViewSet(
|
|
|
209
208
|
_('"%s" method not found on controller') % method_name,
|
|
210
209
|
code=400
|
|
211
210
|
)
|
|
212
|
-
|
|
211
|
+
|
|
213
212
|
call = getattr(component, method_name)
|
|
214
213
|
|
|
215
214
|
if not isinstance(param, list) and not isinstance(param, dict):
|
|
@@ -255,14 +254,16 @@ class ComponentViewSet(
|
|
|
255
254
|
|
|
256
255
|
@action(detail=True, methods=['post'])
|
|
257
256
|
def controller(self, request, pk=None, *args, **kwargs):
|
|
257
|
+
start = time.time()
|
|
258
258
|
component = self.get_object()
|
|
259
|
+
print(f"Component retrieved in : {time.time() - start}s")
|
|
259
260
|
data = request.data
|
|
260
261
|
if not isinstance(request.data, dict):
|
|
261
262
|
data = data.dict()
|
|
262
263
|
request_data = restore_json(data)
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
264
|
+
resp = self.perform_controller_method(request_data, component)
|
|
265
|
+
print(f"Command executed in : {time.time() - start}s")
|
|
266
|
+
return resp
|
|
266
267
|
|
|
267
268
|
@action(detail=False, methods=['post'])
|
|
268
269
|
def control(self, request, *args, **kwargs):
|
simo/core/permissions.py
CHANGED
|
@@ -78,8 +78,8 @@ class ComponentPermission(BasePermission):
|
|
|
78
78
|
return True
|
|
79
79
|
if user_role.is_owner and request.method != 'DELETE':
|
|
80
80
|
return True
|
|
81
|
-
if request.method == 'POST'
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
if request.method == 'POST':
|
|
82
|
+
for perm in user_role.component_permissions.all():
|
|
83
|
+
if perm.component == obj:
|
|
84
|
+
return perm.write
|
|
85
85
|
return False
|
|
Binary file
|
simo/core/utils/json.py
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
|
|
2
2
|
def restore_json(data):
|
|
3
|
+
clean_data = {}
|
|
3
4
|
for key, val in data.items():
|
|
4
5
|
if not isinstance(val, str):
|
|
6
|
+
clean_data[key] = val
|
|
5
7
|
continue
|
|
6
8
|
try:
|
|
7
|
-
|
|
9
|
+
clean_data[key] = int(val)
|
|
8
10
|
continue
|
|
9
11
|
except:
|
|
10
12
|
pass
|
|
11
13
|
try:
|
|
12
|
-
|
|
14
|
+
clean_data[key] = float(val)
|
|
13
15
|
continue
|
|
14
16
|
except:
|
|
15
17
|
pass
|
|
16
18
|
if val.lower() == 'true':
|
|
17
|
-
|
|
19
|
+
clean_data[key] = True
|
|
18
20
|
elif val.lower() == 'false':
|
|
19
|
-
|
|
20
|
-
return
|
|
21
|
+
clean_data[key] = False
|
|
22
|
+
return clean_data
|
|
Binary file
|
simo/fleet/forms.py
CHANGED
|
@@ -159,9 +159,9 @@ class ColonelComponentForm(BaseComponentForm):
|
|
|
159
159
|
if 'controls' in self.cleaned_data:
|
|
160
160
|
del self.cleaned_data['controls']
|
|
161
161
|
|
|
162
|
-
def save(self, commit=True):
|
|
162
|
+
def save(self, commit=True, update_colonel=True):
|
|
163
163
|
obj = super().save(commit)
|
|
164
|
-
if commit and 'colonel' in self.cleaned_data:
|
|
164
|
+
if commit and 'colonel' in self.cleaned_data and update_colonel:
|
|
165
165
|
self.cleaned_data['colonel'].components.add(obj)
|
|
166
166
|
self.cleaned_data['colonel'].rebuild_occupied_pins()
|
|
167
167
|
self.cleaned_data['colonel'].save()
|
|
@@ -649,7 +649,7 @@ class ColonelPWMOutputConfigForm(ColonelComponentForm):
|
|
|
649
649
|
help_text="Minumum PWM signal output duty (0 - 1023)"
|
|
650
650
|
)
|
|
651
651
|
duty_max = forms.IntegerField(
|
|
652
|
-
min_value=0, max_value=1023, required=True, initial=
|
|
652
|
+
min_value=0, max_value=1023, required=True, initial=900,
|
|
653
653
|
help_text="Maximum PWM signal output duty (0 - 1023)"
|
|
654
654
|
)
|
|
655
655
|
turn_on_time = forms.IntegerField(
|
|
@@ -692,7 +692,8 @@ class ColonelPWMOutputConfigForm(ColonelComponentForm):
|
|
|
692
692
|
|
|
693
693
|
def __init__(self, *args, **kwargs):
|
|
694
694
|
super().__init__(*args, **kwargs)
|
|
695
|
-
|
|
695
|
+
if 'value_units' in self.fields:
|
|
696
|
+
self.fields['value_units'].initial = self.controller.default_value_units
|
|
696
697
|
self.basic_fields.extend(
|
|
697
698
|
['value_units', 'turn_on_time', 'turn_off_time', 'skew']
|
|
698
699
|
)
|
|
@@ -723,9 +724,29 @@ class ColonelPWMOutputConfigForm(ColonelComponentForm):
|
|
|
723
724
|
def save(self, commit=True):
|
|
724
725
|
if 'output_pin' in self.cleaned_data:
|
|
725
726
|
self.instance.config['output_pin_no'] = self.cleaned_data['output_pin'].no
|
|
726
|
-
|
|
727
|
+
|
|
728
|
+
update_colonel = False
|
|
729
|
+
if not self.instance.pk:
|
|
730
|
+
update_colonel = True
|
|
731
|
+
elif 'output_pin' in self.changed_data:
|
|
732
|
+
update_colonel = True
|
|
733
|
+
elif 'slaves' in self.changed_data:
|
|
734
|
+
update_colonel = True
|
|
735
|
+
if not update_colonel:
|
|
736
|
+
old = Component.objects.get(id=self.instance.id)
|
|
737
|
+
if old.config.get('controls') != self.cleaned_data.get('controls'):
|
|
738
|
+
update_colonel = True
|
|
739
|
+
|
|
740
|
+
obj = super().save(commit=commit, update_colonel=update_colonel)
|
|
727
741
|
if commit and 'slaves' in self.cleaned_data:
|
|
728
742
|
obj.slaves.set(self.cleaned_data['slaves'])
|
|
743
|
+
if not update_colonel:
|
|
744
|
+
GatewayObjectCommand(
|
|
745
|
+
obj.gateway, self.cleaned_data['colonel'], id=obj.id,
|
|
746
|
+
command='call', method='update_config', args=[
|
|
747
|
+
obj.controller._get_colonel_config()
|
|
748
|
+
]
|
|
749
|
+
).publish()
|
|
729
750
|
return obj
|
|
730
751
|
|
|
731
752
|
|
|
@@ -1122,8 +1143,9 @@ class TTLockConfigForm(ColonelComponentForm):
|
|
|
1122
1143
|
return self.cleaned_data
|
|
1123
1144
|
|
|
1124
1145
|
def save(self, commit=True):
|
|
1125
|
-
# TODO: after inclusion it was not assigned to proper colonel!
|
|
1126
1146
|
obj = super(ColonelComponentForm, self).save(commit)
|
|
1147
|
+
if commit:
|
|
1148
|
+
self.cleaned_data['colonel'].components.add(obj)
|
|
1127
1149
|
if commit and 'door_sensor' in self.cleaned_data:
|
|
1128
1150
|
GatewayObjectCommand(
|
|
1129
1151
|
self.instance.gateway, self.cleaned_data['door_sensor'],
|
|
Binary file
|
simo/generic/controllers.py
CHANGED
|
@@ -108,7 +108,7 @@ class PresenceLighting(Script):
|
|
|
108
108
|
# script specific variables
|
|
109
109
|
sensors = {}
|
|
110
110
|
light_org_values = {}
|
|
111
|
-
is_on =
|
|
111
|
+
is_on = False
|
|
112
112
|
turn_off_task = None
|
|
113
113
|
|
|
114
114
|
def _run(self):
|
|
@@ -130,7 +130,7 @@ class PresenceLighting(Script):
|
|
|
130
130
|
self.sensors[sensor.id] = sensor
|
|
131
131
|
|
|
132
132
|
presence_values = [s.value for id, s in self.sensors.items()]
|
|
133
|
-
if self.component.config.get('act_on', 0):
|
|
133
|
+
if self.component.config.get('act_on', 0) == 0:
|
|
134
134
|
must_on = any(presence_values)
|
|
135
135
|
else:
|
|
136
136
|
must_on = all(presence_values)
|
|
@@ -173,7 +173,7 @@ class PresenceLighting(Script):
|
|
|
173
173
|
comp.controller.send(self.component.config['on_value'])
|
|
174
174
|
return
|
|
175
175
|
|
|
176
|
-
if self.is_on
|
|
176
|
+
if self.is_on:
|
|
177
177
|
if not additional_conditions_met:
|
|
178
178
|
return self._turn_it_off()
|
|
179
179
|
if not any(presence_values):
|
|
Binary file
|
simo/users/models.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
import requests
|
|
3
3
|
import subprocess
|
|
4
|
+
from django.utils.functional import cached_property
|
|
4
5
|
from django.urls import reverse
|
|
5
6
|
from django.utils.translation import gettext_lazy as _
|
|
6
7
|
from django.db import models
|
|
@@ -165,6 +166,7 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
165
166
|
|
|
166
167
|
_instances = None
|
|
167
168
|
_instance = None
|
|
169
|
+
_instance_roles = {}
|
|
168
170
|
|
|
169
171
|
class Meta:
|
|
170
172
|
verbose_name = _('user')
|
|
@@ -215,7 +217,13 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
215
217
|
return self.is_active and self.ssh_key and self.is_master
|
|
216
218
|
|
|
217
219
|
def get_role(self, instance):
|
|
218
|
-
|
|
220
|
+
if instance.id not in self._instance_roles:
|
|
221
|
+
self._instance_roles[instance.id] = self.roles.filter(
|
|
222
|
+
instance=instance
|
|
223
|
+
).prefetch_related(
|
|
224
|
+
'component_permissions', 'component_permissions__component'
|
|
225
|
+
).first()
|
|
226
|
+
return self._instance_roles[instance.id]
|
|
219
227
|
|
|
220
228
|
def set_instance(self, instance):
|
|
221
229
|
self._instance = instance
|
|
@@ -26,7 +26,7 @@ simo/_hub_template/hub/supervisor.conf,sha256=IY3fdK0fDD2eAothB0n54xhjQj8LYoXIR9
|
|
|
26
26
|
simo/_hub_template/hub/urls.py,sha256=Ydm-1BkYAzWeEF-MKSDIFf-7aE4qNLPm48-SA51XgJQ,25
|
|
27
27
|
simo/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
28
|
simo/core/admin.py,sha256=xVMFl1MvQ-THwrnAVSvIkhbfbIIc4r_dDGEkpkRoSBk,17751
|
|
29
|
-
simo/core/api.py,sha256=
|
|
29
|
+
simo/core/api.py,sha256=xRsKR_ZiQOVDhBHnGnraDrhmWWI3wX3el7q8XmNKshc,25063
|
|
30
30
|
simo/core/api_auth.py,sha256=_3hG4e1eLKrcRnSAOB_xTL6cwtOJ2_7JS7GZU_iqTgA,1251
|
|
31
31
|
simo/core/api_meta.py,sha256=ySmmhtVrWatI3yqnYPuP5ipapmJfyfEbl32w-7_W5O4,3551
|
|
32
32
|
simo/core/app_widgets.py,sha256=EEQOto3fGR0syDqpJE38tQrx8DoTTyg26nF5kYzHY38,2018
|
|
@@ -44,7 +44,7 @@ simo/core/loggers.py,sha256=EBdq23gTQScVfQVH-xeP90-wII2DQFDjoROAW6ggUP4,1645
|
|
|
44
44
|
simo/core/managers.py,sha256=Qdg2-Qh4dLbW0A5Dmtnpct6CUhEuuvdbIskBijQxopU,2360
|
|
45
45
|
simo/core/middleware.py,sha256=pO52hQOJV_JRmNyUe7zfufSnJFlRITOWX6jwkoPWJhk,2052
|
|
46
46
|
simo/core/models.py,sha256=W5rShDy8l6GQzTRFiBZFAuibe_fg_LRwSNk973mv_m8,20134
|
|
47
|
-
simo/core/permissions.py,sha256=
|
|
47
|
+
simo/core/permissions.py,sha256=3YoYMyfGnfCtqe39L8FW2lb6M7VHkQpYk1_j8gC8tD0,2726
|
|
48
48
|
simo/core/routing.py,sha256=X1_IHxyA-_Q7hw1udDoviVP4_FSBDl8GYETTC2zWTbY,499
|
|
49
49
|
simo/core/serializers.py,sha256=7iE5_ke56GpcQ_cV6LgQIsfG3pAQXPc3t4e60HwogUs,18277
|
|
50
50
|
simo/core/signal_receivers.py,sha256=C6Jk7wVEtyo4hwcrU7L0ijtpK0wce2MNwpyBgSfSJ-U,5467
|
|
@@ -57,7 +57,7 @@ simo/core/views.py,sha256=hlAKpAbCbqI3a-uL5tDp532T2oLFiF0MBzKUJ_SNzo0,5833
|
|
|
57
57
|
simo/core/widgets.py,sha256=J9e06C6I22F6xKic3VMgG7WeX07glAcl-4bF2Mg180A,2827
|
|
58
58
|
simo/core/__pycache__/__init__.cpython-38.pyc,sha256=y0IW37wBUIGa3Eh_ZG28pRqHKoLiPyTgUX2OnbkEPlc,158
|
|
59
59
|
simo/core/__pycache__/admin.cpython-38.pyc,sha256=1OisxqtyWMbzpgeeu5vtBW3gp3Nts4Ei4ff1P-SPpq4,13545
|
|
60
|
-
simo/core/__pycache__/api.cpython-38.pyc,sha256=
|
|
60
|
+
simo/core/__pycache__/api.cpython-38.pyc,sha256=DE7_vjXbIZk3nV2MlLcze6dj_l-iUvHnuwGWDL5mCAM,19903
|
|
61
61
|
simo/core/__pycache__/api_auth.cpython-38.pyc,sha256=5UTBr3rDMERAfc0OuOVDwGeQkt6Q7GLBtZJAMBse1sg,1712
|
|
62
62
|
simo/core/__pycache__/api_meta.cpython-38.pyc,sha256=94T3_rybn2T1_bkaDQnQRyjy21LBaGOnz-mmkJ6T0N8,2840
|
|
63
63
|
simo/core/__pycache__/app_widgets.cpython-38.pyc,sha256=9Es2wZNduzUJv-jZ_HX0-L3vqwpXWBbseEwoC5K6b-w,3465
|
|
@@ -75,7 +75,7 @@ simo/core/__pycache__/loggers.cpython-38.pyc,sha256=Z-cdQnC6XlIonPV4Sl4E52tP4NME
|
|
|
75
75
|
simo/core/__pycache__/managers.cpython-38.pyc,sha256=ObkzRjSOs2UQmjwFWDvZHreNzc_P5k7dVA_f7L7S7Q4,2529
|
|
76
76
|
simo/core/__pycache__/middleware.cpython-38.pyc,sha256=ESR5JPtITo9flczO0672sfzYUxrc_cQU0e0w5DFL-60,2038
|
|
77
77
|
simo/core/__pycache__/models.cpython-38.pyc,sha256=UNX6Btm5ZnpLzSCWgevQnSYzAyDWttA2Ivy7CGPu8DU,17288
|
|
78
|
-
simo/core/__pycache__/permissions.cpython-38.pyc,sha256=
|
|
78
|
+
simo/core/__pycache__/permissions.cpython-38.pyc,sha256=04mfHwG2sjgTnCgRXqku7rlLDsDWHb3nkoqsNE-PN8E,2819
|
|
79
79
|
simo/core/__pycache__/routing.cpython-38.pyc,sha256=3T3FPJ8Cn99xZCGvMyg2xjl7al-Shm9CelbSpkJtNP8,599
|
|
80
80
|
simo/core/__pycache__/serializers.cpython-38.pyc,sha256=8QlBSWOtgmhTpFbMMgGoXtMoTMETSnpA37z2LBgRzNQ,17178
|
|
81
81
|
simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=UcKT8RK_14CI-JEWfplnIxskmWec_w5-gqKUXITLDA4,4323
|
|
@@ -10151,7 +10151,7 @@ simo/core/utils/form_fields.py,sha256=UOzYdPd71qgCw1H3qH01u85YjrOlETPJAHOJrZKhyD
|
|
|
10151
10151
|
simo/core/utils/form_widgets.py,sha256=Zxn9jJqPle9Q_BKNJnyTDn7MosYwNp1TFu5LoKs0bfc,408
|
|
10152
10152
|
simo/core/utils/formsets.py,sha256=ZpExLsnDihnrlsPfYQrwy5qx54IowEmL8hnlO7KlyqE,6924
|
|
10153
10153
|
simo/core/utils/helpers.py,sha256=TOWy3slspaEYEhe9zDcb0RgzHUYslF6LZDlrWPGSqUI,3791
|
|
10154
|
-
simo/core/utils/json.py,sha256=
|
|
10154
|
+
simo/core/utils/json.py,sha256=eJtr3hSMh0hI10BTfzeUSmhbe_d8wO9hOh5HpLEwqh0,548
|
|
10155
10155
|
simo/core/utils/logs.py,sha256=Zn9JQxqCH9Odx2J1BWT84nFCfkJ4Z4p5X8psdll7hNc,2366
|
|
10156
10156
|
simo/core/utils/mixins.py,sha256=X6kUPKAi_F-uw7tgm8LEaYalBXpvDA-yrLNFCGr2rks,259
|
|
10157
10157
|
simo/core/utils/model_helpers.py,sha256=3IzJeOvBoYdUJVXCJkY20npOZXPjNPAiEFvuT0OPhwA,884
|
|
@@ -10169,7 +10169,7 @@ simo/core/utils/__pycache__/form_fields.cpython-38.pyc,sha256=nBk6k9aj6BpWwdkpce
|
|
|
10169
10169
|
simo/core/utils/__pycache__/form_widgets.cpython-38.pyc,sha256=MYAYEq0I4P0WErG9FamTJYWue7-cPartAWbFAiSSg5w,908
|
|
10170
10170
|
simo/core/utils/__pycache__/formsets.cpython-38.pyc,sha256=vwlFLdQ2bpZgXNUpekhtapwfouNPCIRo-SMrgOdAIMA,4813
|
|
10171
10171
|
simo/core/utils/__pycache__/helpers.cpython-38.pyc,sha256=jTGaN7kSJRwouP0EuYSaiJeMylo_RzJwSm-DKRwceHA,4291
|
|
10172
|
-
simo/core/utils/__pycache__/json.cpython-38.pyc,sha256=
|
|
10172
|
+
simo/core/utils/__pycache__/json.cpython-38.pyc,sha256=TKc88VpPKgimeaozhgx34WWJ1mwTWFWN6B9-VAH8qT0,532
|
|
10173
10173
|
simo/core/utils/__pycache__/logs.cpython-38.pyc,sha256=BVVeQoOhfRHm3SHnCoE1d5G84kTpJZFmr_btc3jDYTU,2156
|
|
10174
10174
|
simo/core/utils/__pycache__/mixins.cpython-38.pyc,sha256=8Js2T7jVQ7hugRUIRu3rdxW86dJW4KeUUWqKqSkIGb0,615
|
|
10175
10175
|
simo/core/utils/__pycache__/model_helpers.cpython-38.pyc,sha256=QzO0rh1NuQePHDCSLmUCRrAZEnV4o8jh9CF_jp7IoUo,1351
|
|
@@ -10185,7 +10185,7 @@ simo/fleet/auto_urls.py,sha256=X04oKJWA48wFW5iXg3PPROY2KDdHn_a99orQSE28QC4,518
|
|
|
10185
10185
|
simo/fleet/base_types.py,sha256=wL9RVkHr0gA7HI1wZq0pruGEIgvQqpfnCL4cC3ywsvw,102
|
|
10186
10186
|
simo/fleet/ble.py,sha256=eHA_9ABjbmH1vUVCv9hiPXQL2GZZSEVwfO0xyI1S0nI,1081
|
|
10187
10187
|
simo/fleet/controllers.py,sha256=WCqOA5Qrn9RavdfcB8X06WwaTE-9TGUprTQHZ8V8-nA,23172
|
|
10188
|
-
simo/fleet/forms.py,sha256=
|
|
10188
|
+
simo/fleet/forms.py,sha256=dkp7NyP0In4_48k9fuyASLypTiNVwQVZCTJWxv2blFE,49763
|
|
10189
10189
|
simo/fleet/gateways.py,sha256=KV5i5fxXIrlK-k6zyEkk83x11GJt-ELQ0npb4Ac83cM,3693
|
|
10190
10190
|
simo/fleet/managers.py,sha256=XOpDOA9L-f_550TNSyXnJbun2EmtGz1TenVTMlUSb8E,807
|
|
10191
10191
|
simo/fleet/models.py,sha256=bD5AebGFCAYGXPYhTA2nK1X9KpMG4WK4zFk9OzBDoHI,15301
|
|
@@ -10202,7 +10202,7 @@ simo/fleet/__pycache__/auto_urls.cpython-38.pyc,sha256=SqyTuaz_kEBvx-bL46SclsZEE
|
|
|
10202
10202
|
simo/fleet/__pycache__/base_types.cpython-38.pyc,sha256=deyPwjpT6xZiFxBGFnj5b7R-lbdOTh2krgpJhrcGVhc,274
|
|
10203
10203
|
simo/fleet/__pycache__/ble.cpython-38.pyc,sha256=Nrof9w7cm4OlpFWHeVnmvvanh2_oF9oQ3TknJiV93-0,1267
|
|
10204
10204
|
simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=TN3yvfZJgS7FwzgP4S1aDoaOqxbKj2oXfXOxqbkIXJU,19856
|
|
10205
|
-
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=
|
|
10205
|
+
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=W-Zwcv-63_a_vhWdl8IHN72maeR9R7zSYluvcDj1-HU,34393
|
|
10206
10206
|
simo/fleet/__pycache__/gateways.cpython-38.pyc,sha256=YAcgTOqJbtjGI03lvEcU6keFfrwAHkObVmErYzfRvjk,3569
|
|
10207
10207
|
simo/fleet/__pycache__/managers.cpython-38.pyc,sha256=8uz-xpUiqbGDgXIZ_XRZtFb-Tju6NGxflGg-Ee4Yo6k,1310
|
|
10208
10208
|
simo/fleet/__pycache__/models.cpython-38.pyc,sha256=LjcLsSytCQd17xhH-5RrzvnZ6JYI1ilvNdCY2iUCsGc,12935
|
|
@@ -10287,7 +10287,7 @@ simo/fleet/migrations/__pycache__/__init__.cpython-38.pyc,sha256=5k1KW0jeSDzw6Rn
|
|
|
10287
10287
|
simo/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10288
10288
|
simo/generic/app_widgets.py,sha256=E_pnpA1hxMIhenRCrHoQ5cik06jm2BAHCkl_eo-OudU,1264
|
|
10289
10289
|
simo/generic/base_types.py,sha256=djymox_boXTHX1BTTCLXrCH7ED-uAsV_idhaDOc3OLI,409
|
|
10290
|
-
simo/generic/controllers.py,sha256=
|
|
10290
|
+
simo/generic/controllers.py,sha256=0XwPUlhjPKLKGhcZ5cqnw9BWGLA8xHfvhfwLhw1Kip0,56020
|
|
10291
10291
|
simo/generic/forms.py,sha256=sxNl_iAgZJ5cCDcwgK0m4S7fs-O8RJutoiFeC1w_DlQ,29522
|
|
10292
10292
|
simo/generic/gateways.py,sha256=dZQPzO23UbW9q4dEB9fqgt9Meg8mX94euXnRvfwxusY,18004
|
|
10293
10293
|
simo/generic/models.py,sha256=92TACMhJHadAg0TT9GnARO_R3_Sl6i-GGjhG_x7YdFI,7391
|
|
@@ -10296,7 +10296,7 @@ simo/generic/socket_consumers.py,sha256=NfTQGYtVAc864IoogZRxf_0xpDPM0eMCWn0SlKA5
|
|
|
10296
10296
|
simo/generic/__pycache__/__init__.cpython-38.pyc,sha256=mLu54WS9KIl-pHwVCBKpsDFIlOqml--JsOVzAUHg6cU,161
|
|
10297
10297
|
simo/generic/__pycache__/app_widgets.cpython-38.pyc,sha256=0IoKRG9n1tkNRRkrqAeOQwWBPd_33u98JBcVtMVVCio,2374
|
|
10298
10298
|
simo/generic/__pycache__/base_types.cpython-38.pyc,sha256=ptw6axyAqemZA35oa6vzr7EihzvbhW9w7Y-G6kfDedU,555
|
|
10299
|
-
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=
|
|
10299
|
+
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=2lEaWu6jNLSQtln6a0LzS8_pZWeCTP6gR0sW6D-Yv7k,35581
|
|
10300
10300
|
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=g4N2Zcarce0dMovJZt3TQHAhKWA1W3k2nurBg1NqHaY,21297
|
|
10301
10301
|
simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=B35GiB4wBRzvd91ugL89Z3vYADiLiERP0T-21CnLqKc,13324
|
|
10302
10302
|
simo/generic/__pycache__/models.cpython-38.pyc,sha256=PzlZsM1jxo3FVb7QDm3bny8UFwTsGrMQe4mj4tJ06eQ,5675
|
|
@@ -10379,7 +10379,7 @@ simo/users/auth_backends.py,sha256=I5pnaTa20-Lxfw_dFG8471xDITb0_fQl1PVhJalp5vU,3
|
|
|
10379
10379
|
simo/users/auto_urls.py,sha256=lcJvteBsbHQMJieZpDz-63tDYejLApqsW3CUnDakd7k,272
|
|
10380
10380
|
simo/users/dynamic_settings.py,sha256=sEIsi4yJw3kH46Jq_aOkSuK7QTfQACGUE-lkyBogCaM,570
|
|
10381
10381
|
simo/users/middleware.py,sha256=GMCrnWSc_2qCleyQIkfQGdL-pU-UTEcSg1wPvIKZ9uk,1210
|
|
10382
|
-
simo/users/models.py,sha256=
|
|
10382
|
+
simo/users/models.py,sha256=CcdxpCCJZXHHaPonNdHdfIwcdXREmOZq2CBYiHx6pFg,19251
|
|
10383
10383
|
simo/users/permissions.py,sha256=IwtYS8yQdupWbYKR9VimSRDV3qCJ2jXP57Lyjpb2EQM,242
|
|
10384
10384
|
simo/users/serializers.py,sha256=DwbFGi4WeTYXOSnfrBfd5rC5OGtevYurn27EaTVa1EU,2553
|
|
10385
10385
|
simo/users/sso_urls.py,sha256=gQOaPvGMYFD0NCVSwyoWO-mTEHe5j9sbzV_RK7kdvp0,251
|
|
@@ -10394,7 +10394,7 @@ simo/users/__pycache__/auth_backends.cpython-38.pyc,sha256=MuOieBIXt6lrDx83-UQtd
|
|
|
10394
10394
|
simo/users/__pycache__/auto_urls.cpython-38.pyc,sha256=K-3sz2h-cEitoflSmZk1t0eUg5mQMMGLNZFREVwG7_o,430
|
|
10395
10395
|
simo/users/__pycache__/dynamic_settings.cpython-38.pyc,sha256=6F8JBjZkHykySnmZjNEzjS0ijbmPdcp9yUAZ5kqq_Fo,864
|
|
10396
10396
|
simo/users/__pycache__/middleware.cpython-38.pyc,sha256=Tj4nVEAvxEW3xA63fBRiJWRJpz_M848ZOqbHioc_IPE,1149
|
|
10397
|
-
simo/users/__pycache__/models.cpython-38.pyc,sha256=
|
|
10397
|
+
simo/users/__pycache__/models.cpython-38.pyc,sha256=ljV7uz49n2MhMpdeZYgA-DwFxx_4y6RvjdprjrIx1u8,17769
|
|
10398
10398
|
simo/users/__pycache__/permissions.cpython-38.pyc,sha256=ez5NxoL_JUeeH6GsKhvFreuA3FCBgGf9floSypdXUtM,633
|
|
10399
10399
|
simo/users/__pycache__/serializers.cpython-38.pyc,sha256=tZzdmCdSnqekAgRl0kyq-msm7QfUA0J_IipfrysAMRM,3477
|
|
10400
10400
|
simo/users/__pycache__/sso_urls.cpython-38.pyc,sha256=uAwDozpOmrhUald-8tOHANILXkH7-TI8fNYXOtPkSY8,402
|
|
@@ -10468,8 +10468,8 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
10468
10468
|
simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10469
10469
|
simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10470
10470
|
simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10471
|
-
simo-2.0.
|
|
10472
|
-
simo-2.0.
|
|
10473
|
-
simo-2.0.
|
|
10474
|
-
simo-2.0.
|
|
10475
|
-
simo-2.0.
|
|
10471
|
+
simo-2.0.41.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
|
|
10472
|
+
simo-2.0.41.dist-info/METADATA,sha256=vfjuW3h02mTkFFo5QdAZOytvcNrA2fRUA3ZI9aaHRu0,1730
|
|
10473
|
+
simo-2.0.41.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
10474
|
+
simo-2.0.41.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
|
|
10475
|
+
simo-2.0.41.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|