simo 2.6.5__py3-none-any.whl → 2.6.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.

@@ -161,20 +161,20 @@ class PresenceLighting(Script):
161
161
  self.condition_comps[comp.id] = comp
162
162
 
163
163
  while True:
164
- self._regulate(on_val_change=False)
164
+ self._regulate()
165
165
  time.sleep(random.randint(5, 15))
166
166
 
167
167
  def _on_sensor(self, sensor=None):
168
168
  if sensor:
169
169
  self.sensors[sensor.id] = sensor
170
- self._regulate()
170
+ self._regulate(on_sensor=True)
171
171
 
172
172
  def _on_condition(self, condition_comp=None):
173
173
  if condition_comp:
174
174
  for condition in self.conditions:
175
175
  if condition['component'].id == condition_comp.id:
176
176
  condition['component'] = condition_comp
177
- self._regulate()
177
+ self._regulate(on_condition_change=True)
178
178
 
179
179
  def _on_light_change(self, light):
180
180
  # change original value if it has been changed to something different
@@ -183,14 +183,14 @@ class PresenceLighting(Script):
183
183
  self.light_send_values[light.id] = light.value
184
184
  self.light_org_values[light.id] = light.value
185
185
 
186
- def _regulate(self, on_val_change=True):
186
+ def _regulate(self, on_sensor=False, on_condition_change=False):
187
187
  presence_values = [s.value for id, s in self.sensors.items()]
188
188
  if self.component.config.get('act_on', 0) == 0:
189
189
  must_on = any(presence_values)
190
190
  else:
191
191
  must_on = all(presence_values)
192
192
 
193
- if must_on and on_val_change:
193
+ if must_on and on_sensor:
194
194
  print("Presence detected!")
195
195
 
196
196
  additional_conditions_met = True
@@ -204,7 +204,7 @@ class PresenceLighting(Script):
204
204
 
205
205
  if condition['op'] == 'in':
206
206
  if comp.value not in self._string_to_vals(condition['value']):
