Skip to content

Commit 314c151

Browse files
authored
fix: Delete resources when deleting users (#24)
* Broken * Delete resources when deleting users
1 parent 5f8d735 commit 314c151

File tree

4 files changed

+21
-36
lines changed

4 files changed

+21
-36
lines changed

main/api/v1/resource.py

+1-10
Original file line numberDiff line numberDiff line change
@@ -97,17 +97,8 @@ def post(self):
9797
###############################################################################
9898
# Helpers
9999
###############################################################################
100-
@ndb.transactional(xg=True)
101100
def delete_resource_dbs(resource_db_keys):
102-
for resource_key in resource_db_keys:
103-
delete_resource_key(resource_key)
104-
105-
106-
def delete_resource_key(resource_key):
107-
resource_db = resource_key.get()
108-
if resource_db:
109-
blobstore.BlobInfo.get(resource_db.blob_key).delete()
110-
resource_db.key.delete()
101+
ndb.delete_multi(resource_db_keys)
111102

112103

113104
def resource_db_from_upload():

main/api/v1/user.py

+1-26
Original file line numberDiff line numberDiff line change
@@ -65,30 +65,5 @@ def delete(self, user_key):
6565
###############################################################################
6666
# Helpers
6767
###############################################################################
68-
@ndb.transactional(xg=True)
6968
def delete_user_dbs(user_db_keys):
70-
for user_key in user_db_keys:
71-
delete_user_task(user_key)
72-
73-
74-
def delete_user_task(user_key, next_cursor=None):
75-
resource_dbs, next_cursor = util.get_dbs(
76-
model.Resource.query(),
77-
user_key=user_key,
78-
cursor=next_cursor,
79-
)
80-
if resource_dbs:
81-
for resource_db in resource_dbs:
82-
try:
83-
blobstore.BlobInfo.get(resource_db.blob_key).delete()
84-
except AttributeError:
85-
logging.error('Blob %s not found during delete (resource_key: %s)' % (
86-
resource_db.blob_key, resource_db.key().urlsafe(),
87-
))
88-
89-
ndb.delete_multi([resource_db.key for resource_db in resource_dbs])
90-
91-
if next_cursor:
92-
deferred.defer(delete_user_task, user_key, next_cursor)
93-
else:
94-
user_key.delete()
69+
ndb.delete_multi(user_db_keys)

main/model/resource.py

+13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
from __future__ import absolute_import
44

5+
import logging
6+
7+
from google.appengine.ext import blobstore
58
from google.appengine.ext import ndb
69
import flask
710

@@ -43,6 +46,16 @@ def view_url(self):
4346
def serve_url(self):
4447
return '%s/serve/%s' % (flask.request.url_root[:-1], self.blob_key)
4548

49+
@classmethod
50+
def _pre_delete_hook(cls, key):
51+
resource_db = key.get()
52+
try:
53+
blobstore.BlobInfo.get(resource_db.blob_key).delete()
54+
except AttributeError:
55+
logging.error('Blob %s not found during delete (resource_key: %s)' % (
56+
resource_db.blob_key, resource_db.key().urlsafe(),
57+
))
58+
4659
FIELDS = {
4760
'bucket_name': fields.String,
4861
'content_type': fields.String,

main/model/user.py

+6
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ def is_email_available(cls, email, self_key=None):
8888
def get_resource_dbs(self, **kwargs):
8989
return model.Resource.get_dbs(user_key=self.key, **kwargs)
9090

91+
@classmethod
92+
def _pre_delete_hook(cls, key):
93+
user_db = key.get()
94+
resource_keys = user_db.get_resource_dbs(keys_only=True, limit=-1)[0]
95+
ndb.delete_multi(resource_keys)
96+
9197
FIELDS = {
9298
'active': fields.Boolean,
9399
'admin': fields.Boolean,

0 commit comments

Comments
 (0)