simo 2.0.8__py3-none-any.whl → 2.0.10__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/controllers.py CHANGED
@@ -402,7 +402,6 @@ class TTLock(FleeDeviceMixin, Lock):
402
402
  command='call', method='get_codes'
403
403
  ).publish()
404
404
 
405
-
406
405
  def add_fingerprint(self):
407
406
  GatewayObjectCommand(
408
407
  self.component.gateway,
@@ -420,6 +419,8 @@ class TTLock(FleeDeviceMixin, Lock):
420
419
  ).publish()
421
420
 
422
421
  def clear_fingerprints(self):
422
+ self.component.meta['clear_fingerprints'] = True
423
+ self.component.save(update_fields=['meta'])
423
424
  GatewayObjectCommand(
424
425
  self.component.gateway,
425
426
  Colonel(id=self.component.config['colonel']),
@@ -435,6 +436,24 @@ class TTLock(FleeDeviceMixin, Lock):
435
436
  command='call', method='get_fingerprints'
436
437
  ).publish()
437
438
 
439
+ def _receive_meta(self, data):
440
+ from simo.users.models import Fingerprint
441
+ if 'codes' in data:
442
+ self.component.meta['codes'] = data['codes']
443
+ for code in data['codes']:
444
+ Fingerprint.objects.get_or_create(
445
+ value=f"ttlock-{self.component.id}-code-{str(code)}",
446
+ defaults={'type': "TTLock code"}
447
+ )
448
+ if 'fingerprints' in data:
449
+ self.component.meta['fingerprints'] = data['fingerprints']
450
+ for finger in data['fingerprints']:
451
+ Fingerprint.objects.get_or_create(
452
+ value=f"ttlock-{self.component.id}-finger-{str(finger)}",
453
+ defaults={'type': "TTLock code"}
454
+ )
455
+ self.component.save(update_fields=['meta'])
456
+
438
457
 
439
458
  class DALIDevice(FleeDeviceMixin, ControllerBase):
440
459
  gateway_class = FleetGatewayHandler
@@ -7,7 +7,7 @@ def create_objects(apps, schema_editor):
7
7
  Interface = apps.get_model("fleet", "Interface")
8
8
  for i2c_i in I2CInterface.objects.filter(no__gt=0):
9
9
  Interface.objects.create(
10
- colonel=i2c_i.colonel, type='i2c',
10
+ no=i2c_i.no, colonel=i2c_i.colonel, type='i2c',
11
11
  pin_a=i2c_i.scl_pin, pin_b=i2c_i.sda_pin
12
12
  )
13
13
 
@@ -0,0 +1,24 @@
1
+ # Generated by Django 3.2.9 on 2024-04-18 07:35
2
+
3
+ from django.db import migrations, models
4
+ import django.db.models.deletion
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('fleet', '0033_auto_20240415_0736'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name='interface',
16
+ name='pin_a',
17
+ field=models.ForeignKey(editable=False, limit_choices_to={'native': True, 'output': True}, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='interface_a', to='fleet.colonelpin', verbose_name='Pin A (scl)'),
18
+ ),
19
+ migrations.AlterField(
20
+ model_name='interface',
21
+ name='pin_b',
22
+ field=models.ForeignKey(editable=False, limit_choices_to={'native': True, 'output': True}, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='interface_b', to='fleet.colonelpin', verbose_name='Pin B (sda)'),
23
+ ),
24
+ ]
@@ -392,30 +392,12 @@ class FleetConsumer(AsyncWebsocketConsumer):
392
392
  receive_options, thread_sensitive=True
393
393
  )(data['options'])
394
394
 
