simo 2.10.6__py3-none-any.whl → 2.10.7__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/fleet/__pycache__/api.cpython-312.pyc +0 -0
- simo/fleet/__pycache__/forms.cpython-312.pyc +0 -0
- simo/fleet/__pycache__/models.cpython-312.pyc +0 -0
- simo/fleet/__pycache__/serializers.cpython-312.pyc +0 -0
- simo/fleet/api.py +12 -9
- simo/fleet/forms.py +3 -3
- simo/fleet/migrations/0050_customdalidevice_uid.py +19 -0
- simo/fleet/migrations/0051_customdalidevice_components.py +19 -0
- simo/fleet/migrations/__pycache__/0050_customdalidevice_uid.cpython-312.pyc +0 -0
- simo/fleet/migrations/__pycache__/0051_customdalidevice_components.cpython-312.pyc +0 -0
- simo/fleet/models.py +28 -0
- simo/fleet/serializers.py +39 -3
- simo/generic/__pycache__/controllers.cpython-312.pyc +0 -0
- simo/generic/__pycache__/forms.cpython-312.pyc +0 -0
- simo/generic/controllers.py +2 -2
- {simo-2.10.6.dist-info → simo-2.10.7.dist-info}/METADATA +1 -1
- {simo-2.10.6.dist-info → simo-2.10.7.dist-info}/RECORD +21 -17
- {simo-2.10.6.dist-info → simo-2.10.7.dist-info}/WHEEL +0 -0
- {simo-2.10.6.dist-info → simo-2.10.7.dist-info}/entry_points.txt +0 -0
- {simo-2.10.6.dist-info → simo-2.10.7.dist-info}/licenses/LICENSE.md +0 -0
- {simo-2.10.6.dist-info → simo-2.10.7.dist-info}/top_level.txt +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
simo/fleet/api.py
CHANGED
|
@@ -69,7 +69,7 @@ class ColonelsViewSet(InstanceMixin, viewsets.ModelViewSet):
|
|
|
69
69
|
target = Colonel.objects.annotate(
|
|
70
70
|
components_count=Count('components')
|
|
71
71
|
).filter(
|
|
72
|
-
pk=request.POST.get('target'),
|
|
72
|
+
pk=request.POST.get('target'), instance=self.instance,
|
|
73
73
|
components_count=0, type=colonel.type
|
|
74
74
|
)
|
|
75
75
|
if not target:
|
|
@@ -104,17 +104,12 @@ class InterfaceViewSet(
|
|
|
104
104
|
return Interface.objects.filter(colonel__instance=self.instance)
|
|
105
105
|
|
|
106
106
|
|
|
107
|
-
class CustomDaliDeviceViewSet(
|
|
108
|
-
InstanceMixin,
|
|
109
|
-
viewsets.mixins.RetrieveModelMixin, viewsets.mixins.UpdateModelMixin,
|
|
110
|
-
viewsets.mixins.ListModelMixin, viewsets.mixins.CreateModelMixin,
|
|
111
|
-
viewsets.GenericViewSet
|
|
112
|
-
):
|
|
107
|
+
class CustomDaliDeviceViewSet(InstanceMixin, viewsets.ModelViewSet):
|
|
113
108
|
url = 'fleet/custom-dali-devices'
|
|
114
109
|
basename = 'custom-dali-devices'
|
|
115
110
|
serializer_class = CustomDaliDeviceSerializer
|
|
116
111
|
filter_backends = [DjangoFilterBackend]
|
|
117
|
-
filterset_fields = ['random_address', 'name']
|
|
112
|
+
filterset_fields = ['uid', 'random_address', 'name']
|
|
118
113
|
|
|
119
114
|
def get_permissions(self):
|
|
120
115
|
permissions = super().get_permissions()
|
|
@@ -122,4 +117,12 @@ class CustomDaliDeviceViewSet(
|
|
|
122
117
|
return permissions
|
|
123
118
|
|
|
124
119
|
def get_queryset(self):
|
|
125
|
-
return CustomDaliDevice.objects.filter(instance=self.instance)
|
|
120
|
+
return CustomDaliDevice.objects.filter(instance=self.instance)
|
|
121
|
+
|
|
122
|
+
def perform_destroy(self, instance):
|
|
123
|
+
if instance.components.all().count():
|
|
124
|
+
raise APIValidationError(
|
|
125
|
+
_('Deleting colonel which has components is not allowed!'),
|
|
126
|
+
code=400
|
|
127
|
+
)
|
|
128
|
+
instance.delete()
|
simo/fleet/forms.py
CHANGED
|
@@ -1829,14 +1829,14 @@ class CustomDaliDeviceForm(BaseComponentForm):
|
|
|
1829
1829
|
choices = []
|
|
1830
1830
|
instance = get_current_instance()
|
|
1831
1831
|
for colonel in Colonel.objects.filter(
|
|
1832
|
-
|
|
1832
|
+
type='room-sensor', instance=instance
|
|
1833
1833
|
):
|
|
1834
1834
|
if not colonel.is_connected:
|
|
1835
1835
|
continue
|
|
1836
1836
|
choices.append((f"wifi-{colonel.id}", colonel.name))
|
|
1837
1837
|
for device in CustomDaliDevice.objects.filter(
|
|
1838
|
-
|
|
1839
|
-
|
|
1838
|
+
instance=instance,
|
|
1839
|
+
last_seen__gt=timezone.now() - datetime.timedelta(minutes=10)
|
|
1840
1840
|
):
|
|
1841
1841
|
choices.append((f"dali-{device.id}", device.name))
|
|
1842
1842
|
self.fields['device'].choices = choices
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Generated by Django 4.2.10 on 2025-04-11 06:17
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('fleet', '0049_alter_customdalidevice_interface'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AddField(
|
|
14
|
+
model_name='customdalidevice',
|
|
15
|
+
name='uid',
|
|
16
|
+
field=models.CharField(db_index=True, default='', max_length=100),
|
|
17
|
+
preserve_default=False,
|
|
18
|
+
),
|
|
19
|
+
]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Generated by Django 4.2.10 on 2025-04-11 07:07
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('core', '0049_alter_gateway_type'),
|
|
10
|
+
('fleet', '0050_customdalidevice_uid'),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AddField(
|
|
15
|
+
model_name='customdalidevice',
|
|
16
|
+
name='components',
|
|
17
|
+
field=models.ManyToManyField(to='core.component'),
|
|
18
|
+
),
|
|
19
|
+
]
|
|
Binary file
|
simo/fleet/models.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import requests
|
|
2
2
|
import time
|
|
3
3
|
import random
|
|
4
|
+
import datetime
|
|
4
5
|
from actstream import action
|
|
5
6
|
from django.core.exceptions import ValidationError
|
|
6
7
|
from django.db import transaction
|
|
@@ -9,6 +10,7 @@ from django.db.models.signals import post_save, pre_delete, post_delete
|
|
|
9
10
|
from django.dispatch import receiver
|
|
10
11
|
from django.contrib.contenttypes.models import ContentType
|
|
11
12
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
|
13
|
+
from django.utils import timezone
|
|
12
14
|
from dirtyfields import DirtyFieldsMixin
|
|
13
15
|
from simo.core.models import Instance, Gateway, Component
|
|
14
16
|
from simo.core.utils.helpers import get_random_string
|
|
@@ -502,6 +504,7 @@ class CustomDaliDevice(models.Model):
|
|
|
502
504
|
not compatible with anything else of DALI!
|
|
503
505
|
'''
|
|
504
506
|
instance = models.ForeignKey(Instance, on_delete=models.CASCADE)
|
|
507
|
+
uid = models.CharField(max_length=100, db_index=True)
|
|
505
508
|
random_address = models.PositiveIntegerField(db_index=True, editable=False)
|
|
506
509
|
name = models.CharField(
|
|
507
510
|
max_length=200, help_text="User given name on initial pairing"
|
|
@@ -512,6 +515,7 @@ class CustomDaliDevice(models.Model):
|
|
|
512
515
|
help_text="Colonel interface on which it operates."
|
|
513
516
|
)
|
|
514
517
|
last_seen = models.DateTimeField(null=True, editable=False)
|
|
518
|
+
components = models.ManyToManyField(Component)
|
|
515
519
|
|
|
516
520
|
class Meta:
|
|
517
521
|
unique_together = 'instance', 'random_address'
|
|
@@ -538,3 +542,27 @@ class CustomDaliDevice(models.Model):
|
|
|
538
542
|
msg=frame.pack.hex()
|
|
539
543
|
).publish()
|
|
540
544
|
|
|
545
|
+
@property
|
|
546
|
+
def is_alive(self):
|
|
547
|
+
if not self.last_seen:
|
|
548
|
+
return False
|
|
549
|
+
return self.last_seen + datetime.timedelta(seconds=60) > timezone.now()
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
@receiver(post_save, sender=Component)
|
|
553
|
+
def attatch_components_to_dali_device(sender, instance, created, *args, **kwargs):
|
|
554
|
+
if not instance.controller_uid.startswith('simo.fleet'):
|
|
555
|
+
return
|
|
556
|
+
if 'config' not in instance.get_dirty_fields():
|
|
557
|
+
return
|
|
558
|
+
dali_device = CustomDaliDevice.objects.filter(
|
|
559
|
+
id=instance.config.get('dali_device', 0)
|
|
560
|
+
).first()
|
|
561
|
+
if not dali_device:
|
|
562
|
+
return
|
|
563
|
+
dali_device.components.add(instance)
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
@receiver(pre_delete, sender=CustomDaliDevice)
|
|
567
|
+
def delete_dali_device_components(sender, instance, *args, **kwargs):
|
|
568
|
+
instance.components.all().delete()
|
simo/fleet/serializers.py
CHANGED
|
@@ -89,12 +89,48 @@ class ColonelSerializer(serializers.ModelSerializer):
|
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
class CustomDaliDeviceSerializer(serializers.ModelSerializer):
|
|
92
|
+
is_empty = serializers.SerializerMethodField()
|
|
93
|
+
is_alive = serializers.SerializerMethodField()
|
|
94
|
+
last_seen = TimestampField()
|
|
92
95
|
|
|
93
96
|
class Meta:
|
|
94
97
|
model = CustomDaliDevice
|
|
95
|
-
fields =
|
|
96
|
-
|
|
98
|
+
fields = (
|
|
99
|
+
'id', 'uid', 'random_address', 'name', 'is_empty',
|
|
100
|
+
'is_alive', 'last_seen'
|
|
101
|
+
)
|
|
102
|
+
read_only_fields = (
|
|
103
|
+
'random_address', 'is_empty', 'is_alive', 'last_seen'
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
def validate(self, data):
|
|
107
|
+
instance = self.context.get('instance')
|
|
108
|
+
uid = data.get('uid')
|
|
109
|
+
if instance and uid:
|
|
110
|
+
if CustomDaliDevice.objects.filter(
|
|
111
|
+
uid=uid, instance=instance
|
|
112
|
+
).exists():
|
|
113
|
+
raise serializers.ValidationError(
|
|
114
|
+
f"A device with uid '{uid}' already exists for this instance."
|
|
115
|
+
)
|
|
116
|
+
return data
|
|
117
|
+
|
|
118
|
+
def validate_uid(self, value):
|
|
119
|
+
"""
|
|
120
|
+
Prevent changing the uid on update.
|
|
121
|
+
"""
|
|
122
|
+
# self.instance will be None for creation, but set for updates.
|
|
123
|
+
if self.instance and self.instance.uid != value:
|
|
124
|
+
raise serializers.ValidationError("Changing uid is not allowed.")
|
|
125
|
+
return value
|
|
97
126
|
|
|
98
127
|
def create(self, validated_data):
|
|
99
128
|
validated_data['instance'] = self.context['instance']
|
|
100
|
-
return super().create(validated_data)
|
|
129
|
+
return super().create(validated_data)
|
|
130
|
+
|
|
131
|
+
def get_is_empty(self, obj):
|
|
132
|
+
return not bool(obj.components.all().count())
|
|
133
|
+
|
|
134
|
+
def get_is_alive(self, obj):
|
|
135
|
+
return obj.is_alive
|
|
136
|
+
|
|
Binary file
|
|
Binary file
|
simo/generic/controllers.py
CHANGED
|
@@ -248,8 +248,8 @@ class Thermostat(ControllerBase):
|
|
|
248
248
|
|
|
249
249
|
else:
|
|
250
250
|
if prefer_heating and heaters:
|
|
251
|
-
low = target_temp - 2
|
|
252
|
-
high = target_temp +
|
|
251
|
+
low = target_temp - 2.5
|
|
252
|
+
high = target_temp + 0.5
|
|
253
253
|
window = high - low
|
|
254
254
|
reach = high - current_temp
|
|
255
255
|
reaction_force = self._get_reaction_force(window, reach)
|
|
@@ -10405,19 +10405,19 @@ simo/core/utils/__pycache__/validators.cpython-312.pyc,sha256=w8-XwptooefG-7gIIn
|
|
|
10405
10405
|
simo/core/utils/__pycache__/validators.cpython-38.pyc,sha256=gjeBOjL_keMoRDjdn8v-3F3wcjPIT3Xx5KpTalo0e-Y,1247
|
|
10406
10406
|
simo/fleet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10407
10407
|
simo/fleet/admin.py,sha256=J_kiwYIGMTxnRuytl_YoM7Pxrj5LzlN9xC8E7Ag5yvQ,7006
|
|
10408
|
-
simo/fleet/api.py,sha256=
|
|
10408
|
+
simo/fleet/api.py,sha256=Yst2NB__BgAzF9AX7APyhZz36lA6FZtKCy_iiasaNxk,4648
|
|
10409
10409
|
simo/fleet/apps.py,sha256=je8mRXMcRq4lABQZlyF2G2hOCkBUicR9I2jvrLDA8eI,238
|
|
10410
10410
|
simo/fleet/auto_urls.py,sha256=vrfrooPyY4pDuQjya-eLxCgZldfhwbEeEiXa7diO_CY,847
|
|
10411
10411
|
simo/fleet/base_types.py,sha256=0F8r7eNpi0qdm7DtVHyQN3fst8sFOFjq61twFO2WeZQ,139
|
|
10412
10412
|
simo/fleet/ble.py,sha256=eHA_9ABjbmH1vUVCv9hiPXQL2GZZSEVwfO0xyI1S0nI,1081
|
|
10413
10413
|
simo/fleet/controllers.py,sha256=eBY9cHxcmhhBRrSIsnfaklpD0ZBw637ndCQ3KH0JMvQ,36692
|
|
10414
10414
|
simo/fleet/custom_dali_operations.py,sha256=LASObOxRymL-f0AEm9wdt4YFnNsz5z385wQE9qJhOZY,9948
|
|
10415
|
-
simo/fleet/forms.py,sha256=
|
|
10415
|
+
simo/fleet/forms.py,sha256=Yy9ana-39f9zOynD4pPCkPsJyYrcZqzWFmZitFEoEmY,71263
|
|
10416
10416
|
simo/fleet/gateways.py,sha256=C7dyapWDlJ5erYPNLkSoH50I8kj0lIXicSno0_CrdXc,5783
|
|
10417
10417
|
simo/fleet/managers.py,sha256=DKU9kv5S6dAqAHWq4OgfEOeK5IJaQW7qdCednA0NpUA,858
|
|
10418
|
-
simo/fleet/models.py,sha256=
|
|
10418
|
+
simo/fleet/models.py,sha256=e9BTcpCdNLL2Lh4NFlAH9qumY8_RKD6isPLeWQznIBY,20544
|
|
10419
10419
|
simo/fleet/routing.py,sha256=cofGsVWXMfPDwsJ6HM88xxtRxHwERhJ48Xyxc8mxg5o,149
|
|
10420
|
-
simo/fleet/serializers.py,sha256=
|
|
10420
|
+
simo/fleet/serializers.py,sha256=29LA_tBoWlHS6qWLJNUA2N0htiW-WBV8k7tTCijGrDY,4243
|
|
10421
10421
|
simo/fleet/socket_consumers.py,sha256=SPrhbcMY50QD1QKXBPUwBZi_Jmw7FwRZdHGUybkAQlU,19460
|
|
10422
10422
|
simo/fleet/tasks.py,sha256=JeVQP4vUGzQxyDGEv8gks7Ro4GNLqkTWafxpgb1B8YY,2180
|
|
10423
10423
|
simo/fleet/utils.py,sha256=wNJvURzLP3-aho3D3rfg07N9kWCaMIw5gOsmeeO9Nlg,4740
|
|
@@ -10426,7 +10426,7 @@ simo/fleet/__pycache__/__init__.cpython-312.pyc,sha256=-BZyG4uq87W18Ra1pKTjSzDgi
|
|
|
10426
10426
|
simo/fleet/__pycache__/__init__.cpython-38.pyc,sha256=pIZE7EL6-cuJ3pQtaSwjKLrKLsTYelp1k9sRhXKLh6s,159
|
|
10427
10427
|
simo/fleet/__pycache__/admin.cpython-312.pyc,sha256=8TOuku1Atv-LyaVi4OICTc43iBFPgxCjrgjA9q6CN1s,9890
|
|
10428
10428
|
simo/fleet/__pycache__/admin.cpython-38.pyc,sha256=iweeu5AkaggBhQntP6-VF_eEodkNc6E7zKy0VjfwC2o,6652
|
|
10429
|
-
simo/fleet/__pycache__/api.cpython-312.pyc,sha256=
|
|
10429
|
+
simo/fleet/__pycache__/api.cpython-312.pyc,sha256=g_dGu_LC-V35x55uygshq8fq0yXS9yGUhc0mDJM83bc,7704
|
|
10430
10430
|
simo/fleet/__pycache__/api.cpython-38.pyc,sha256=rZ1mkfkaMBEXhi9sw_jTKdk2CPJhBNxoImtjQ3Rf1VY,4016
|
|
10431
10431
|
simo/fleet/__pycache__/apps.cpython-312.pyc,sha256=S8OK4R0W9VbNfD4Nos_CybjZ3AXS8CxvRaRUJO57xQA,707
|
|
10432
10432
|
simo/fleet/__pycache__/auto_urls.cpython-312.pyc,sha256=32yXKNoqMxNgYvsspUgx1A84LVQqr8LP4BRvURNCgeY,1026
|
|
@@ -10436,17 +10436,17 @@ simo/fleet/__pycache__/base_types.cpython-38.pyc,sha256=deyPwjpT6xZiFxBGFnj5b7R-
|
|
|
10436
10436
|
simo/fleet/__pycache__/ble.cpython-38.pyc,sha256=Nrof9w7cm4OlpFWHeVnmvvanh2_oF9oQ3TknJiV93-0,1267
|
|
10437
10437
|
simo/fleet/__pycache__/controllers.cpython-312.pyc,sha256=2oCTeifcjwfGElIDktcDonaMkT0jY4PNKNQgWqWAmBI,50317
|
|
10438
10438
|
simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=vH7mK1K4JBcLU9eKtqTJwbgB0SFMJ-s7WvO0qOsWjrg,24739
|
|
10439
|
-
simo/fleet/__pycache__/forms.cpython-312.pyc,sha256=
|
|
10439
|
+
simo/fleet/__pycache__/forms.cpython-312.pyc,sha256=SDNq1pqSi5jciWFhV9wDC8OTKxTn918puJAgRW3SiSA,87426
|
|
10440
10440
|
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=hrNfyGm2NfoNG1II-OqeHzR2TkkAWp3igvHGs6X0iIM,45252
|
|
10441
10441
|
simo/fleet/__pycache__/gateways.cpython-312.pyc,sha256=ZZGBAH2w9YmFvSrajZY8fUXd_WVpkRH81cYT6mhs858,8828
|
|
10442
10442
|
simo/fleet/__pycache__/gateways.cpython-38.pyc,sha256=MIpXuGWitGNdsxJ99fWvMXJ6sVE96ac7iR4K4aM4Sds,5148
|
|
10443
10443
|
simo/fleet/__pycache__/managers.cpython-312.pyc,sha256=uBckoFiAHHRi4KT2sNgJoOZfGMF4DBwKMDNeOTAUiC0,1754
|
|
10444
10444
|
simo/fleet/__pycache__/managers.cpython-38.pyc,sha256=Vmm23zoQnS3-uS5_WJt2n3wtjhLiEhLWaYxXJCU6Gts,1339
|
|
10445
|
-
simo/fleet/__pycache__/models.cpython-312.pyc,sha256=
|
|
10445
|
+
simo/fleet/__pycache__/models.cpython-312.pyc,sha256=cKXqErITf5pBGvISczAGYWdWKzm09oeOS-DSXeJXmP8,29458
|
|
10446
10446
|
simo/fleet/__pycache__/models.cpython-38.pyc,sha256=AXk1Q_nnHDXirHYgM3EW5pLsrR2CaPWk4EuvGCuDUpI,14131
|
|
10447
10447
|
simo/fleet/__pycache__/routing.cpython-312.pyc,sha256=vafYpGAtYc2NYxBQObMX6eIZfVZflOYgzjYv0SL1jAQ,385
|
|
10448
10448
|
simo/fleet/__pycache__/routing.cpython-38.pyc,sha256=aPrCmxFKVyB8R8ZbJDwdPdFfvT7CvobovvZeq_mqRgY,314
|
|
10449
|
-
simo/fleet/__pycache__/serializers.cpython-312.pyc,sha256=
|
|
10449
|
+
simo/fleet/__pycache__/serializers.cpython-312.pyc,sha256=2N_kjyIzqsocqvlKnk4Lydm9ZL3niCjBunKKjXC9hS4,7358
|
|
10450
10450
|
simo/fleet/__pycache__/serializers.cpython-38.pyc,sha256=l_FzORWCM1hcSZV0AaGRO-p0CMTcEfqnLGgbn2IVvI0,3648
|
|
10451
10451
|
simo/fleet/__pycache__/socket_consumers.cpython-312.pyc,sha256=i0lKhUOK6XwSS-B-MM-x2t3zllm7jU1Dz36OaHwmZuE,28058
|
|
10452
10452
|
simo/fleet/__pycache__/socket_consumers.cpython-38.pyc,sha256=lEC1SkY_KgRY0QoBUMPjnbFwSa7qmCf-4eNQ45hAy68,14141
|
|
@@ -10505,6 +10505,8 @@ simo/fleet/migrations/0046_delete_customdalidevice.py,sha256=KR-pqDctBHB1SgbC01F
|
|
|
10505
10505
|
simo/fleet/migrations/0047_customdalidevice.py,sha256=GQBIV0K2p2OUVYP67ggbG8VxNdV6ziHJ432a4JoMrM0,1178
|
|
10506
10506
|
simo/fleet/migrations/0048_remove_customdalidevice_colonel_and_more.py,sha256=_HXvxy_0hO9PaKHXSwYoznacHe1TDz1dDaEZo8SVkKA,867
|
|
10507
10507
|
simo/fleet/migrations/0049_alter_customdalidevice_interface.py,sha256=eEtMTt04XbfsjHeFujeCcTe4KNQoPAe_d7lFvcj5n2A,630
|
|
10508
|
+
simo/fleet/migrations/0050_customdalidevice_uid.py,sha256=iO_vpbNnEDLWo8p0S81MouuIMN75BCjLsUg0hZUZ9rU,468
|
|
10509
|
+
simo/fleet/migrations/0051_customdalidevice_components.py,sha256=-tTMCuBQnAFf3W5aHCn1qWa447e1XdghVK8nNA7J7bo,456
|
|
10508
10510
|
simo/fleet/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10509
10511
|
simo/fleet/migrations/__pycache__/0001_initial.cpython-312.pyc,sha256=AKcdg2v5A7vfVyRT-jwK54BVyg1V1gO6-tyXtk4afSA,1991
|
|
10510
10512
|
simo/fleet/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=9kc1UyMEYkRNVnZ7iwZbiW1t3qWXROvWrI2G1BdzIaA,1250
|
|
@@ -10599,6 +10601,8 @@ simo/fleet/migrations/__pycache__/0046_delete_customdalidevice.cpython-312.pyc,s
|
|
|
10599
10601
|
simo/fleet/migrations/__pycache__/0047_customdalidevice.cpython-312.pyc,sha256=qIZEMpkj28cOAazGsiH2ZiH1m5Sot_FK-78yzxA4tfU,1848
|
|
10600
10602
|
simo/fleet/migrations/__pycache__/0048_remove_customdalidevice_colonel_and_more.cpython-312.pyc,sha256=D21BzJX40P1Hanj8D1haBvoEqljQL2IQJwCTIzF9GFo,1378
|
|
10601
10603
|
simo/fleet/migrations/__pycache__/0049_alter_customdalidevice_interface.cpython-312.pyc,sha256=WfNMmdpnS6x3I9gDEOrtqztjbWYcQXDB4THYb3ysK9s,1184
|
|
10604
|
+
simo/fleet/migrations/__pycache__/0050_customdalidevice_uid.cpython-312.pyc,sha256=tguBnxPVAUrgU120EVDHZa-gChovZNklAAac6RRLd7Y,831
|
|
10605
|
+
simo/fleet/migrations/__pycache__/0051_customdalidevice_components.cpython-312.pyc,sha256=YB5d40wwc6FqZJJILNC5T7bnu254Ml-Cah96v3N8gbE,827
|
|
10602
10606
|
simo/fleet/migrations/__pycache__/__init__.cpython-312.pyc,sha256=1rujN3qD3L0Q2MRB-gxwRKyShgUTX9NBpDGaIl42ozU,176
|
|
10603
10607
|
simo/fleet/migrations/__pycache__/__init__.cpython-38.pyc,sha256=5k1KW0jeSDzw6RnVPRq4CaO13Lg7M0F-pxA_gqqZ6Mg,170
|
|
10604
10608
|
simo/fleet/templates/admin/colonel_history.html,sha256=YfA6LDVExk1sAWhBuiCLA6vb3XcBNN7_fpJNZzGFtB0,169
|
|
@@ -10608,7 +10612,7 @@ simo/fleet/templates/fleet/controllers_info/RoomZonePresenceSensor.md,sha256=Nun
|
|
|
10608
10612
|
simo/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10609
10613
|
simo/generic/app_widgets.py,sha256=y8W3jR76Hh26O9pPQyg2SophMbYIOtAWD33MPKbB8Mg,856
|
|
10610
10614
|
simo/generic/base_types.py,sha256=u3SlfpNYaCwkVBwomWgso4ODzL71ay9MhiAW-bxgnDU,341
|
|
10611
|
-
simo/generic/controllers.py,sha256=
|
|
10615
|
+
simo/generic/controllers.py,sha256=32Ze1bD-JiIRJBjR_aSmbhCh3-M-6YBdyH7bFY8VKa4,49883
|
|
10612
10616
|
simo/generic/forms.py,sha256=0RIDtLLzCkiSb9OxlioicOQW9yp1OjLKekpjbxzGVfM,26272
|
|
10613
10617
|
simo/generic/gateways.py,sha256=oJ4VLaL0nMB6hnTMEpZasc4OTf8m1HWRWJMhUjHbeIU,19447
|
|
10614
10618
|
simo/generic/models.py,sha256=59fkYowOX0imviIhA6uwupvuharrpBykmBm674rJNoI,7279
|
|
@@ -10621,9 +10625,9 @@ simo/generic/__pycache__/app_widgets.cpython-312.pyc,sha256=ywoKk91YSEZxpyt9haG5
|
|
|
10621
10625
|
simo/generic/__pycache__/app_widgets.cpython-38.pyc,sha256=D9b13pbMlirgHmjDnQhfLIDGSVINoSouHb4SWOeCRrs,1642
|
|
10622
10626
|
simo/generic/__pycache__/base_types.cpython-312.pyc,sha256=h8Mwu49i-zmwTbL33JaLJfRDGOgkQh2_VqrfzEc4UQ4,616
|
|
10623
10627
|
simo/generic/__pycache__/base_types.cpython-38.pyc,sha256=aV5NdIuvXR-ItKpI__MwcyPZHD6Z882TFdgYkPCkr1I,493
|
|
10624
|
-
simo/generic/__pycache__/controllers.cpython-312.pyc,sha256=
|
|
10628
|
+
simo/generic/__pycache__/controllers.cpython-312.pyc,sha256=vElV3V6zJDo93KdQP3t_f7jrvLIAC3c03tGEre48x44,55873
|
|
10625
10629
|
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=jJjwKVaDYyazrRGNjUFoY74nr_jX_DEnsC9KjyxZCgc,30427
|
|
10626
|
-
simo/generic/__pycache__/forms.cpython-312.pyc,sha256=
|
|
10630
|
+
simo/generic/__pycache__/forms.cpython-312.pyc,sha256=5Vo10Zjyum-SYqieE3e7UInX6B90NQu1ex-ne7kVG70,34676
|
|
10627
10631
|
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=k8lz3taXdWAg5P9jcnw66mWH51pCc4SOsg32kVEtBCg,19416
|
|
10628
10632
|
simo/generic/__pycache__/gateways.cpython-312.pyc,sha256=lg1j7spkhmGa5f4C49EKRXHHM2BrOJralhrsKXIsdYA,23196
|
|
10629
10633
|
simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=GIeMT51oZU2OCFD4eUDFdSRRYE0Qf14AcOr_gdUqG94,12705
|
|
@@ -10949,9 +10953,9 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
10949
10953
|
simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10950
10954
|
simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10951
10955
|
simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10952
|
-
simo-2.10.
|
|
10953
|
-
simo-2.10.
|
|
10954
|
-
simo-2.10.
|
|
10955
|
-
simo-2.10.
|
|
10956
|
-
simo-2.10.
|
|
10957
|
-
simo-2.10.
|
|
10956
|
+
simo-2.10.7.dist-info/licenses/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
|
|
10957
|
+
simo-2.10.7.dist-info/METADATA,sha256=qzJYhEXss-jHwmug0L1jRXuDn0WrAE1P1Sz6E1ZWFUc,2028
|
|
10958
|
+
simo-2.10.7.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
10959
|
+
simo-2.10.7.dist-info/entry_points.txt,sha256=S9PwnUYmTSW7681GKDCxUbL0leRJIaRk6fDQIKgbZBA,135
|
|
10960
|
+
simo-2.10.7.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
|
|
10961
|
+
simo-2.10.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|