def delete_user(self, uniq): """ Deletes user @param uniq - resource uniq for the user """ # Remove the user from the system for most purposes, but # leave the id for statistics purposes. bquser = DBSession.query(BQUser).filter( BQUser.resource_uniq == uniq).first() if bquser: log.debug("ADMIN: Deleting user: %s", str(bquser)) user = DBSession.query(User).filter( User.user_name == bquser.resource_name).first() log.debug("Renaming internal user %s", str(user)) if user: DBSession.delete(user) # delete the access permission for p in DBSession.query(TaggableAcl).filter_by( user_id=bquser.id): log.debug("KILL ACL %s", str(p)) DBSession.delete(p) self.deleteimages(bquser.resource_name, will_redirect=False) #DBSession.delete(bquser) #transaction.commit() data_service.del_resource(bquser) return '<resource>Delete User</resource>' abort(400)
def deleteimages(self, username=None, will_redirect=True, **kw): user = DBSession.query(BQUser).filter( BQUser.resource_name == username).first() log.debug("ADMIN: Deleting all images of: %s", str(user)) images = DBSession.query(Image).filter(Image.owner_id == user.id).all() for i in images: log.debug("ADMIN: Deleting image: %s", str(i)) DBSession.delete(i) if will_redirect: transaction.commit() redirect('/admin/users') return dict()
def delete_group(self, *args, **kw): if len(args): group_name = args[0] else: content_type = request.headers.get('Content-Type') inputer = find_inputer(content_type) body = request.body_file.read() log.debug("DELETE content %s", body) els = inputer(body) group_name = els.xpath('//group/@name')[0] resource = etree.Element('resource') group = DBSession.query(Group).filter_by(group_name=group_name).first() if group: etree.SubElement(resource, 'group', name=group.group_name) DBSession.delete(group) return resource
def deleteuser(self, username=None, **kw): #DBSession.autoflush = False # Remove the user from the system for most purposes, but # leave the id for statistics purposes. user = DBSession.query(User).filter(User.user_name == username).first() log.debug("Renaming internal user %s", str(user)) if user: DBSession.delete(user) #user.display_name = ("(R)" + user.display_name)[:255] #user.user_name = ("(R)" + user.user_name)[:255] #user.email_address = ("(R)" + user.email_address)[:16] user = DBSession.query(BQUser).filter( BQUser.resource_name == username).first() log.debug("ADMIN: Deleting user: %s", str(user)) # delete the access permission for p in DBSession.query(TaggableAcl).filter_by(user_id=user.id): log.debug("KILL ACL %s", str(p)) DBSession.delete(p) #DBSession.flush() self.deleteimages(username, will_redirect=False) DBSession.delete(user) transaction.commit() redirect('/admin/users')
def resource_acl(resource, newauth, user=None, acl=None, notify=False, invalidate=True, action='append'): """Create or modify resource acls @param resource: resource (Taggable) @param newauth : an etree of the acl record or None if deleting @param user : the user (Taggable) of the acl or None (will be determined from newauth) @param acl : the acl (TaggableAcl) or None (will be found or created) @param notify : send an email on state change (boolean) @param invalidate: Invalidate caches (boolean) @parama delete : Append/modify or Delete record (boolean) @return an etree acl record """ log.debug("ACL SET %s", resource) user, passwd = match_user(user=user, user_uniq=newauth.get('user'), email=newauth.get('email')) if acl is None: try: DBSession.flush() # autoflush is off so flush before query except sqlalchemy.exc.IntegrityError: log.exception("while preparing for query") acl = DBSession.query(TaggableAcl).filter_by(taggable_id=resource.id, user_id=user.id).first() if acl is None: # Check if newauth is not None or delete is true??? acl = TaggableAcl() acl.taggable_id = resource.id acl.user_id = user.id acl.action = "read" DBSession.add(acl) if action == 'delete': log.debug("Removing %s from %s for %s", newauth.get('action', RESOURCE_READ), resource.resource_uniq, user.resource_uniq) # http://stackoverflow.com/questions/8306506/deleting-an-object-from-an-sqlalchemy-session-before-its-been-persisted if acl in DBSession.new: DBSession.expunge(acl) else: DBSession.delete(acl) else: log.debug("Changing share on %s for %s action=%s", resource.resource_uniq, user.resource_uniq, newauth.get('action', RESOURCE_READ)) acl.action = newauth.get('action', RESOURCE_READ) # # Special actions on sharing specific resource types # handler = SHARE_HANDLERS.get(resource.resource_type) if handler: log.debug("Special share handling with %s", handler) handler(resource.resource_uniq, user.resource_uniq, newauth, action) # Notify changes if needed if notify: try: notify_user(action, resource, user, passwd) except Exception: log.exception("While notifying share") if invalidate: Resource.hier_cache.invalidate_resource(None, user=user.id) # Return the new/updated auth element return _aclelem(resource, user, acl)
def deleteimage(self, imageid=None, **kw): log.debug("image: %s ", str(imageid)) image = DBSession.query(Image).filter(Image.id == imageid).first() DBSession.delete(image) transaction.commit() redirect(request.headers.get("Referer", "/"))