395
- if 'codes' in data and component.controller_uid == TTLock.uid:
396
- def save_codes(codes):
397
- component.meta['codes'] = codes
398
- for code in codes:
399
- Fingerprint.objects.get_or_create(
400
- value=f"ttlock-{component.id}-code-{str(code)}",
401
- defaults={'type': "TTLock code"}
402
- )
403
- component.save()
404
- await sync_to_async(
405
- save_codes, thread_sensitive=True
406
- )(data['codes'])
407
- if 'fingerprints' in data and component.controller_uid == TTLock.uid:
408
- def save_fingerprints(codes):
409
- component.meta['fingerprints'] = codes
410
- for code in codes:
411
- Fingerprint.objects.get_or_create(
412
- value=f"ttlock-{component.id}-finger-{str(code)}",
413
- defaults={'type': "TTLock Fingerprint"}
414
- )
415
- component.save()
416
- await sync_to_async(
417
- save_fingerprints, thread_sensitive=True
418
- )(data['fingerprints'])
395
+ if component.controller_uid == TTLock.uid:
396
+ if 'codes' in data or 'fingerprints' in data:
397
+ await sync_to_async(
398
+ component.controller._receive_meta,
399
+ thread_sensitive=True
400
+ )(data)
419
401
 
420
402
  except Exception as e:
421
403
  print(traceback.format_exc(), file=sys.stderr)
simo/generic/gateways.py CHANGED
@@ -114,9 +114,9 @@ class CameraWatcher(threading.Thread):
114
114
 
115
115
  class ScriptRunHandler(multiprocessing.Process):
116
116
  '''
117
- Threading offers better overall stability, but we must use
118
- multiprocessing for Scripts only to be able to kill them whenever
119
- we need it.
117
+ Threading offers better overall stability, but we use
118
+ multiprocessing for Scripts so that they are better isolated and
119
+ we are able to kill them whenever we need.
120
120
  '''
121
121
  component = None
122
122
  logger = None
@@ -164,7 +164,7 @@ class GenericGatewayHandler(BaseObjectCommandsGatewayHandler):
164
164
  periodic_tasks = (
165
165
  ('watch_thermostats', 60),
166
166
  ('watch_alarm_clocks', 30),
167
- ('watch_scripts', 60),
167
+ ('watch_scripts', 10),
168
168
  ('watch_watering', 60)
169
169
  )
170
170
 
@@ -187,6 +187,29 @@ class GenericGatewayHandler(BaseObjectCommandsGatewayHandler):
187
187
  alarm_clock.tick()
188
188
 
189
189
  def watch_scripts(self):
190
+ # observe running scripts and drop the ones that are no longer alive
191
+ dead_processes = []
192
+ for id, process in self.running_scripts.items():
193
+ if process.is_alive():
194
+ continue
195
+ component = Component.objects.filter(id=id).exclude(
196
+ value__in=('error', 'finished')
197
+ ).first()
198
+ if component:
199
+ logger = get_component_logger(component)
200
+ logger.log(logging.INFO, "-------DEAD!-------")
201
+ component.value = 'error'
202
+ component.save()
203
+ dead_processes.append(id)
204
+
205
+ for id in dead_processes:
206
+ self.running_scripts.pop(id)
207
+
208
+ if dead_processes:
209
+ # give 10s of air before we restart the scripts what were
210
+ # detected to be dead.
211
+ return
212
+
190
213
  from simo.generic.controllers import Script
191
214
  for script in Component.objects.filter(
192
215
  controller_uid=Script.uid,
@@ -0,0 +1,18 @@
1
+ # Generated by Django 3.2.9 on 2024-04-18 07:35
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('users', '0025_rename_name_fingerprint_type_and_more'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name='fingerprint',
15
+ name='name',
16
+ field=models.CharField(blank=True, max_length=100, null=True),
17
+ ),
18
+ ]
simo/users/models.py CHANGED
@@ -359,6 +359,7 @@ class Fingerprint(models.Model):
359
359
  User, on_delete=models.CASCADE, null=True, blank=True,
360
360
  related_name='fingerprints'
361
361
  )
362
+ name = models.CharField(max_length=100, null=True, blank=True)
362
363
  date_created = models.DateTimeField(auto_now_add=True)
363
364
  type = models.CharField(max_length=100, null=True, blank=True)
