django-restit 4.2.55__py3-none-any.whl → 4.2.57__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.
account/models/group.py CHANGED
@@ -448,6 +448,7 @@ class Group(models.Model, RestModel, MetaDataModel):
448
448
  if ms is None:
449
449
  ms = Membership(member=member, group=self, role=role)
450
450
  ms.save()
451
+ ms.on_rest_created(self.getActiveRequest())
451
452
  elif ms.role != role:
452
453
  ms.clearPermissions()
453
454
  if not ms.is_enabled:
@@ -127,6 +127,7 @@ class Membership(models.Model, RestModel, MetaDataModel):
127
127
  msg = F"{self.member.username} access to {self.group.name} disabled by {by_user}"
128
128
  self.auditLog(msg, "membership_disabled")
129
129
  self.member.auditLog(msg, "membership_disabled")
130
+ self.group.auditLog(msg, "membership_disabled")
130
131
  self.state = value
131
132
  elif self.state < -10 and value >= -10:
132
133
  request = self.getActiveRequest()
@@ -137,6 +138,7 @@ class Membership(models.Model, RestModel, MetaDataModel):
137
138
  msg = F"{self.member.username} access to {self.group.name} enabled by {by_user}"
138
139
  self.auditLog(msg, "membership_enabled")
139
140
  self.member.auditLog(msg, "membership_enabled")
141
+ self.group.auditLog(msg, "membership_enabled")
140
142
  self.state = value
141
143
  else:
142
144
  self.state = value
@@ -196,6 +198,28 @@ class Membership(models.Model, RestModel, MetaDataModel):
196
198
  for k in value:
197
199
  self.addPermission(k)
198
200
 
201
+ def on_rest_deleted(self, request):
202
+ # called right before the delete
203
+ msg = f"{self.member.username} membership deleted for {self.group.name}:{self.group.pk} by {request.member.username}"
204
+ self.member.auditLog(msg, "membership_deleted")
205
+ self.group.auditLog(msg, "membership_deleted")
206
+ # request.member(msg, "deleted_membership")
207
+ # check if we should delete children
208
+ if request.DATA.get("delete_children", False, field_type=bool):
209
+ groups = self.group.getAllChildren(False, True, True)
210
+ for g in groups:
211
+ for ms in g.memberships.filter(member=self.member):
212
+ msg = f"{self.member.username} membership deleted for {ms.group.name}:{ms.group.pk} by {request.member.username}"
213
+ ms.member.auditLog(msg, "membership_deleted")
214
+ ms.group.auditLog(msg, "membership_deleted")
215
+ # request.member(msg, "deleted_membership")
216
+ ms.delete()
217
+
218
+ def on_rest_created(self, request):
219
+ msg = f"{self.member.username} membership added for {self.group.name}:{self.group.pk} by {request.member.username}"
220
+ self.member.auditLog(msg, "membership_added")
221
+ self.group.auditLog(msg, "membership_added")
222
+
199
223
  def __str__(self):
200
224
  return F"{self.group}:{self.member}:{self.id}"
201
225
 
account/rpc/group.py CHANGED
@@ -83,8 +83,13 @@ def rest_on_membership(request, pk=None):
83
83
  @rd.login_required
84
84
  def rest_on_users_membership(request, group_id=None):
85
85
  ms = request.member.getMembershipFor(group_id, include_parents=True)
86
- if ms is None or not ms.is_enabled:
86
+ if ms is None:
87
87
  return rv.restStatus(request, False, error="not found", error_code=404)
88
+ if not ms.is_enabled:
89
+ return rv.restPermissionDenied(
90
+ request,
91
+ error=f"membership({request.member.username}) has been disabled for this group({group_id})",
92
+ error_code=410)
88
93
  return ms.restGet(request)
89
94
 
90
95
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-restit
3
- Version: 4.2.55
3
+ Version: 4.2.57
4
4
  Summary: A Rest Framework for DJANGO
5
5
  License: MIT
6
6
  Author: Ian Starnes
@@ -23,10 +23,10 @@ account/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
23
23
  account/models/__init__.py,sha256=cV_lMnT2vL_mjiYtT4hlcIHo52ocFbGSNVkOIHHLXZY,385
24
24
  account/models/device.py,sha256=XipNpByreGubB5-d4ZBOoIV5Xw14b2Btcgn6fXz8HAc,4105
25
25
  account/models/feeds.py,sha256=FXqcZ1Qy4oYOLzai7-GL4WNd7iKPb5Y3ZqvKQunq1Yk,1861
26
- account/models/group.py,sha256=_YqEuy9oJ2VL7ocsJO1mEWA_hYl_1MylHJsLezj-dCM,21520
26
+ account/models/group.py,sha256=4fk-RavG1wNVzfuXMaD2XDiX2DhK1hgL0-OA54Uym18,21576
27
27
  account/models/legacy.py,sha256=zYdtv4LC0ooxPVqWM-uToPwV-lYWQLorSE6p6yn1xDw,2720
