def handle(self, *args, **options): t0 = time() system_id = options['system'] or settings.AGAVE_STORAGE_SYSTEM username = options['username'] file_path = options['file_path'] self.stdout.write('Starting at: {}'.format(file_path)) self.stdout.write('Clearing permissions for username: {}'.format(username)) res, root_folders = Object.listing(system_id, admin_user, file_path) self.stdout.write('Documents meta: {}'.format({'index': res[0].meta.index, 'doc_type': res[0].meta.doc_type})) cnt = 0 #for folder in root_folders.scan(): s = Object.search() res = s.execute() for folder in s.scan(): self._clear_pems(folder, username) cnt += 1 owner = folder.full_path.strip('/').split('/')[0] res, listing = Object.listing_recursive(system_id, owner, folder.full_path.strip('/')) for doc in listing.scan(): self._clear_pems(doc, username) cnt += 1 t1 = time() self.stdout.write('Accurate enough running time: {} s'.format(t1 - t0)) self.stdout.write('Total number of docs touched: {}'.format(str(cnt)))
def test_object_from_agave_file(self, mock_obj_from_file_path, mock_obj_update, mock_obj_save): af = self.get_mock_agave_file() mock_obj_from_file_path.return_value = None doc = Object.from_agave_file(self.user.username, af) self.assertEqual(os.path.join(doc.path, doc.name), self.afile_json['path'])
def get_mock_object_folder(self): doc = Object( mimeType = self.afolder_json['mimeType'], name = self.afolder_json['name'] if self.afolder_json['name'] != '.' else os.path.split(self.afolder_json['path'])[1], format = self.afolder_json['format'], deleted = False, lastModified = self.afolder_json['lastModified'], fileType = os.path.splitext(self.afolder_json['name'])[1] if self.afolder_json['format'] != 'folder' else 'folder', agavePath = 'agave://{}/{}'.format(self.afolder_json['system'], self.afolder_json['path']), systemTags = [], length = self.afolder_json['length'], systemId = self.afolder_json['system'], path = os.path.split(self.afolder_json['path'])[0], keywords = [], link = self.afolder_json['_links']['self']['href'], type = self.afolder_json['type'], permissions = self.apems_json ) return doc
def share_agave(self, username, file_id, permissions, recursive): try: # n = Notification(event_type = 'data', # status = 'INFO', # operation = 'share_initializing', # message = 'File sharing is initializing. Please wait...', # user = username, # extra = {'target_path': reverse('designsafe_data:data_depot', # args=['agave', file_id])}) # n.save() user = get_user_model().objects.get(username=username) from designsafe.apps.api.data import AgaveFileManager from designsafe.apps.api.data.agave.file import AgaveFile from designsafe.apps.api.data.agave.elasticsearch.documents import Object agave_fm = AgaveFileManager(user) system_id, file_user, file_path = agave_fm.parse_file_id(file_id) f = AgaveFile.from_file_path(system_id, username, file_path, agave_client=agave_fm.agave_client) f_dict = f.to_dict() n = Notification(event_type = 'data', status = 'INFO', operation = 'share_initializing', message = 'File sharing is initializing. Please wait...', user = username, extra = f_dict) n.save() f.share(permissions, recursive) #reindex_agave.apply_async(args=(self.username, file_id)) # self.indexer.index(system, file_path, file_user, pems_indexing=True) esf = Object.from_file_path(system_id, username, file_path) esf.share(username, permissions, recursive) # Notify owner share completed n = Notification(event_type = 'data', status = 'SUCCESS', operation = 'share_finished', message = 'File permissions were updated successfully.', user = username, extra = f_dict) n.save() # Notify users they have new shared files for pem in permissions: if pem['permission'] != 'NONE': message = '%s shared some files with you.' % user.get_full_name() n = Notification(event_type = 'data', status = 'SUCCESS', operation = 'share_finished', message = message, user = pem['user_to_share'], extra = f_dict) n.save() except: logger.error('Error sharing file/folder', exc_info=True, extra = { 'username': username, 'file_id': file_id, 'permissions': permissions }) n = Notification(event_type='data', status=Notification.ERROR, operation='share_error', message='We were unable to share the specified folder/file(s). ' 'Please try again...', user=username, extra={'system': system_id, 'path': file_path }) n.save()
def share_agave(self, username, file_id, permissions, recursive): try: n = Notification(event_type = 'data', status = 'INFO', operation = 'share_initializing', message = 'File sharing is initializing. Please wait...', user = username, extra = {'target_path': reverse('designsafe_data:data_browser', args=['agave', file_id])}) n.save() user = get_user_model().objects.get(username=username) from designsafe.apps.api.data import AgaveFileManager from designsafe.apps.api.data.agave.file import AgaveFile from designsafe.apps.api.data.agave.elasticsearch.documents import Object agave_fm = AgaveFileManager(user) system_id, file_user, file_path = agave_fm.parse_file_id(file_id) f = AgaveFile.from_file_path(system_id, username, file_path, agave_client=agave_fm.agave_client) f.share(permissions, recursive) #reindex_agave.apply_async(args=(self.username, file_id)) # self.indexer.index(system, file_path, file_user, pems_indexing=True) esf = Object.from_file_path(system_id, username, file_path) esf.share(username, permissions, recursive) # Notify owner share completed n = Notification(event_type = 'data', status = 'SUCCESS', operation = 'share_finished', message = 'File permissions were updated successfully.', user = username, extra = {'target_path': reverse('designsafe_data:data_browser', args=['agave', file_id])}) n.save() # Notify users they have new shared files for pem in permissions: if pem['permission'] != 'NONE': message = '%s shared some files with you.' % user.get_full_name() n = Notification(event_type = 'data', status = 'SUCCESS', operation = 'share_finished', message = message, user = pem['user_to_share'], extra = {'target_path': reverse('designsafe_data:data_browser', args=['agave', file_id])}) n.save() except: logger.error('Error sharing file/folder', exc_info=True, extra = { 'username': username, 'file_id': file_id, 'permissions': permissions }) n = Notification(event_type='data', status=Notification.ERROR, operation='share_error', message='We were unable to share the specified folder/file(s). ' 'Please try again...', user=username, extra={}) n.save()
def scan(self): for o in self.listing_json: doc = Object(**o) #doc.to_dict.return_value = o yield doc