364
365
 
simo/users/serializers.py CHANGED
@@ -7,9 +7,6 @@ from .models import (
7
7
  )
8
8
 
9
9
 
10
-
11
-
12
-
13
10
  class UserSerializer(serializers.ModelSerializer):
14
11
  avatar = serializers.SerializerMethodField()
15
12
  role = serializers.IntegerField(source='role_id')
@@ -81,7 +78,7 @@ class FingerprintSerializer(serializers.ModelSerializer):
81
78
 
82
79
  class Meta:
83
80
  model = Fingerprint
84
- fields = 'id', 'type', 'value', 'user'
81
+ fields = 'id', 'type', 'value', 'user', 'name'
85
82
  read_only_fields = ('id', 'type', 'value')
86
83
 
87
84
  def get_type(self, obj):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: simo
3
- Version: 2.0.8
3
+ Version: 2.0.10
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
@@ -141,6 +141,7 @@ simo/core/management/commands/gateways_manager.py,sha256=a_JmUG1SPJhbhPh5QdViCT5
141
141
  simo/core/management/commands/run_gateway.py,sha256=bp0FQQoBeOSoxjHCCMicDL1fxPZZGyLgnq2QKht3bJo,645
142
142
  simo/core/management/commands/update.py,sha256=Y2_6EL8E757nr-MjSuIpdSsEItI0yN42DT5P1e1zkno,175
143
143
  simo/core/management/commands/__pycache__/__init__.cpython-38.pyc,sha256=WKpfZZpAB9D7U4X6oWQIrU_H-6rUmq8Gl9fj9XaY2fw,178
144
+ simo/core/management/commands/__pycache__/gateways_manager.cpython-38.pyc,sha256=pgEJdchhOcqKCpjdRMeF0_QKJfMmfSkl_W4TUwcgS9o,6031
144
145
  simo/core/migrations/0001_initial.py,sha256=0Uy7IqJxQQYlurs8Mw_RJy7NaWS7BU0VFmZBBz8YkQI,9220
145
146
  simo/core/migrations/0002_load_icons.py,sha256=s9TtGo5NWEyWV3BspfbDNAlWqmQWxmDj7GjEaJXruFk,2044
146
147
  simo/core/migrations/0003_create_default_zones_and_categories.py,sha256=59pZuYv1b4jaBaLRtkHwGroYYVjwgS1m1wV1FOoey7s,1728
@@ -10167,14 +10168,14 @@ simo/fleet/api.py,sha256=Hxn84xI-Q77HxjINgRbjSJQOv9jii4OL20LxK0VSrS8,2499
10167
10168
  simo/fleet/auto_urls.py,sha256=X04oKJWA48wFW5iXg3PPROY2KDdHn_a99orQSE28QC4,518
10168
10169
  simo/fleet/base_types.py,sha256=wL9RVkHr0gA7HI1wZq0pruGEIgvQqpfnCL4cC3ywsvw,102
10169
10170
  simo/fleet/ble.py,sha256=eHA_9ABjbmH1vUVCv9hiPXQL2GZZSEVwfO0xyI1S0nI,1081
10170
- simo/fleet/controllers.py,sha256=LF5-Mst617BuZHyRErk_6diAk85pa5uelGoTelBY184,17743
10171
+ simo/fleet/controllers.py,sha256=vt-IeCnMN70RU498SIasWk1fW29hvMWU7WgYtbGA4gA,18663
10171
10172
  simo/fleet/forms.py,sha256=lWJ9luZiRJD4yLQCdCMmkvezk-vY3yVb3q7Y5C4r9qc,35649
10172
10173
  simo/fleet/gateways.py,sha256=EbSxv1DGSuv8MT7MmpZxKgV041umOteFW2Xo4LybzWI,2284
10173
10174
  simo/fleet/managers.py,sha256=XOpDOA9L-f_550TNSyXnJbun2EmtGz1TenVTMlUSb8E,807
