def get_comment(self, check_permissions=True): pk = self.kwargs[self.comment_lookup_url_kwarg] try: comment = Comment.find_one(Q('_id', 'eq', pk) & Q('root_target', 'ne', None)) except NoResultsFound: raise NotFound # Deleted root targets still appear as tuples in the database and are included in # the above query, requiring an additional check if isinstance(comment.root_target.referent, TrashedFileNode): comment.root_target = None comment.save() if comment.root_target is None: raise NotFound if isinstance(comment.root_target.referent, StoredFileNode): root_target = comment.root_target referent = root_target.referent if referent.provider == 'osfstorage': try: StoredFileNode.find( Q('node', 'eq', comment.node._id) & Q('_id', 'eq', referent._id) & Q('is_file', 'eq', True) ) except NoResultsFound: Comment.update(Q('root_target', 'eq', root_target), data={'root_target': None}) raise NotFound else: if referent.provider == 'dropbox': # referent.path is the absolute path for the db file, but wb requires the relative path referent = DropboxFile.load(referent._id) url = waterbutler_api_url_for(comment.node._id, referent.provider, referent.path, meta=True) waterbutler_request = requests.get( url, cookies=self.request.COOKIES, headers={'Authorization': self.request.META.get('HTTP_AUTHORIZATION')}, ) if waterbutler_request.status_code == 401: raise PermissionDenied if waterbutler_request.status_code == 404: Comment.update(Q('root_target', 'eq', root_target), data={'root_target': None}) raise NotFound if is_server_error(waterbutler_request.status_code): raise ServiceUnavailableError(detail='Could not retrieve files information at this time.') try: waterbutler_request.json()['data'] except KeyError: raise ServiceUnavailableError(detail='Could not retrieve files information at this time.') if check_permissions: # May raise a permission denied self.check_object_permissions(self.request, comment) return comment
def get_comment(self, check_permissions=True): pk = self.kwargs[self.comment_lookup_url_kwarg] try: comment = Comment.find_one(Q('_id', 'eq', pk)) except NoResultsFound: raise NotFound if check_permissions: # May raise a permission denied self.check_object_permissions(self.request, comment) return comment
def get_comment(self, check_permissions=True): pk = self.kwargs[self.comment_lookup_url_kwarg] try: comment = Comment.find_one(Q('_id', 'eq', pk) & Q('root_target', 'ne', None)) except NoResultsFound: raise NotFound # Deleted root targets still appear as tuples in the database and are included in # the above query, requiring an additional check if comment.root_target is None: raise NotFound if isinstance(comment.root_target, StoredFileNode): root_target = comment.root_target if root_target.provider == 'osfstorage': try: StoredFileNode.find( Q('node', 'eq', comment.node._id) & Q('_id', 'eq', root_target._id) & Q('is_file', 'eq', True) ) except NoResultsFound: Comment.update(Q('root_target', 'eq', root_target), data={'root_target': None}) del comment.node.commented_files[root_target._id] raise NotFound else: if root_target.provider == 'dropbox': root_target = DropboxFile.load(comment.root_target._id) url = waterbutler_api_url_for(comment.node._id, root_target.provider, root_target.path, meta=True) waterbutler_request = requests.get( url, cookies=self.request.COOKIES, headers={'Authorization': self.request.META.get('HTTP_AUTHORIZATION')}, ) if waterbutler_request.status_code == 401: raise PermissionDenied if waterbutler_request.status_code == 404: Comment.update(Q('root_target', 'eq', root_target), data={'root_target': None}) raise NotFound if is_server_error(waterbutler_request.status_code): raise ServiceUnavailableError(detail='Could not retrieve files information at this time.') try: waterbutler_request.json()['data'] except KeyError: raise ServiceUnavailableError(detail='Could not retrieve files information at this time.') if check_permissions: # May raise a permission denied self.check_object_permissions(self.request, comment) return comment
def get_comment(self, check_permissions=True): pk = self.kwargs[self.comment_lookup_url_kwarg] try: comment = Comment.find_one(Q('_id', 'eq', pk) & Q('root_target', 'ne', None)) except NoResultsFound: raise NotFound # Deleted root targets still appear as tuples in the database and are included in # the above query, requiring an additional check if comment.root_target.referent.is_deleted: comment.root_target = None comment.save() if comment.root_target is None: raise NotFound if check_permissions: # May raise a permission denied self.check_object_permissions(self.request, comment) return comment