simo 2.7.10__py3-none-any.whl → 2.7.12__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.

Files changed (60) hide show
  1. simo/automation/__pycache__/gateways.cpython-38.pyc +0 -0
  2. simo/automation/__pycache__/helpers.cpython-38.pyc +0 -0
  3. simo/automation/__pycache__/models.cpython-38.pyc +0 -0
  4. simo/automation/__pycache__/serializers.cpython-38.pyc +0 -0
  5. simo/automation/gateways.py +45 -25
  6. simo/core/__pycache__/admin.cpython-38.pyc +0 -0
  7. simo/core/__pycache__/api_meta.cpython-38.pyc +0 -0
  8. simo/core/__pycache__/auto_urls.cpython-38.pyc +0 -0
  9. simo/core/__pycache__/form_fields.cpython-38.pyc +0 -0
  10. simo/core/__pycache__/forms.cpython-38.pyc +0 -0
  11. simo/core/__pycache__/models.cpython-38.pyc +0 -0
  12. simo/core/__pycache__/serializers.cpython-38.pyc +0 -0
  13. simo/core/__pycache__/signal_receivers.cpython-38.pyc +0 -0
  14. simo/core/__pycache__/socket_consumers.cpython-38.pyc +0 -0
  15. simo/core/__pycache__/views.cpython-38.pyc +0 -0
  16. simo/core/api_meta.py +3 -1
  17. simo/core/auto_urls.py +3 -2
  18. simo/core/form_fields.py +7 -1
  19. simo/core/forms.py +13 -5
  20. simo/core/migrations/0047_alter_component_value_translation.py +18 -0
  21. simo/core/migrations/0048_publicfile_privatefile.py +35 -0
  22. simo/core/migrations/__pycache__/0047_alter_component_value_translation.cpython-38.pyc +0 -0
  23. simo/core/migrations/__pycache__/0048_publicfile_privatefile.cpython-38.pyc +0 -0
  24. simo/core/models.py +32 -0
  25. simo/core/serializers.py +7 -1
  26. simo/core/signal_receivers.py +13 -2
  27. simo/core/templates/admin/wizard/wizard_add.html +1 -1
  28. simo/core/views.py +16 -2
  29. simo/fleet/__pycache__/forms.cpython-38.pyc +0 -0
  30. simo/fleet/__pycache__/socket_consumers.cpython-38.pyc +0 -0
  31. simo/fleet/__pycache__/views.cpython-38.pyc +0 -0
  32. simo/fleet/migrations/__pycache__/0044_auto_20241210_0707.cpython-38.pyc +0 -0
  33. simo/generic/__pycache__/controllers.cpython-38.pyc +0 -0
  34. simo/generic/__pycache__/forms.cpython-38.pyc +0 -0
  35. simo/generic/__pycache__/gateways.cpython-38.pyc +0 -0
  36. simo/generic/__pycache__/socket_consumers.cpython-38.pyc +0 -0
  37. simo/generic/controllers.py +10 -1
  38. simo/generic/forms.py +75 -1
  39. simo/generic/gateways.py +50 -9
  40. simo/multimedia/__pycache__/admin.cpython-38.pyc +0 -0
  41. simo/multimedia/__pycache__/auto_urls.cpython-38.pyc +0 -0
  42. simo/multimedia/__pycache__/controllers.cpython-38.pyc +0 -0
  43. simo/multimedia/__pycache__/models.cpython-38.pyc +0 -0
  44. simo/multimedia/__pycache__/views.cpython-38.pyc +0 -0
  45. simo/multimedia/admin.py +4 -4
  46. simo/multimedia/auto_urls.py +10 -0
  47. simo/multimedia/controllers.py +12 -4
  48. simo/multimedia/migrations/0005_remove_sound_slug_sound_date_uploaded.py +24 -0
  49. simo/multimedia/migrations/__pycache__/0005_remove_sound_slug_sound_date_uploaded.cpython-38.pyc +0 -0
  50. simo/multimedia/models.py +16 -2
  51. simo/multimedia/views.py +19 -0
  52. simo/notifications/__pycache__/utils.cpython-38.pyc +0 -0
  53. simo/users/__pycache__/models.cpython-38.pyc +0 -0
  54. {simo-2.7.10.dist-info → simo-2.7.12.dist-info}/METADATA +1 -1
  55. {simo-2.7.10.dist-info → simo-2.7.12.dist-info}/RECORD +59 -49
  56. simo/multimedia/requirements.txt +0 -2
  57. {simo-2.7.10.dist-info → simo-2.7.12.dist-info}/LICENSE.md +0 -0
  58. {simo-2.7.10.dist-info → simo-2.7.12.dist-info}/WHEEL +0 -0
  59. {simo-2.7.10.dist-info → simo-2.7.12.dist-info}/entry_points.txt +0 -0
  60. {simo-2.7.10.dist-info → simo-2.7.12.dist-info}/top_level.txt +0 -0
simo/generic/gateways.py CHANGED
@@ -1,21 +1,17 @@
1
1
  import sys
2
- import logging
3
2
  import pytz
4
3
  import json
5
4
  import time
6
- import multiprocessing
7
5
  import threading
8
6
  import traceback
9
7
  from django.conf import settings
10
8
  from django.utils import timezone
11
- from django.db import connection as db_connection
12
- from django.db.models import Q
13
9
  import paho.mqtt.client as mqtt
14
- from simo.core.models import Component
10
+ from simo.core.utils.helpers import get_self_ip
11
+ from simo.core.models import Component, PublicFile
15
12
  from simo.core.middleware import introduce_instance, drop_current_instance
16
13
  from simo.core.gateways import BaseObjectCommandsGatewayHandler
17
14
  from simo.core.forms import BaseGatewayForm
18
- from simo.core.utils.logs import StreamToLogger
19
15
  from simo.core.events import GatewayObjectCommand, get_event_obj
20
16
  from simo.core.loggers import get_gw_logger, get_component_logger
21
17
 
@@ -134,8 +130,50 @@ class GroupButtonsHandler:
134
130
  group.toggle()
135
131
 
136
132
 
133
+ class AudioAlertsHandler:
137
134
 
138
- class GenericGatewayHandler(BaseObjectCommandsGatewayHandler):
135
+ def control_audio_alert(self, component, val):
136
+ if val:
137
+ public_file = PublicFile.objects.filter(
138
+ component=component
139
+ ).first()
140
+ if not public_file:
141
+ return
142
+ uri = f"http://{get_self_ip()}{public_file.get_absolute_url()}"
143
+ loop = component.config.get('loop', False)
144
+ for pl_id in component.config.get('players', []):
145
+ player = Component.objects.filter(
146
+ id=pl_id, base_type='audio-player'
147
+ ).first()
148
+ if not player:
149
+ continue
150
+ player.play_alert(
151
+ uri,
152
+ component.config.get('loop', False),
153
+ component.config.get('volume', 50)
154
+ )
155
+ if not loop:
156
+ def set_done(comp):
157
+ comp.set(False)
158
+ threading.Timer(
159
+ component.config.get('duration', 1),
160
+ set_done, args=[component]
161
+ )
162
+ component.set(True)
163
+ else:
164
+ for pl_id in component.config.get('players', []):
165
+ player = Component.objects.filter(
166
+ id=pl_id, base_type='audio-player'
167
+ ).first()
168
+ if not player:
169
+ continue
170
+ player.cancel_alert()
171
+ component.set(False)
172
+
173
+
174
+ class GenericGatewayHandler(
175
+ BaseObjectCommandsGatewayHandler, GroupButtonsHandler, AudioAlertsHandler
176
+ ):
139
177
  name = "Generic"
140
178
  config_form = BaseGatewayForm
141
179
  info = "Provides generic type components which use other components to operate like " \