10174
10175
  simo/fleet/models.py,sha256=J-rnn7Ew-7s3646NNRVY947Sbz21mUD_nBHtuHAKXds,14160
10175
10176
  simo/fleet/routing.py,sha256=cofGsVWXMfPDwsJ6HM88xxtRxHwERhJ48Xyxc8mxg5o,149
10176
10177
  simo/fleet/serializers.py,sha256=zEpXAXxjk4Rf1JhlNnLTrs20qJggqjvIySbeHVo4Tt4,1505
10177
- simo/fleet/socket_consumers.py,sha256=e_PtRWLPIrJxNBhtQIAC7idk1oaV-LVZWQchz5iffUk,19680
10178
+ simo/fleet/socket_consumers.py,sha256=Z-MooNN2HQccdhkynADJks5slbK9mGsnEpMLuA51H3I,18534
10178
10179
  simo/fleet/utils.py,sha256=2gcjbwQawsGw2edr_wm9q6XacGpYqO-gd4BF1t0Hg6U,3511
10179
10180
  simo/fleet/views.py,sha256=YKkcf8KcLgiPjr-brIHvu5yr1zZUIs8aytAgwdo49Pg,1694
10180
10181
  simo/fleet/__pycache__/__init__.cpython-38.pyc,sha256=pIZE7EL6-cuJ3pQtaSwjKLrKLsTYelp1k9sRhXKLh6s,159
@@ -10183,14 +10184,14 @@ simo/fleet/__pycache__/api.cpython-38.pyc,sha256=rL9fb7cCQatyFvXyKmlNOKmxVo8vHYe
10183
10184
  simo/fleet/__pycache__/auto_urls.cpython-38.pyc,sha256=SqyTuaz_kEBvx-bL46SclsZEEP5RFh6U6TGKyXDdiOE,565
10184
10185
  simo/fleet/__pycache__/base_types.cpython-38.pyc,sha256=deyPwjpT6xZiFxBGFnj5b7R-lbdOTh2krgpJhrcGVhc,274
10185
10186
  simo/fleet/__pycache__/ble.cpython-38.pyc,sha256=Nrof9w7cm4OlpFWHeVnmvvanh2_oF9oQ3TknJiV93-0,1267
10186
- simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=2XWWfU0zkbha_MMPD0KbSOnh9CHUNLcsI-VKmr8Z7e0,15559
10187
+ simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=KAmVOz5Z8Qt9m2Jw_MPoCWeP220urQ73F2lfXEtHWNo,16199
10187
10188
  simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=pHgx8ulx_2v0L0bkUHaW13Tn9KcfOP6ROhgHXPVvKJE,25510
10188
10189
  simo/fleet/__pycache__/gateways.cpython-38.pyc,sha256=xg7fW5JusYwl6epn5nEjxQJlFOyQ18SVybOaRBcpwl8,2418
10189
10190
  simo/fleet/__pycache__/managers.cpython-38.pyc,sha256=8uz-xpUiqbGDgXIZ_XRZtFb-Tju6NGxflGg-Ee4Yo6k,1310
10190
10191
  simo/fleet/__pycache__/models.cpython-38.pyc,sha256=S9pPqRjIxASXahoIOkkjQX7cBwjkdu4d2nXMju0-Cf8,12283
10191
10192
  simo/fleet/__pycache__/routing.cpython-38.pyc,sha256=aPrCmxFKVyB8R8ZbJDwdPdFfvT7CvobovvZeq_mqRgY,314
10192
10193
  simo/fleet/__pycache__/serializers.cpython-38.pyc,sha256=yuY2H7jcboQGZdjb5WIsgNHXFhI9IPMUrEu9NgSiXNo,2452