207
- if must_on and on_val_change:
207
+ if must_on and on_sensor:
208
208
  print(
209
209
  f"Condition not met: [{comp} value:{comp.value} "
210
210
  f"{condition['op']} {condition['value']}]"
@@ -213,7 +213,7 @@ class PresenceLighting(Script):
213
213
  break
214
214
 
215
215
  if not op(comp.value, condition['value']):
216
- if must_on and on_val_change:
216
+ if must_on and on_sensor:
217
217
  print(
218
218
  f"Condition not met: [{comp} value:{comp.value} "
219
219
  f"{condition['op']} {condition['value']}]"
@@ -221,7 +221,15 @@ class PresenceLighting(Script):
221
221
  additional_conditions_met = False
222
222
  break
223
223
 
224
- if must_on and additional_conditions_met and not self.is_on:
224
+
225
+ if not self.is_on:
226
+ if not must_on:
227
+ return
228
+ if not additional_conditions_met:
229
+ return
230
+ if on_condition_change:
231
+ return
232
+
225
233
  print("Turn the lights ON!")
226
234
  self.is_on = True
227
235
  self.light_org_values = {}
@@ -240,7 +248,7 @@ class PresenceLighting(Script):
240
248
  comp.controller.send(on_val)
241
249
  return
242
250
 
243
- if self.is_on:
251
+ else:
244
252
  if not additional_conditions_met:
245
253
  return self._turn_it_off()
246
254
  if not any(presence_values):
simo/core/api_meta.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from collections import OrderedDict
2
2
  from django.urls import reverse
3
3
  from django.utils.encoding import force_str
4
+ from django.forms.utils import pretty_name
4
5
  from rest_framework.metadata import SimpleMetadata
5
6
  from rest_framework import serializers
6
7
  from rest_framework.utils.field_mapping import ClassLookupDict
@@ -79,6 +80,7 @@ class SIMOAPIMetadata(SimpleMetadata):
79
80
  field_info['autocomplete_url'] = reverse(form_field.url)
80
81
  field_info['forward'] = form_field.forward
81
82
 
83
+
82
84
  attrs = [
83
85
  'read_only', 'label', 'help_text',
84
86
  'min_length', 'max_length',
@@ -94,7 +96,8 @@ class SIMOAPIMetadata(SimpleMetadata):
94
96
  if getattr(field, 'child', None):
95
97
  field_info['child'] = self.get_field_info(field.child)
96
98
  elif getattr(field, 'fields', None):
97
- field_info['children'] = self.get_serializer_info(field)
99
+ field.Meta.form = form_field.formset_cls.form
100
+ field_info['children'] = self.get_formset_serializer_info(field)
98
101
 
99
102
  if form_field and hasattr(form_field, 'queryset'):
100
103
  if form_field.queryset.model == Icon:
@@ -122,4 +125,20 @@ class SIMOAPIMetadata(SimpleMetadata):
122
125
  for choice_value, choice_name in field.choices.items()
123
126
  ]
124
127
 
125
- return field_info
128
+ return field_info
129
+
130
+
131
+ def get_formset_serializer_info(self, serializer):
132
+ """
133
+ Given an instance of a serializer, return a dictionary of metadata
134
+ about its fields.
135
+ """
136
+ if hasattr(serializer, 'child'):
137
+ # If this is a `ListSerializer` then we want to examine the
138
+ # underlying child serializer instance instead.
139
+ serializer = serializer.child
140
+ return OrderedDict([
141
+ (field_name, self.get_field_info(field))
142
+ for field_name, field in serializer.get_fields().items()
143
+ if not isinstance(field, serializers.HiddenField)
144
+ ])
@@ -1,4 +1,5 @@
1
1
  from dal import autocomplete
2
+ from dal.views import BaseQuerySetView
2
3
  from django.db.models import Q
3
4
  from django.template.loader import render_to_string
4
5
  from simo.core.utils.helpers import search_queryset
@@ -13,7 +14,9 @@ class IconModelAutocomplete(autocomplete.Select2QuerySetView):
13
14
  if self.forwarded.get("id"):
14
15
  return qs.filter(pk=self.forwarded.get("id"))
15
16
 
16
- if self.q:
17
+ if self.request.GET.get('value'):
18
+ qs = qs.filter(pk__in=self.request.GET['value'].split(','))
19
+ elif self.q:
17
20
  qs = search_queryset(qs, self.q, ('slug', 'keywords'))
18
21
  return qs.distinct()
19
22
 
@@ -56,7 +59,9 @@ class CategoryAutocomplete(autocomplete.Select2QuerySetView):
56
59
  return qs.filter(pk=self.forwarded.get("id"))
57
60
 
58
61
  qs = qs.filter(all=False)
59
- if self.q:
62
+ if self.request.GET.get('value'):
63
+ qs = qs.filter(pk__in=self.request.GET['value'].split(','))
64
+ elif self.q:
60
65
  qs = search_queryset(qs, self.q, ('name'))
61
66
  return qs.distinct()
62
67
 
@@ -79,7 +84,9 @@ class ZoneAutocomplete(autocomplete.Select2QuerySetView):
79
84
  if self.forwarded.get("id"):
80
85
  return qs.filter(pk=self.forwarded.get("id"))
81
86
 
82
- if self.q:
87
+ if self.request.GET.get('value'):
88
+ qs = qs.filter(pk__in=self.request.GET['value'].split(','))
89
+ elif self.q:
83
90
  qs = search_queryset(qs, self.q, ('name',))
84
91
  return qs.distinct()
85
92
 
@@ -116,7 +123,9 @@ class ComponentAutocomplete(autocomplete.Select2QuerySetView):
116
123
  Q(alarm_category__in=self.forwarded['alarm_category'])
117
124
  )
118
125
 
119
- if self.q:
126
+ if self.request.GET.get('value'):
127
+ qs = qs.filter(pk__in=self.request.GET['value'].split(','))
128
+ elif self.q:
120
129
  qs = search_queryset(qs, self.q, ('zone__name', 'name',))
121
130
  return qs.distinct()
122
131
 
simo/core/serializers.py CHANGED
@@ -4,6 +4,7 @@ import re
4
4
  from django import forms
5
5
  from collections import OrderedDict
6
6
  from django.conf import settings
7
+ from django.forms.utils import pretty_name
7
8
  from collections.abc import Iterable
8
9
  from easy_thumbnails.files import get_thumbnailer
9
10
  from simo.core.middleware import get_current_request
@@ -193,6 +194,9 @@ class ComponentFormsetField(FormSerializer):
193
194
  ret[field_name] = self._get_field(form_field, serializer_field_class)
194
195
  ret[field_name].initial = form_field.initial
195
196
  ret[field_name].default = form_field.initial
197
+ ret[field_name].label = form_field.label
198
+ if not ret[field_name].label:
199
+ ret[field_name].label = pretty_name(field_name)
196
200
 
197
201
  return ret
198
202
 
@@ -360,6 +364,8 @@ class ComponentSerializer(FormSerializer):
360
364
  )