28
28
  account/models/member.py,sha256=CxxhNnFCQPEw7MGc5147J8eandYqUj6HhhQ_YRyFQX4,50397
29
- account/models/membership.py,sha256=K2fd0TJYhfv58HPyjQVlahlOPz3Q6ZwrxVkguG-2Ej8,7806
29
+ account/models/membership.py,sha256=GJ6bSFLfU1CN9466k0XjSwn1sQIEwFeC8-oUYd2MrSs,9217
30
30
  account/models/notify.py,sha256=YnZujSHJHY7B09e6FIyZIEJRWLPYk1Sk1e92tFzB1IA,12078
31
31
  account/models/passkeys.py,sha256=TJxITUi4DT4_1tW2K7ZlOcRjJuMVl2NtKz7pKQU8-Tw,1516
32
32
  account/models/session.py,sha256=o3t98e8itXEtkknBHdBH_PSq9kuw1A858_wl6ZleXMM,3729
@@ -39,7 +39,7 @@ account/periodic.py,sha256=-u0n-7QTJgDOkasGhBAPwHAwjpqWGA-MZLEFkVTqCGU,874
39
39
  account/rpc/__init__.py,sha256=SGF0M_-H0dKh3b1apSX29BotNWAvITYccGQVC0MIjL8,336
40
40
  account/rpc/auth.py,sha256=eywdJSjsi_Ds2pM4wnltPJUfjIQqf6r6e99eKS7q3BA,15593
41
41
  account/rpc/device.py,sha256=fbbZFp3cUdhVXvD7gVFOqFWj4hKS3bjZKD_aF5fQxd8,2852
42
- account/rpc/group.py,sha256=eW5p0TbJC7b77Xf7CTqLm-Qq_r1FPbGmSuVWrQR37uA,3823
42
+ account/rpc/group.py,sha256=FD9GymgPY68y-gtDLsZxYVdwQJeLGpqcP4hjcDUh-GM,4022
43
43
  account/rpc/member.py,sha256=PU-Uz5KUI_BZFy-F-taDqAfnt_AwONYXSzUvfm7eyTw,1264
44
44
  account/rpc/notify.py,sha256=Q2YWejP36egeF060Hih5uX4Psv_B8NWlLLPi7iDYlIw,3344
45
45
  account/rpc/oauth.py,sha256=ISLVsR5HvKALANokaOFRvF4FTRxWtXPvVnZAYANKxpo,2864
@@ -115,7 +115,7 @@ incident/rpc.py,sha256=D7cAPkW94F6ISlCTQ74GxnbLId-I3bMK4Xss0GoHM9w,7934
115
115
  incident/templates/email/incident_change.html,sha256=O_5ocWTsnqmmOuQhAtXEiE4rWecnZnJjoKU4MwV6ILo,14178
116
116
  incident/templates/email/incident_new.html,sha256=IPX3CqIrvdrZSn13_jlR6sEb0If8ftvUrUpkzC5G2Gc,15173
117
117
  incident/templates/email/incident_plain.html,sha256=fx4zsoldG1AQEBA6IYx5BJp_MAMizgjjx9EmuR5m4SQ,14727
118
- incident/tq.py,sha256=6GGGVKzcbslDBz0oDyBSKdFCLYWKYiVkUeOEiHOOfcM,5049
118
+ incident/tq.py,sha256=6KjeTFlWAlG_l8LWMlxUGdr8ULU0uE-DB5ex0ERW440,5226
119
119
  location/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
120
  location/admin.py,sha256=6S97Rlgjkk0jM15sbT1OJRPZbgvKn2rn7duCSazOXq4,297
121
121
  location/geolocate.py,sha256=UgV129vmSxnqYFBYJD2RQVOcC1-lJJ1zUaxDqOJRbG4,1694
@@ -363,7 +363,7 @@ pushit/utils.py,sha256=IeTCGa-164nmB1jIsK1lu1O1QzUhS3BKfuXHGjCW-ck,2121
363
363
  rest/.gitignore,sha256=TbEvWRMnAiajCTOdhiNrd9eeCAaIjRp9PRjE_VkMM5g,118
364
364
  rest/README.md,sha256=V3ETc-cJu8PZIbKr9xSe_pA4JEUpC8Dhw4bQeVCDJPw,5460
365
365
  rest/RemoteEvents.py,sha256=nL46U7AuxIrlw2JunphR1tsXyqi-ep_gD9CYGpYbNgE,72
366
- rest/__init__.py,sha256=BY-YEPw34b05E2wiNFO7v_F-Vh5mJ1Z0zGzfayCfGqw,121
366
+ rest/__init__.py,sha256=lgq1gaLUtdHmzwhYr6xVWzn6uiT3N9nuvNfIXqQte5I,121
367
367
  rest/arc4.py,sha256=y644IbF1ec--e4cUJ3KEYsewTCITK0gmlwa5mJruFC0,1967