10193
- simo/fleet/__pycache__/socket_consumers.cpython-38.pyc,sha256=dAq59u6jcxHZ3W9dR0HSp_kfiZUhMPVja0SqJ38crhk,14399
10194
+ simo/fleet/__pycache__/socket_consumers.cpython-38.pyc,sha256=RjzPD580096fby0HYLzZorm61zdZNOq5AHXmNAC4Yd8,13764
10194
10195
  simo/fleet/__pycache__/utils.cpython-38.pyc,sha256=dTuvW9MnhUycwdCc6eHYfHsMlvZw-CmEWXWYu18X8Uw,1955
10195
10196
  simo/fleet/__pycache__/views.cpython-38.pyc,sha256=7hhRBlf6Vczg0TTdwTE5Hc5B-F7VcvFg1iS6mfs-fgo,1790
10196
10197
  simo/fleet/migrations/0001_initial.py,sha256=lce8nkD8Sz6pYr-XJSpDm4CMDuB6TA__WtnHpIp-eA4,1326
@@ -10225,7 +10226,8 @@ simo/fleet/migrations/0029_alter_i2cinterface_scl_pin_and_more.py,sha256=aquymc1
10225
10226
  simo/fleet/migrations/0030_colonelpin_label_alter_colonel_type.py,sha256=5T5bmQxPZrG0UseCLd7ssV-AeFF3O4T_DFxLu3whSqg,706
10226
10227
  simo/fleet/migrations/0031_alter_colonel_type.py,sha256=Kv_Gld-X0NZ7d2P9WBXfIlhq4iPH1_NnzDrPyy9_Pos,522
10227
10228
  simo/fleet/migrations/0032_auto_20240415_0736.py,sha256=yBT48pIfDBm7J1Y3LrvNtmihRbwEXjmBGBB1ghc2z5Y,1800
10228
- simo/fleet/migrations/0033_auto_20240415_0736.py,sha256=_7p3-Qdc7aaP4mDwny_ig5E4XoEm8t2PoZ3-UeQ4jio,758
10229
+ simo/fleet/migrations/0033_auto_20240415_0736.py,sha256=3ysmu-fkzwY_7l4tDIHEylcoqXGdW_KMKHs1J3_0i5w,771
10230
+ simo/fleet/migrations/0034_auto_20240418_0735.py,sha256=rVJwhoSZGUZP3B7ZzkbtQRypSktkAO7TAE6jJ0MY8F4,950
10229
10231
  simo/fleet/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10230
10232
  simo/fleet/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=9kc1UyMEYkRNVnZ7iwZbiW1t3qWXROvWrI2G1BdzIaA,1250
10231
10233
  simo/fleet/migrations/__pycache__/0002_auto_20220422_0743.cpython-38.pyc,sha256=8oxhGb7rL8QYKlBLU3pOYcd8aHeQWDB9I8awkK04mXg,841
@@ -10259,14 +10261,15 @@ simo/fleet/migrations/__pycache__/0029_alter_i2cinterface_scl_pin_and_more.cpyth
10259
10261
  simo/fleet/migrations/__pycache__/0030_colonelpin_label_alter_colonel_type.cpython-38.pyc,sha256=sfglSDxXLKJ0qE8Dl3MYjv5hbszpDtb9CDxatoEzPSw,853
10260
10262
  simo/fleet/migrations/__pycache__/0031_alter_colonel_type.cpython-38.pyc,sha256=zXX254ZgEE4uSV8xnLdH9DM3qy-ICmbrT05i0Q287bU,733
10261
10263
  simo/fleet/migrations/__pycache__/0032_auto_20240415_0736.cpython-38.pyc,sha256=QD3JNIDQhzseXKLRYysYY3Q9_vDaurIhlWBcri83FMw,1655
10262
- simo/fleet/migrations/__pycache__/0033_auto_20240415_0736.cpython-38.pyc,sha256=XBy2jZZ4kDRn06KC9YcHRnoaol8heCMAvHZ3BAELr2c,1031
10264
+ simo/fleet/migrations/__pycache__/0033_auto_20240415_0736.cpython-38.pyc,sha256=zN3KrYHzE40Wfnt48zp7AGCIa8Jj9-fPXxo3adZIxwo,1046
10265
+ simo/fleet/migrations/__pycache__/0034_auto_20240418_0735.cpython-38.pyc,sha256=FEd_tw1GVVrRYd44Fdx1Yf-rsVIebHLel7jlv434A_E,924
10263
10266
  simo/fleet/migrations/__pycache__/__init__.cpython-38.pyc,sha256=5k1KW0jeSDzw6RnVPRq4CaO13Lg7M0F-pxA_gqqZ6Mg,170