361
365
  ret[field_name].initial = form_field.initial
362
366
  ret[field_name].default = form_field.initial
367
+ if not ret[field_name].label:
368
+ ret[field_name].label = pretty_name(field_name)
363
369
 
364
370
  for name, field in super(FormSerializerBase, self).get_fields().items():
365
371
  if name in ret:
Binary file
simo/fleet/views.py CHANGED
@@ -40,7 +40,10 @@ class PinsSelectAutocomplete(autocomplete.Select2QuerySetView):
40
40
  if self.forwarded.get('filters'):
41
41
  qs = qs.filter(**self.forwarded.get('filters'))
42
42
 
43
- if self.q:
43
+
44
+ if self.request.GET.get('value'):
45
+ qs = qs.filter(pk__in=self.request.GET['value'].split(','))
46
+ elif self.q:
44
47
  qs = search_queryset(qs, self.q, ('label', ))
45
48
 
46
49
  return qs
@@ -59,7 +62,9 @@ class InterfaceSelectAutocomplete(autocomplete.Select2QuerySetView):
59
62
 
60
63
  qs = Interface.objects.filter(colonel=colonel)
61
64
 
62
- if self.forwarded.get('filters'):
65
+ if self.request.GET.get('value'):
66
+ qs = qs.filter(pk__in=self.request.GET['value'].split(','))
67
+ elif self.forwarded.get('filters'):
63
68
  qs = qs.filter(**self.forwarded.get('filters'))
64
69
 
65
70
  return qs
@@ -81,15 +86,12 @@ class ControlInputSelectAutocomplete(autocomplete.Select2ListView):
81
86
  pins_qs = pins_qs.filter(
82
87
  Q(occupied_by_id=None) | Q(id=int(self.forwarded['self'][4:]))
83
88
  )
84
- else:
89
+ elif 'value' not in self.request.GET:
85
90
  pins_qs = pins_qs.filter(occupied_by_id=None)
86
91
 
87
92
  if self.forwarded.get('pin_filters'):
88
93
  pins_qs = pins_qs.filter(**self.forwarded.get('pin_filters'))
89
94
 
90
- if self.q:
91
- pins_qs = search_queryset(pins_qs, self.q, ('label',))
92
-
93
95
  buttons_qs = Component.objects.filter(
94
96
  base_type='button'
95
97
  ).select_related('zone')
@@ -97,10 +99,28 @@ class ControlInputSelectAutocomplete(autocomplete.Select2ListView):
97
99
  if self.forwarded.get('button_filters'):
98
100
  buttons_qs = buttons_qs.filter(**self.forwarded.get('button_filters'))
99
101
 
100
- if self.q:
102
+ if self.request.GET.get('value'):
103
+ pin_ids = []
104
+ button_ids = []
105
+ for v in self.request.GET['value'].split(','):
106
+ try:
107
+ t, id = v.split('-')
108
+ id = int(id)
109
+ except:
110
+ continue
111
+ if t == 'pin':
112
+ pin_ids.append(id)
113
+ elif t == 'button':
114
+ button_ids.append(id)
115
+ buttons_qs = buttons_qs.filter(id__in=button_ids)
116
+ pins_qs = pins_qs.filter(id__in=pin_ids)
117
+
118
+ elif self.q:
101
119
  buttons_qs = search_queryset(
102
120
  buttons_qs, self.q, ('name', 'zone__name', 'category__name')
103
121
  )
122
+ pins_qs = search_queryset(pins_qs, self.q, ('label',))
123
+
104
124
 
105
125
  return [(f'pin-{pin.id}', str(pin)) for pin in pins_qs] + \
