simo 2.5.13__py3-none-any.whl → 2.5.15__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__/controllers.cpython-38.pyc +0 -0
- simo/core/__pycache__/models.cpython-38.pyc +0 -0
- simo/core/__pycache__/serializers.cpython-38.pyc +0 -0
- simo/core/__pycache__/signal_receivers.cpython-38.pyc +0 -0
- simo/core/__pycache__/tasks.cpython-38.pyc +0 -0
- simo/core/management/_hub_template/hub/supervisor.conf +1 -0
- simo/core/models.py +4 -2
- simo/core/serializers.py +7 -3
- simo/core/signal_receivers.py +2 -2
- simo/core/tasks.py +79 -78
- simo/fleet/__pycache__/forms.cpython-38.pyc +0 -0
- simo/fleet/forms.py +1 -1
- simo/generic/__pycache__/gateways.cpython-38.pyc +0 -0
- simo/generic/gateways.py +4 -2
- simo/generic/migrations/__pycache__/0001_initial.cpython-38.pyc +0 -0
- simo/users/__pycache__/models.cpython-38.pyc +0 -0
- simo/users/models.py +3 -2
- {simo-2.5.13.dist-info → simo-2.5.15.dist-info}/METADATA +1 -1
- {simo-2.5.13.dist-info → simo-2.5.15.dist-info}/RECORD +23 -22
- {simo-2.5.13.dist-info → simo-2.5.15.dist-info}/LICENSE.md +0 -0
- {simo-2.5.13.dist-info → simo-2.5.15.dist-info}/WHEEL +0 -0
- {simo-2.5.13.dist-info → simo-2.5.15.dist-info}/entry_points.txt +0 -0
- {simo-2.5.13.dist-info → simo-2.5.15.dist-info}/top_level.txt +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
simo/core/models.py
CHANGED
|
@@ -530,7 +530,6 @@ def is_in_alarm(self):
|
|
|
530
530
|
and 'last_change' not in kwargs['update_fields']:
|
|
531
531
|
kwargs['update_fields'].append('last_change')
|
|
532
532
|
|
|
533
|
-
|
|
534
533
|
modifying_fields = (
|
|
535
534
|
'name', 'icon', 'zone', 'category', 'config', 'meta',
|
|
536
535
|
'value_units', 'slaves', 'show_in_app', 'alarm_category'
|
|
@@ -539,7 +538,10 @@ def is_in_alarm(self):
|
|
|
539
538
|
self.last_modified = timezone.now()
|
|
540
539
|
if 'update_fields' in kwargs \
|
|
541
540
|
and 'last_modified' not in kwargs['update_fields']:
|
|
542
|
-
kwargs['update_fields']
|
|
541
|
+
if isinstance(kwargs['update_fields'], tuple):
|
|
542
|
+
kwargs['update_fields'] += ('last_modified', )
|
|
543
|
+
else:
|
|
544
|
+
kwargs['update_fields'].append('last_modified')
|
|
543
545
|
|
|
544
546
|
obj = super().save(*args, **kwargs)
|
|
545
547
|
|
simo/core/serializers.py
CHANGED
|
@@ -106,7 +106,6 @@ class TextAreaSerializerField(serializers.CharField):
|
|
|
106
106
|
class ComponentPrimaryKeyRelatedField(PrimaryKeyRelatedField):
|
|
107
107
|
|
|
108
108
|
def get_attribute(self, instance):
|
|
109
|
-
print(f"{instance} SOURCE ATTRIBUTES: ", self.source_attrs)
|
|
110
109
|
if self.queryset.model in (Icon, Zone, Category):
|
|
111
110
|
return super().get_attribute(instance)
|
|
112
111
|
return self.queryset.model.objects.filter(
|
|
@@ -445,7 +444,9 @@ class ComponentSerializer(FormSerializer):
|
|
|
445
444
|
continue
|
|
446
445
|
if field_name in form.basic_fields:
|
|
447
446
|
continue
|
|
448
|
-
if self.context['request'].user.is_master
|
|
447
|
+
if self.context['request'].user.is_master:
|
|
448
|
+
continue
|
|
449
|
+
if user_role and user_role.is_superuser:
|
|
449
450
|
continue
|
|
450
451
|
del form.fields[field_name]
|
|
451
452
|
|
|
@@ -527,8 +528,11 @@ class ComponentSerializer(FormSerializer):
|
|
|
527
528
|
if user.is_superuser:
|
|
528
529
|
return False
|
|
529
530
|
instance = self.context.get('instance')
|
|
531
|
+
role = user.get_role(instance)
|
|
532
|
+
if not role:
|
|
533
|
+
return True
|
|
530
534
|
return not bool(
|
|
531
|
-
|
|
535
|
+
role.component_permissions.filter(
|
|
532
536
|
component=obj, write=True
|
|
533
537
|
)
|
|
534
538
|
)
|
simo/core/signal_receivers.py
CHANGED
|
@@ -147,13 +147,13 @@ Sets State component to "day" state as soon as none of the home owners phones ar
|
|
|
147
147
|
# Create default User permission roles
|
|
148
148
|
|
|
149
149
|
PermissionsRole.objects.create(
|
|
150
|
-
instance=instance, name="Admin", is_superuser=True
|
|
150
|
+
instance=instance, name="Admin", is_owner=True, is_superuser=True
|
|
151
151
|
)
|
|
152
152
|
PermissionsRole.objects.create(
|
|
153
153
|
instance=instance, name="Owner", is_owner=True, is_default=True
|
|
154
154
|
)
|
|
155
155
|
PermissionsRole.objects.create(
|
|
156
|
-
instance=instance, name="Guest", is_owner=
|
|
156
|
+
instance=instance, name="Guest", is_owner=False
|
|
157
157
|
)
|
|
158
158
|
generic.start()
|
|
159
159
|
dummy.start()
|
simo/core/tasks.py
CHANGED
|
@@ -178,85 +178,86 @@ def sync_with_remote():
|
|
|
178
178
|
|
|
179
179
|
print("Responded with: ", json.dumps(r_json))
|
|
180
180
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
else:
|
|
242
|
-
user = User.objects.filter(email=email).first()
|
|
243
|
-
|
|
244
|
-
if not user:
|
|
245
|
-
continue
|
|
246
|
-
|
|
247
|
-
if user.name != options.get('name'):
|
|
248
|
-
user.name = options['name']
|
|
249
|
-
user.save()
|
|
250
|
-
|
|
251
|
-
avatar_url = options.get('avatar_url')
|
|
252
|
-
if avatar_url and user.avatar_url != avatar_url:
|
|
253
|
-
resp = requests.get(avatar_url)
|
|
254
|
-
user.avatar.save(
|
|
255
|
-
os.path.basename(avatar_url), io.BytesIO(resp.content)
|
|
181
|
+
|
|
182
|
+
if 'hub_uid' in r_json:
|
|
183
|
+
dynamic_settings['core__hub_uid'] = r_json['hub_uid']
|
|
184
|
+
|
|
185
|
+
dynamic_settings['core__remote_http'] = r_json.get('hub_remote_http', '')
|
|
186
|
+
if 'new_secret' in r_json:
|
|
187
|
+
dynamic_settings['core__hub_secret'] = r_json['new_secret']
|
|
188
|
+
|
|
189
|
+
if dynamic_settings['core__remote_conn_version'] < r_json['remote_conn_version']:
|
|
190
|
+
save_config(r_json)
|
|
191
|
+
dynamic_settings['core__remote_conn_version'] = r_json['remote_conn_version']
|
|
192
|
+
|
|
193
|
+
instance_uids = []
|
|
194
|
+
for data in r_json['instances']:
|
|
195
|
+
users_data = data.pop('users', {})
|
|
196
|
+
instance_uid = data.pop('uid')
|
|
197
|
+
instance_uids.append(instance_uid)
|
|
198
|
+
weather = data.pop('weather', None)
|
|
199
|
+
instance, new_instance = Instance.objects.update_or_create(
|
|
200
|
+
uid=instance_uid, defaults=data
|
|
201
|
+
)
|
|
202
|
+
if not instance.is_active:
|
|
203
|
+
instance.is_active = True
|
|
204
|
+
instance.save()
|
|
205
|
+
|
|
206
|
+
if weather:
|
|
207
|
+
from simo.generic.controllers import Weather
|
|
208
|
+
weather_component = Component.objects.filter(
|
|
209
|
+
zone__instance=instance,
|
|
210
|
+
controller_uid=Weather.uid
|
|
211
|
+
).first()
|
|
212
|
+
if weather_component:
|
|
213
|
+
weather_component.track_history = False
|
|
214
|
+
weather_component.controller.set(weather)
|
|
215
|
+
weather_component.save()
|
|
216
|
+
|
|
217
|
+
for email, options in users_data.items():
|
|
218
|
+
|
|
219
|
+
if new_instance or not instance.instance_users.count():
|
|
220
|
+
# Create user for new instance!
|
|
221
|
+
user, new_user = User.objects.get_or_create(
|
|
222
|
+
email=email, defaults={
|
|
223
|
+
'name': options.get('name'),
|
|
224
|
+
'is_master': options.get('is_hub_master', False),
|
|
225
|
+
})
|
|
226
|
+
role = None
|
|
227
|
+
if options.get('is_hub_master') or options.get('is_superuser'):
|
|
228
|
+
role = PermissionsRole.objects.filter(
|
|
229
|
+
instance=instance, is_superuser=True
|
|
230
|
+
).first()
|
|
231
|
+
elif options.get('is_owner'):
|
|
232
|
+
role = PermissionsRole.objects.filter(
|
|
233
|
+
instance=instance, is_owner=True
|
|
234
|
+
).first()
|
|
235
|
+
|
|
236
|
+
if role:
|
|
237
|
+
InstanceUser.objects.update_or_create(
|
|
238
|
+
user=user, instance=instance, defaults={
|
|
239
|
+
'is_active': True, 'role': role
|
|
240
|
+
}
|
|
256
241
|
)
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
242
|
+
else:
|
|
243
|
+
user = User.objects.filter(email=email).first()
|
|
244
|
+
|
|
245
|
+
if not user:
|
|
246
|
+
continue
|
|
247
|
+
|
|
248
|
+
if user.name != options.get('name'):
|
|
249
|
+
user.name = options['name']
|
|
250
|
+
user.save()
|
|
251
|
+
|
|
252
|
+
avatar_url = options.get('avatar_url')
|
|
253
|
+
if avatar_url and user.avatar_url != avatar_url:
|
|
254
|
+
resp = requests.get(avatar_url)
|
|
255
|
+
user.avatar.save(
|
|
256
|
+
os.path.basename(avatar_url), io.BytesIO(resp.content)
|
|
257
|
+
)
|
|
258
|
+
user.avatar_url = avatar_url
|
|
259
|
+
user.avatar_last_change = timezone.now()
|
|
260
|
+
user.save()
|
|
260
261
|
|
|
261
262
|
Instance.objects.all().exclude(
|
|
262
263
|
uid__in=instance_uids
|
|
Binary file
|
simo/fleet/forms.py
CHANGED
|
Binary file
|
simo/generic/gateways.py
CHANGED
|
@@ -246,8 +246,10 @@ class GenericGatewayHandler(BaseObjectCommandsGatewayHandler):
|
|
|
246
246
|
Component.objects.get(id=id), 'error'
|
|
247
247
|
)
|
|
248
248
|
|
|
249
|
-
|
|
250
|
-
|
|
249
|
+
time.sleep(0.5)
|
|
250
|
+
while len(self.running_scripts.keys()):
|
|
251
|
+
print("Still running scripts: ", self.running_scripts.keys())
|
|
252
|
+
time.sleep(0.5)
|
|
251
253
|
|
|
252
254
|
def on_mqtt_connect(self, mqtt_client, userdata, flags, rc):
|
|
253
255
|
command = GatewayObjectCommand(self.gateway_instance)
|
|
Binary file
|
|
Binary file
|
simo/users/models.py
CHANGED
|
@@ -238,13 +238,14 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
238
238
|
def get_role(self, instance):
|
|
239
239
|
cache_key = f'user-{self.id}_instance-{instance.id}_role'
|
|
240
240
|
role = cache.get(cache_key, 'expired')
|
|
241
|
-
if role
|
|
241
|
+
if role in ('expired', None):
|
|
242
242
|
role = self.roles.filter(
|
|
243
243
|
instance=instance
|
|
244
244
|
).prefetch_related(
|
|
245
245
|
'component_permissions', 'component_permissions__component'
|
|
246
246
|
).first()
|
|
247
|
-
|
|
247
|
+
if role:
|
|
248
|
+
cache.set(cache_key, role, 20)
|
|
248
249
|
return role
|
|
249
250
|
|
|
250
251
|
@property
|
|
@@ -52,14 +52,14 @@ simo/core/gateways.py,sha256=m0eS3XjVe34Dge6xtoCq16kFWCKJcdQrT0JW0REqoq8,3715
|
|
|
52
52
|
simo/core/loggers.py,sha256=EBdq23gTQScVfQVH-xeP90-wII2DQFDjoROAW6ggUP4,1645
|
|
53
53
|
simo/core/managers.py,sha256=n-b3I4uXzfHKTeB1VMjSaMsDUxp8FegFJwnbV1IsWQ4,3019
|
|
54
54
|
simo/core/middleware.py,sha256=hExD7Vmw7eitk0vAjOwKzkwrtuw8YxpflF92j_CA2YY,3193
|
|
55
|
-
simo/core/models.py,sha256=
|
|
55
|
+
simo/core/models.py,sha256=DXJXTtNdpn9yC4VArHp0yrhpRb7vGpwH2c-JvqLE56M,22784
|
|
56
56
|
simo/core/permissions.py,sha256=v0iJM4LOeYoEfMiw3OLPYio272G1aUEAg_z9Wd1q5m0,2993
|
|
57
57
|
simo/core/routing.py,sha256=X1_IHxyA-_Q7hw1udDoviVP4_FSBDl8GYETTC2zWTbY,499
|
|
58
|
-
simo/core/serializers.py,sha256=
|
|
59
|
-
simo/core/signal_receivers.py,sha256
|
|
58
|
+
simo/core/serializers.py,sha256=WgksN1Ombv240nfQR_UtmKslTWM9vz9Y0yTdN5usiHU,21892
|
|
59
|
+
simo/core/signal_receivers.py,sha256=-Lw2Jzvgiznw3wj44ntL9nv3DtT8RCEpz6Tap9ZHEQk,9266
|
|
60
60
|
simo/core/socket_consumers.py,sha256=trRZvBGTJ7xIbfdmVvn7zoiWp_qssSkMZykDrI5YQyE,9783
|
|
61
61
|
simo/core/storage.py,sha256=_5igjaoWZAiExGWFEJMElxUw55DzJG1jqFty33xe8BE,342
|
|
62
|
-
simo/core/tasks.py,sha256=
|
|
62
|
+
simo/core/tasks.py,sha256=EF_wDWeCZDA68xtexPURqJaBwbCP48bxdURWgcOLWjE,15141
|
|
63
63
|
simo/core/todos.py,sha256=eYVXfLGiapkxKK57XuviSNe3WsUYyIWZ0hgQJk7ThKo,665
|
|
64
64
|
simo/core/types.py,sha256=WJEq48mIbFi_5Alt4wxWMGXxNxUTXqfQU5koH7wqHHI,1108
|
|
65
65
|
simo/core/views.py,sha256=3SRZr00fyLQf8ja3U-9eekKt-ld5TvU1WQqUWprXfQ4,2390
|
|
@@ -75,7 +75,7 @@ simo/core/__pycache__/auto_urls.cpython-38.pyc,sha256=Tyf8PYHq5YqSwTp25Joy-eura_
|
|
|
75
75
|
simo/core/__pycache__/autocomplete_views.cpython-38.pyc,sha256=wDak1gJYUF5oXSlDz1Dtn-Rhy5CxYEY-v1sPkJhQDpk,4128
|
|
76
76
|
simo/core/__pycache__/base_types.cpython-38.pyc,sha256=CX-qlF7CefRi_mCE954wYa9rUFR88mOl6g7fybDRu7g,803
|
|
77
77
|
simo/core/__pycache__/context.cpython-38.pyc,sha256=ck1FcBljLB4__5F6poS2tEEn8IDDgK7pU3FcXDPc_mI,1329
|
|
78
|
-
simo/core/__pycache__/controllers.cpython-38.pyc,sha256=
|
|
78
|
+
simo/core/__pycache__/controllers.cpython-38.pyc,sha256=6Ts1BeGND9Uy5eeqC5dNeme1yYilEV_emRnjTjJ9WNw,30701
|
|
79
79
|
simo/core/__pycache__/dynamic_settings.cpython-38.pyc,sha256=wGpnscX1DxFpRl54MQURhjz2aD3NJohSzw9JCFnzh2Y,2384
|
|
80
80
|
simo/core/__pycache__/events.cpython-38.pyc,sha256=yip7WSyX4pUy2wJE820W4fD7iwoIWGhdHfloFb_N0R8,5257
|
|
81
81
|
simo/core/__pycache__/filters.cpython-38.pyc,sha256=VIMADCBiYhziIyRmxAyUDJluZvuZmiC4bNYWTRsGSao,721
|
|
@@ -85,14 +85,14 @@ simo/core/__pycache__/gateways.cpython-38.pyc,sha256=D1ooHL-iSpQrxnD8uAl4xWFJmm-
|
|
|
85
85
|
simo/core/__pycache__/loggers.cpython-38.pyc,sha256=Z-cdQnC6XlIonPV4Sl4E52tP4NMEdPAiHK0cFaIL7I8,1623
|
|
86
86
|
simo/core/__pycache__/managers.cpython-38.pyc,sha256=6RTIxyjOgpQGtAqcUyE2vFPS09w1V5Wmd_vOV7rHRRI,3370
|
|
87
87
|
simo/core/__pycache__/middleware.cpython-38.pyc,sha256=iOSTXSQl3sEsa-9kx_6w5zbEByRtfzJHT6XkUIYMGdE,2469
|
|
88
|
-
simo/core/__pycache__/models.cpython-38.pyc,sha256=
|
|
88
|
+
simo/core/__pycache__/models.cpython-38.pyc,sha256=HGL3TiaMy-0oobgCGGxH2nvDhh4RnOBeD00rwQsuklU,18591
|
|
89
89
|
simo/core/__pycache__/permissions.cpython-38.pyc,sha256=fH4iyqd9DdzRLEu2b621-FeM-napR0M7hzBUTHo9Q3g,2972
|
|
90
90
|
simo/core/__pycache__/routing.cpython-38.pyc,sha256=3T3FPJ8Cn99xZCGvMyg2xjl7al-Shm9CelbSpkJtNP8,599
|
|
91
|
-
simo/core/__pycache__/serializers.cpython-38.pyc,sha256=
|
|
92
|
-
simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=
|
|
91
|
+
simo/core/__pycache__/serializers.cpython-38.pyc,sha256=d4wpUjFuo8GxaNWbin9GdHKik06IZN32uZL1SnXiL_s,19616
|
|
92
|
+
simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=h6MWIU7U2tNCIp0NiKSEDuFeaxLHYz1OXehzBxAYrYA,7048
|
|
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=DKhn-7oFN4EINROUgsXj4ihlaS93O1xDGqgxZ7PkFuo,10391
|
|
96
96
|
simo/core/__pycache__/todos.cpython-38.pyc,sha256=lOqGZ58siHM3isoJV4r7sg8igrfE9fFd-jSfeBa0AQI,253
|
|
97
97
|
simo/core/__pycache__/views.cpython-38.pyc,sha256=K_QM967bIJeU02DJu0Dm7j8RiFDKn_TLzX77YzNkA7c,2495
|
|
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=sfeitUI6V4MgPDtfj-6AEQSTS_VNvLUdwNYNdSI1zRI,2377
|
|
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
|
|
@@ -10224,7 +10224,7 @@ simo/fleet/auto_urls.py,sha256=UX66eR2ykMqFgfIllW-RTdjup5-FieCWl_BVm3CcXKg,702
|
|
|
10224
10224
|
simo/fleet/base_types.py,sha256=wL9RVkHr0gA7HI1wZq0pruGEIgvQqpfnCL4cC3ywsvw,102
|
|
10225
10225
|
simo/fleet/ble.py,sha256=eHA_9ABjbmH1vUVCv9hiPXQL2GZZSEVwfO0xyI1S0nI,1081
|
|
10226
10226
|
simo/fleet/controllers.py,sha256=fjri1GtCnflkkDpNqhTwy6i9CK6RDEB0Q_BtADzcG8E,29156
|
|
10227
|
-
simo/fleet/forms.py,sha256=
|
|
10227
|
+
simo/fleet/forms.py,sha256=LbYphCtfpSxK3GwzSrcbMkB_spcspsf5FzYQFE9n-Q4,62614
|
|
10228
10228
|
simo/fleet/gateways.py,sha256=lKEJW0MgaOEiNnijH50DNSVChvaUT3TA3UurcI57P8k,5677
|
|
10229
10229
|
simo/fleet/managers.py,sha256=XOpDOA9L-f_550TNSyXnJbun2EmtGz1TenVTMlUSb8E,807
|
|
10230
10230
|
simo/fleet/models.py,sha256=xAffeAh5hf8NC94B66ZqmYoF7qDN53wEQ1xE2E9D8Xc,17524
|
|
@@ -10241,7 +10241,7 @@ simo/fleet/__pycache__/auto_urls.cpython-38.pyc,sha256=Tc6a6BCXHjijP8U2jE2ghlJwn
|
|
|
10241
10241
|
simo/fleet/__pycache__/base_types.cpython-38.pyc,sha256=deyPwjpT6xZiFxBGFnj5b7R-lbdOTh2krgpJhrcGVhc,274
|
|
10242
10242
|
simo/fleet/__pycache__/ble.cpython-38.pyc,sha256=Nrof9w7cm4OlpFWHeVnmvvanh2_oF9oQ3TknJiV93-0,1267
|
|
10243
10243
|
simo/fleet/__pycache__/controllers.cpython-38.pyc,sha256=jtFHr_uyjCCeuidL-o-hGaf21u0fnxK_O6hTRdY6lpc,24906
|
|
10244
|
-
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=
|
|
10244
|
+
simo/fleet/__pycache__/forms.cpython-38.pyc,sha256=tvoi9np3Empg1GYBFTChznEy09M0v6UBRaGz9FZCJxc,42300
|
|
10245
10245
|
simo/fleet/__pycache__/gateways.cpython-38.pyc,sha256=0RKVn0ndreVKhsrukqeLPSdMnRrsQ_W7yeVeBkRLfIk,5058
|
|
10246
10246
|
simo/fleet/__pycache__/managers.cpython-38.pyc,sha256=8uz-xpUiqbGDgXIZ_XRZtFb-Tju6NGxflGg-Ee4Yo6k,1310
|
|
10247
10247
|
simo/fleet/__pycache__/models.cpython-38.pyc,sha256=TH2J-7xC1TE9AzOJ2lRhVGxUUYqnoYGWTzH9GktuVV0,14138
|
|
@@ -10342,7 +10342,7 @@ simo/generic/app_widgets.py,sha256=TPRLj4hri2hBuY6mrdwBiv-01z2hDxZmsup-GDD9LrM,9
|
|
|
10342
10342
|
simo/generic/base_types.py,sha256=u3SlfpNYaCwkVBwomWgso4ODzL71ay9MhiAW-bxgnDU,341
|
|
10343
10343
|
simo/generic/controllers.py,sha256=Qf54CAeD8DviMV_S19E-7f-w-94Vr90-8xasy-IfG_A,49311
|
|
10344
10344
|
simo/generic/forms.py,sha256=H841-wbWltnZ2-RXQEM1G8H4kfOcl88Qhg7bxE4VCiQ,28993
|
|
10345
|
-
simo/generic/gateways.py,sha256=
|
|
10345
|
+
simo/generic/gateways.py,sha256=sMedpxIfpxqTx746DdhsIu-pzTrqduOSIb7i7XDX9GU,15339
|
|
10346
10346
|
simo/generic/models.py,sha256=Adq7ipWK-renxJlNW-SZnAq2oGEOwKx8EdUWaKnfcVQ,7597
|
|
10347
10347
|
simo/generic/routing.py,sha256=elQVZmgnPiieEuti4sJ7zITk1hlRxpgbotcutJJgC60,228
|
|
10348
10348
|
simo/generic/socket_consumers.py,sha256=K2OjphIhKJH48BvfFfoCOyCQZ1NmXb_phs6y1IP-qaQ,1757
|
|
@@ -10351,12 +10351,13 @@ simo/generic/__pycache__/app_widgets.cpython-38.pyc,sha256=YZ5db6-FPynBi6ooPW5cr
|
|
|
10351
10351
|
simo/generic/__pycache__/base_types.cpython-38.pyc,sha256=aV5NdIuvXR-ItKpI__MwcyPZHD6Z882TFdgYkPCkr1I,493
|
|
10352
10352
|
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=EwtavDlVJX0b6taQ0moYk11oL9nZL5_esoCXGdtcNNo,32751
|
|
10353
10353
|
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=w7p-dFYvxtNMlrKVnM2zWa1Jp0zXygP6Lbo6kKg-Ox4,21228
|
|
10354
|
-
simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=
|
|
10354
|
+
simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=QGj0mIWyqrVpn9AeGeYzdu6PxcF5SdQOHNzEqcHCy_E,11648
|
|
10355
10355
|
simo/generic/__pycache__/models.cpython-38.pyc,sha256=MZpum7syAFxuulf47K7gtUlJJ7xRD-IBUBAwUM1ZRnw,5825
|
|
10356
10356
|
simo/generic/__pycache__/routing.cpython-38.pyc,sha256=xtxTUTBTdivzFyA5Wh7k-hUj1WDO_FiRq6HYXdbr9Ks,382
|
|
10357
10357
|
simo/generic/__pycache__/socket_consumers.cpython-38.pyc,sha256=qJO5kvQLWhsQDOr1AtAtsAybuRWioxSkQei3Pc7rdP0,1737
|
|
10358
10358
|
simo/generic/migrations/0001_initial.py,sha256=7FpPcfpRU5ya0b8s2KbxR5a3npf92YruvZltUybjzys,676
|
|
10359
10359
|
simo/generic/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10360
|
+
simo/generic/migrations/__pycache__/0001_initial.cpython-38.pyc,sha256=xy_fN8vnebC_X8hArqHAOLYHLm3puD_stzJ-LvUOhgk,1009
|
|
10360
10361
|
simo/generic/migrations/__pycache__/__init__.cpython-38.pyc,sha256=nJV0NkIT8MuONj1hUX-V6aCU2lX3BXHyPjisapnBsPA,172
|
|
10361
10362
|
simo/generic/scripting/__init__.py,sha256=aZZvNBae7unnux_zGHCIWCV2z47hVJc-DIL72Hqfkeo,600
|
|
10362
10363
|
simo/generic/scripting/example.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -10449,7 +10450,7 @@ simo/users/auto_urls.py,sha256=lcJvteBsbHQMJieZpDz-63tDYejLApqsW3CUnDakd7k,272
|
|
|
10449
10450
|
simo/users/dynamic_settings.py,sha256=sEIsi4yJw3kH46Jq_aOkSuK7QTfQACGUE-lkyBogCaM,570
|
|
10450
10451
|
simo/users/managers.py,sha256=Fajwpm3wdMES73iPqoa_66J8g13bvUhjUtrexLKIcIU,312
|
|
10451
10452
|
simo/users/middleware.py,sha256=GMCrnWSc_2qCleyQIkfQGdL-pU-UTEcSg1wPvIKZ9uk,1210
|
|
10452
|
-
simo/users/models.py,sha256=
|
|
10453
|
+
simo/users/models.py,sha256=YXermRuV6LFndyUMiaYcTxC1kpgG0GLeJCczGJuCy10,19251
|
|
10453
10454
|
simo/users/permissions.py,sha256=IwtYS8yQdupWbYKR9VimSRDV3qCJ2jXP57Lyjpb2EQM,242
|
|
10454
10455
|
simo/users/serializers.py,sha256=zzw1KONTnaTNBaU0r4rNVxJ827KzD6Z5LuQt27ZsQ98,2516
|
|
10455
10456
|
simo/users/sso_urls.py,sha256=gQOaPvGMYFD0NCVSwyoWO-mTEHe5j9sbzV_RK7kdvp0,251
|
|
@@ -10466,7 +10467,7 @@ simo/users/__pycache__/auto_urls.cpython-38.pyc,sha256=K-3sz2h-cEitoflSmZk1t0eUg
|
|
|
10466
10467
|
simo/users/__pycache__/dynamic_settings.cpython-38.pyc,sha256=6F8JBjZkHykySnmZjNEzjS0ijbmPdcp9yUAZ5kqq_Fo,864
|
|
10467
10468
|
simo/users/__pycache__/managers.cpython-38.pyc,sha256=8NvEXbI795f-BXs6CvE_Kp0PpWfYmEJIZ8Bh8H6S2PQ,705
|
|
10468
10469
|
simo/users/__pycache__/middleware.cpython-38.pyc,sha256=Tj4nVEAvxEW3xA63fBRiJWRJpz_M848ZOqbHioc_IPE,1149
|
|
10469
|
-
simo/users/__pycache__/models.cpython-38.pyc,sha256=
|
|
10470
|
+
simo/users/__pycache__/models.cpython-38.pyc,sha256=oQnLCmCFOJ_L_NzkjokSFKmGO-RZWkOsWEQpwS7k_AA,17873
|
|
10470
10471
|
simo/users/__pycache__/permissions.cpython-38.pyc,sha256=ez5NxoL_JUeeH6GsKhvFreuA3FCBgGf9floSypdXUtM,633
|
|
10471
10472
|
simo/users/__pycache__/serializers.cpython-38.pyc,sha256=Dy8RAcwNkNSXoJHvLp8fozURyHCtucqpSPyqZtbnMZc,3732
|
|
10472
10473
|
simo/users/__pycache__/sso_urls.cpython-38.pyc,sha256=uAwDozpOmrhUald-8tOHANILXkH7-TI8fNYXOtPkSY8,402
|
|
@@ -10560,9 +10561,9 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
10560
10561
|
simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10561
10562
|
simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10562
10563
|
simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10563
|
-
simo-2.5.
|
|
10564
|
-
simo-2.5.
|
|
10565
|
-
simo-2.5.
|
|
10566
|
-
simo-2.5.
|
|
10567
|
-
simo-2.5.
|
|
10568
|
-
simo-2.5.
|
|
10564
|
+
simo-2.5.15.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
|
|
10565
|
+
simo-2.5.15.dist-info/METADATA,sha256=6szMyu5HN5deBkqFoKtgRTTOd8Gyelj1sMscLIToS-A,1924
|
|
10566
|
+
simo-2.5.15.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
10567
|
+
simo-2.5.15.dist-info/entry_points.txt,sha256=S9PwnUYmTSW7681GKDCxUbL0leRJIaRk6fDQIKgbZBA,135
|
|
10568
|
+
simo-2.5.15.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
|
|
10569
|
+
simo-2.5.15.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|