368
368
  rest/cache.py,sha256=1Qg0rkaCJCaVP0-l5hZg2CIblTdeBSlj_0fP6vlKUpU,83
369
369
  rest/crypto/__init__.py,sha256=Tl0U11rgj1eBYqd6OXJ2_XSdNLumW_JkBZnaJqI6Ldw,72
@@ -400,7 +400,7 @@ rest/models/cacher.py,sha256=eKz8TINVhWEqKhJGMsRkKZTtBUIv5rN3NHbZwOC56Uk,578
400
400
  rest/models/metadata.py,sha256=65GvfFbc26_7wJz8qEAzU7fEOZWVz0ttO5j5m_gs4hk,12860
401
401
  rest/net.py,sha256=LcB2QV6VNRtsSdmiQvYZgwQUDwOPMn_VBdRiZ6OpI-I,2974
402
402
  rest/regexes.yaml,sha256=VoGb4E-P_K9f82Yzcpltgzekpt9usRtwu9PYlo46nUw,149463
403
- rest/requestex.py,sha256=KxPqfCe5Gll-8I3Onk_ESgsuJEkWILspJDA_4EwJcEY,16017
403
+ rest/requestex.py,sha256=N56056vV3zWkAP-QrYsCu7SdpPzE5kLuPoxGIuZAKt0,16127
404
404
  rest/rpc.py,sha256=Z-0Q62VeMViZiS_9vBHKJmbERgemsfg8pnKFjV-DH-w,4200
405
405
  rest/search.py,sha256=QVjk2b5tZLgf1zM2MHvJTyRjwUbY5ZD7HXSTmSPXtvU,8362
406
406
  rest/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -496,7 +496,7 @@ ws4redis/servers/uwsgi.py,sha256=VyhoCI1DnVFqBiJYHoxqn5Idlf6uJPHvfBKgkjs34mo,172
496
496
  ws4redis/settings.py,sha256=K0yBiLUuY81iDM4Yr-k8hbvjn5VVHu5zQhmMK8Dtz0s,1536
497
497
  ws4redis/utf8validator.py,sha256=S0OlfjeGRP75aO6CzZsF4oTjRQAgR17OWE9rgZdMBZA,5122
498
498
  ws4redis/websocket.py,sha256=R0TUyPsoVRD7Y_oU7w2I6NL4fPwiz5Vl94-fUkZgLHA,14848
499
- django_restit-4.2.55.dist-info/LICENSE.md,sha256=VHN4hhEeVOoFjtG-5fVv4jesA4SWi0Z-KgOzzN6a1ps,1068
500
- django_restit-4.2.55.dist-info/METADATA,sha256=iNmXS4_QBBaTCt1EqlW6NdGnnwn-_TM29PBHRPOdZDo,7594
501
- django_restit-4.2.55.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
502
- django_restit-4.2.55.dist-info/RECORD,,
499
+ django_restit-4.2.57.dist-info/LICENSE.md,sha256=VHN4hhEeVOoFjtG-5fVv4jesA4SWi0Z-KgOzzN6a1ps,1068
500
+ django_restit-4.2.57.dist-info/METADATA,sha256=sxDTnjHMcR9ergS9eCqSS4XCX_DzPUO7UnhI9OirFTs,7594
501
+ django_restit-4.2.57.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
502
+ django_restit-4.2.57.dist-info/RECORD,,
incident/tq.py CHANGED
@@ -126,6 +126,10 @@ def run_cleanup(task):
126
126
  Q(incident__state=ia.INCIDENT_STATE_IGNORE) | Q(incident__isnull=True)).delete()
127
127
  if count:
128
128
  task.log(f"deleted {count} old Events")
129
+
130
+ count = ia.Incident.objects.filter(created__lte=stale).filter(state=ia.INCIDENT_STATE_IGNORE).delete()
131
+ if count:
132
+ task.log(f"deleted {count} old Incidents")
129
133
 
130
134
  count = GeoIP.removeDuplicates()
131
135
  if count:
rest/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  from .uberdict import UberDict # noqa: F401
2
2
  from .settings_helper import settings # noqa: F401
3
3
 
4
- __version__ = "4.2.55"
4
+ __version__ = "4.2.57"
rest/requestex.py CHANGED
@@ -84,7 +84,10 @@ class RequestData(object):
84
84
  elif self.request.method == "GET":
85
85
  data = self.request.GET
86
86
  elif self.request.method == "DELETE":
87
- data = dict()
87
+ if self.request.body:
88
+ data = QueryDict(self.request.body)
89
+ else:
90
+ data = objict()
88
91
  elif self.request.method == "PUT":
89
92
  if self.request.content_type == "application/json":
90
93
  data = UberDict.fromJSON(self.request.body, ignore_errors=True)