simo 2.5.41__py3-none-any.whl → 2.5.42__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__/tasks.cpython-38.pyc +0 -0
- simo/core/api.py +8 -1
- simo/core/management/_hub_template/hub/supervisor.conf +0 -1
- simo/fleet/__pycache__/controllers.cpython-38.pyc +0 -0
- simo/fleet/__pycache__/forms.cpython-38.pyc +0 -0
- simo/fleet/controllers.py +1 -0
- simo/fleet/forms.py +22 -3
- simo/generic/__pycache__/controllers.cpython-38.pyc +0 -0
- simo/generic/__pycache__/forms.cpython-38.pyc +0 -0
- simo/generic/controllers.py +19 -17
- simo/generic/forms.py +17 -6
- simo/generic/migrations/0002_auto_20241126_0726.py +34 -0
- simo/generic/migrations/__pycache__/0002_auto_20241126_0726.cpython-38.pyc +0 -0
- simo/generic/scripting/__pycache__/helpers.cpython-38.pyc +0 -0
- simo/notifications/__pycache__/api.cpython-38.pyc +0 -0
- simo/notifications/api.py +1 -1
- {simo-2.5.41.dist-info → simo-2.5.42.dist-info}/METADATA +1 -1
- {simo-2.5.41.dist-info → simo-2.5.42.dist-info}/RECORD +23 -21
- {simo-2.5.41.dist-info → simo-2.5.42.dist-info}/LICENSE.md +0 -0
- {simo-2.5.41.dist-info → simo-2.5.42.dist-info}/WHEEL +0 -0
- {simo-2.5.41.dist-info → simo-2.5.42.dist-info}/entry_points.txt +0 -0
- {simo-2.5.41.dist-info → simo-2.5.42.dist-info}/top_level.txt +0 -0
|
Binary file
|
|
Binary file
|
simo/core/api.py
CHANGED
|
@@ -211,7 +211,14 @@ class ComponentViewSet(
|
|
|
211
211
|
return permissions
|
|
212
212
|
|
|
213
213
|
def get_queryset(self):
|
|
214
|
-
|
|
214
|
+
qs = get_components_queryset(self.instance, self.request.user)
|
|
215
|
+
if self.request.GET.get('id'):
|
|
216
|
+
try:
|
|
217
|
+
ids = [int(id) for id in self.request.GET.get('id').split(',')]
|
|
218
|
+
return qs.filter(id__in=ids)
|
|
219
|
+
except:
|
|
220
|
+
return qs
|
|
221
|
+
return qs
|
|
215
222
|
|
|
216
223
|
def get_view_name(self):
|
|
217
224
|
singular = "Component"
|
|
Binary file
|
|
Binary file
|
simo/fleet/controllers.py
CHANGED
simo/fleet/forms.py
CHANGED
|
@@ -1459,6 +1459,18 @@ class TTLockConfigForm(ColonelComponentForm):
|
|
|
1459
1459
|
), required=False,
|
|
1460
1460
|
help_text="Quickens up lock status reporting on open/close if provided."
|
|
1461
1461
|
)
|
|
1462
|
+
auto_lock = forms.IntegerField(
|
|
1463
|
+
min_value=0, max_value=60, required=False,
|
|
1464
|
+
help_text="Lock the lock after given amount of seconds."
|
|
1465
|
+
)
|
|
1466
|
+
inverse = forms.BooleanField(
|
|
1467
|
+
required=False,
|
|
1468
|
+
help_text="Inverse operation (if supported by the lock)."
|
|
1469
|
+
)
|
|
1470
|
+
|
|
1471
|
+
def __init__(self, *args, **kwargs):
|
|
1472
|
+
super().__init__(*args, **kwargs)
|
|
1473
|
+
self.basic_fields.extend(['auto_lock', 'inverse'])
|
|
1462
1474
|
|
|
1463
1475
|
def clean(self):
|
|
1464
1476
|
if not self.instance or not self.instance.pk:
|
|
@@ -1475,10 +1487,17 @@ class TTLockConfigForm(ColonelComponentForm):
|
|
|
1475
1487
|
|
|
1476
1488
|
def save(self, commit=True):
|
|
1477
1489
|
obj = super(ColonelComponentForm, self).save(commit)
|
|
1478
|
-
if commit
|
|
1490
|
+
if commit:
|
|
1491
|
+
if 'door_sensor' in self.cleaned_data:
|
|
1492
|
+
GatewayObjectCommand(
|
|
1493
|
+
self.instance.gateway, self.cleaned_data['door_sensor'],
|
|
1494
|
+
command='watch_lock_sensor'
|
|
1495
|
+
).publish()
|
|
1479
1496
|
GatewayObjectCommand(
|
|
1480
|
-
|
|
1481
|
-
command='
|
|
1497
|
+
obj.gateway, self.cleaned_data['colonel'], id=obj.id,
|
|
1498
|
+
command='call', method='update_config', args=[
|
|
1499
|
+
obj.controller._get_colonel_config()
|
|
1500
|
+
]
|
|
1482
1501
|
).publish()
|
|
1483
1502
|
return obj
|
|
1484
1503
|
|
|
Binary file
|
|
Binary file
|
simo/generic/controllers.py
CHANGED
|
@@ -169,12 +169,13 @@ class PresenceLighting(Script):
|
|
|
169
169
|
sensor.on_change(self._on_sensor)
|
|
170
170
|
self.sensors[id] = sensor
|
|
171
171
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
172
|
+
for light_params in self.component.config['lights']:
|
|
173
|
+
light = Component.objects.filter(
|
|
174
|
+
id=light_params.get('light')
|
|
175
|
+
).first()
|
|
176
|
+
if not light or not light.controller:
|
|
177
|
+
continue
|
|
178
|
+
light.on_change(self._on_light_change)
|
|
178
179
|
|
|
179
180
|
for condition in self.component.config.get('conditions', []):
|
|
180
181
|
comp = Component.objects.filter(
|
|
@@ -202,12 +203,10 @@ class PresenceLighting(Script):
|
|
|
202
203
|
condition['component'] = condition_comp
|
|
203
204
|
self._regulate()
|
|
204
205
|
|
|
205
|
-
|
|
206
206
|
def _on_light_change(self, light):
|
|
207
207
|
if self.is_on:
|
|
208
208
|
self.light_org_values[light.id] = light.value
|
|
209
209
|
|
|
210
|
-
|
|
211
210
|
def _regulate(self, on_val_change=True):
|
|
212
211
|
presence_values = [s.value for id, s in self.sensors.items()]
|
|
213
212
|
if self.component.config.get('act_on', 0) == 0:
|
|
@@ -250,12 +249,15 @@ class PresenceLighting(Script):
|
|
|
250
249
|
print("Turn the lights ON!")
|
|
251
250
|
self.is_on = True
|
|
252
251
|
self.light_org_values = {}
|
|
253
|
-
for
|
|
254
|
-
comp = Component.objects.filter(
|
|
252
|
+
for light_params in self.component.config['lights']:
|
|
253
|
+
comp = Component.objects.filter(
|
|
254
|
+
id=light_params.get('light')
|
|
255
|
+
).first()
|
|
255
256
|
if not comp or not comp.controller:
|
|
256
257
|
continue
|
|
257
258
|
self.light_org_values[comp.id] = comp.value
|
|
258
|
-
|
|
259
|
+
print(f"Send {light_params['on_value']} to {comp}!")
|
|
260
|
+
comp.controller.send(light_params['on_value'])
|
|
259
261
|
return
|
|
260
262
|
|
|
261
263
|
if self.is_on:
|
|
@@ -278,14 +280,14 @@ class PresenceLighting(Script):
|
|
|
278
280
|
print("Turn the lights OFF!")
|
|
279
281
|
self.is_on = False
|
|
280
282
|
self.last_presence = 0
|
|
281
|
-
for
|
|
282
|
-
comp = Component.objects.filter(
|
|
283
|
+
for light_params in self.component.config['lights']:
|
|
284
|
+
comp = Component.objects.filter(
|
|
285
|
+
id=light_params.get('light')
|
|
286
|
+
).first()
|
|
283
287
|
if not comp or not comp.controller:
|
|
284
288
|
continue
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
else:
|
|
288
|
-
comp.send(self.light_org_values.get(comp.id, 0))
|
|
289
|
+
print(f"Send {light_params['on_value']} to {comp}!")
|
|
290
|
+
comp.send(light_params.get('off_value', 0))
|
|
289
291
|
|
|
290
292
|
|
|
291
293
|
# TODO: Night lighting
|
simo/generic/forms.py
CHANGED
|
@@ -200,8 +200,8 @@ class ConditionForm(forms.Form):
|
|
|
200
200
|
return self.cleaned_data
|
|
201
201
|
|
|
202
202
|
|
|
203
|
-
class
|
|
204
|
-
|
|
203
|
+
class LightTurnOnForm(forms.Form):
|
|
204
|
+
light = Select2ModelChoiceField(
|
|
205
205
|
queryset=Component.objects.filter(
|
|
206
206
|
base_type__in=('switch', 'dimmer', 'rgbw-light', 'rgb-light')
|
|
207
207
|
),
|
|
@@ -212,17 +212,19 @@ class PresenceLightingConfigForm(BaseComponentForm):
|
|
|
212
212
|
'base_type'),
|
|
213
213
|
)
|
|
214
214
|
)
|
|
215
|
-
|
|
216
215
|
on_value = forms.IntegerField(
|
|
217
216
|
min_value=0, initial=100,
|
|
218
217
|
help_text="Value applicable for dimmers. "
|
|
219
|
-
"Switches will receive
|
|
218
|
+
"Switches will receive turn on command."
|
|
220
219
|
)
|
|
221
220
|
off_value = forms.TypedChoiceField(
|
|
222
221
|
coerce=int, initial=1, choices=(
|
|
223
|
-
(0, "0"), (1, "Original value before turning the
|
|
222
|
+
(0, "0"), (1, "Original value before turning the light on.")
|
|
224
223
|
)
|
|
225
224
|
)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
class PresenceLightingConfigForm(BaseComponentForm):
|
|
226
228
|
presence_sensors = Select2ModelMultipleChoiceField(
|
|
227
229
|
queryset=Component.objects.filter(
|
|
228
230
|
base_type__in=('binary-sensor', 'switch')
|
|
@@ -242,7 +244,8 @@ class PresenceLightingConfigForm(BaseComponentForm):
|
|
|
242
244
|
(0, '----'),
|
|
243
245
|
(1, "10 s"), (2, "20 s"), (3, "30 s"), (4, "40 s"), (5, "50 s"),
|
|
244
246
|
(6, "1 min"), (9, "1.5 min"), (12, "2 min"), (18, "3 min"),
|
|
245
|
-
(30, "5 min"), (60, "10 min"), (120, "20 min"),
|
|
247
|
+
(30, "5 min"), (60, "10 min"), (120, "20 min"), (180, "30 min"),
|
|
248
|
+
(3600, "1 h")
|
|
246
249
|
),
|
|
247
250
|
help_text="Hold off time after last presence detector is deactivated."
|
|
248
251
|
)
|
|
@@ -251,6 +254,14 @@ class PresenceLightingConfigForm(BaseComponentForm):
|
|
|
251
254
|
ConditionForm, can_delete=True, can_order=True, extra=0
|
|
252
255
|
), label='Additional conditions'
|
|
253
256
|
)
|
|
257
|
+
|
|
258
|
+
lights = FormsetField(
|
|
259
|
+
formset_factory(
|
|
260
|
+
LightTurnOnForm, can_delete=True, can_order=True, extra=0
|
|
261
|
+
), label='Lights'
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
|
|
254
265
|
autostart = forms.BooleanField(
|
|
255
266
|
initial=True, required=False,
|
|
256
267
|
help_text="Start automatically on system boot."
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Generated by Django 4.2.10 on 2024-11-26 07:26
|
|
2
|
+
from django.db import migrations
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def forwards_func(apps, schema_editor):
|
|
6
|
+
Component = apps.get_model("core", "Component")
|
|
7
|
+
|
|
8
|
+
for script in Component.objects.filter(
|
|
9
|
+
controller_uid='simo.generic.controllers.PresenceLighting'
|
|
10
|
+
):
|
|
11
|
+
lights = []
|
|
12
|
+
on_value = script.config.pop('on_value', 100)
|
|
13
|
+
off_value = script.config.get('off_value', 0)
|
|
14
|
+
for light_id in script.config.get('lights', []):
|
|
15
|
+
lights.append({
|
|
16
|
+
'light': light_id, 'on_value': on_value, 'off_value': off_value
|
|
17
|
+
})
|
|
18
|
+
script.config['lights'] = lights
|
|
19
|
+
script.save()
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def reverse_func(apps, schema_editor):
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class Migration(migrations.Migration):
|
|
27
|
+
|
|
28
|
+
dependencies = [
|
|
29
|
+
('generic', '0001_initial'),
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
operations = [
|
|
33
|
+
migrations.RunPython(forwards_func, reverse_func, elidable=True),
|
|
34
|
+
]
|
|
Binary file
|
|
Binary file
|
simo/notifications/api.py
CHANGED
|
@@ -34,7 +34,7 @@ class NotificationsViewSet(
|
|
|
34
34
|
archived = bool(int(self.request.query_params['archived']))
|
|
35
35
|
except:
|
|
36
36
|
archived = False
|
|
37
|
-
qs =
|
|
37
|
+
qs = qs.objects.filter(
|
|
38
38
|
user_notifications__archived__isnull=not archived,
|
|
39
39
|
user_notifications__user=self.request.user
|
|
40
40
|
)
|
|
@@ -33,7 +33,7 @@ simo/backups/migrations/__pycache__/0004_alter_backup_options_alter_backuplog_op
|
|
|
33
33
|
simo/backups/migrations/__pycache__/__init__.cpython-38.pyc,sha256=Lz1fs6V05h2AoxTOLNye0do9bEMnyuaXB_hHOjG5-HU,172
|
|
34
34
|
simo/core/__init__.py,sha256=_s2TjJfQImsMrTIxqLAx9AZie1Ojmm6sCHASdl3WLGU,50
|
|
35
35
|
simo/core/admin.py,sha256=T-NjMq1OxtCt-LjWL-YuuGtAi4JcvtjWhcGrLb8G5D4,18434
|
|
36
|
-
simo/core/api.py,sha256=
|
|
36
|
+
simo/core/api.py,sha256=HWyzmFGbULndSaW3sdrQa_kw2zfjd7yzfYxErAij7cY,29070
|
|
37
37
|
simo/core/api_auth.py,sha256=vCxvczA8aWNcW0VyKs5WlC_ytlqeGP_H_hkKUNVkCwM,1247
|
|
38
38
|
simo/core/api_meta.py,sha256=EaiY-dCADP__9MvLpoHvhjytFT92IrxPZDv95xgqasU,4955
|
|
39
39
|
simo/core/app_widgets.py,sha256=VxZzapuc-a29wBH7JzpvNF2SK1ECrgNUySId5ke1ffc,2509
|
|
@@ -66,7 +66,7 @@ simo/core/views.py,sha256=yx9I0byeVUa-LAOnklpWIYwpNNOf5m9fyjKBvj4YCh4,2475
|
|
|
66
66
|
simo/core/widgets.py,sha256=J9e06C6I22F6xKic3VMgG7WeX07glAcl-4bF2Mg180A,2827
|
|
67
67
|
simo/core/__pycache__/__init__.cpython-38.pyc,sha256=ZJFM_XN0RmJMULQulgA_wFiOnEtsMoedcOWnXjH-Y8o,208
|
|
68
68
|
simo/core/__pycache__/admin.cpython-38.pyc,sha256=mXU-u9Bl5RCa0K4Y9wJAkYns33XCByME3sb_FsMC2DI,14090
|
|
69
|
-
simo/core/__pycache__/api.cpython-38.pyc,sha256=
|
|
69
|
+
simo/core/__pycache__/api.cpython-38.pyc,sha256=0kALbhViLcVqxcxzc_mmT9TzZcONc0ZNzZCWscbxjWE,22459
|
|
70
70
|
simo/core/__pycache__/api_auth.cpython-38.pyc,sha256=mi3mu5qEKio_PvfQEvr3Q6AhdPLAHxzxAxrMbAz_pKU,1712
|
|
71
71
|
simo/core/__pycache__/api_meta.cpython-38.pyc,sha256=VYx5ZeDyNBI4B_CBEIhV5B3GnLsMOx9s3rNZTSMODco,3703
|
|
72
72
|
simo/core/__pycache__/app_widgets.cpython-38.pyc,sha256=oN657XMMZ6GYN9nblv7fX3kdnTEzSP9XV6PXM6Z0wl4,4358
|
|
@@ -92,7 +92,7 @@ simo/core/__pycache__/serializers.cpython-38.pyc,sha256=QvlVp7m13i3Vn1FOmjV-y_Ip
|
|
|
92
92
|
simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=Od1ejof2nHAFzTAG5vGGVjMA8WUJNVJ9o_KWGqRSR34,6669
|
|
93
93
|
simo/core/__pycache__/socket_consumers.cpython-38.pyc,sha256=KqbO1cOewodVPcy0-htVefyUjCuELKV0o7fOfYqfgPc,8490
|
|
94
94
|
simo/core/__pycache__/storage.cpython-38.pyc,sha256=9R1Xu0FJDflfRXUPsqEgt0SpwiP7FGk7HaR8s8XRyI8,721
|
|
95
|
-
simo/core/__pycache__/tasks.cpython-38.pyc,sha256=
|
|
95
|
+
simo/core/__pycache__/tasks.cpython-38.pyc,sha256=GFIC8IsQ_bK4rgNRl_oGbMCQHhbcgGS7dx-rjPcLy08,11220
|
|
96
96
|
simo/core/__pycache__/todos.cpython-38.pyc,sha256=lOqGZ58siHM3isoJV4r7sg8igrfE9fFd-jSfeBa0AQI,253
|
|
97
97
|
simo/core/__pycache__/views.cpython-38.pyc,sha256=IRjbX3MwKkAb10sMIJ3esKZH8W-tHwnuzm-mLIT_NWc,2584
|
|
98
98
|
simo/core/__pycache__/widgets.cpython-38.pyc,sha256=sR0ZeHCHrhnNDBJuRrxp3zUsfBp0xrtF0xrK2TkQv1o,3520
|
|
@@ -153,7 +153,7 @@ simo/core/management/_hub_template/hub/celeryc.py,sha256=3ksDXftIZKJ4Cq9WNKJERdZ
|
|
|
153
153
|
simo/core/management/_hub_template/hub/manage.py,sha256=PNNlw3EVeIJDgkG0l-klqoxsKWfTYWG9jzRG0upmAaI,620
|
|
154
154
|
simo/core/management/_hub_template/hub/nginx.conf,sha256=40hvXL42MeiqqkLURNcDQsRudv1dNFLJnvb2-Y3RCkk,2394
|
|
155
155
|
simo/core/management/_hub_template/hub/settings.py,sha256=4QhvhbtLRxHvAntwqG_qeAAtpDUqKvN4jzw9u3vqff8,361
|
|
156
|
-
simo/core/management/_hub_template/hub/supervisor.conf,sha256
|
|
156
|
+
simo/core/management/_hub_template/hub/supervisor.conf,sha256=-xFtt7cVyY-SCZ_6Z4yI1-1LNtd0f0EAM9zB5VbY9i8,2362
|
|
157
157
|
simo/core/management/_hub_template/hub/urls.py,sha256=Ydm-1BkYAzWeEF-MKSDIFf-7aE4qNLPm48-SA51XgJQ,25
|
|
158
158
|
simo/core/management/_hub_template/hub/wsgi.py,sha256=Lo-huLHnMDTxSmMBOodVFMWBls9poddrV2KRzXU0xGo,280
|
|
159
159
|
simo/core/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -10227,8 +10227,8 @@ simo/fleet/api.py,sha256=bK-j762v-KsPIvdh2SQCVC3TZ0D_RZgAaIyOfyNifeU,3108
|
|
|
10227
10227
|
simo/fleet/auto_urls.py,sha256=UX66eR2ykMqFgfIllW-RTdjup5-FieCWl_BVm3CcXKg,702
|
|
10228
10228
|
simo/fleet/base_types.py,sha256=wL9RVkHr0gA7HI1wZq0pruGEIgvQqpfnCL4cC3ywsvw,102
|
|
10229
10229
|
simo/fleet/ble.py,sha256=eHA_9ABjbmH1vUVCv9hiPXQL2GZZSEVwfO0xyI1S0nI,1081
|
|
10230
|
-
simo/fleet/controllers.py,sha256=
|
|
10231
|
-
simo/fleet/forms.py,sha256=
|
|
10230
|
+
simo/fleet/controllers.py,sha256=w2Zf-hFXyaaekoHbar7pIfE0iGN0S__79rANFm23hW8,29157
|
|
10231
|
+
simo/fleet/forms.py,sha256=S0OsfQ6VOm6lox2gSTKjRrIH0mlPcsAUhaplm6Wsiuw,64772
|
|
10232
10232
|
simo/fleet/gateways.py,sha256=lKEJW0MgaOEiNnijH50DNSVChvaUT3TA3UurcI57P8k,5677
|
|
10233
10233
|
simo/fleet/managers.py,sha256=ZNeHFSkF5kzsl9E1DCBevOW6kXJlD6kw0LU4B-JMOG8,828
|
|
10234
10234
|
simo/fleet/models.py,sha256=zPplx_v64nfKBmb-nCb74aCVtEeY3m3SjEy-VhbnydU,17511
|
|
@@ -10244,8 +10244,8 @@ simo/fleet/__pycache__/api.cpython-38.pyc,sha256=Ntc1sYKZMygW2eNTxVUgoeCF3StoUZc
|
|
|
10244
10244
|
simo/fleet/__pycache__/auto_urls.cpython-38.pyc,sha256=Tc6a6BCXHjijP8U2jE2ghlJwnSNrGm59-hW5t-80wF0,689
|
|
10245
10245
|
simo/fleet/__pycache__/base_types.cpython-38.pyc,sha256=deyPwjpT6xZiFxBGFnj5b7R-lbdOTh2krgpJhrcGVhc,274
|
|
10246
10246
|
simo/fleet/__pycache__/ble.cpython-38.pyc,sha256=Nrof9w7cm4OlpFWHeVnmvvanh2_oF9oQ3TknJiV93-0,1267
|
|
10247
|
-
simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=
|
|
10248
|
-
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=
|
|
10247
|
+
simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=jpXIYOPPQyumLwiO-PbgB8L5WYKkvd5T5GlAFnBKHp8,24906
|
|
10248
|
+
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=yyRnT_AU1kCLo3ISyuXonzP8hoiu8SAvRxhu9WQPIoc,43550
|
|
10249
10249
|
simo/fleet/__pycache__/gateways.cpython-38.pyc,sha256=0RKVn0ndreVKhsrukqeLPSdMnRrsQ_W7yeVeBkRLfIk,5058
|
|
10250
10250
|
simo/fleet/__pycache__/managers.cpython-38.pyc,sha256=Vmm23zoQnS3-uS5_WJt2n3wtjhLiEhLWaYxXJCU6Gts,1339
|
|
10251
10251
|
simo/fleet/__pycache__/models.cpython-38.pyc,sha256=WUahZgETWlem5rVXlJ_vINFRM7OZWp5xpWXGMoeBXsM,14131
|
|
@@ -10346,8 +10346,8 @@ simo/fleet/templates/fleet/controllers_info/ENS160AirQualitySensor.md,sha256=3LS
|
|
|
10346
10346
|
simo/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10347
10347
|
simo/generic/app_widgets.py,sha256=TPRLj4hri2hBuY6mrdwBiv-01z2hDxZmsup-GDD9LrM,953
|
|
10348
10348
|
simo/generic/base_types.py,sha256=u3SlfpNYaCwkVBwomWgso4ODzL71ay9MhiAW-bxgnDU,341
|
|
10349
|
-
simo/generic/controllers.py,sha256=
|
|
10350
|
-
simo/generic/forms.py,sha256=
|
|
10349
|
+
simo/generic/controllers.py,sha256=VZLa9PcGugE3E_WG6TV1zsn3h3Cj0LHBcTahm4KI6uY,50702
|
|
10350
|
+
simo/generic/forms.py,sha256=AzJ26n01gucuuBbh9RE4jZSG1wxKAWdui7dndXfxSKc,29229
|
|
10351
10351
|
simo/generic/gateways.py,sha256=0gDjWSCAt6MABR6k8xV7N1zXutDLCileGtAm6pSl4Q4,16165
|
|
10352
10352
|
simo/generic/models.py,sha256=Adq7ipWK-renxJlNW-SZnAq2oGEOwKx8EdUWaKnfcVQ,7597
|
|
10353
10353
|
simo/generic/routing.py,sha256=elQVZmgnPiieEuti4sJ7zITk1hlRxpgbotcutJJgC60,228
|
|
@@ -10355,22 +10355,24 @@ simo/generic/socket_consumers.py,sha256=K2OjphIhKJH48BvfFfoCOyCQZ1NmXb_phs6y1IP-
|
|
|
10355
10355
|
simo/generic/__pycache__/__init__.cpython-38.pyc,sha256=mLu54WS9KIl-pHwVCBKpsDFIlOqml--JsOVzAUHg6cU,161
|
|
10356
10356
|
simo/generic/__pycache__/app_widgets.cpython-38.pyc,sha256=YZ5db6-FPynBi6ooPW5crK9lZ6ymRh2DlGN6FwxfX4M,1820
|
|
10357
10357
|
simo/generic/__pycache__/base_types.cpython-38.pyc,sha256=aV5NdIuvXR-ItKpI__MwcyPZHD6Z882TFdgYkPCkr1I,493
|
|
10358
|
-
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=
|
|
10359
|
-
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=
|
|
10358
|
+
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=QjpmK-tGfbHHkK7grgDDRHqKoNNIUsU2cDnv0QOYFdA,33736
|
|
10359
|
+
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=smUAAhnyhuadkSC-VOYaZ96F9op_QGOTGHuuw25IXMI,21543
|
|
10360
10360
|
simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=uubZtp-UgEmKU4vG9ophnCZFEDqmKkeY1yyWUXzdmdY,12015
|
|
10361
10361
|
simo/generic/__pycache__/models.cpython-38.pyc,sha256=MZpum7syAFxuulf47K7gtUlJJ7xRD-IBUBAwUM1ZRnw,5825
|
|
10362
10362
|
simo/generic/__pycache__/routing.cpython-38.pyc,sha256=xtxTUTBTdivzFyA5Wh7k-hUj1WDO_FiRq6HYXdbr9Ks,382
|
|
10363
10363
|
simo/generic/__pycache__/socket_consumers.cpython-38.pyc,sha256=qJO5kvQLWhsQDOr1AtAtsAybuRWioxSkQei3Pc7rdP0,1737
|
|
10364
10364
|
simo/generic/migrations/0001_initial.py,sha256=7FpPcfpRU5ya0b8s2KbxR5a3npf92YruvZltUybjzys,676
|
|
10365
|
+
simo/generic/migrations/0002_auto_20241126_0726.py,sha256=SX38JwP732QooOm5HM1Xo7Th_Mv_6YZloT3eozULOhs,922
|
|
10365
10366
|
simo/generic/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10366
10367
|
simo/generic/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=xy_fN8vnebC_X8hArqHAOLYHLm3puD_stzJ-LvUOhgk,1009
|
|
10368
|
+
simo/generic/migrations/__pycache__/0002_auto_20241126_0726.cpython-38.pyc,sha256=vfPHUDBG6UlfdqsIi35ZcdQ0NfsSeawvTNzZ7YTKQd0,1130
|
|
10367
10369
|
simo/generic/migrations/__pycache__/__init__.cpython-38.pyc,sha256=nJV0NkIT8MuONj1hUX-V6aCU2lX3BXHyPjisapnBsPA,172
|
|
10368
10370
|
simo/generic/scripting/__init__.py,sha256=aZZvNBae7unnux_zGHCIWCV2z47hVJc-DIL72Hqfkeo,600
|
|
10369
10371
|
simo/generic/scripting/example.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10370
10372
|
simo/generic/scripting/helpers.py,sha256=iP-fxxB8HsFQy3k2CjFubu86aMqvWgmh-p24DiyOrek,4330
|
|
10371
10373
|
simo/generic/scripting/serializers.py,sha256=PjyFrjdPK1mBsgbNhyqMi9SWzcymqTa742ipy0LhAN4,1996
|
|
10372
10374
|
simo/generic/scripting/__pycache__/__init__.cpython-38.pyc,sha256=eHncoNpv5dy35IO1_htWd8CK0sHFBnU_WJ0hl5TKOHQ,794
|
|
10373
|
-
simo/generic/scripting/__pycache__/helpers.cpython-38.pyc,sha256=
|
|
10375
|
+
simo/generic/scripting/__pycache__/helpers.cpython-38.pyc,sha256=Rr43Tp0Y4feRu7Ho_Pz1D0rhbS0Rb0JlXxmxj7O5x-c,3634
|
|
10374
10376
|
simo/generic/scripting/__pycache__/serializers.cpython-38.pyc,sha256=JD9KCNO27H18mkFaeSMdybTMdTvodqcZSLNbC3pheHU,3412
|
|
10375
10377
|
simo/generic/static/weather_icons/01d@2x.png,sha256=TZfWi6Rfddb2P-oldWWcjUiuCHiU9Yrc5hyrQAhF26I,948
|
|
10376
10378
|
simo/generic/static/weather_icons/01n@2x.png,sha256=e9RleTa0T7To9Wi2wJ-9waeTbfHOsUB_xGwkx-89eEg,945
|
|
@@ -10429,13 +10431,13 @@ simo/multimedia/migrations/__pycache__/0004_auto_20231023_1055.cpython-38.pyc,sh
|
|
|
10429
10431
|
simo/multimedia/migrations/__pycache__/__init__.cpython-38.pyc,sha256=mCgSiQBphL85imdWyTi9-4zBDYF6HfXbhB0ycSPVVuA,175
|
|
10430
10432
|
simo/notifications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10431
10433
|
simo/notifications/admin.py,sha256=WQbN_bd2KRxVjbOajeworNrV9QlDNSadQT58La0Nn2M,1174
|
|
10432
|
-
simo/notifications/api.py,sha256=
|
|
10434
|
+
simo/notifications/api.py,sha256=qzM-P3kq_YQ8_wHS8EMIutRbTvtqOXczQbJFb7EgQ08,1773
|
|
10433
10435
|
simo/notifications/models.py,sha256=QGDLGAi5gk8OTcvd7ho5WNdctDymWGmGF1ZqN4-G_ZA,2443
|
|
10434
10436
|
simo/notifications/serializers.py,sha256=altDEAPWwOhxRcEzE9-34jL8EFpyf3vPoEdAPoVLfGc,523
|
|
10435
10437
|
simo/notifications/utils.py,sha256=uBl-Y7WGu00iaGM5rrdogcq0OMRVtyVfJF39-mdB3_k,1853
|
|
10436
10438
|
simo/notifications/__pycache__/__init__.cpython-38.pyc,sha256=YvucUfu98XFvEEg1LYFMlOZJpo_jSGxTVrM-ylAFLOg,167
|
|
10437
10439
|
simo/notifications/__pycache__/admin.cpython-38.pyc,sha256=MScNrtVM1wavefsPfxy0A7LVyXKcbvEkLH9GJkgNOl8,1945
|
|
10438
|
-
simo/notifications/__pycache__/api.cpython-38.pyc,sha256=
|
|
10440
|
+
simo/notifications/__pycache__/api.cpython-38.pyc,sha256=8dPiIMaFQlBFP01VwXbQ98udaZaqwibZJtz_Y2cXa8U,2073
|
|
10439
10441
|
simo/notifications/__pycache__/models.cpython-38.pyc,sha256=PoqLuOnlaAWQQ-20AtqhvAlLSkakPmdn7J7wGvHNW3g,2449
|
|
10440
10442
|
simo/notifications/__pycache__/serializers.cpython-38.pyc,sha256=7-eRGKYuQ4g1SpKOMpz17SIiu1HmaMoYv-cJbaO9QGA,1028
|
|
10441
10443
|
simo/notifications/__pycache__/utils.cpython-38.pyc,sha256=6Tq7VkW-pZLzWzcxPtBU9MDFZLO7iLY8-ygyefoJ5OQ,1529
|
|
@@ -10579,9 +10581,9 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
10579
10581
|
simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10580
10582
|
simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10581
10583
|
simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10582
|
-
simo-2.5.
|
|
10583
|
-
simo-2.5.
|
|
10584
|
-
simo-2.5.
|
|
10585
|
-
simo-2.5.
|
|
10586
|
-
simo-2.5.
|
|
10587
|
-
simo-2.5.
|
|
10584
|
+
simo-2.5.42.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
|
|
10585
|
+
simo-2.5.42.dist-info/METADATA,sha256=m8N7A6bxlyLXR7LdqGWZJjNZ7Oo8vS8jq-yCKPLHFEQ,1953
|
|
10586
|
+
simo-2.5.42.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
10587
|
+
simo-2.5.42.dist-info/entry_points.txt,sha256=S9PwnUYmTSW7681GKDCxUbL0leRJIaRk6fDQIKgbZBA,135
|
|
10588
|
+
simo-2.5.42.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
|
|
10589
|
+
simo-2.5.42.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|