10264
10267
  simo/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10265
10268
  simo/generic/app_widgets.py,sha256=E_pnpA1hxMIhenRCrHoQ5cik06jm2BAHCkl_eo-OudU,1264
10266
10269
  simo/generic/base_types.py,sha256=djymox_boXTHX1BTTCLXrCH7ED-uAsV_idhaDOc3OLI,409
10267
10270
  simo/generic/controllers.py,sha256=Mn4jmOx-1Yb5rAZb9ZcfMcYBMf7r61NQV2p8JgxbYvQ,51675
10268
10271
  simo/generic/forms.py,sha256=p-gzH1z7J0CV8bKMmWTQluzpYmgc7fF1aEHL7eL-fJI,20075
10269
- simo/generic/gateways.py,sha256=BEHjNZ2VpblXxpuADZzRs4IAO7fsj2Heb2peGXFXNec,15156
10272
+ simo/generic/gateways.py,sha256=L3obiClEomiRbWfDu_LrMbhH9r7hUH4e0oBeLMXghXw,16027
10270
10273
  simo/generic/models.py,sha256=d00Q-UXtt7mG9MdPpZ3mXnxKjwlTI2FgCEklZpGBk7s,3629
10271
10274
  simo/generic/routing.py,sha256=elQVZmgnPiieEuti4sJ7zITk1hlRxpgbotcutJJgC60,228
10272
10275
  simo/generic/socket_consumers.py,sha256=NfTQGYtVAc864IoogZRxf_0xpDPM0eMCWn0SlKA5P7Y,1751
@@ -10275,7 +10278,7 @@ simo/generic/__pycache__/app_widgets.cpython-38.pyc,sha256=0IoKRG9n1tkNRRkrqAeOQ
10275
10278
  simo/generic/__pycache__/base_types.cpython-38.pyc,sha256=ptw6axyAqemZA35oa6vzr7EihzvbhW9w7Y-G6kfDedU,555
10276
10279
  simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=3U3W-EgpKdqh7MN94ZaoCEGvY4SSq2zsTptJoZbysgM,32795
10277
10280
  simo/generic/__pycache__/forms.cpython-38.pyc,sha256=Uvh-YQxcN-0RCinRi13fyITM1Jxm6FwYQyXs3OLNruA,15699
10278
- simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=43zzltUplgyKIBN9Knk-YNstFgm2Mjk2CvW6vwuzeio,11582
10281
+ simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=syQzoWdRGcU4kKRMC8HfbQ9VQiGxMWkzYwJDqQcfDwg,11940
10279
10282
  simo/generic/__pycache__/models.cpython-38.pyc,sha256=ItjBjJaioJttzSUJsHCKV4xiqH6QX90kRw1C_Xx7mMk,3065
10280
10283
  simo/generic/__pycache__/routing.cpython-38.pyc,sha256=xtxTUTBTdivzFyA5Wh7k-hUj1WDO_FiRq6HYXdbr9Ks,382
10281
10284
  simo/generic/__pycache__/socket_consumers.cpython-38.pyc,sha256=piFHces0J9QuXu_CNBCQCYjoZEeoaxyVjLfJ9KaR8C8,1898
@@ -10356,9 +10359,9 @@ simo/users/auth_backends.py,sha256=I5pnaTa20-Lxfw_dFG8471xDITb0_fQl1PVhJalp5vU,3
10356
10359
  simo/users/auto_urls.py,sha256=lcJvteBsbHQMJieZpDz-63tDYejLApqsW3CUnDakd7k,272