106
126
  [(f'button-{button.id}',
simo/notifications/api.py CHANGED
@@ -34,7 +34,7 @@ class NotificationsViewSet(
34
34
  archived = bool(int(self.request.query_params['archived']))
35
35
  except:
36
36
  archived = False
37
- qs = qs.objects.filter(
37
+ qs = qs.filter(
38
38
  user_notifications__archived__isnull=not archived,
39
39
  user_notifications__user=self.request.user
40
40
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: simo
3
- Version: 2.6.5
3
+ Version: 2.6.7
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
@@ -13,7 +13,7 @@ simo/__pycache__/urls.cpython-38.pyc,sha256=u0x6EqT8S1YfDOSPgbI8Kf-RDlveY9OV-EDX
13
13
  simo/__pycache__/wsgi.cpython-38.pyc,sha256=TpRxO7VM_ql31hbKphVdanydC5RI1nHB4l0QA2pdWxo,322
14
14
  simo/automation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  simo/automation/app_widgets.py,sha256=gaqImMZjuMHm7nIb9a4D-Y3qipz_WhSPAHXcwGx4Uzs,199
16
- simo/automation/controllers.py,sha256=pKC8kXiT8mvkLJChl10cdlgmeetG89wsY1xIW5ULvEs,10045
16
+ simo/automation/controllers.py,sha256=Py62mo8boFsreiGVAnalJt_1SJePxD67aCGma6zGjWg,10206
17
17
  simo/automation/forms.py,sha256=wJMaXE5ngO_o60jqxnf4Om09q48yXpWwRna0FkQCZYs,10081
18
18
  simo/automation/gateways.py,sha256=7r33NOAiRd_RGMMm44i0KYzuAuweQnEF4HxLo-Rpexs,9408
19
19
  simo/automation/helpers.py,sha256=iP-fxxB8HsFQy3k2CjFubu86aMqvWgmh-p24DiyOrek,4330
@@ -22,7 +22,7 @@ simo/automation/serializers.py,sha256=PjyFrjdPK1mBsgbNhyqMi9SWzcymqTa742ipy0LhAN
22
22
  simo/automation/state.py,sha256=aZZvNBae7unnux_zGHCIWCV2z47hVJc-DIL72Hqfkeo,600
23
23
  simo/automation/__pycache__/__init__.cpython-38.pyc,sha256=YmP0xAD-mxpQHgdTZeC64sXChA8TriMZD1jckNYi3xg,164
24
24
  simo/automation/__pycache__/app_widgets.cpython-38.pyc,sha256=7DfUA9V_1MiwrOe_ta-ts8dYY8xXb9UMg2_9A3XoRcs,523
25
- simo/automation/__pycache__/controllers.cpython-38.pyc,sha256=oswJRk8WGzzrNpg9S2LMl-zrAKaGxENacFzj6jT_tNI,7889
25
+ simo/automation/__pycache__/controllers.cpython-38.pyc,sha256=s9YqMUTCzjIxNVrk36SrIvGrXWYLc9DR80Sa3orpg1o,7936
26
26
  simo/automation/__pycache__/forms.cpython-38.pyc,sha256=qxQZeTafJOT_lrXOKY6134XjIrx5OzABAZdncNnRV4E,7720
27
27
  simo/automation/__pycache__/gateways.cpython-38.pyc,sha256=W6OrugOLOGaYbibEWSs-zBZc8jQpNlO_NmJU-rmd6fU,7558
28
28
  simo/automation/__pycache__/helpers.cpython-38.pyc,sha256=4VSSarOFnUk_KExWwvDlx5dEhv8aHUCHMZDtGG--pUY,3627
@@ -63,11 +63,11 @@ simo/core/__init__.py,sha256=_s2TjJfQImsMrTIxqLAx9AZie1Ojmm6sCHASdl3WLGU,50
63
63
  simo/core/admin.py,sha256=nmFDO57D5hXHDfl0wjJ9J5jBxyCqW4Gp_uqHhpS2uuw,18564
64
64
  simo/core/api.py,sha256=HWyzmFGbULndSaW3sdrQa_kw2zfjd7yzfYxErAij7cY,29070
65
65
  simo/core/api_auth.py,sha256=vCxvczA8aWNcW0VyKs5WlC_ytlqeGP_H_hkKUNVkCwM,1247
66
- simo/core/api_meta.py,sha256=EaiY-dCADP__9MvLpoHvhjytFT92IrxPZDv95xgqasU,4955
66
+ simo/core/api_meta.py,sha256=7yvarprPAHV2VP7AZV8wOqmeWsJ_UInrzKMakkeXsXU,5686
67
67
  simo/core/app_widgets.py,sha256=VxZzapuc-a29wBH7JzpvNF2SK1ECrgNUySId5ke1ffc,2509
68
68
  simo/core/apps.py,sha256=CsqpiQerhmrMsH-wGiG-gQgXd9qEkIi-LUaA9cXpKSw,425
69
69
  simo/core/auto_urls.py,sha256=FBDclIeRp5UVWomIUbRzUgY-AoMk-r2qC2htlwKD4Lo,1106
70
- simo/core/autocomplete_views.py,sha256=Nu9sgc0X5OspRkJnpomeO2XdHCOg9ii9v4ZkGecCNjQ,3860
70
+ simo/core/autocomplete_views.py,sha256=sQbT2g1Y9HGLLKazKaNfnZmwa6RJlTek9XzkGQcx4P8,4363
71
71
  simo/core/base_types.py,sha256=WypW8hTfzveuTQtruGjLYAGQZIuczxTlW-SdRk3iQug,666
72
72
  simo/core/context.py,sha256=LKw1I4iIRnlnzoTCuSLLqDX7crHdBnMo3hjqYvVmzFc,1557
73
73
  simo/core/controllers.py,sha256=vAZwtwPb259Bw-3dPSXuDxIcErMnQ6YBpBaUh4HWghM,35656
@@ -83,7 +83,7 @@ simo/core/middleware.py,sha256=eUFf6iP-Snx_0TE3MoXsSwqrd5IjlukqZk2GQGStRCo,3385
83
83
  simo/core/models.py,sha256=QNVTnWeHAW6LVrs3eaR7WNMhwjICuQpXZ8vyH_2qCBo,22834
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=NgqZhBjY0or6dfN-N_EaaygR_EUoUBryuK1DbD4R3Fg,21810
86
+ simo/core/serializers.py,sha256=JN1B2IcLkjZB3XiAetxK8Awx9WNHPOFwrCOrGqTLdbE,22118
87
87
  simo/core/signal_receivers.py,sha256=xUnQrWFBMF0Uasj6PzpERPr6h6BR-ZjUb1NSakRSzQo,9458
88
88
  simo/core/socket_consumers.py,sha256=trRZvBGTJ7xIbfdmVvn7zoiWp_qssSkMZykDrI5YQyE,9783
89
89
  simo/core/storage.py,sha256=_5igjaoWZAiExGWFEJMElxUw55DzJG1jqFty33xe8BE,342
@@ -96,11 +96,11 @@ simo/core/__pycache__/__init__.cpython-38.pyc,sha256=ZJFM_XN0RmJMULQulgA_wFiOnEt
96
96
  simo/core/__pycache__/admin.cpython-38.pyc,sha256=WAfdq_hAdkW-_QwJ0E7NSd25yxnPRi_HjJ-uKFMJzcg,14146
97
97
  simo/core/__pycache__/api.cpython-38.pyc,sha256=0kALbhViLcVqxcxzc_mmT9TzZcONc0ZNzZCWscbxjWE,22459
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=VYx5ZeDyNBI4B_CBEIhV5B3GnLsMOx9s3rNZTSMODco,3703
99
+ simo/core/__pycache__/api_meta.cpython-38.pyc,sha256=CpiIoUPpQkX8db8o150LtGo79nHnBoEWKeRF8NoY69o,4391
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
102
  simo/core/__pycache__/auto_urls.cpython-38.pyc,sha256=ib_ns5Ko8ybfrdJJWYVV1jevihxOFs39aBF4bez6Lzs,874
103
- simo/core/__pycache__/autocomplete_views.cpython-38.pyc,sha256=Of2ZFdN8XF1I4TmAUwqZonHqZd8O9CpX_DqIQMU_rdc,3967
103
+ simo/core/__pycache__/autocomplete_views.cpython-38.pyc,sha256=Er4fS5KhE2FB9g7-ckjS_RIWOv7qysuzdt1Ab7HUL5Q,4318
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
106
106
  simo/core/__pycache__/controllers.cpython-38.pyc,sha256=Lt9JDheLB3qgaZZ9NACAEeg43IY9XxZHN3Y0c5JavMo,30710
@@ -116,7 +116,7 @@ simo/core/__pycache__/middleware.cpython-38.pyc,sha256=g3d4L2PwxFyRKIPMP9Hkdjk1P
116
116
  simo/core/__pycache__/models.cpython-38.pyc,sha256=po4B4bMyA-KDBu8qbVwGjrpUZJQPVBB6dkfncEBKYnM,18554
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=QvlVp7m13i3Vn1FOmjV-y_IpLfmcSIy74jhb66ecJbo,19403
119
+ simo/core/__pycache__/serializers.cpython-38.pyc,sha256=xSz0o7EROKp4eKbMmTwm37j9jbAuTcN8PMqluRjZucQ,19551
120
120
  simo/core/__pycache__/signal_receivers.cpython-38.pyc,sha256=h0AsNC33oLoADJlwUVfPB1suUYovfzjfc0SE41-3MjY,6778
121
121
  simo/core/__pycache__/socket_consumers.cpython-38.pyc,sha256=KqbO1cOewodVPcy0-htVefyUjCuELKV0o7fOfYqfgPc,8490
122
122
  simo/core/__pycache__/storage.cpython-38.pyc,sha256=9R1Xu0FJDflfRXUPsqEgt0SpwiP7FGk7HaR8s8XRyI8,721
@@ -10263,7 +10263,7 @@ simo/fleet/serializers.py,sha256=PQnjp7LaEpMts-om2OPV5XOU9ut6KFWiePPDCXK0M98,267
10263
10263
  simo/fleet/socket_consumers.py,sha256=4hVSvFNq9Hi44R7JmaujFoEtgmH5YBST2cFYtIiMDRA,18840
10264
10264
  simo/fleet/tasks.py,sha256=NX_opj-rbkK9eeQMeRNwHj_ZJ0LC4rYOZovMg9_r0kA,904
10265
10265
  simo/fleet/utils.py,sha256=wNJvURzLP3-aho3D3rfg07N9kWCaMIw5gOsmeeO9Nlg,4740
10266
- simo/fleet/views.py,sha256=jT3GcGv_JEj3dqyfHH2whCnGqwT8YEAuFxRgIX4Dk9w,3237
10266
+ simo/fleet/views.py,sha256=jK5ajYTIPhz8ODgeHxHgZ9aWicWOD2D6PFJ_iq9B_ug,4051
10267
10267
  simo/fleet/__pycache__/__init__.cpython-38.pyc,sha256=pIZE7EL6-cuJ3pQtaSwjKLrKLsTYelp1k9sRhXKLh6s,159
10268
10268
  simo/fleet/__pycache__/admin.cpython-38.pyc,sha256=iweeu5AkaggBhQntP6-VF_eEodkNc6E7zKy0VjfwC2o,6652
10269
10269
  simo/fleet/__pycache__/api.cpython-38.pyc,sha256=rZ1mkfkaMBEXhi9sw_jTKdk2CPJhBNxoImtjQ3Rf1VY,4016
@@ -10280,7 +10280,7 @@ simo/fleet/__pycache__/serializers.cpython-38.pyc,sha256=l_FzORWCM1hcSZV0AaGRO-p
10280
10280
  simo/fleet/__pycache__/socket_consumers.cpython-38.pyc,sha256=m8sJWln-uyjeTD-alyoNikEJcHCxZGTe2vXnMGVNZog,14170
10281
10281
  simo/fleet/__pycache__/tasks.cpython-38.pyc,sha256=RoNxL2WUiW67s9O9DjaYVVjCBSZu2nje0Qn9FJkWVS0,1116
10282
10282
  simo/fleet/__pycache__/utils.cpython-38.pyc,sha256=obUd-X2Y-ybx4icqUWq_qwIxrP9yyarJjexWAfO4MTI,3344
10283
- simo/fleet/__pycache__/views.cpython-38.pyc,sha256=wilxSvZliSKQ5qC7JjWneYBSdbeZeTsF5uDrOQVmvms,3181
10283
+ simo/fleet/__pycache__/views.cpython-38.pyc,sha256=jffuwjfsNGY8EJchA6lnSBUXkDQkIqoov6DhWAO4yCA,3623
10284
10284
  simo/fleet/migrations/0001_initial.py,sha256=lce8nkD8Sz6pYr-XJSpDm4CMDuB6TA__WtnHpIp-eA4,1326
10285
10285
  simo/fleet/migrations/0002_auto_20220422_0743.py,sha256=sFOfAjnQOzcJjE8lHrrHgTaGilJNYswMdXphgVzUZqY,825
10286
10286
  simo/fleet/migrations/0003_auto_20220422_0752.py,sha256=VcH7DyMAniEwT76hDVofS8FTNpM3nxz_J9AC2zKHDSA,543
@@ -10449,13 +10449,13 @@ simo/multimedia/migrations/__pycache__/0004_auto_20231023_1055.cpython-38.pyc,sh
10449
10449
  simo/multimedia/migrations/__pycache__/__init__.cpython-38.pyc,sha256=mCgSiQBphL85imdWyTi9-4zBDYF6HfXbhB0ycSPVVuA,175
10450
10450
  simo/notifications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10451
10451
  simo/notifications/admin.py,sha256=WQbN_bd2KRxVjbOajeworNrV9QlDNSadQT58La0Nn2M,1174
10452
- simo/notifications/api.py,sha256=qzM-P3kq_YQ8_wHS8EMIutRbTvtqOXczQbJFb7EgQ08,1773
10452
+ simo/notifications/api.py,sha256=QrfFn5kBU0vlqi8X368w1-0iTmDGu_hmMxLW2R0OTTg,1765
10453
10453
  simo/notifications/models.py,sha256=QGDLGAi5gk8OTcvd7ho5WNdctDymWGmGF1ZqN4-G_ZA,2443
10454
10454
  simo/notifications/serializers.py,sha256=altDEAPWwOhxRcEzE9-34jL8EFpyf3vPoEdAPoVLfGc,523
10455
10455
  simo/notifications/utils.py,sha256=uBl-Y7WGu00iaGM5rrdogcq0OMRVtyVfJF39-mdB3_k,1853
10456
10456
  simo/notifications/__pycache__/__init__.cpython-38.pyc,sha256=YvucUfu98XFvEEg1LYFMlOZJpo_jSGxTVrM-ylAFLOg,167
10457
10457
  simo/notifications/__pycache__/admin.cpython-38.pyc,sha256=MScNrtVM1wavefsPfxy0A7LVyXKcbvEkLH9GJkgNOl8,1945
10458
- simo/notifications/__pycache__/api.cpython-38.pyc,sha256=8dPiIMaFQlBFP01VwXbQ98udaZaqwibZJtz_Y2cXa8U,2073
10458
+ simo/notifications/__pycache__/api.cpython-38.pyc,sha256=eQmCHwTnr4zQ3ZY_SKZVCryiSEnzmyIjHQM13pZ5LT0,2071
10459
10459
  simo/notifications/__pycache__/models.cpython-38.pyc,sha256=PoqLuOnlaAWQQ-20AtqhvAlLSkakPmdn7J7wGvHNW3g,2449
10460
10460
  simo/notifications/__pycache__/serializers.cpython-38.pyc,sha256=7-eRGKYuQ4g1SpKOMpz17SIiu1HmaMoYv-cJbaO9QGA,1028
10461
10461
  simo/notifications/__pycache__/utils.cpython-38.pyc,sha256=6Tq7VkW-pZLzWzcxPtBU9MDFZLO7iLY8-ygyefoJ5OQ,1529
@@ -10599,9 +10599,9 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
10599
10599
  simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10600
10600
  simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10601
10601
  simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10602
- simo-2.6.5.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
10603
- simo-2.6.5.dist-info/METADATA,sha256=bqH7ricDLu2pweU223qNedu6xRzUm130-ZOrO192p9g,1952
10604
- simo-2.6.5.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
10605
- simo-2.6.5.dist-info/entry_points.txt,sha256=S9PwnUYmTSW7681GKDCxUbL0leRJIaRk6fDQIKgbZBA,135
10606
- simo-2.6.5.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
10607
- simo-2.6.5.dist-info/RECORD,,
10602
+ simo-2.6.7.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
10603
+ simo-2.6.7.dist-info/METADATA,sha256=Jar59TxU2gPodg0J4-1cPqMgEgAOOSb_Bfh9Hs_Qxuk,1952
10604
+ simo-2.6.7.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
10605
+ simo-2.6.7.dist-info/entry_points.txt,sha256=S9PwnUYmTSW7681GKDCxUbL0leRJIaRk6fDQIKgbZBA,135
10606
+ simo-2.6.7.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
10607
+ simo-2.6.7.dist-info/RECORD,,
File without changes