simo 2.0.18__py3-none-any.whl → 2.0.19__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__/api.cpython-38.pyc +0 -0
- simo/core/api.py +16 -16
- simo/generic/__pycache__/models.cpython-38.pyc +0 -0
- simo/generic/models.py +26 -25
- simo/multimedia/__pycache__/controllers.cpython-38.pyc +0 -0
- simo/multimedia/controllers.py +0 -2
- simo/users/__pycache__/api.cpython-38.pyc +0 -0
- simo/users/__pycache__/models.cpython-38.pyc +0 -0
- simo/users/__pycache__/serializers.cpython-38.pyc +0 -0
- simo/users/api.py +24 -14
- simo/users/models.py +8 -1
- simo/users/serializers.py +13 -9
- {simo-2.0.18.dist-info → simo-2.0.19.dist-info}/METADATA +2 -1
- {simo-2.0.18.dist-info → simo-2.0.19.dist-info}/RECORD +17 -17
- {simo-2.0.18.dist-info → simo-2.0.19.dist-info}/LICENSE.md +0 -0
- {simo-2.0.18.dist-info → simo-2.0.19.dist-info}/WHEEL +0 -0
- {simo-2.0.18.dist-info → simo-2.0.19.dist-info}/top_level.txt +0 -0
|
Binary file
|
simo/core/api.py
CHANGED
|
@@ -210,14 +210,7 @@ class ComponentViewSet(InstanceMixin, viewsets.ModelViewSet):
|
|
|
210
210
|
@action(detail=True, methods=['post'])
|
|
211
211
|
def subcomponent(self, request, pk=None, *args, **kwargs):
|
|
212
212
|
component = self.get_object()
|
|
213
|
-
|
|
214
|
-
and not request.get_role(self.instance).component_permissions.filter(
|
|
215
|
-
write=True, component=component
|
|
216
|
-
):
|
|
217
|
-
raise APIValidationError(
|
|
218
|
-
_('You do not have permission to write to this component.'),
|
|
219
|
-
code=403
|
|
220
|
-
)
|
|
213
|
+
self.check_object_permissions(request, component)
|
|
221
214
|
json_data = request.data
|
|
222
215
|
subcomponent_id = json_data.pop('id', -1)
|
|
223
216
|
try:
|
|
@@ -232,28 +225,35 @@ class ComponentViewSet(InstanceMixin, viewsets.ModelViewSet):
|
|
|
232
225
|
_('Subcomponent has no controller assigned.'),
|
|
233
226
|
code=400
|
|
234
227
|
)
|
|
228
|
+
self.check_object_permissions(self.request, subcomponent)
|
|
235
229
|
return self.perform_controller_method(json_data, subcomponent)
|
|
236
230
|
|
|
237
231
|
|
|
238
232
|
def check_object_permissions(self, request, component):
|
|
239
233
|
super().check_object_permissions(request, component)
|
|
240
|
-
|
|
241
|
-
and not request.user.get_role(self.instance).component_permissions.filter(
|
|
242
|
-
write=True, component=component
|
|
243
|
-
):
|
|
244
|
-
raise APIValidationError(
|
|
245
|
-
_('You do not have permission to write to this component.'),
|
|
246
|
-
code=403
|
|
247
|
-
)
|
|
234
|
+
|
|
248
235
|
if not component.controller:
|
|
249
236
|
raise APIValidationError(
|
|
250
237
|
_('Component has no controller assigned.'),
|
|
251
238
|
code=400
|
|
252
239
|
)
|
|
240
|
+
if request.user.is_master:
|
|
241
|
+
return
|
|
242
|
+
user_role = request.user.get_role(self.instance)
|
|
243
|
+
if user_role.is_superuser:
|
|
244
|
+
return
|
|
245
|
+
if not user_role.component_permissions.filter(
|
|
246
|
+
write=True, component=component
|
|
247
|
+
).count():
|
|
248
|
+
raise APIValidationError(
|
|
249
|
+
_('You do not have permission to write to this component.'),
|
|
250
|
+
code=403
|
|
251
|
+
)
|
|
253
252
|
|
|
254
253
|
@action(detail=True, methods=['post'])
|
|
255
254
|
def controller(self, request, pk=None, *args, **kwargs):
|
|
256
255
|
component = self.get_object()
|
|
256
|
+
self.check_object_permissions(self.request, component)
|
|
257
257
|
return self.perform_controller_method(request.data, component)
|
|
258
258
|
|
|
259
259
|
@action(detail=False, methods=['post'])
|
|
Binary file
|
simo/generic/models.py
CHANGED
|
@@ -148,28 +148,29 @@ def bind_alarm_groups(sender, instance, created, *args, **kwargs):
|
|
|
148
148
|
return
|
|
149
149
|
users_at_home = InstanceUser.objects.filter(
|
|
150
150
|
instance=instance.instance, at_home=True
|
|
151
|
-
).exclude(is_active=False).exclude(instance.id)
|
|
152
|
-
if
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
151
|
+
).exclude(is_active=False).exclude(id=instance.id)
|
|
152
|
+
if users_at_home.count():
|
|
153
|
+
return
|
|
154
|
+
for ag in Component.objects.filter(
|
|
155
|
+
zone__instance=instance.instance,
|
|
156
|
+
base_type=AlarmGroup.base_type,
|
|
157
|
+
config__arm_on_away__startswith='on_away_and_locked'
|
|
158
|
+
):
|
|
159
|
+
locked_states = [
|
|
160
|
+
True if l['value'] == 'locked' else False
|
|
161
|
+
for l in Component.objects.filter(
|
|
162
|
+
base_type='lock', id__in=ag.config.get('arming_locks', []),
|
|
163
|
+
).values('value')
|
|
164
|
+
]
|
|
165
|
+
if not any(locked_states):
|
|
166
|
+
print("Not a single lock is locked. Continue.")
|
|
167
|
+
continue
|
|
168
|
+
if ag.config['arm_on_away'] == 'on_away_and_locked':
|
|
169
|
+
print(f"Everybody is away, single lock is locked, arm {ag}!")
|
|
170
|
+
ag.arm()
|
|
171
|
+
continue
|
|
172
|
+
if ag.config['arm_on_away'] == 'on_away_and_locked_all' \
|
|
173
|
+
and all(locked_states):
|
|
174
|
+
print(f"Everybody is away, all locks are locked, arm {ag}!")
|
|
175
|
+
ag.arm()
|
|
176
|
+
continue
|
|
Binary file
|
simo/multimedia/controllers.py
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
from django.utils.translation import gettext_lazy as _
|
|
2
|
-
from django.core.exceptions import ValidationError
|
|
3
|
-
from simo.core.controllers import BEFORE_SEND, BEFORE_SET
|
|
4
2
|
from simo.core.controllers import Switch, TimerMixin
|
|
5
3
|
from .app_widgets import AudioPlayerWidget, VideoPlayerWidget
|
|
6
4
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
simo/users/api.py
CHANGED
|
@@ -38,25 +38,34 @@ class UsersViewSet(mixins.RetrieveModelMixin,
|
|
|
38
38
|
return queryset.filter(roles__instance=self.instance)
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
def check_permission_to_change(self, request, target_user):
|
|
42
|
+
user_role = request.user.get_role(self.instance)
|
|
43
|
+
if request.user.is_master:
|
|
44
|
+
return user_role
|
|
45
|
+
if user_role.is_superuser:
|
|
46
|
+
return user_role
|
|
47
|
+
if user_role.can_manage_users:
|
|
48
|
+
return user_role
|
|
49
|
+
msg = 'You are not allowed to change this!'
|
|
50
|
+
print(msg, file=sys.stderr)
|
|
51
|
+
raise ValidationError(msg, code=403)
|
|
52
|
+
|
|
53
|
+
|
|
41
54
|
def update(self, request, *args, **kwargs):
|
|
42
55
|
partial = kwargs.pop('partial', False)
|
|
56
|
+
target_user = self.get_object()
|
|
57
|
+
user_role = self.check_permission_to_change(request, target_user)
|
|
43
58
|
|
|
44
59
|
for key, val in request.data.items():
|
|
45
60
|
if key not in ('role', 'is_active'):
|
|
46
61
|
request.data.pop(key)
|
|
47
62
|
|
|
48
|
-
user = self.get_object()
|
|
49
|
-
user.set_instance(self.instance)
|
|
50
63
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if not user_role or not user_role.can_manage_users:
|
|
54
|
-
msg = 'You are not allowed to change this!'
|
|
55
|
-
print(msg, file=sys.stderr)
|
|
56
|
-
raise ValidationError(msg, code=403)
|
|
64
|
+
target_user.set_instance(self.instance)
|
|
65
|
+
|
|
57
66
|
|
|
58
67
|
serializer = self.get_serializer(
|
|
59
|
-
|
|
68
|
+
target_user, data=request.data, partial=partial
|
|
60
69
|
)
|
|
61
70
|
try:
|
|
62
71
|
serializer.is_valid(raise_exception=True)
|
|
@@ -71,14 +80,15 @@ class UsersViewSet(mixins.RetrieveModelMixin,
|
|
|
71
80
|
except:
|
|
72
81
|
pass
|
|
73
82
|
else:
|
|
74
|
-
if set_role_to !=
|
|
83
|
+
if set_role_to != target_user.get_role(self.instance) \
|
|
84
|
+
and set_role_to.is_superuser \
|
|
75
85
|
and not user_role.is_superuser:
|
|
76
86
|
msg = "You are not allowed to grant superuser roles to others " \
|
|
77
87
|
"if you are not a superuser yourself."
|
|
78
88
|
print(msg, file=sys.stderr)
|
|
79
89
|
raise ValidationError(msg, code=403)
|
|
80
90
|
|
|
81
|
-
if
|
|
91
|
+
if target_user == request.user \
|
|
82
92
|
and user_role and user_role.is_superuser \
|
|
83
93
|
and not set_role_to.is_superuser:
|
|
84
94
|
# User is trying to downgrade his own role from
|
|
@@ -86,7 +96,7 @@ class UsersViewSet(mixins.RetrieveModelMixin,
|
|
|
86
96
|
# there is at least one user left that has superuser role on this instance.
|
|
87
97
|
if not User.objects.filter(
|
|
88
98
|
roles__instance=self.instance, roles__is_superuser=True
|
|
89
|
-
).exclude(id=
|
|
99
|
+
).exclude(id=target_user.id).values('id').first():
|
|
90
100
|
msg = "You are the only one superuser on this instance, " \
|
|
91
101
|
"therefore you are not alowed to downgrade your role."
|
|
92
102
|
print(msg, file=sys.stderr)
|
|
@@ -94,10 +104,10 @@ class UsersViewSet(mixins.RetrieveModelMixin,
|
|
|
94
104
|
|
|
95
105
|
self.perform_update(serializer)
|
|
96
106
|
|
|
97
|
-
if getattr(
|
|
107
|
+
if getattr(target_user, '_prefetched_objects_cache', None):
|
|
98
108
|
# If 'prefetch_related' has been applied to a queryset, we need to
|
|
99
109
|
# forcibly invalidate the prefetch cache on the instance.
|
|
100
|
-
|
|
110
|
+
target_user._prefetched_objects_cache = {}
|
|
101
111
|
|
|
102
112
|
return RESTResponse(serializer.data)
|
|
103
113
|
|
simo/users/models.py
CHANGED
|
@@ -277,7 +277,7 @@ class User(AbstractBaseUser, SimoAdminMixin):
|
|
|
277
277
|
@property
|
|
278
278
|
def is_active(self):
|
|
279
279
|
if self.is_master and not self.instance_roles.all():
|
|
280
|
-
# Master
|
|
280
|
+
# Master who have no roles on any instance are in GOD mode!
|
|
281
281
|
# It can not be disabled by anybody, nor it is seen by anybody. :)
|
|
282
282
|
return True
|
|
283
283
|
if self._instance:
|
|
@@ -411,6 +411,7 @@ def set_user_at_home(sender, instance, created, **kwargs):
|
|
|
411
411
|
from simo.core.models import Instance
|
|
412
412
|
if not created:
|
|
413
413
|
return
|
|
414
|
+
|
|
414
415
|
if not instance.relay:
|
|
415
416
|
for item in InstanceUser.objects.filter(user=instance.user_device.user):
|
|
416
417
|
item.at_home = True
|
|
@@ -419,6 +420,12 @@ def set_user_at_home(sender, instance, created, **kwargs):
|
|
|
419
420
|
if not instance.location:
|
|
420
421
|
return
|
|
421
422
|
|
|
423
|
+
instance.user_device.last_seen_location = instance.location
|
|
424
|
+
instance.user_device.save()
|
|
425
|
+
instance.user_device.user.last_seen_location = instance.location
|
|
426
|
+
instance.user_device.user.last_seen_location_datetime = timezone.now()
|
|
427
|
+
instance.user_device.user.save()
|
|
428
|
+
|
|
422
429
|
for hub_instance in Instance.objects.all():
|
|
423
430
|
try:
|
|
424
431
|
instance_location = Point(
|
simo/users/serializers.py
CHANGED
|
@@ -35,16 +35,20 @@ class UserSerializer(serializers.ModelSerializer):
|
|
|
35
35
|
return obj.is_active
|
|
36
36
|
|
|
37
37
|
def get_avatar(self, obj):
|
|
38
|
-
if obj.avatar:
|
|
38
|
+
if not obj.avatar:
|
|
39
|
+
return
|
|
40
|
+
try:
|
|
39
41
|
url = obj.avatar['avatar'].url
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
except:
|
|
43
|
+
return
|
|
44
|
+
request = get_current_request()
|
|
45
|
+
if request:
|
|
46
|
+
url = request.build_absolute_uri(url)
|
|
47
|
+
return {
|
|
48
|
+
'url': url,
|
|
49
|
+
'last_change': obj.avatar_last_change.timestamp()
|
|
50
|
+
}
|
|
51
|
+
|
|
48
52
|
|
|
49
53
|
def get_at_home(self, obj):
|
|
50
54
|
iu = InstanceUser.objects.filter(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: simo
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.19
|
|
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
|
|
@@ -44,4 +44,5 @@ Requires-Dist: slugify ==0.0.1
|
|
|
44
44
|
Requires-Dist: django-countries ==7.5.1
|
|
45
45
|
Requires-Dist: librosa ==0.10.1
|
|
46
46
|
Requires-Dist: daphne ==4.1.0
|
|
47
|
+
Requires-Dist: Pillow ==9.5.0
|
|
47
48
|
|
|
@@ -26,7 +26,7 @@ simo/_hub_template/hub/supervisor.conf,sha256=IY3fdK0fDD2eAothB0n54xhjQj8LYoXIR9
|
|
|
26
26
|
simo/_hub_template/hub/urls.py,sha256=Ydm-1BkYAzWeEF-MKSDIFf-7aE4qNLPm48-SA51XgJQ,25
|
|
27
27
|
simo/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
28
|
simo/core/admin.py,sha256=5QFmf7ZOqkSEba2Fo-UfJp5dVe-vhKUtOUlAnfQGhno,17634
|
|
29
|
-
simo/core/api.py,sha256=
|
|
29
|
+
simo/core/api.py,sha256=H4KJBiU377zEj8dJGSnBUKgyeyA2512WmSh9I0nH4WM,23760
|
|
30
30
|
simo/core/api_auth.py,sha256=_3hG4e1eLKrcRnSAOB_xTL6cwtOJ2_7JS7GZU_iqTgA,1251
|
|
31
31
|
simo/core/api_meta.py,sha256=dZkz7z-7GaMPVAsfQxOYCvpYaMPx_v2zynbY6JM8oD8,3477
|
|
32
32
|
simo/core/app_widgets.py,sha256=EEQOto3fGR0syDqpJE38tQrx8DoTTyg26nF5kYzHY38,2018
|
|
@@ -57,7 +57,7 @@ simo/core/views.py,sha256=hlAKpAbCbqI3a-uL5tDp532T2oLFiF0MBzKUJ_SNzo0,5833
|
|
|
57
57
|
simo/core/widgets.py,sha256=J9e06C6I22F6xKic3VMgG7WeX07glAcl-4bF2Mg180A,2827
|
|
58
58
|
simo/core/__pycache__/__init__.cpython-38.pyc,sha256=y0IW37wBUIGa3Eh_ZG28pRqHKoLiPyTgUX2OnbkEPlc,158
|
|
59
59
|
simo/core/__pycache__/admin.cpython-38.pyc,sha256=D9Hu5xMkclP6xFjEOLB-mBOe0ZMuCF10uilsROKkvmM,13446
|
|
60
|
-
simo/core/__pycache__/api.cpython-38.pyc,sha256=
|
|
60
|
+
simo/core/__pycache__/api.cpython-38.pyc,sha256=kH2ORVfI8xtwe7M1wdOEtaqJR_SqKR8V1wrCdhazVhc,18883
|
|
61
61
|
simo/core/__pycache__/api_auth.cpython-38.pyc,sha256=5UTBr3rDMERAfc0OuOVDwGeQkt6Q7GLBtZJAMBse1sg,1712
|
|
62
62
|
simo/core/__pycache__/api_meta.cpython-38.pyc,sha256=7dDi_Aay7T4eSNYmEItMlb7yU91-5_pzEVg8GXXf4Qc,2783
|
|
63
63
|
simo/core/__pycache__/app_widgets.cpython-38.pyc,sha256=9Es2wZNduzUJv-jZ_HX0-L3vqwpXWBbseEwoC5K6b-w,3465
|
|
@@ -10272,7 +10272,7 @@ simo/generic/base_types.py,sha256=djymox_boXTHX1BTTCLXrCH7ED-uAsV_idhaDOc3OLI,40
|
|
|
10272
10272
|
simo/generic/controllers.py,sha256=WYuOUzDWvkYRaTvlbdGy_qmwp1o_ohqKDfV7OrOq2QU,52218
|
|
10273
10273
|
simo/generic/forms.py,sha256=U6MIS5U7jLG6XabqCZvrfSoiNCQiWZYE8VZPnyN3SJw,23757
|
|
10274
10274
|
simo/generic/gateways.py,sha256=b3tQ2bAkDVYXCF5iZi2yi-6nZAM8WmHE9ICwxMyR0to,17034
|
|
10275
|
-
simo/generic/models.py,sha256=
|
|
10275
|
+
simo/generic/models.py,sha256=ni1cgqVZ8ttk1snW26EB-2dqsHRZkLg6463my_Cu3EU,6618
|
|
10276
10276
|
simo/generic/routing.py,sha256=elQVZmgnPiieEuti4sJ7zITk1hlRxpgbotcutJJgC60,228
|
|
10277
10277
|
simo/generic/socket_consumers.py,sha256=NfTQGYtVAc864IoogZRxf_0xpDPM0eMCWn0SlKA5P7Y,1751
|
|
10278
10278
|
simo/generic/__pycache__/__init__.cpython-38.pyc,sha256=mLu54WS9KIl-pHwVCBKpsDFIlOqml--JsOVzAUHg6cU,161
|
|
@@ -10281,7 +10281,7 @@ simo/generic/__pycache__/base_types.cpython-38.pyc,sha256=ptw6axyAqemZA35oa6vzr7
|
|
|
10281
10281
|
simo/generic/__pycache__/controllers.cpython-38.pyc,sha256=e0bvgyePgJbIs1omBq0TRPlVSKar2sK_JbUKqDRj7mY,33235
|
|
10282
10282
|
simo/generic/__pycache__/forms.cpython-38.pyc,sha256=lqpRTX5rnrkyJZ5Dga4e9y2WJ81r394AW5DV4KkvxXQ,17856
|
|
10283
10283
|
simo/generic/__pycache__/gateways.cpython-38.pyc,sha256=a4lLIMPyxm9tNzIqorXHIPZFVTcXlPsM1ycJMghxcHA,12673
|
|
10284
|
-
simo/generic/__pycache__/models.cpython-38.pyc,sha256=
|
|
10284
|
+
simo/generic/__pycache__/models.cpython-38.pyc,sha256=yr64EX5n9u9uaOHNbPhNIBoBJo4Y3V_lvDj1ggMAZCQ,5123
|
|
10285
10285
|
simo/generic/__pycache__/routing.cpython-38.pyc,sha256=xtxTUTBTdivzFyA5Wh7k-hUj1WDO_FiRq6HYXdbr9Ks,382
|
|
10286
10286
|
simo/generic/__pycache__/socket_consumers.cpython-38.pyc,sha256=piFHces0J9QuXu_CNBCQCYjoZEeoaxyVjLfJ9KaR8C8,1898
|
|
10287
10287
|
simo/generic/static/weather_icons/01d@2x.png,sha256=TZfWi6Rfddb2P-oldWWcjUiuCHiU9Yrc5hyrQAhF26I,948
|
|
@@ -10313,7 +10313,7 @@ simo/multimedia/admin.py,sha256=GgXiKTLfi3omjBurU-bKgneJRK-tAeiR8o2jo3zD7zs,1002
|
|
|
10313
10313
|
simo/multimedia/api.py,sha256=mZ5BTggWdc_kL8P70JGC3rTCiZKPnxWYoyNcAQkFnX4,285
|
|
10314
10314
|
simo/multimedia/app_widgets.py,sha256=g_IPx5bNmIS6JbaXXDCzYZYV2KVKAiYvWjH4oI30lWM,331
|
|
10315
10315
|
simo/multimedia/base_types.py,sha256=dAP7_uh_b3A03yXBJZyQdRFucKIro4_RkIZ5yOaWXVE,151
|
|
10316
|
-
simo/multimedia/controllers.py,sha256=
|
|
10316
|
+
simo/multimedia/controllers.py,sha256=lwBWzy_hFFHV7dZQgNwHNAWogOnfLzNwkZ2S38_vu48,1999
|
|
10317
10317
|
simo/multimedia/forms.py,sha256=oMCVUXRNiESrY3w_uBLRRgjMjx8BrmNeVglzorA9QtY,239
|
|
10318
10318
|
simo/multimedia/models.py,sha256=5aWGLWDdCkekGAOGZIdanvX1l6ULnhgJN4JAvDZT4nQ,734
|
|
10319
10319
|
simo/multimedia/requirements.txt,sha256=QeIhjf1RfNGCYn_WZm3VuinPI2wK31WEJPbCxRWxssY,28
|
|
@@ -10323,7 +10323,7 @@ simo/multimedia/__pycache__/admin.cpython-38.pyc,sha256=kIVA9sfSgBYNMC64CaSDXLl4
|
|
|
10323
10323
|
simo/multimedia/__pycache__/api.cpython-38.pyc,sha256=lFGEB74vgyEM98B42wwcN9WvH8FAupIiSY0SwEBd5Dw,605
|
|
10324
10324
|
simo/multimedia/__pycache__/app_widgets.cpython-38.pyc,sha256=6pr3fz21tQ5ReC9SJ8VzheUZ0hpxDIClB0SA8YCwcPk,730
|
|
10325
10325
|
simo/multimedia/__pycache__/base_types.cpython-38.pyc,sha256=c4nmNziLs4RB3MAnxltn3W5XNW6PM5_vK_mm3Yvy42Y,324
|
|
10326
|
-
simo/multimedia/__pycache__/controllers.cpython-38.pyc,sha256=
|
|
10326
|
+
simo/multimedia/__pycache__/controllers.cpython-38.pyc,sha256=aDFKmyduOm4hMf-CqVhQKQ8r8ERBNFkVgsOGg8J6DOg,3473
|
|
10327
10327
|
simo/multimedia/__pycache__/forms.cpython-38.pyc,sha256=99h7Yj2jim3QOrqej00wiPufrCF3F--RoYvwa6lzhPI,697
|
|
10328
10328
|
simo/multimedia/__pycache__/models.cpython-38.pyc,sha256=2LViRCOULb9g_k3wZvrODVIuj-iFgfwoWXyg-mAx8Ys,1195
|
|
10329
10329
|
simo/multimedia/__pycache__/serializers.cpython-38.pyc,sha256=n86txYSrkmN0Xlrr8dMwKSY7rEzMc1iovepCZi_Fcw8,886
|
|
@@ -10356,14 +10356,14 @@ simo/notifications/migrations/__pycache__/0002_notification_instance.cpython-38.
|
|
|
10356
10356
|
simo/notifications/migrations/__pycache__/__init__.cpython-38.pyc,sha256=YMBRHVon2nWDtIUbghckjnC12sIg_ykPWhV5aM0tto4,178
|
|
10357
10357
|
simo/users/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10358
10358
|
simo/users/admin.py,sha256=IY501Ewbn8KkBJ3ryBPelHU37ac2--dd6NNGsmYQ6FE,6887
|
|
10359
|
-
simo/users/api.py,sha256=
|
|
10359
|
+
simo/users/api.py,sha256=FVo2bHkGA9VKavyjQm8_wfvI5rQ5KcMZliRiTJjixmI,9462
|
|
10360
10360
|
simo/users/auth_backends.py,sha256=I5pnaTa20-Lxfw_dFG8471xDITb0_fQl1PVhJalp5vU,3992
|
|
10361
10361
|
simo/users/auto_urls.py,sha256=lcJvteBsbHQMJieZpDz-63tDYejLApqsW3CUnDakd7k,272
|
|
10362
10362
|
simo/users/dynamic_settings.py,sha256=sEIsi4yJw3kH46Jq_aOkSuK7QTfQACGUE-lkyBogCaM,570
|
|
10363
10363
|
simo/users/middleware.py,sha256=GMCrnWSc_2qCleyQIkfQGdL-pU-UTEcSg1wPvIKZ9uk,1210
|
|
10364
|
-
simo/users/models.py,sha256=
|
|
10364
|
+
simo/users/models.py,sha256=32Qv3d1gBqagX67irTmUzMY_svOhJA5ECK1TvXshRWw,18865
|
|
10365
10365
|
simo/users/permissions.py,sha256=IwtYS8yQdupWbYKR9VimSRDV3qCJ2jXP57Lyjpb2EQM,242
|
|
10366
|
-
simo/users/serializers.py,sha256=
|
|
10366
|
+
simo/users/serializers.py,sha256=e6yIUsO7BfvrZ4IQHBn-FdpAUMgic5clmGQdTtRlGRY,2515
|
|
10367
10367
|
simo/users/sso_urls.py,sha256=gQOaPvGMYFD0NCVSwyoWO-mTEHe5j9sbzV_RK7kdvp0,251
|
|
10368
10368
|
simo/users/sso_views.py,sha256=-XI67TvQ7SN3goU4OuAHyn84u_1vtusvpn7Pu0K97zo,4648
|
|
10369
10369
|
simo/users/tasks.py,sha256=v9J7t4diB0VnqUDVZAQ8H-rlr4ZR14bgEUuEGpODyOI,854
|
|
@@ -10371,14 +10371,14 @@ simo/users/utils.py,sha256=uOyCNHQJ_tpn054L89keuQwKAzFd0Y2VSUmDVPq6oaY,1335
|
|
|
10371
10371
|
simo/users/views.py,sha256=dOQVvmlHG7ihWKJLFUBcqKOA0UDctlMKR0pTc36JZqg,3487
|
|
10372
10372
|
simo/users/__pycache__/__init__.cpython-38.pyc,sha256=9otuYxq331c4lGy0DR8pigaPpzq0lQ4nrNLhlYiFAF0,159
|
|
10373
10373
|
simo/users/__pycache__/admin.cpython-38.pyc,sha256=T7gzc4xv2JIh3nkJEr4aRZAzyaaweX4m9JXJ-xzwsd0,7705
|
|
10374
|
-
simo/users/__pycache__/api.cpython-38.pyc,sha256=
|
|
10374
|
+
simo/users/__pycache__/api.cpython-38.pyc,sha256=4Fmi4fvgQqc8bM1lyQFVN3nKyWol9RgnUvy7YSNhwuE,8256
|
|
10375
10375
|
simo/users/__pycache__/auth_backends.cpython-38.pyc,sha256=MuOieBIXt6lrDx83-UQtdDyI_U8kE3pU9XR4yFLKBnE,3007
|
|
10376
10376
|
simo/users/__pycache__/auto_urls.cpython-38.pyc,sha256=K-3sz2h-cEitoflSmZk1t0eUg5mQMMGLNZFREVwG7_o,430
|
|
10377
10377
|
simo/users/__pycache__/dynamic_settings.cpython-38.pyc,sha256=6F8JBjZkHykySnmZjNEzjS0ijbmPdcp9yUAZ5kqq_Fo,864
|
|
10378
10378
|
simo/users/__pycache__/middleware.cpython-38.pyc,sha256=Tj4nVEAvxEW3xA63fBRiJWRJpz_M848ZOqbHioc_IPE,1149
|
|
10379
|
-
simo/users/__pycache__/models.cpython-38.pyc,sha256=
|
|
10379
|
+
simo/users/__pycache__/models.cpython-38.pyc,sha256=cyTY-fgeERHebof7-MSxJXfwlWkrwWZyqKT9fl198z0,17614
|
|
10380
10380
|
simo/users/__pycache__/permissions.cpython-38.pyc,sha256=ez5NxoL_JUeeH6GsKhvFreuA3FCBgGf9floSypdXUtM,633
|
|
10381
|
-
simo/users/__pycache__/serializers.cpython-38.pyc,sha256=
|
|
10381
|
+
simo/users/__pycache__/serializers.cpython-38.pyc,sha256=ylapsfu5qbSzbfX2lG3uc4wV6hhndFbIvI109lhhKOo,3461
|
|
10382
10382
|
simo/users/__pycache__/sso_urls.cpython-38.pyc,sha256=uAwDozpOmrhUald-8tOHANILXkH7-TI8fNYXOtPkSY8,402
|
|
10383
10383
|
simo/users/__pycache__/sso_views.cpython-38.pyc,sha256=sHEoxLOac3U3Epmhm197huFnW_J3gGCDZSji57itijU,3969
|
|
10384
10384
|
simo/users/__pycache__/tasks.cpython-38.pyc,sha256=xq-XaJ5gzkpVVZRWe0bvGdA31Eh_WS2rKSY62p4eY5E,1111
|
|
@@ -10446,8 +10446,8 @@ simo/users/templates/invitations/expired_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
10446
10446
|
simo/users/templates/invitations/expired_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10447
10447
|
simo/users/templates/invitations/taken_msg.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10448
10448
|
simo/users/templates/invitations/taken_suggestion.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10449
|
-
simo-2.0.
|
|
10450
|
-
simo-2.0.
|
|
10451
|
-
simo-2.0.
|
|
10452
|
-
simo-2.0.
|
|
10453
|
-
simo-2.0.
|
|
10449
|
+
simo-2.0.19.dist-info/LICENSE.md,sha256=M7wm1EmMGDtwPRdg7kW4d00h1uAXjKOT3HFScYQMeiE,34916
|
|
10450
|
+
simo-2.0.19.dist-info/METADATA,sha256=99iDIvtxoVQKfKPPXy9OCCiDBFzGsmjlNfaouPPRze4,1730
|
|
10451
|
+
simo-2.0.19.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
10452
|
+
simo-2.0.19.dist-info/top_level.txt,sha256=GmS1hrAbpVqn9OWZh6UX82eIOdRLgYA82RG9fe8v4Rs,5
|
|
10453
|
+
simo-2.0.19.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|