10357
10360
  simo/users/dynamic_settings.py,sha256=sEIsi4yJw3kH46Jq_aOkSuK7QTfQACGUE-lkyBogCaM,570
10358
10361
  simo/users/middleware.py,sha256=GMCrnWSc_2qCleyQIkfQGdL-pU-UTEcSg1wPvIKZ9uk,1210
10359
- simo/users/models.py,sha256=f59mkQBpq_fFLDUa-44b1qWleB-TvGdC1M0G67huJMg,18498
10362
+ simo/users/models.py,sha256=e4Abz8Px4f9QUGmiqhNKduBeUjJMPlnf0tDdqRCSM1A,18565
10360
10363
  simo/users/permissions.py,sha256=IwtYS8yQdupWbYKR9VimSRDV3qCJ2jXP57Lyjpb2EQM,242
10361
- simo/users/serializers.py,sha256=yrWghK7ONxfzkjO3LbDLK1WPxsPBMYUegdm29qovjjo,2486
10364
+ simo/users/serializers.py,sha256=Gay16bdHinjhbn1Ly2KBwnomwK2d4jclO-OqAVeWbZI,2491
10362
10365
  simo/users/sso_urls.py,sha256=gQOaPvGMYFD0NCVSwyoWO-mTEHe5j9sbzV_RK7kdvp0,251
10363
10366
  simo/users/sso_views.py,sha256=-XI67TvQ7SN3goU4OuAHyn84u_1vtusvpn7Pu0K97zo,4648
10364
10367
  simo/users/tasks.py,sha256=v9J7t4diB0VnqUDVZAQ8H-rlr4ZR14bgEUuEGpODyOI,854
@@ -10371,9 +10374,9 @@ simo/users/__pycache__/auth_backends.cpython-38.pyc,sha256=MuOieBIXt6lrDx83-UQtd
10371
10374
  simo/users/__pycache__/auto_urls.cpython-38.pyc,sha256=K-3sz2h-cEitoflSmZk1t0eUg5mQMMGLNZFREVwG7_o,430
10372
10375
  simo/users/__pycache__/dynamic_settings.cpython-38.pyc,sha256=6F8JBjZkHykySnmZjNEzjS0ijbmPdcp9yUAZ5kqq_Fo,864
10373
10376
  simo/users/__pycache__/middleware.cpython-38.pyc,sha256=Tj4nVEAvxEW3xA63fBRiJWRJpz_M848ZOqbHioc_IPE,1149
10374
- simo/users/__pycache__/models.cpython-38.pyc,sha256=2W8u2Rea0f5BkwGn1Dq1gQWpevsIM1rUK3S5yvMVsnI,17492
10377
+ simo/users/__pycache__/models.cpython-38.pyc,sha256=qSDZPjbMd5t7qDWGQSX6zE1IwrSsqzzNFYGanlAMMDw,17515
10375
10378
  simo/users/__pycache__/permissions.cpython-38.pyc,sha256=ez5NxoL_JUeeH6GsKhvFreuA3FCBgGf9floSypdXUtM,633
10376
- simo/users/__pycache__/serializers.cpython-38.pyc,sha256=PPW3KSJg7_LNyhpWXICLi49vkksIR2dyQao50u0AHdg,3430
10379
+ simo/users/__pycache__/serializers.cpython-38.pyc,sha256=RfyHFuPrIhPJ62h5RHy3h17S-5DX41hL5cLhmcDIaXo,3435
10377
10380
  simo/users/__pycache__/sso_urls.cpython-38.pyc,sha256=uAwDozpOmrhUald-8tOHANILXkH7-TI8fNYXOtPkSY8,402
10378
10381
  simo/users/__pycache__/sso_views.cpython-38.pyc,sha256=sHEoxLOac3U3Epmhm197huFnW_J3gGCDZSji57itijU,3969
10379
10382
  simo/users/__pycache__/tasks.cpython-38.pyc,sha256=xq-XaJ5gzkpVVZRWe0bvGdA31Eh_WS2rKSY62p4eY5E,1111