@@ -149,7 +187,8 @@ class GenericGatewayHandler(BaseObjectCommandsGatewayHandler):
149
187
  ('watch_watering', 60),
150
188
  ('watch_alarm_events', 1),
151
189
  ('watch_timers', 1),
152
- ('watch_main_states', 60)
190
+ ('watch_main_states', 60),
191
+ ('watch_groups', 60)
153
192
  )
154
193
 
155
194
  def __init__(self, *args, **kwargs):
@@ -229,7 +268,7 @@ class GenericGatewayHandler(BaseObjectCommandsGatewayHandler):
229
268
 
230
269
  def on_mqtt_message(self, client, userdata, msg):
231
270
  print("Mqtt message: ", msg.payload)
232
- from simo.generic.controllers import AlarmGroup
271
+ from simo.generic.controllers import AlarmGroup, AudioAlert
233
272
 
234
273
  payload = json.loads(msg.payload)
235
274
  drop_current_instance()
@@ -239,6 +278,8 @@ class GenericGatewayHandler(BaseObjectCommandsGatewayHandler):
239
278
  try:
240
279
  if component.controller_uid == AlarmGroup.uid:
241
280
  self.control_alarm_group(component, payload.get('set_val'))
281
+ elif component.controller_uid == AudioAlert.uid:
282
+ self.control_audio_alert(component, payload.get('set_val'))
242
283
  else:
243
284
  component.controller.set(payload.get('set_val'))
244
285
  except Exception:
simo/multimedia/admin.py CHANGED
@@ -7,10 +7,9 @@ from .forms import SoundModelForm
7
7
 
8
8
  @admin.register(Sound)
9
9
  class SoundAdmin(admin.ModelAdmin):
10
- list_display = 'id', 'name', 'slug', 'file', 'length_display'
11
- search_fields = 'name', 'slug', 'file'
12
- prepopulated_fields = {"slug": ["name"]}
13
- list_display_links = 'id', 'name', 'slug'
10
+ list_display = 'id', 'name', 'file', 'length_display', 'date_uploaded'
11
+ search_fields = 'name', 'file'
12
+ list_display_links = 'id', 'name',
14
13
  form = SoundModelForm
15
14
  readonly_fields = 'length_display',
16
15
 
@@ -22,6 +21,7 @@ class SoundAdmin(admin.ModelAdmin):
22
21
 
23
22
  def save_model(self, request, obj, form, change):
24
23
  super().save_model(request, obj, form, change)
24
+ # need to keep it here as using admin interface skips post_save signals
25
25
  try:
26
26
  obj.length = int(
27
27
  librosa.core.get_duration(
@@ -0,0 +1,10 @@
1
+ from django.urls import path, re_path
2
+ from .views import SoundAutocomplete
3
+
4
+
5
+ urlpatterns = [
6
+ path(
7
+ 'autocomplete-sound',
8
+ SoundAutocomplete.as_view(), name='autocomplete-sound'
9
+ )
10
+ ]
@@ -89,17 +89,22 @@ class BasePlayer(Switch):
89
89
  assert 0 <= volume <= 100
90
90
  self.send({"play_uri": uri, 'volume': volume})
91
91
 
92
- def play_alert(self, val, volume=None):
92
+ def play_alert(self, val, loop=False, volume=None):
93
93
  '''
94
94
  Plays alert and goes back to whatever was playing initially
95
- :param val: Sound.id or uri
95
+ :param val: uri
96
+ :param loop: Repeat infinitely
96
97
  :param volume: volume at which to play
97
98
  :return:
98
99
  '''
99
- assert type(val) in (int, str)
100
+ assert type(val) == str
100
101
  if volume:
101
102
  assert 0 <= volume <= 100
102
- self.send({"alert": val, 'volume': volume})
103
+ self.send({"alert": val, 'loop': loop, 'volume': volume})
104
+
105
+ def cancel_alert(self):
106
+ '''Cancel alert if it's currently playing'''
107
+ self.send({"alert": None})
103
108
 
104
109
  def toggle(self):
105
110
  if self.component.value == 'playing':
@@ -120,3 +125,6 @@ class BaseVideoPlayer(BasePlayer):
120
125
  name = _("Video Player")
121
126
  base_type = 'video-player'
122
127
  app_widget = VideoPlayerWidget
128
+
129
+
130
+
@@ -0,0 +1,24 @@
1
+ # Generated by Django 4.2.10 on 2024-12-11 14:14
2
+
3
+ from django.db import migrations, models
4
+ import django.utils.timezone
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('multimedia', '0004_auto_20231023_1055'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.RemoveField(
15
+ model_name='sound',
16
+ name='slug',
17
+ ),
18
+ migrations.AddField(
19
+ model_name='sound',
20
+ name='date_uploaded',
21
+ field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
22
+ preserve_default=False,
23
+ ),
24
+ ]
simo/multimedia/models.py CHANGED
@@ -1,12 +1,13 @@
1
- import os
1
+ import os, librosa
2
2
  from django.db import models
3
+ from django.db.models.signals import post_save, post_delete
4
+ from django.dispatch import receiver
3
5
  from django.core.files.storage import FileSystemStorage
4
6
  from django.conf import settings
5
7
 
6
8
 
7
9
  class Sound(models.Model):
8
10
  name = models.CharField(max_length=100, db_index=True)
9
- slug = models.SlugField()
10
11
  file = models.FileField(
11
12
  upload_to='sounds', storage=FileSystemStorage(
12
13
  location=os.path.join(settings.VAR_DIR, 'public_media'),
@@ -17,9 +18,22 @@ class Sound(models.Model):
17
18
  length = models.PositiveIntegerField(
18
19
  editable=False, default=0, help_text='Sound length in seconds'
19
20
  )
21
+ date_uploaded = models.DateTimeField(auto_now_add=True)
20
22
 
21
23
  def __str__(self):
22
24
  return self.name
23
25
 
24
26
  def get_absolute_url(self):
25
27
  return self.file.url
28
+
29
+
30
+ @receiver(post_save, sender=Sound)
31
+ def determine_duration(sender, instance, created, **kwargs):
32
+ if not instance.length:
33
+ instance.length = int(
34
+ librosa.core.get_duration(
35
+ sr=22050, filename=instance.file.path
36
+ )
37
+ )
38
+ instance.save()
39
+
@@ -0,0 +1,19 @@
1
+ from django.http import Http404
2
+ from dal import autocomplete
3
+ from simo.core.utils.helpers import search_queryset
4
+ from .models import Sound
5
+
6
+
7
+ class SoundAutocomplete(autocomplete.Select2QuerySetView):
8
+
9
+ def get_queryset(self):
10
+ if not self.request.user.is_authenticated:
11
+ raise Http404()
12
+
13
+ qs = Sound.objects.all()
14
+
15
+ if self.request.GET.get('value'):
16
+ qs = qs.filter(pk__in=self.request.GET['value'].split(','))
17
+ elif self.q:
18
+ qs = search_queryset(qs, self.q, ('name', 'slug'))
19
+ return qs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: simo
3
- Version: 2.7.10
3
+ Version: 2.7.12
4
4
  Summary: Smart Home on Steroids!
5
5
  Author-email: Simanas Venčkauskas <simanas@simo.io>
6
6
  Project-URL: Homepage, https://simo.io
@@ -15,7 +15,7 @@ simo/automation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  simo/automation/app_widgets.py,sha256=gaqImMZjuMHm7nIb9a4D-Y3qipz_WhSPAHXcwGx4Uzs,199
16
16
  simo/automation/controllers.py,sha256=Ow8xG9hkdyMRZbrNPX5uZloYM9jZqa9mgCh4k6FeoJw,11492
17
17
  simo/automation/forms.py,sha256=UWnkxw8pILPK0smRPTo4SLgsZl78zOySx7JIc30Bgtk,10228
18
- simo/automation/gateways.py,sha256=nWiWaDcNFpOumtTEE1xbhuYLt4Qvs8K0-zVEupdRPRU,14563
18
+ simo/automation/gateways.py,sha256=dTrx4r3aoUynWQCHHXZFKkoHhKbC3-UMZIY755C-sdI,15470
19
19
  simo/automation/helpers.py,sha256=iP-fxxB8HsFQy3k2CjFubu86aMqvWgmh-p24DiyOrek,4330
20
20
  simo/automation/models.py,sha256=l45FHgeKGsfpLtd1X1PVFpIjB5JI4BlvKkodpcxm6aE,927
21
21
  simo/automation/serializers.py,sha256=PjyFrjdPK1mBsgbNhyqMi9SWzcymqTa742ipy0LhAN4,1996
@@ -24,10 +24,10 @@ simo/automation/__pycache__/__init__.cpython-38.pyc,sha256=YmP0xAD-mxpQHgdTZeC64
24
24
  simo/automation/__pycache__/app_widgets.cpython-38.pyc,sha256=7DfUA9V_1MiwrOe_ta-ts8dYY8xXb9UMg2_9A3XoRcs,523
25
25
  simo/automation/__pycache__/controllers.cpython-38.pyc,sha256=CL-0Tq9B4-E36fYfWT1XEBTq1dkq1W8003f6MrBnQU0,8391
26
26
  simo/automation/__pycache__/forms.cpython-38.pyc,sha256=cpA5hA2Iz3JsPC0Dq01ki1I7S9c5DKRcXveHApI1dJo,7772
27
- simo/automation/__pycache__/gateways.cpython-38.pyc,sha256=K8y3DNQFfcEQiLTgHl5p0Uk58R5QCuqFCluvbQ6I_9g,10652
28
- simo/automation/__pycache__/helpers.cpython-38.pyc,sha256=4VSSarOFnUk_KExWwvDlx5dEhv8aHUCHMZDtGG--pUY,3627
29
- simo/automation/__pycache__/models.cpython-38.pyc,sha256=6gXdIMcrWaGACal2omj-b2if5JW8QvLIrtRfYVpDRQU,1230
30
- simo/automation/__pycache__/serializers.cpython-38.pyc,sha256=gWgcuPE8aY-TmuRLXCuSR74mvtKerpZ04m0MfPfw0AI,3405
27
+ simo/automation/__pycache__/gateways.cpython-38.pyc,sha256=F4zO0G15gGMSaQaB_fW13qtcBHQ3KYlDqZ4_Ch0YW70,10956
28
+ simo/automation/__pycache__/helpers.cpython-38.pyc,sha256=fNjSyn4Mfq7-JQx-bdsnj-rSxgu20dVJ9-5ZEMT6yiM,3627
29
+ simo/automation/__pycache__/models.cpython-38.pyc,sha256=VeQNAygVr0AXPlF5LEYk90Tq8zuCVPfsA2r1NBjrkxU,1230
30
+ simo/automation/__pycache__/serializers.cpython-38.pyc,sha256=9Te21FW5-Tki1a-tq3gt0rme0afBA8o-7V249b4muFk,3405
31
31
  simo/automation/__pycache__/state.cpython-38.pyc,sha256=TO2IM6h2hbGVlOUcoMwHkDUF4V-54d_KVhcebMgNtCk,784
32
32
  simo/automation/migrations/0001_initial.py,sha256=VB6WIK1RlUdtqlWYCEhtnVE24odp2dfUvOVcxUZPpQ4,990
33
33
  simo/automation/migrations/0002_update_helpers_in_scripts.py,sha256=GHtc8ibfURDVoWHw17UxaaA0sEy4tIklIjP6GEMLjhs,714
@@ -63,10 +63,10 @@ simo/core/__init__.py,sha256=_s2TjJfQImsMrTIxqLAx9AZie1Ojmm6sCHASdl3WLGU,50
63
63
  simo/core/admin.py,sha256=j07Dy3IsW7SRRsAJ2XXGzE0MTxmfY87CEEbT22kLlS4,18550
64
64
  simo/core/api.py,sha256=D5FBWvhYpQeM9wVfapzRvBi_ypOtXBt9tmmCaUxpGjI,29992
65
65
  simo/core/api_auth.py,sha256=vCxvczA8aWNcW0VyKs5WlC_ytlqeGP_H_hkKUNVkCwM,1247
66
- simo/core/api_meta.py,sha256=DuX6BmUC2uY_mXb8NC_UMq6T3FcMSQoD2Rv0Pp0NdQo,5228
66
+ simo/core/api_meta.py,sha256=Bh-UOzANXl9Bg3FadFf7biM_olAr9GgjNJXu55SO6Og,5290
67
67
  simo/core/app_widgets.py,sha256=VxZzapuc-a29wBH7JzpvNF2SK1ECrgNUySId5ke1ffc,2509
68
68
  simo/core/apps.py,sha256=CsqpiQerhmrMsH-wGiG-gQgXd9qEkIi-LUaA9cXpKSw,425
69
- simo/core/auto_urls.py,sha256=FBDclIeRp5UVWomIUbRzUgY-AoMk-r2qC2htlwKD4Lo,1106
69
+ simo/core/auto_urls.py,sha256=FqKhH0fF7cGO6P2YrjblwG4JA2UkVXj3lreJUOB2Jq4,1194
70
70
  simo/core/autocomplete_views.py,sha256=x3MKOZvXYS3xVQ-V1S7Liv_U5bxr-uc0gePa85wv5nA,4561
71
71
  simo/core/base_types.py,sha256=WypW8hTfzveuTQtruGjLYAGQZIuczxTlW-SdRk3iQug,666
72
72
  simo/core/context.py,sha256=LKw1I4iIRnlnzoTCuSLLqDX7crHdBnMo3hjqYvVmzFc,1557
@@ -74,32 +74,32 @@ simo/core/controllers.py,sha256=gVwQHYkJ6GNTHaKTSjf4H2VVykQbvKh4_fSe_MdAVi4,3741
74
74
  simo/core/dynamic_settings.py,sha256=bUs58XEZOCIEhg1TigR3LmYggli13KMryBZ9pC7ugAQ,1872
75
75
  simo/core/events.py,sha256=1_KIk5pJqdLPRQlCQ9xSyALst2Cn0b2lAEAJ3QjwIjE,4801
76
76
  simo/core/filters.py,sha256=6wbn8C2WvKTTjtfMwwLBp2Fib1V0-DMpS4iqJd6jJQo,2540
77
- simo/core/form_fields.py,sha256=m3dR31M31q3DQM-7P4jBOXLofm-PiC0ykIfUrpWhOjg,5007
78
- simo/core/forms.py,sha256=UGGsBU8qPFWf_NMGg6IvImloojhoU0sTX2jrJ9mJPjs,21748
77
+ simo/core/form_fields.py,sha256=Os4bLhEt6fQpQ5JWPThs5XxMI2429kQNgr7SgDDr_y0,5063
78
+ simo/core/forms.py,sha256=osrwzw1nV-ObvFx7OMJaolqGU4xeZAOuhQRtirFjq6Q,22016
79
79
  simo/core/gateways.py,sha256=Y2BME6zSyeUq_e-hzEUF6gErCUCP6nFxedkLZKiLVOo,4141
80
80
  simo/core/loggers.py,sha256=EBdq23gTQScVfQVH-xeP90-wII2DQFDjoROAW6ggUP4,1645
81
81
  simo/core/managers.py,sha256=n-b3I4uXzfHKTeB1VMjSaMsDUxp8FegFJwnbV1IsWQ4,3019
82
82
  simo/core/middleware.py,sha256=eUFf6iP-Snx_0TE3MoXsSwqrd5IjlukqZk2GQGStRCo,3385
83
- simo/core/models.py,sha256=-zhQEvQRqacTjdqL4Gv7shlP1Uo09Rj3vHKqNONlxWU,22716
83
+ simo/core/models.py,sha256=i7FT-y4wdvwwMbvxxDO3F9VSwLXBVcjlSFawb-V7N8w,23709
84
84
  simo/core/permissions.py,sha256=2YNRot2qoHjHKWPGOpO4PBseecctPbTlUQpepnFkCRs,3027
85
85
  simo/core/routing.py,sha256=X1_IHxyA-_Q7hw1udDoviVP4_FSBDl8GYETTC2zWTbY,499
86
- simo/core/serializers.py,sha256=pa4F5fSvIxgGJWBEcXdzpmemRWl6QbUoUDMqQ_RdA2o,22514
87
- simo/core/signal_receivers.py,sha256=y8p0BG3PzhHI3w2WXS8QXyxXc7YKUE_mmO2-QElvrP4,6276
86
+ simo/core/serializers.py,sha256=b_38QV6LXsHZ7KfzX-h6N_-RjyV94ZDAyR6tok9lCbs,22664
87
+ simo/core/signal_receivers.py,sha256=5qp607PdNlRHyw88YOXu7rSznHm3upEpWLxB0lmEa0s,6527
88
88
  simo/core/socket_consumers.py,sha256=Es_NmacQGZjsncBXDTEXR2yZbRs7mf2FKOBJjbZRGac,9607
89
89
  simo/core/storage.py,sha256=_5igjaoWZAiExGWFEJMElxUw55DzJG1jqFty33xe8BE,342
90
90
  simo/core/tasks.py,sha256=LMTkZQDGFus5L2Q8AGzYegjpnZKf9Klgo3V9BT5L2ng,16904
91
91
  simo/core/todos.py,sha256=eYVXfLGiapkxKK57XuviSNe3WsUYyIWZ0hgQJk7ThKo,665
92
92
  simo/core/types.py,sha256=WJEq48mIbFi_5Alt4wxWMGXxNxUTXqfQU5koH7wqHHI,1108
93
- simo/core/views.py,sha256=yx9I0byeVUa-LAOnklpWIYwpNNOf5m9fyjKBvj4YCh4,2475
93
+ simo/core/views.py,sha256=08H4Bm7KrHxB3p3ZKx1vrFR4d0DjCqMbqQosEsRWpkY,2841
94
94
  simo/core/widgets.py,sha256=J9e06C6I22F6xKic3VMgG7WeX07glAcl-4bF2Mg180A,2827
95
95
  simo/core/__pycache__/__init__.cpython-38.pyc,sha256=ZJFM_XN0RmJMULQulgA_wFiOnEtsMoedcOWnXjH-Y8o,208
96
- simo/core/__pycache__/admin.cpython-38.pyc,sha256=oDG9Kem_VbiRDB6ednmvPS9asBDb3iki7OyLzzNRYCQ,14155
96
+ simo/core/__pycache__/admin.cpython-38.pyc,sha256=zdegA3IsH3QhT7Hm6Aj08F2sv-3h1X7VBcwN05fhVis,14155
97
97
  simo/core/__pycache__/api.cpython-38.pyc,sha256=JXCs5U9MPyZTdO4_j-ytpH1_Fo9-w36zs1eHXZ-czwo,22925
98
98
  simo/core/__pycache__/api_auth.cpython-38.pyc,sha256=mi3mu5qEKio_PvfQEvr3Q6AhdPLAHxzxAxrMbAz_pKU,1712
99
- simo/core/__pycache__/api_meta.cpython-38.pyc,sha256=km2IBFS1ot6CTYuIAnCwQToQLVQqRasAvfQ6UC8-1ts,3853
99
+ simo/core/__pycache__/api_meta.cpython-38.pyc,sha256=euP2EQsfTVCdvMT9NY10bK7xrz2dQouqQKZP0efN1ss,3906
100
100
  simo/core/__pycache__/app_widgets.cpython-38.pyc,sha256=oN657XMMZ6GYN9nblv7fX3kdnTEzSP9XV6PXM6Z0wl4,4358
101
101
  simo/core/__pycache__/apps.cpython-38.pyc,sha256=JL0BEqgXcSQvMlcK48PBpPfyDEkPMdO1Y0teqMRGirs,713
102
- simo/core/__pycache__/auto_urls.cpython-38.pyc,sha256=ib_ns5Ko8ybfrdJJWYVV1jevihxOFs39aBF4bez6Lzs,874
102
+ simo/core/__pycache__/auto_urls.cpython-38.pyc,sha256=mwS1N-R5kcT5uoDAGraKG9MWZpCM8_SA4L4eyZsVpYk,949
103
103
  simo/core/__pycache__/autocomplete_views.cpython-38.pyc,sha256=rZzjrxAir0HzN9uKPoXIY753f1CSdFWaSW7QBDen3qc,4448
104
104
  simo/core/__pycache__/base_types.cpython-38.pyc,sha256=CX-qlF7CefRi_mCE954wYa9rUFR88mOl6g7fybDRu7g,803
105
105
  simo/core/__pycache__/context.cpython-38.pyc,sha256=NlTHt2GvXxA21AhBkeyOLfRFUuXw7wmwqyNhhcDl2cw,1373
@@ -107,22 +107,22 @@ simo/core/__pycache__/controllers.cpython-38.pyc,sha256=LtrQQ8egOIOuQbAckeM-z8Of
107
107
  simo/core/__pycache__/dynamic_settings.cpython-38.pyc,sha256=wGpnscX1DxFpRl54MQURhjz2aD3NJohSzw9JCFnzh2Y,2384
108
108
  simo/core/__pycache__/events.cpython-38.pyc,sha256=1y8YaZsiDkBOeIWzH7SQz4holmMG_RLlMWi8kuSZcoE,5280
109
109
  simo/core/__pycache__/filters.cpython-38.pyc,sha256=WBBDwcDQwOmgbrRhyUxenSN80rU4Eq9jQ6RcrRGCP_o,2440
110
- simo/core/__pycache__/form_fields.cpython-38.pyc,sha256=BXiHLzmLgex-JrCcTo5k26CyZyKZ_QJv7eoEwyJGE-g,5745
111
- simo/core/__pycache__/forms.cpython-38.pyc,sha256=GaAOXoLUc8xvu5sqJG1Z6K-xkkPtd2Y6WrGFft7dklw,17658
110
+ simo/core/__pycache__/form_fields.cpython-38.pyc,sha256=WJgjOqvl5BZoVAGVtxGeDOOW-jn3_fdJwVYBx1IRJlY,5886
111
+ simo/core/__pycache__/forms.cpython-38.pyc,sha256=frvM1b9KRqsjh4YbUlV1CW8yupUyXJTb2R4sVgwy2K0,17827
112
112
  simo/core/__pycache__/gateways.cpython-38.pyc,sha256=-_ugqnUOA1Cl6VfMqpV96n7ekVOEwYg_jNvoaZEcx9I,4815
113
113
  simo/core/__pycache__/loggers.cpython-38.pyc,sha256=Z-cdQnC6XlIonPV4Sl4E52tP4NMEdPAiHK0cFaIL7I8,1623
114
114
  simo/core/__pycache__/managers.cpython-38.pyc,sha256=6RTIxyjOgpQGtAqcUyE2vFPS09w1V5Wmd_vOV7rHRRI,3370
115
115
  simo/core/__pycache__/middleware.cpython-38.pyc,sha256=SgTLFNkKxvJ62hevSAVNZHgHdG_u2p7AZBhrj-jfFPs,2649
116
- simo/core/__pycache__/models.cpython-38.pyc,sha256=I6u3Gs4Af0lv6GWDDhlTSTqJWiErhMWSoksNWxSODsg,18865
116
+ simo/core/__pycache__/models.cpython-38.pyc,sha256=EG1RJ-kaOFupzHcrZnii6JQUuoQ1gbt6LN9xUMfHFo4,19610
117
117
  simo/core/__pycache__/permissions.cpython-38.pyc,sha256=UdtxCTXPEbe99vgZOfRz9wfKSYvUn9hSRbpIV9CJSyI,2988
118
118
  simo/core/__pycache__/routing.cpython-38.pyc,sha256=3T3FPJ8Cn99xZCGvMyg2xjl7al-Shm9CelbSpkJtNP8,599
119
- simo/core/__pycache__/serializers.cpython-38.pyc,sha256=xegjaPbTp71RK9pfle_vgbHiUhr4CQIq34A7RxpvNGg,19817
120
- simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=v-qSKC9KX--aw9-vSNX8z8HXNFr0yOII0Aw8JxrYM0U,4920
121
- simo/core/__pycache__/socket_consumers.cpython-38.pyc,sha256=KqbO1cOewodVPcy0-htVefyUjCuELKV0o7fOfYqfgPc,8490
119
+ simo/core/__pycache__/serializers.cpython-38.pyc,sha256=ciWQe19lrr5ImXByMZJI8JM47IlqmyAo1XcXfnVrU80,20018
120
+ simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=R_h1GHkoZXR-nrwiRJWQ9xE69JB1R_mP_fNYIBX4lrE,5165
121
+ simo/core/__pycache__/socket_consumers.cpython-38.pyc,sha256=Mr1-x-vGjBNffbz0S6AKpJCuzHJgRm8kXefv3qVVY_E,8397
122
122
  simo/core/__pycache__/storage.cpython-38.pyc,sha256=9R1Xu0FJDflfRXUPsqEgt0SpwiP7FGk7HaR8s8XRyI8,721
123
123
  simo/core/__pycache__/tasks.cpython-38.pyc,sha256=-J2is-l5XsfhamreN2TPQDTK-Jw6XGYL81bcVfjXsU8,11213
124
124
  simo/core/__pycache__/todos.cpython-38.pyc,sha256=lOqGZ58siHM3isoJV4r7sg8igrfE9fFd-jSfeBa0AQI,253
125
- simo/core/__pycache__/views.cpython-38.pyc,sha256=IRjbX3MwKkAb10sMIJ3esKZH8W-tHwnuzm-mLIT_NWc,2584
125
+ simo/core/__pycache__/views.cpython-38.pyc,sha256=kYKvEcyKicdkTcN0iEJ4pT101-KHiZfXWkidiu82Evw,2925
126
126
  simo/core/__pycache__/widgets.cpython-38.pyc,sha256=sR0ZeHCHrhnNDBJuRrxp3zUsfBp0xrtF0xrK2TkQv1o,3520
127
127
  simo/core/db_backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
128
  simo/core/db_backend/base.py,sha256=wY5jsZ8hQpwot3o-7JNtDe33xy-vlfMLXa011htDojI,601
@@ -237,6 +237,8 @@ simo/core/migrations/0043_alter_category_instance_alter_instance_timezone_and_mo
237
237
  simo/core/migrations/0044_alter_gateway_type.py,sha256=xoQvOSz_JrWHECAAII83518tmhEEfLUHqxpIjoo4oLY,758
238
238
  simo/core/migrations/0045_alter_instance_device_report_history_days_and_more.py,sha256=saR7gEbTDfXTcKnT1R193Aboqlg32HvDRI_JAvZ97TY,1360
239
239
  simo/core/migrations/0046_component_value_translation_alter_gateway_type.py,sha256=SUybDSLRCGevVS9mCQGvozO8LA43tKze3R5rCf1TQ4E,1282
240
+ simo/core/migrations/0047_alter_component_value_translation.py,sha256=3GAgUBkZKUwWJMbDJxJJLBicC8eKkQ2ZJA__-xYpBCo,733
241
+ simo/core/migrations/0048_publicfile_privatefile.py,sha256=3NAP6f1ep66-CHJ7olSYOnXXeN7fTAg76lEjTJE1rL8,1601
240
242
  simo/core/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
241
243
  simo/core/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=w6GiBXVxWj30Bg4Sn_pFVeA041d-pCrkaq8mR3KuF70,5381
242
244
  simo/core/migrations/__pycache__/0002_load_icons.cpython-38.pyc,sha256=Nb9RrPjVYo_RpZ5PmzoaEIWGCeVt4kicpmGiKlBrpIw,2123
@@ -284,6 +286,8 @@ simo/core/migrations/__pycache__/0043_alter_category_instance_alter_instance_tim
284
286
  simo/core/migrations/__pycache__/0044_alter_gateway_type.cpython-38.pyc,sha256=KwqGKoo8C1wH9ZUhagpC3plTwheSMcWtwlCGcSPd5WQ,964
285
287
  simo/core/migrations/__pycache__/0045_alter_instance_device_report_history_days_and_more.cpython-38.pyc,sha256=e1_hKjdokggnPndFkoBWrHQ18IkBi2W7WahcSjAbvKo,1278
286
288
  simo/core/migrations/__pycache__/0046_component_value_translation_alter_gateway_type.cpython-38.pyc,sha256=0WowsGpjyPX7Z341bhU4bXErZqqFZaL1gtiusabrD0I,1445
289
+ simo/core/migrations/__pycache__/0047_alter_component_value_translation.cpython-38.pyc,sha256=ucmaVOjI3q78vBTiEC7Aq76CklWq3fsC24EiH-mIzGc,961
290
+ simo/core/migrations/__pycache__/0048_publicfile_privatefile.cpython-38.pyc,sha256=Xtycj-4jvkB8UjVdgZZRzTgYl68Cr-Jj9WqCAho1Ggk,1346
287
291
  simo/core/migrations/__pycache__/__init__.cpython-38.pyc,sha256=VZmDQ57BTcebuM0KMhjiTOabgWZCBxQmSJzWZos9SO8,169
288
292
  simo/core/static/ansi_styles.css,sha256=4ieJGrjZPKyPSago9FdB_gflHoGE1vxCHi8qVn5tY-Y,37352
289
293
  simo/core/static/admin/Img/plus.svg,sha256=2NpSFPWqGIjpAQGFI7LDQHPKagEhYkJiJX95ufCoZaI,741
@@ -10201,7 +10205,7 @@ simo/core/templates/admin/gateway_control/widget_internals.html,sha256=6UsVKQtHW
10201
10205
  simo/core/templates/admin/users/qr_code.html,sha256=kE4WNSVsPUvNUFnSUAY8jiD9JCvc6YasIS9vLuw0cbI,125
10202
10206
  simo/core/templates/admin/wizard/discovery.html,sha256=xpAiXgKneT0d53c7h1MyAjoOFdXc_lDaH9TdelrggVU,6608
10203
10207
  simo/core/templates/admin/wizard/field.html,sha256=ZbgzAUMs6RdJDH44yQ3-rmAkPmBdsIvBTk1RAQaENAs,413
10204
- simo/core/templates/admin/wizard/wizard_add.html,sha256=RPkwKXctu_yxJxjJqcvVEzG4YtK9-CJK801RPxleWRE,4127
10208
+ simo/core/templates/admin/wizard/wizard_add.html,sha256=ULT1Bj--YnMJ2uVs4zfI6hGZ4zNWTVLLnbADL4ATtLk,4093
10205
10209
  simo/core/templates/core/icon_acutocomplete_select_item.html,sha256=D7aWefAJjrDqyMcwt4vtuwkruklJ1aSjCTi99HLrQUY,768
10206
10210
  simo/core/templates/core/object_acutocomplete_select_item.html,sha256=pS8APlv1IdhfttONh3npzQNfrOhj63YC7837tnOfSHk,465
10207
10211
  simo/core/templates/core/openvpn_client.conf,sha256=z1838G8v8vmIiQKyfE8URCCMpLsges5jbX3hDJkztF4,249
@@ -10276,16 +10280,16 @@ simo/fleet/__pycache__/auto_urls.cpython-38.pyc,sha256=jHsvfwAumiBusr91QK1-qC-nm
10276
10280
  simo/fleet/__pycache__/base_types.cpython-38.pyc,sha256=deyPwjpT6xZiFxBGFnj5b7R-lbdOTh2krgpJhrcGVhc,274
10277
10281
  simo/fleet/__pycache__/ble.cpython-38.pyc,sha256=Nrof9w7cm4OlpFWHeVnmvvanh2_oF9oQ3TknJiV93-0,1267
10278
10282
  simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=vH7mK1K4JBcLU9eKtqTJwbgB0SFMJ-s7WvO0qOsWjrg,24739
10279
- simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=NkchZIvx79WswYepd8IgWwI7Pu3hd4sPkhsWt79YOII,45304
10283
+ simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=hrNfyGm2NfoNG1II-OqeHzR2TkkAWp3igvHGs6X0iIM,45252
10280
10284
  simo/fleet/__pycache__/gateways.cpython-38.pyc,sha256=MIpXuGWitGNdsxJ99fWvMXJ6sVE96ac7iR4K4aM4Sds,5148
10281
10285
  simo/fleet/__pycache__/managers.cpython-38.pyc,sha256=Vmm23zoQnS3-uS5_WJt2n3wtjhLiEhLWaYxXJCU6Gts,1339
10282
10286
  simo/fleet/__pycache__/models.cpython-38.pyc,sha256=AXk1Q_nnHDXirHYgM3EW5pLsrR2CaPWk4EuvGCuDUpI,14131
10283
10287
  simo/fleet/__pycache__/routing.cpython-38.pyc,sha256=aPrCmxFKVyB8R8ZbJDwdPdFfvT7CvobovvZeq_mqRgY,314
10284
10288
  simo/fleet/__pycache__/serializers.cpython-38.pyc,sha256=l_FzORWCM1hcSZV0AaGRO-p0CMTcEfqnLGgbn2IVvI0,3648
10285
- simo/fleet/__pycache__/socket_consumers.cpython-38.pyc,sha256=m8sJWln-uyjeTD-alyoNikEJcHCxZGTe2vXnMGVNZog,14170
10289
+ simo/fleet/__pycache__/socket_consumers.cpython-38.pyc,sha256=lEC1SkY_KgRY0QoBUMPjnbFwSa7qmCf-4eNQ45hAy68,14141
10286
10290
  simo/fleet/__pycache__/tasks.cpython-38.pyc,sha256=RoNxL2WUiW67s9O9DjaYVVjCBSZu2nje0Qn9FJkWVS0,1116
10287
10291
  simo/fleet/__pycache__/utils.cpython-38.pyc,sha256=obUd-X2Y-ybx4icqUWq_qwIxrP9yyarJjexWAfO4MTI,3344
10288
- simo/fleet/__pycache__/views.cpython-38.pyc,sha256=xj7aOlbCwYwrlIuyS9jceiPlMHxY-mmlbfXMJRJ6O5g,4337
10292
+ simo/fleet/__pycache__/views.cpython-38.pyc,sha256=awPe_fz7V5DgknQGEyHqbOFhX6iBhK7Y5TIa7zcO-so,4342
10289
10293
  simo/fleet/migrations/0001_initial.py,sha256=lce8nkD8Sz6pYr-XJSpDm4CMDuB6TA__WtnHpIp-eA4,1326
10290
10294
  simo/fleet/migrations/0002_auto_20220422_0743.py,sha256=sFOfAjnQOzcJjE8lHrrHgTaGilJNYswMdXphgVzUZqY,825
10291
10295
  simo/fleet/migrations/0003_auto_20220422_0752.py,sha256=VcH7DyMAniEwT76hDVofS8FTNpM3nxz_J9AC2zKHDSA,543
@@ -10374,27 +10378,28 @@ simo/fleet/migrations/__pycache__/0040_alter_colonel_pwm_frequency.cpython-38.py
10374
10378
  simo/fleet/migrations/__pycache__/0041_alter_colonel_instance_and_more.cpython-38.pyc,sha256=76yu9gz3pcAq5IYbNeZIoOSgdi0HVqTvc3EdXLGriQI,1178
10375
10379
  simo/fleet/migrations/__pycache__/0042_auto_20241120_1028.cpython-38.pyc,sha256=yK2HRc7MYMc4i9ev7FaguBdnXUnUmpFn8E8JOP_yluA,1030
10376
10380
  simo/fleet/migrations/__pycache__/0043_auto_20241203_0930.cpython-38.pyc,sha256=0QWVIvorcCuhfuGFu0fMdu5vkxcQSosxjt8KT6Ld07E,980
10381
+ simo/fleet/migrations/__pycache__/0044_auto_20241210_0707.cpython-38.pyc,sha256=M99PMBDgOdS_0KIEhlUamHWeTVCTdIHFXIvYTRX15Z8,1029
10377
10382
  simo/fleet/migrations/__pycache__/__init__.cpython-38.pyc,sha256=5k1KW0jeSDzw6RnVPRq4CaO13Lg7M0F-pxA_gqqZ6Mg,170
10378
10383
  simo/fleet/templates/fleet/controllers_info/Button.md,sha256=GIuxqG617174NEtpPeCGVocxO4YMe7-CacgVSu_L5-E,739
10379
10384
  simo/fleet/templates/fleet/controllers_info/ENS160AirQualitySensor.md,sha256=3LSTY9YPFuVPIbVsYCAifcotrXJcOXl2k774_vo6nAE,770
10380
10385
  simo/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10381
10386
  simo/generic/app_widgets.py,sha256=y8W3jR76Hh26O9pPQyg2SophMbYIOtAWD33MPKbB8Mg,856
10382
10387
  simo/generic/base_types.py,sha256=u3SlfpNYaCwkVBwomWgso4ODzL71ay9MhiAW-bxgnDU,341
10383
- simo/generic/controllers.py,sha256=Y-juxa7OSz24XYysFe785DCHPlbGeEurGTkK471S3iI,46123
10384
- simo/generic/forms.py,sha256=ikSwn6hg6m4XoaWyZNydw9e5aoFRHxbeM8tWsyYlen4,22993
10385
- simo/generic/gateways.py,sha256=SBQPlcU2oNCWzRQ1H1XWQ11O2E3zWDNImXlWNDzKg-Y,15865
10388
+ simo/generic/controllers.py,sha256=gqL1Evt-8Cq8MeHG-eV8aCtQ4St_gylE52wnXwOQUWU,46285
10389
+ simo/generic/forms.py,sha256=fjin6h3JyVH7dP-YQ_snPnfP3djAR_abXBH4FqD0Y7M,25734
10390
+ simo/generic/gateways.py,sha256=04FKHgg3_cWjhu-bxexgRFpKRavW6_StgugFcDYwkiQ,17471
10386
10391
  simo/generic/models.py,sha256=Adq7ipWK-renxJlNW-SZnAq2oGEOwKx8EdUWaKnfcVQ,7597
10387
10392
  simo/generic/routing.py,sha256=elQVZmgnPiieEuti4sJ7zITk1hlRxpgbotcutJJgC60,228
10388
10393
  simo/generic/socket_consumers.py,sha256=pyiqzfGxSKBNqfrfEJ_kCU0UbSC28XnvDn6QjKkbqyY,1767
10389
10394
  simo/generic/__pycache__/__init__.cpython-38.pyc,sha256=mLu54WS9KIl-pHwVCBKpsDFIlOqml--JsOVzAUHg6cU,161
10390
10395
  simo/generic/__pycache__/app_widgets.cpython-38.pyc,sha256=D9b13pbMlirgHmjDnQhfLIDGSVINoSouHb4SWOeCRrs,1642
10391
10396
  simo/generic/__pycache__/base_types.cpython-38.pyc,sha256=aV5NdIuvXR-ItKpI__MwcyPZHD6Z882TFdgYkPCkr1I,493
10392
- simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=tRYKQsZuWBBKXbfd32BGz3AsV4Jz4y-KsEkumoRP_T4,30195
10393
- simo/generic/__pycache__/forms.cpython-38.pyc,sha256=at1PQBgwr11YzSiTP92v3nyz1G59oKhu7vTa0sK0zUE,17289
10394
- simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=7Y190Iylo2X2AykcKrKzVllfDmW02B5suRMlcS0y6KQ,11712
10397
+ simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=jJjwKVaDYyazrRGNjUFoY74nr_jX_DEnsC9KjyxZCgc,30427
10398
+ simo/generic/__pycache__/forms.cpython-38.pyc,sha256=mCyRaYSqXVZxDFlEF4t0CPUe48ZbPGLcjsVVS4wbCM8,19321
10399
+ simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=GIeMT51oZU2OCFD4eUDFdSRRYE0Qf14AcOr_gdUqG94,12705
10395
10400
  simo/generic/__pycache__/models.cpython-38.pyc,sha256=MZpum7syAFxuulf47K7gtUlJJ7xRD-IBUBAwUM1ZRnw,5825
10396
10401
  simo/generic/__pycache__/routing.cpython-38.pyc,sha256=xtxTUTBTdivzFyA5Wh7k-hUj1WDO_FiRq6HYXdbr9Ks,382
10397
- simo/generic/__pycache__/socket_consumers.cpython-38.pyc,sha256=qJO5kvQLWhsQDOr1AtAtsAybuRWioxSkQei3Pc7rdP0,1737
10402
+ simo/generic/__pycache__/socket_consumers.cpython-38.pyc,sha256=FaVCf_uJI2uwj1Zz-jwsOXou65oV9gFCIB8e-YKquRk,1662
10398
10403
  simo/generic/migrations/0001_initial.py,sha256=7FpPcfpRU5ya0b8s2KbxR5a3npf92YruvZltUybjzys,676
10399
10404
  simo/generic/migrations/0002_auto_20241126_0726.py,sha256=SX38JwP732QooOm5HM1Xo7Th_Mv_6YZloT3eozULOhs,922
10400
10405
  simo/generic/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -10427,33 +10432,38 @@ simo/generic/templates/admin/controller_widgets/weather.html,sha256=84SESQBhhzNU
10427
10432
  simo/generic/templates/generic/controllers_info/dummy.md,sha256=DcdkpYXpK7sroINukZZPUQs9uekN9kkE7p5hfnArgFo,147
10428
10433
  simo/generic/templates/generic/controllers_info/stateselect.md,sha256=T0w3vJg02W3RMSsljN1EPRnkVaeRW5acSZaSq9FYvZw,135
10429
10434
  simo/multimedia/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10430
- simo/multimedia/admin.py,sha256=GgXiKTLfi3omjBurU-bKgneJRK-tAeiR8o2jo3zD7zs,1002
10435
+ simo/multimedia/admin.py,sha256=S7WYYTwsd73WVU60MDVsheyRH9bDnsMZezV_kPJhYZ0,1031
10431
10436
  simo/multimedia/api.py,sha256=mZ5BTggWdc_kL8P70JGC3rTCiZKPnxWYoyNcAQkFnX4,285
10432
10437
  simo/multimedia/app_widgets.py,sha256=g_IPx5bNmIS6JbaXXDCzYZYV2KVKAiYvWjH4oI30lWM,331
10438
+ simo/multimedia/auto_urls.py,sha256=9FUwlifvAM-AJbAVK6ZCjsQdAZfREuf_sf-kSYjMu7I,204
10433
10439
  simo/multimedia/base_types.py,sha256=dAP7_uh_b3A03yXBJZyQdRFucKIro4_RkIZ5yOaWXVE,151
10434
- simo/multimedia/controllers.py,sha256=A_kSKOVRJIiGvEl4CzpqjcWt4v-JsDQNQJ8ylrgplCc,3368
10440
+ simo/multimedia/controllers.py,sha256=hEPdzVqnwzJXMYjuEsxKIYcaHK3asg3ur8m4XeEjEAA,3534
10435
10441
  simo/multimedia/forms.py,sha256=oMCVUXRNiESrY3w_uBLRRgjMjx8BrmNeVglzorA9QtY,239
10436
- simo/multimedia/models.py,sha256=5aWGLWDdCkekGAOGZIdanvX1l6ULnhgJN4JAvDZT4nQ,734
10437
- simo/multimedia/requirements.txt,sha256=QeIhjf1RfNGCYn_WZm3VuinPI2wK31WEJPbCxRWxssY,28
10442
+ simo/multimedia/models.py,sha256=qUQaADxFegVMbcEdjyP72UCq5kkqJ5ZSe2lu9qyoom8,1169
10438
10443
  simo/multimedia/serializers.py,sha256=9DRGsJVJLKdqmOLiVHMY06bTTYxpABhDy1JB_klzsBw,383
10444
+ simo/multimedia/views.py,sha256=oFhtJQJT5-XRtzoIKo7SWqLydCB9AWzcj2a-kQ5P7dw,558
10439
10445
  simo/multimedia/__pycache__/__init__.cpython-38.pyc,sha256=BOLHOifu6r_MuWjddGcQVsYkqYlkmHvPQIcx3selLIk,164
10440
- simo/multimedia/__pycache__/admin.cpython-38.pyc,sha256=kIVA9sfSgBYNMC64CaSDXLl4ZPYwFp1xjrrC55XCrbw,1353
10446
+ simo/multimedia/__pycache__/admin.cpython-38.pyc,sha256=xIax_AtzQlJiQmEBG5xuhJz2-Ztf40e26AQs5oBISfw,1309
10441
10447
  simo/multimedia/__pycache__/api.cpython-38.pyc,sha256=lFGEB74vgyEM98B42wwcN9WvH8FAupIiSY0SwEBd5Dw,605
10442
10448
  simo/multimedia/__pycache__/app_widgets.cpython-38.pyc,sha256=6pr3fz21tQ5ReC9SJ8VzheUZ0hpxDIClB0SA8YCwcPk,730
10449
+ simo/multimedia/__pycache__/auto_urls.cpython-38.pyc,sha256=JNI3pZNFC3NoJV4cxsy-Oe6Vc6TA9fpPU63hjlXWINE,357
10443
10450
  simo/multimedia/__pycache__/base_types.cpython-38.pyc,sha256=c4nmNziLs4RB3MAnxltn3W5XNW6PM5_vK_mm3Yvy42Y,324
10444
- simo/multimedia/__pycache__/controllers.cpython-38.pyc,sha256=C9stIL6FgGiFOxMy76QemVvc7wshVEsPxfa0wCtG4PQ,3464
10451
+ simo/multimedia/__pycache__/controllers.cpython-38.pyc,sha256=sbWvA-ro93qWxV6Qk8Pv_WPsq91tqlnFPIvCeQ0tvLA,4997
10445
10452
  simo/multimedia/__pycache__/forms.cpython-38.pyc,sha256=99h7Yj2jim3QOrqej00wiPufrCF3F--RoYvwa6lzhPI,697
10446
- simo/multimedia/__pycache__/models.cpython-38.pyc,sha256=2LViRCOULb9g_k3wZvrODVIuj-iFgfwoWXyg-mAx8Ys,1195
10453
+ simo/multimedia/__pycache__/models.cpython-38.pyc,sha256=LmQ_XMA--wvLq11xYp24nU-y-kbx17iEZ10y9twCMJ0,1662
10447
10454
  simo/multimedia/__pycache__/serializers.cpython-38.pyc,sha256=n86txYSrkmN0Xlrr8dMwKSY7rEzMc1iovepCZi_Fcw8,886
10455
+ simo/multimedia/__pycache__/views.cpython-38.pyc,sha256=yq5Hi2HrbSNr8MP4uUZO7_GMeVgqg21R6yFe85zNNhM,899
10448
10456
  simo/multimedia/migrations/0001_initial.py,sha256=YxTbmI-aF9OZUkFPnCNqV3t3r5nSJg59pKcTvm-ZYbU,610
10449
10457
  simo/multimedia/migrations/0002_sound_length.py,sha256=XpPemInQwL1QsiqhUPkdBPBYI2E5gDPyC_1vhyImq5M,471
10450
10458
  simo/multimedia/migrations/0003_alter_sound_length.py,sha256=tt1OJVkrCo6Ybws1mGobdvTP5o68P3-cHZdGG_PeZwU,442
10451
10459
  simo/multimedia/migrations/0004_auto_20231023_1055.py,sha256=ilH1o_wxkK5QDjcPEEDhoHWx2GcjZWLG6XjlUfQRmhI,718
10460
+ simo/multimedia/migrations/0005_remove_sound_slug_sound_date_uploaded.py,sha256=SzkgIhCIEVMSmxVwGHQfggdsX4wWybvskqVx-vVp2Qs,602
10452
10461
  simo/multimedia/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10453
10462
  simo/multimedia/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=slsqUkj8A11Oj5bYJ1s5dS60Qx4H9k_oRZ3HaAhuho4,760
10454
10463
  simo/multimedia/migrations/__pycache__/0002_sound_length.cpython-38.pyc,sha256=5Qh_yhupAkn6xcxP_T6KhA2__l6FdQmQb2Y0dzqq33s,678
10455
10464
  simo/multimedia/migrations/__pycache__/0003_alter_sound_length.cpython-38.pyc,sha256=dkdqLx_cWLAxxVCUxuuAX39iTv7G5kG-PhJ40HsPzx8,669
10456
10465
  simo/multimedia/migrations/__pycache__/0004_auto_20231023_1055.cpython-38.pyc,sha256=tX6x1gNeVcUHcCFvisP9Z2jPBE029TJG632fvtvUjV8,892
10466
+ simo/multimedia/migrations/__pycache__/0005_remove_sound_slug_sound_date_uploaded.cpython-38.pyc,sha256=vpu4EfpVp5rYRKYEVn4vDylgpeasD31ZV62sNR_HXhY,801
10457
10467
  simo/multimedia/migrations/__pycache__/__init__.cpython-38.pyc,sha256=mCgSiQBphL85imdWyTi9-4zBDYF6HfXbhB0ycSPVVuA,175
10458
10468
  simo/multimedia/templates/admin/controller_widgets/player.html,sha256=v4PFoL37-C7L6ILZI6yF5ff9iO3EnEs5kXbRayaHy0s,358
10459
10469
  simo/notifications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -10467,7 +10477,7 @@ simo/notifications/__pycache__/admin.cpython-38.pyc,sha256=MScNrtVM1wavefsPfxy0A
10467
10477
  simo/notifications/__pycache__/api.cpython-38.pyc,sha256=eQmCHwTnr4zQ3ZY_SKZVCryiSEnzmyIjHQM13pZ5LT0,2071
10468
10478
  simo/notifications/__pycache__/models.cpython-38.pyc,sha256=PoqLuOnlaAWQQ-20AtqhvAlLSkakPmdn7J7wGvHNW3g,2449
10469
10479
  simo/notifications/__pycache__/serializers.cpython-38.pyc,sha256=7-eRGKYuQ4g1SpKOMpz17SIiu1HmaMoYv-cJbaO9QGA,1028
10470
- simo/notifications/__pycache__/utils.cpython-38.pyc,sha256=6Tq7VkW-pZLzWzcxPtBU9MDFZLO7iLY8-ygyefoJ5OQ,1529
10480
+ simo/notifications/__pycache__/utils.cpython-38.pyc,sha256=4ZnI-pmWji84EXBkPrl4ir1kGjfanO4bH5--bLNRxCA,1648
10471
10481
  simo/notifications/migrations/0001_initial.py,sha256=Zh69AQ-EKlQKfqfnMDVRcxvo1MxRY-TFLCdnNcgqi6g,2003
10472
10482
  simo/notifications/migrations/0002_notification_instance.py,sha256=B3msbMeKvsuq-V7gvRADRjj5PFLayhi3pQvHZjqzO5g,563
10473
10483
  simo/notifications/migrations/0003_alter_notification_instance.py,sha256=CXrOkdbXYwlEK5O8iEjDzrocAP5WQ9fQ-0_TcT4VgEA,609
@@ -10502,7 +10512,7 @@ simo/users/__pycache__/auto_urls.cpython-38.pyc,sha256=bc6BOgghLdMzUroGMj7eB6YX9
10502
10512
  simo/users/__pycache__/dynamic_settings.cpython-38.pyc,sha256=6F8JBjZkHykySnmZjNEzjS0ijbmPdcp9yUAZ5kqq_Fo,864
10503
10513
  simo/users/__pycache__/managers.cpython-38.pyc,sha256=O0Y8ABp42RAosrbODmYsPMaj9AyOPyJ-aqzuO0Qpi2s,679
10504
10514
  simo/users/__pycache__/middleware.cpython-38.pyc,sha256=Tj4nVEAvxEW3xA63fBRiJWRJpz_M848ZOqbHioc_IPE,1149
10505
- simo/users/__pycache__/models.cpython-38.pyc,sha256=UH-lceJI5fYxYn85dIUJ8HYESwb9irIPkvu_d-vGSkA,17777
10515
+ simo/users/__pycache__/models.cpython-38.pyc,sha256=qNtAn_eWVmRTWhTxN8GtCc549dcJsTdaF7Uk19yNMgg,18330
10506
10516
  simo/users/__pycache__/permissions.cpython-38.pyc,sha256=ez5NxoL_JUeeH6GsKhvFreuA3FCBgGf9floSypdXUtM,633
10507
10517
  simo/users/__pycache__/serializers.cpython-38.pyc,sha256=Dy8RAcwNkNSXoJHvLp8fozURyHCtucqpSPyqZtbnMZc,3732
10508
10518
  simo/users/__pycache__/sso_urls.cpython-38.pyc,sha256=uAwDozpOmrhUald-8tOHANILXkH7-TI8fNYXOtPkSY8,402
@@ -10608,9 +10618,9 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
10608
10618
  simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10609
10619
  simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10610
10620
  simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10611
- simo-2.7.10.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
10612
- simo-2.7.10.dist-info/METADATA,sha256=FMpBbEAAJ0ZOZX4tmR9O9f-8ytqI4l4BHTCYUWAELbA,1953
10613
- simo-2.7.10.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
10614
- simo-2.7.10.dist-info/entry_points.txt,sha256=S9PwnUYmTSW7681GKDCxUbL0leRJIaRk6fDQIKgbZBA,135
10615
- simo-2.7.10.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
10616
- simo-2.7.10.dist-info/RECORD,,
10621
+ simo-2.7.12.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
10622
+ simo-2.7.12.dist-info/METADATA,sha256=DsdrTocx2YvL8_tIlq78umIwnESf0aQd0q8l2fEybgA,1953
10623
+ simo-2.7.12.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
10624
+ simo-2.7.12.dist-info/entry_points.txt,sha256=S9PwnUYmTSW7681GKDCxUbL0leRJIaRk6fDQIKgbZBA,135
10625
+ simo-2.7.12.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
10626
+ simo-2.7.12.dist-info/RECORD,,
@@ -1,2 +0,0 @@
1
- numpy>=1.24
2
- librosa>=0.10.1
File without changes