django-restit 4.2.133__py3-none-any.whl → 4.2.135__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- account/models/group.py +30 -11
- account/models/member.py +6 -2
- account/models/notify.py +9 -0
- account/rpc/member.py +12 -0
- auditlog/tq.py +6 -4
- {django_restit-4.2.133.dist-info → django_restit-4.2.135.dist-info}/METADATA +1 -1
- {django_restit-4.2.133.dist-info → django_restit-4.2.135.dist-info}/RECORD +15 -15
- medialib/models.py +10 -5
- medialib/stores/s3.py +5 -1
- rest/__init__.py +1 -1
- rest/helpers.py +4 -0
- rest/models/base.py +9 -0
- wiki/models/page.py +2 -0
- {django_restit-4.2.133.dist-info → django_restit-4.2.135.dist-info}/LICENSE.md +0 -0
- {django_restit-4.2.133.dist-info → django_restit-4.2.135.dist-info}/WHEEL +0 -0
account/models/group.py
CHANGED
@@ -132,14 +132,20 @@ class Group(models.Model, RestModel, MetaDataModel):
|
|
132
132
|
]
|
133
133
|
}
|
134
134
|
|
135
|
+
_tz_long = None
|
136
|
+
_tz_short = None
|
137
|
+
|
135
138
|
@property
|
136
139
|
def timezone(self):
|
137
|
-
|
140
|
+
if self._tz_long is None:
|
141
|
+
self._tz_long = self.getParentProperty("timezone", "America/Los_Angeles")
|
142
|
+
return self._tz_long
|
138
143
|
|
139
144
|
@property
|
140
145
|
def timezone_short(self):
|
141
|
-
|
142
|
-
|
146
|
+
if self._tz_short is None:
|
147
|
+
self._tz_short = rh.getShortTZ(self.timezone)
|
148
|
+
return self._tz_short
|
143
149
|
|
144
150
|
@property
|
145
151
|
def file_safe_name(self):
|
@@ -234,6 +240,8 @@ class Group(models.Model, RestModel, MetaDataModel):
|
|
234
240
|
|
235
241
|
def set_timezone(self, value):
|
236
242
|
if self.pk:
|
243
|
+
self._tz_long = None
|
244
|
+
self._tz_short = None
|
237
245
|
self.setProperty("timezone", value)
|
238
246
|
|
239
247
|
def getChildModels(self, Model, grand_children=False, great_grand_children=False):
|
@@ -341,32 +349,43 @@ class Group(models.Model, RestModel, MetaDataModel):
|
|
341
349
|
return True
|
342
350
|
return False
|
343
351
|
|
352
|
+
def getParentProperty(self, key, default=None, category=None, field_type=None, decrypted=False):
|
353
|
+
val = self.getProperty(key, rh.UNKNOWN, category, field_type, decrypted)
|
354
|
+
if val != rh.UNKNOWN:
|
355
|
+
return val
|
356
|
+
if self.parent:
|
357
|
+
val = self.parent.getProperty(key, rh.UNKNOWN, category, field_type, decrypted)
|
358
|
+
if val != rh.UNKNOWN:
|
359
|
+
return val
|
360
|
+
return self.parent.getParentProperty(key, default, category, field_type, decrypted)
|
361
|
+
return default
|
362
|
+
|
344
363
|
def getLocalTime(self, when=None, tz_aware=False):
|
345
|
-
zone = self.
|
364
|
+
zone = self.getParentProperty("timezone", "America/Los_Angeles")
|
346
365
|
return rh.convertToLocalTime(zone, when, tz_aware)
|
347
366
|
|
348
367
|
def getUTC(self, when):
|
349
|
-
zone = self.
|
368
|
+
zone = self.getParentProperty("timezone", "America/Los_Angeles")
|
350
369
|
return rh.convertToUTC(zone, when)
|
351
370
|
|
352
371
|
def getBusinessDay(self, start=None, end=None, kind="day"):
|
353
|
-
zone = self.
|
354
|
-
eod = self.
|
372
|
+
zone = self.getParentProperty("timezone", "America/Los_Angeles")
|
373
|
+
eod = self.getParentProperty("eod", 0, field_type=int)
|
355
374
|
return rh.getDateRange(start, end, kind, zone, hour=eod)
|
356
375
|
|
357
376
|
def getOperatingHours(self, start=None, end=None, kind="day"):
|
358
377
|
# deprecate this, operating hours is deceptive
|
359
|
-
zone = self.
|
360
|
-
eod = self.
|
378
|
+
zone = self.getParentProperty("timezone", "America/Los_Angeles")
|
379
|
+
eod = self.getParentProperty("eod", 0, field_type=int)
|
361
380
|
return rh.getDateRange(start, end, kind, zone, hour=eod)
|
362
381
|
|
363
382
|
def getTimeZoneOffset(self, when=None, hour=None):
|
364
|
-
zone = self.
|
383
|
+
zone = self.getParentProperty("timezone", "America/Los_Angeles")
|
365
384
|
return rh.getTimeZoneOffset(zone, when, hour=hour)
|
366
385
|
|
367
386
|
def getEOD(self, eod=None, onday=None, in_local=False):
|
368
387
|
if eod is None:
|
369
|
-
eod = self.
|
388
|
+
eod = self.getParentProperty("eod", 0, field_type=int)
|
370
389
|
if in_local:
|
371
390
|
return eod
|
372
391
|
offset = self.getTimeZoneOffset(onday, hour=eod)
|
account/models/member.py
CHANGED
@@ -589,14 +589,18 @@ class Member(User, RestModel, MetaDataModel):
|
|
589
589
|
email_only=True, attachments=attachments)
|
590
590
|
|
591
591
|
def sendInvite(self, subject, group=None, url=None, msg=None, **kwargs):
|
592
|
-
if url is None:
|
593
|
-
url =
|
592
|
+
if url is None and group is not None:
|
593
|
+
url = group.getParentProperty("default_portal")
|
594
|
+
if url is None:
|
595
|
+
url = settings.DEFAULT_LOGIN_URL
|
594
596
|
if url[:4] != "http":
|
595
597
|
url = f"https://{url}"
|
596
598
|
from_domain = rh.parseHostName(url, True)
|
597
599
|
from_email = rh.getFromEmailForHost(from_domain)
|
600
|
+
portal_domain = rh.parseHostName(url, False)
|
598
601
|
self.member.setProperty("default_domain", from_domain)
|
599
602
|
self.member.setProperty("default_from_email", from_email)
|
603
|
+
self.member.setProperty("default_portal", portal_domain)
|
600
604
|
context = rh.getContext(
|
601
605
|
self.getActiveRequest(),
|
602
606
|
member=self,
|
account/models/notify.py
CHANGED
@@ -10,6 +10,7 @@ from .member import Member
|
|
10
10
|
|
11
11
|
from datetime import datetime, timedelta
|
12
12
|
import threading
|
13
|
+
import incident
|
13
14
|
|
14
15
|
|
15
16
|
def sendEmail(email_to, subject, body=None, attachments=[],
|
@@ -110,6 +111,14 @@ class NotificationRecord(models.Model, RestModel):
|
|
110
111
|
self.state = -10
|
111
112
|
else:
|
112
113
|
self.state = -5
|
114
|
+
incident.event_now(
|
115
|
+
"email",
|
116
|
+
f"error sending email to: {email_to} - {self.subject}",
|
117
|
+
level=2,
|
118
|
+
subject=self.subject,
|
119
|
+
from_addr=self.from_addr,
|
120
|
+
to_addr=email_to,
|
121
|
+
details=self.reason)
|
113
122
|
self.save()
|
114
123
|
return True
|
115
124
|
|
account/rpc/member.py
CHANGED
@@ -12,6 +12,18 @@ def rest_on_member(request, pk=None):
|
|
12
12
|
return am.Member.on_rest_request(request, pk)
|
13
13
|
|
14
14
|
|
15
|
+
@rd.urlPOST('member/motd/reset')
|
16
|
+
@rd.perm_required('manage_members')
|
17
|
+
def rest_on_clear_motd(request):
|
18
|
+
key = request.DATA.get("key")
|
19
|
+
if key.startswith("viewed."):
|
20
|
+
key = key.split('.')[-1]
|
21
|
+
am.MemberMetaData.objects.filter(key=key, category="viewed").delete()
|
22
|
+
else:
|
23
|
+
am.MemberMetaData.objects.filter(key="saw_motd", category__isnull=True).delete()
|
24
|
+
return restStatus(request, True)
|
25
|
+
|
26
|
+
|
15
27
|
@rd.url(r'^member/me$')
|
16
28
|
@rd.login_optional
|
17
29
|
def member_me_action(request):
|
auditlog/tq.py
CHANGED
@@ -10,10 +10,12 @@ from rest import settings
|
|
10
10
|
|
11
11
|
AUDITLOG_PRUNE_DAYS = settings.get("AUDITLOG_PRUNE_DAYS", 90)
|
12
12
|
REST_LOG_PRUNE_DAYS = settings.get("REST_LOG_PRUNE_DAYS", 90)
|
13
|
-
ACCOUNT_LOG_PRUNE_DAYS = settings.get("ACCOUNT_LOG_PRUNE_DAYS",
|
13
|
+
ACCOUNT_LOG_PRUNE_DAYS = settings.get("ACCOUNT_LOG_PRUNE_DAYS", 640)
|
14
14
|
ASYNC_LOG_PRUNE_DAYS = settings.get("ASYNC_LOG_PRUNE_DAYS", 14)
|
15
15
|
SESSION_PRUNE_DAYS = settings.get("SESSION_PRUNE_DAYS", 180)
|
16
16
|
|
17
|
+
ACCOUNT_LOG_COMPONENTS = settings.get("ACCOUNT_LOG_COMPONENTS", ["account.Member", "account.Group"])
|
18
|
+
|
17
19
|
|
18
20
|
def on_cleanup(task):
|
19
21
|
# cleanup log files in the var directory
|
@@ -41,21 +43,21 @@ def on_cleanup(task):
|
|
41
43
|
def cleanupAuditLogs():
|
42
44
|
if AUDITLOG_PRUNE_DAYS:
|
43
45
|
before = datetime.now() - timedelta(days=AUDITLOG_PRUNE_DAYS)
|
44
|
-
return PersistentLog.objects.filter(when__lte=before).exclude(component__in=
|
46
|
+
return PersistentLog.objects.filter(when__lte=before).exclude(component__in=ACCOUNT_LOG_COMPONENTS).delete()[0]
|
45
47
|
return 0
|
46
48
|
|
47
49
|
|
48
50
|
def cleanupRestLogs():
|
49
51
|
if REST_LOG_PRUNE_DAYS:
|
50
52
|
before = datetime.now() - timedelta(days=REST_LOG_PRUNE_DAYS)
|
51
|
-
return PersistentLog.objects.filter(when__lte=before, component__in=["rest", "action"]).exclude(component__in=
|
53
|
+
return PersistentLog.objects.filter(when__lte=before, component__in=["rest", "action"]).exclude(component__in=ACCOUNT_LOG_COMPONENTS).delete()[0]
|
52
54
|
return 0
|
53
55
|
|
54
56
|
|
55
57
|
def cleanupAccountLogs():
|
56
58
|
if ACCOUNT_LOG_PRUNE_DAYS:
|
57
59
|
before = datetime.now() - timedelta(days=ACCOUNT_LOG_PRUNE_DAYS)
|
58
|
-
return PersistentLog.objects.filter(when__lte=before, component__in=
|
60
|
+
return PersistentLog.objects.filter(when__lte=before, component__in=ACCOUNT_LOG_COMPONENTS).delete()[0]
|
59
61
|
return 0
|
60
62
|
|
61
63
|
|
@@ -28,11 +28,11 @@ account/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
28
28
|
account/models/__init__.py,sha256=cV_lMnT2vL_mjiYtT4hlcIHo52ocFbGSNVkOIHHLXZY,385
|
29
29
|
account/models/device.py,sha256=0AFeLMGk4im4KZVd3eGSyRbK4eQEXiFM2cdY8GUzihs,5934
|
30
30
|
account/models/feeds.py,sha256=vI7fG4ASY1M0Zjke24RdnfDcuWeATl_yR_25jPmT64g,2011
|
31
|
-
account/models/group.py,sha256=
|
31
|
+
account/models/group.py,sha256=gsCze5dxTBcDayNalujAA-v8gKx3vC2cQwuUH6Jg9Tg,23100
|
32
32
|
account/models/legacy.py,sha256=zYdtv4LC0ooxPVqWM-uToPwV-lYWQLorSE6p6yn1xDw,2720
|
33
|
-
account/models/member.py,sha256=
|
33
|
+
account/models/member.py,sha256=FvVUoc_n7PgqxXduQRF-S4VJcl8aER5tMBxM5xsgswU,54682
|
34
34
|
account/models/membership.py,sha256=90EpAhOsGaqphDAkONP6j_qQ0OWSRaQsI8H7E7fgMkE,9249
|
35
|
-
account/models/notify.py,sha256=
|
35
|
+
account/models/notify.py,sha256=YKYEXT56i98b7-ydLt5UuEVOqW7lipQMi-KuiPhcSwY,15627
|
36
36
|
account/models/passkeys.py,sha256=TJxITUi4DT4_1tW2K7ZlOcRjJuMVl2NtKz7pKQU8-Tw,1516
|
37
37
|
account/models/session.py,sha256=ELkWjB_2KXQvPtRPrvuGJpJsqrxCQX_4J53SbqGz_2U,3737
|
38
38
|
account/models/settings.py,sha256=gOyRWBVd3BQpjfj_hJPtqX3H46ztyRAFxBrPbv11lQg,2137
|
@@ -45,7 +45,7 @@ account/rpc/__init__.py,sha256=SGF0M_-H0dKh3b1apSX29BotNWAvITYccGQVC0MIjL8,336
|
|
45
45
|
account/rpc/auth.py,sha256=p62tyihWvSY2zn7eaVxKcCG9qLnnZBIkwdRH81sS5_Y,16615
|
46
46
|
account/rpc/device.py,sha256=lU2BHNPreHV0dDTjAPc7Sc-5m2JP8SiWVqiKuBfV7Fo,2281
|
47
47
|
account/rpc/group.py,sha256=riymUK6ttv8G6SG6K-v7UCvM40WQy3HaGSeF_sEiaU0,4929
|
48
|
-
account/rpc/member.py,sha256=
|
48
|
+
account/rpc/member.py,sha256=8XnJX-iri0Om4nc-V2_tDJzfCSzziKLw6dUx9egtEZE,2236
|
49
49
|
account/rpc/notify.py,sha256=Q2YWejP36egeF060Hih5uX4Psv_B8NWlLLPi7iDYlIw,3344
|
50
50
|
account/rpc/oauth.py,sha256=ISLVsR5HvKALANokaOFRvF4FTRxWtXPvVnZAYANKxpo,2864
|
51
51
|
account/rpc/passkeys.py,sha256=5x28nYILJUMMSwfVuWYL66hfoGUXahMqOwiHhM4I3Do,1729
|
@@ -72,7 +72,7 @@ auditlog/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
72
72
|
auditlog/models.py,sha256=skDAiuzR4chC-WNIaH2nm_VVcbnDD6ZtUxBwhk7UY8U,16517
|
73
73
|
auditlog/periodic.py,sha256=AUhDeVsZtC47BJ-lklvYEegHoxAzj1RpIvRFSsM7g5E,363
|
74
74
|
auditlog/rpc.py,sha256=gJgj3Wiar5pVsw8tuhy0jXLkqFkOr3Z-oI2DKelMRAQ,5592
|
75
|
-
auditlog/tq.py,sha256=
|
75
|
+
auditlog/tq.py,sha256=ROcCjQhCavOgW3-8yjLrboNTAYEC5Pu2UCoenom0Law,2478
|
76
76
|
auditlog/urls.py,sha256=GNqpN74EpYlMND2UFUdPt5rOkTYYrdbTV0W3fg4zLfQ,163
|
77
77
|
inbox/README.md,sha256=jsklDrzD5d94r7cwgaU6Gi1HCjBDfWq7jd92qB0JYPU,2169
|
78
78
|
inbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -174,7 +174,7 @@ medialib/forms.py,sha256=nrE6QTPNPiIeX7Nx4l9DEmAQeQXqFyCg1C3JEDBYJfE,5442
|
|
174
174
|
medialib/migrations/0001_initial.py,sha256=H3JliH5aw7tiHef8MhrJr_9rGetqgA7UjTF-eKziRSM,20518
|
175
175
|
medialib/migrations/0002_alter_mediaitemrendition_bytes.py,sha256=igC1R02smbNoWlk2T4uCi9cNilOsxGKD-D24fQv92dM,414
|
176
176
|
medialib/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
177
|
-
medialib/models.py,sha256=
|
177
|
+
medialib/models.py,sha256=hBq-xyUZB0X0TpYmywmMCuLFrOK4Su-zRfSGD1ULvk8,54995
|
178
178
|
medialib/ocr.py,sha256=zlP7-NBiXhW7jR9pljmEPl5xzLVZpLN5QLAELQgU0Fk,1189
|
179
179
|
medialib/pdf.py,sha256=l28WwM0JKbT9boV-b_9TFh9jhvGcrquR8GqC8wfEaLk,1275
|
180
180
|
medialib/qrcode.py,sha256=vHyA5egXOX70EFiUDgr1njI9zcF6bXQJ_hKAQrppRow,545
|
@@ -274,7 +274,7 @@ medialib/stores/oauth2client/tools.py,sha256=OLSW5Iu7rtjGankFpjXlHBw8aAFOcIsWdDh
|
|
274
274
|
medialib/stores/oauth2client/util.py,sha256=1Uc6qwqNhI3b507VtFnklX4sEZNt0MZbLAME2o6kCgg,5706
|
275
275
|
medialib/stores/oauth2client/xsrfutil.py,sha256=4Plq0y5xEkDwvrveVA32gBRP0A3FkJ_36dIsyGHeJeA,3367
|
276
276
|
medialib/stores/rtmpstore.py,sha256=CFRP6Ss4hbLKngbdaLvA8_oKCSe18B29-oWVgvTXMPA,500
|
277
|
-
medialib/stores/s3.py,sha256=
|
277
|
+
medialib/stores/s3.py,sha256=puXareXUmcn6KdzOcLOY24i5dJUUewe7RNIduIBou9Y,6326
|
278
278
|
medialib/stores/s3store.py,sha256=uKO6I-X83sD9xefCQytLyrV-7t9TSX2p476n_ZBkSHw,4583
|
279
279
|
medialib/stores/uritemplate/__init__.py,sha256=ONWR_KRz9au0O-XUUTrO_UN7GHTmZCTKyvflUQb8wxM,4996
|
280
280
|
medialib/stores/youtubestore.py,sha256=swXOJYfbhgzAv1NjOehjKtfYRZYk2wiPK7a7_boAulc,406
|
@@ -377,7 +377,7 @@ pushit/utils.py,sha256=IeTCGa-164nmB1jIsK1lu1O1QzUhS3BKfuXHGjCW-ck,2121
|
|
377
377
|
rest/.gitignore,sha256=TbEvWRMnAiajCTOdhiNrd9eeCAaIjRp9PRjE_VkMM5g,118
|
378
378
|
rest/README.md,sha256=V3ETc-cJu8PZIbKr9xSe_pA4JEUpC8Dhw4bQeVCDJPw,5460
|
379
379
|
rest/RemoteEvents.py,sha256=nL46U7AuxIrlw2JunphR1tsXyqi-ep_gD9CYGpYbNgE,72
|
380
|
-
rest/__init__.py,sha256=
|
380
|
+
rest/__init__.py,sha256=jvMDmcVTsAQ0iA0xPSbOztX_yr1rfxCPVRM4H93ysos,122
|
381
381
|
rest/arc4.py,sha256=y644IbF1ec--e4cUJ3KEYsewTCITK0gmlwa5mJruFC0,1967
|
382
382
|
rest/cache.py,sha256=1Qg0rkaCJCaVP0-l5hZg2CIblTdeBSlj_0fP6vlKUpU,83
|
383
383
|
rest/crypto/__init__.py,sha256=Tl0U11rgj1eBYqd6OXJ2_XSdNLumW_JkBZnaJqI6Ldw,72
|
@@ -393,7 +393,7 @@ rest/extra/hostinfo.py,sha256=5R23EafcNbFARyNEqdjBkqcpC8rPfmPd1zqNqle6-nM,4298
|
|
393
393
|
rest/extra/json_metadata.py,sha256=p_ffzmANmOFix_oC3voR6_NNTjcn7-T7aXcH-I4_Npg,1078
|
394
394
|
rest/fields.py,sha256=_v1TJVc6vyWlqmwFRJ6mtuR5Fo-lS0KcUhPWIrzKZUo,9719
|
395
395
|
rest/forms.py,sha256=66Wm5cdy8tKib_mGicjq_yd-gNVMFWRECnrDksnNnwU,6316
|
396
|
-
rest/helpers.py,sha256=
|
396
|
+
rest/helpers.py,sha256=t7smlOUzchVno-zeq7xMJIwogAR2DeSrffWxgysOHX8,29531
|
397
397
|
rest/joke.py,sha256=0PpKaX2iN7jlS62kgjfmmqkFBYLPURz15aQ8R7OJkJ8,260
|
398
398
|
rest/jwtoken.py,sha256=6AIe9IpsOn44sodiV0OPYeTZZNhS8VRiakV-rOuCyGw,2444
|
399
399
|
rest/log.py,sha256=hd1_4HBOS395sfXJIL6BTw9yekm1SLgBwYx_PdfIhKA,20930
|
@@ -410,7 +410,7 @@ rest/middleware/request.py,sha256=JchRNy5L-bGd-7h-KFYekGRvREe2eCkZXKOYqIkP2hI,41
|
|
410
410
|
rest/middleware/session.py,sha256=zHSoQpIzRLmpqr_JvW406wzpvU3W3gDbm5JhtzLAMlE,10240
|
411
411
|
rest/middleware/session_store.py,sha256=1nSdeXK8PyuYgGgIufqrS6j6QpIrQ7zbMNT0ol75e6U,1901
|
412
412
|
rest/models/__init__.py,sha256=M8pvFDq-WCF-QcM58X7pMufYYe0aaQ3U0PwGe9TKbbY,130
|
413
|
-
rest/models/base.py,sha256=
|
413
|
+
rest/models/base.py,sha256=asj1ehoq_LLcm99PbyICGG9I_GQikxilrc52tTs2YBY,71301
|
414
414
|
rest/models/cacher.py,sha256=eKz8TINVhWEqKhJGMsRkKZTtBUIv5rN3NHbZwOC56Uk,578
|
415
415
|
rest/models/metadata.py,sha256=1nQ7CYo9bJHoaXE_hVNaj1-Y7yqhHlf2ZlaD1IfTzic,12904
|
416
416
|
rest/net.py,sha256=LcB2QV6VNRtsSdmiQvYZgwQUDwOPMn_VBdRiZ6OpI-I,2974
|
@@ -486,7 +486,7 @@ wiki/migrations/0003_page_perms.py,sha256=qJBLI7t5mgiDTKCR9qhticmbhgo2KKYq7WbHax
|
|
486
486
|
wiki/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
487
487
|
wiki/models/__init__.py,sha256=jE-9r_Hqpyo7ysKu9BschXOn5Zg34wUt894GwJpxA28,132
|
488
488
|
wiki/models/faq.py,sha256=nvcEFerllQKT61kIYlasvZzRKwpXyfmQpiqkpHP1V1o,1745
|
489
|
-
wiki/models/page.py,sha256=
|
489
|
+
wiki/models/page.py,sha256=uIu-jVdf1Y9qXKbb5k15-8RLTltyTtoXobZJFcx8_0A,8836
|
490
490
|
wiki/models/revision.py,sha256=St5-vz8SGvogsDL6jTWqHLE23PS5mp9iA0DUt3hWTsU,729
|
491
491
|
wiki/periodic.py,sha256=t-UgXJIug-OLslJM_r03-5WrNKj39TxrvfuNFjVAhDs,334
|
492
492
|
wiki/renderers/__init__.py,sha256=lLEoJvjU3ezXwBGcjleKk_kMyNeMD9MpfBlEiKayEiM,461
|
@@ -513,7 +513,7 @@ ws4redis/servers/uwsgi.py,sha256=VyhoCI1DnVFqBiJYHoxqn5Idlf6uJPHvfBKgkjs34mo,172
|
|
513
513
|
ws4redis/settings.py,sha256=K0yBiLUuY81iDM4Yr-k8hbvjn5VVHu5zQhmMK8Dtz0s,1536
|
514
514
|
ws4redis/utf8validator.py,sha256=S0OlfjeGRP75aO6CzZsF4oTjRQAgR17OWE9rgZdMBZA,5122
|
515
515
|
ws4redis/websocket.py,sha256=R0TUyPsoVRD7Y_oU7w2I6NL4fPwiz5Vl94-fUkZgLHA,14848
|
516
|
-
django_restit-4.2.
|
517
|
-
django_restit-4.2.
|
518
|
-
django_restit-4.2.
|
519
|
-
django_restit-4.2.
|
516
|
+
django_restit-4.2.135.dist-info/LICENSE.md,sha256=VHN4hhEeVOoFjtG-5fVv4jesA4SWi0Z-KgOzzN6a1ps,1068
|
517
|
+
django_restit-4.2.135.dist-info/METADATA,sha256=y5BF4iNU-96HCWsE7bLYHz9-lOK6htULuY729Hs6NwI,7663
|
518
|
+
django_restit-4.2.135.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
519
|
+
django_restit-4.2.135.dist-info/RECORD,,
|
medialib/models.py
CHANGED
@@ -458,7 +458,10 @@ class MediaItem(models.Model, RestModel, MetaDataModel):
|
|
458
458
|
return f's3://{settings.AWS_S3_BUCKET}'
|
459
459
|
|
460
460
|
def set_rendernow(self, value):
|
461
|
-
self.
|
461
|
+
if self.kind == "*":
|
462
|
+
self.saveState(200)
|
463
|
+
return
|
464
|
+
self.new_render(force_task=(self.kind == "V"))
|
462
465
|
|
463
466
|
def uses(self):
|
464
467
|
"""
|
@@ -475,8 +478,8 @@ class MediaItem(models.Model, RestModel, MetaDataModel):
|
|
475
478
|
def async_render(self, files={}):
|
476
479
|
return self.new_render()
|
477
480
|
|
478
|
-
def new_render(self, files={}):
|
479
|
-
if TASKQUEUE_RENDERING:
|
481
|
+
def new_render(self, files={}, force_task=False):
|
482
|
+
if TASKQUEUE_RENDERING or force_task:
|
480
483
|
Task.Publish("medialib", "on_render", {"id": self.id, "name": self.name, "kind": self.kind}, channel="tq_app_handler_medialib")
|
481
484
|
else:
|
482
485
|
self.createRenditions()
|
@@ -556,8 +559,10 @@ class MediaItem(models.Model, RestModel, MetaDataModel):
|
|
556
559
|
self.kind = '*'
|
557
560
|
|
558
561
|
def saveState(self, state):
|
559
|
-
self.state
|
560
|
-
|
562
|
+
if self.state != state:
|
563
|
+
self.state = state
|
564
|
+
return super(MediaItem, self).save()
|
565
|
+
return True
|
561
566
|
|
562
567
|
def save(self, *args, **kwargs):
|
563
568
|
if self.pk is None:
|
medialib/stores/s3.py
CHANGED
@@ -12,7 +12,11 @@ from medialib import utils
|
|
12
12
|
import threading
|
13
13
|
import tempfile
|
14
14
|
|
15
|
-
S3 = objict(
|
15
|
+
S3 = objict(
|
16
|
+
KEY=settings.AWS_KEY,
|
17
|
+
SECRET=settings.AWS_SECRET,
|
18
|
+
REGSION=settings.AWS_REGION,
|
19
|
+
BUCKET=settings.AWS_S3_BUCKET)
|
16
20
|
|
17
21
|
|
18
22
|
class S3Item(object):
|
rest/__init__.py
CHANGED
rest/helpers.py
CHANGED
@@ -36,6 +36,8 @@ DEBUG_LOGGER = getLogger("debug", filename="debug.log")
|
|
36
36
|
AUDITLOG_LOGGER_BY_USER = settings.get("AUDITLOG_LOGGER_BY_USER", False)
|
37
37
|
AUDITLOG_LOGGERS = settings.get("AUDITLOG_LOGGERS", {})
|
38
38
|
HELPER_CACHE = objict()
|
39
|
+
UNKNOWN = object()
|
40
|
+
|
39
41
|
|
40
42
|
def getLoggerByRequest(request):
|
41
43
|
logger = AUDIT_LOGGER
|
@@ -277,6 +279,8 @@ def parseHostName(url, root=False):
|
|
277
279
|
parsed_url = urlparse(url)
|
278
280
|
hname = parsed_url.netloc
|
279
281
|
else:
|
282
|
+
if "/" in url:
|
283
|
+
url = url[:url.find('/')]
|
280
284
|
hname = url
|
281
285
|
if root and hname.count('.') > 1:
|
282
286
|
return hname[hname.find(".")+1:]
|
rest/models/base.py
CHANGED
@@ -881,6 +881,15 @@ class RestModel(object):
|
|
881
881
|
response_params=dict(graph=graph),
|
882
882
|
**cls.getGraph(graph))
|
883
883
|
|
884
|
+
@classmethod
|
885
|
+
def restListSort(cls, request, qset):
|
886
|
+
from rest.serializers.collection import sort_list
|
887
|
+
sort = request.DATA.get("sort", getattr(cls.RestMeta, "DEFAULT_SORT", "-id"))
|
888
|
+
sort = request.DATA.get("sort")
|
889
|
+
if sort:
|
890
|
+
qset, sort_args = sort_list(qset, sort)
|
891
|
+
return qset
|
892
|
+
|
884
893
|
@classmethod
|
885
894
|
def toList(cls, qset, graph=None, totals=None, request=None):
|
886
895
|
if request is None:
|
wiki/models/page.py
CHANGED
@@ -176,6 +176,8 @@ class Page(dm.Model, rm.RestModel, rm.MetaDataModel):
|
|
176
176
|
|
177
177
|
@classmethod
|
178
178
|
def on_rest_list_ready(cls, request, qset=None):
|
179
|
+
# need to first sort our list
|
180
|
+
qset = cls.restListSort(request, qset)
|
179
181
|
out = []
|
180
182
|
for page in qset:
|
181
183
|
if page.on_rest_can_get(request):
|
File without changes
|
File without changes
|