@@ -10404,6 +10407,7 @@ simo/users/migrations/0022_userdevicereportlog_instance.py,sha256=h0ue6uMcIyVs2o
10404
10407
  simo/users/migrations/0023_auto_20240105_0719.py,sha256=OAkWJusXjzT6dx4EgwjvNvMEgrP_zvcG8zgi774pYG0,700
10405
10408
  simo/users/migrations/0024_fingerprint.py,sha256=0wfplJ3iHv_6heJx7yIQYX3D68Nf9pLPlIZoM5NcPk8,1021
10406
10409
  simo/users/migrations/0025_rename_name_fingerprint_type_and_more.py,sha256=Azw_a1qxIDttdG4m0DcLa82amv-mFsbW8PsjG9qFL0Y,466
10410
+ simo/users/migrations/0026_fingerprint_name.py,sha256=DPmfi1brbaPymdNiPgc7dINSKy97yVHdKpKp-ZfnS3I,428
10407
10411
  simo/users/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10408
10412
  simo/users/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=ngXA1QR-Qc2VS-BTTZWybVXiEfifIgKaVS6bADiN8nU,4269
10409
10413
  simo/users/migrations/__pycache__/0002_componentpermission.cpython-38.pyc,sha256=pknJnpic8p6Vdx9DX41FfODXNnvexDswJtUCmC5w1tg,995
@@ -10430,6 +10434,7 @@ simo/users/migrations/__pycache__/0022_userdevicereportlog_instance.cpython-38.p
10430
10434
  simo/users/migrations/__pycache__/0023_auto_20240105_0719.cpython-38.pyc,sha256=VOc5g9AlyhnB3QhU6GmOw6RPWUh4WhtLIOypCYb4jXY,739
10431
10435
  simo/users/migrations/__pycache__/0024_fingerprint.cpython-38.pyc,sha256=QLW3v4BK78HL682qeHkK_aXZgCJSs9sIIte60ieF5ZY,1132
10432
10436
  simo/users/migrations/__pycache__/0025_rename_name_fingerprint_type_and_more.cpython-38.pyc,sha256=21CgVotrTT02MW58zqePt_-gsbpdN_m01T_SOHgWkBo,631
10437
+ simo/users/migrations/__pycache__/0026_fingerprint_name.cpython-38.pyc,sha256=Ti0NLIKb0Wffn33LCBQQ-cumFCX6JFxSi1FYoV8C0ZE,642
10433
10438
  simo/users/migrations/__pycache__/__init__.cpython-38.pyc,sha256=NKq7WLgktK8WV1oOqCPbAbdkrPV5GRGhYx4VxxI4dcs,170
10434
10439
  simo/users/templates/conf/mosquitto.conf,sha256=1eIGNuRu4Y3hfAU6qiWix648eCRrw0oOT24PnyFI4ys,189
10435
10440
  simo/users/templates/conf/mosquitto_acls.conf,sha256=ga44caTDNQE0CBKw55iM2jOuna6-9fKGwAhjyERZdRE,500
@@ -10439,8 +10444,8 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
10439
10444
  simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10440
10445
  simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10441
10446
  simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10442
- simo-2.0.8.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
10443
- simo-2.0.8.dist-info/METADATA,sha256=82r74CoEn3RkicBwXnNH8TY3dElUrWfP551U3Zo6044,1699
10444
- simo-2.0.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
10445
- simo-2.0.8.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
10446
- simo-2.0.8.dist-info/RECORD,,
10447
+ simo-2.0.10.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
10448
+ simo-2.0.10.dist-info/METADATA,sha256=S0PRMS4s3GZwHxmJoI8u5TNtamuivqP6Xi2mr3K9FWU,1700
10449
+ simo-2.0.10.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
10450
+ simo-2.0.10.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
10451
+ simo-2.0.10.dist-info/RECORD,,
File without changes