def post(self): """Handler for post requests to datastore_admin/delete.do. Jobs are executed and user is redirected to the get handler. """ namespace = self.request.get('namespace') kinds = self.request.get('kind', allow_multiple=True) (namespace_str, kinds_str) = utils.GetPrintableStrs(namespace, kinds) token = self.request.get('xsrf_token') jobs = [] if utils.ValidateXsrfToken(token, XSRF_ACTION): try: op = utils.StartOperation('Deleting %s%s' % (kinds_str, namespace_str)) name_template = 'Delete all %(kind)s objects%(namespace)s' jobs = utils.RunMapForKinds(op.key(), kinds, name_template, self.DELETE_HANDLER, self.INPUT_READER, None, {}) error = '' except Exception, e: error = self._HandleException(e) parameters = [('job', job) for job in jobs] if error: parameters.append(('error', error))
def post(self): """Handler for post requests to datastore_admin/import_backup.do. Import is executed and user is redirected to the base-path handler. """ gs_handle = self.request.get('gs_handle') token = self.request.get('xsrf_token') error = None if gs_handle and utils.ValidateXsrfToken(token, XSRF_ACTION): try: bucket_name, path = parse_gs_handle(gs_handle) file_content = get_gs_object(bucket_name, path) entities = parse_backup_info_file(file_content) original_backup_info = entities.next() entity = datastore.Entity(BackupInformation.kind()) entity.update(original_backup_info) backup_info = BackupInformation.from_entity(entity) if original_backup_info.key().app() != os.getenv('APPLICATION_ID'): backup_info.original_app = original_backup_info.key().app() def tx(): backup_info.put(force_writes=True) kind_files_models = [] for entity in entities: kind_files = backup_info.create_kind_backup_files( entity.key().name(), entity['files']) kind_files_models.append(kind_files) db.put(kind_files_models, force_writes=True) db.run_in_transaction(tx) backup_id = str(backup_info.key()) except Exception, e: logging.exception('Failed to Import datastore backup information.') error = str(e)
def post(self): """Handler for post requests to datastore_admin/copy.do. Jobs are executed and user is redirected to the get handler. """ namespace = self.request.get('namespace') kinds = self.request.get_all('kind') (namespace_str, kinds_str) = utils.GetPrintableStrs(namespace, kinds) token = self.request.get('xsrf_token') remote_url = self.request.get('remote_url') extra_header = self.request.get('extra_header') jobs = [] if not remote_url: parameters = [('error', 'Unspecified remote URL.')] elif not utils.ValidateXsrfToken(token, XSRF_ACTION): parameters = [('xsrf_error', '1')] else: try: if extra_header: extra_headers = dict([extra_header.split(':', 1)]) else: extra_headers = None target_app = remote_api_put_stub.get_remote_appid(remote_url, extra_headers) op = utils.StartOperation( 'Copying %s%s to %s' % (kinds_str, namespace_str, target_app)) name_template = 'Copy all %(kind)s objects%(namespace)s' mapper_params = { 'target_app': target_app, 'remote_url': remote_url, 'extra_header': extra_header, } jobs = utils.RunMapForKinds( op.key(), kinds, name_template, self.COPY_HANDLER, self.INPUT_READER, None, mapper_params) error = '' except Exception, e: logging.exception('Handling exception.') error = self._HandleException(e) parameters = [('job', job) for job in jobs] if error: parameters.append(('error', error))
def post(self): """Handler for post requests to datastore_admin/delete.do. Jobs are executed and user is redirected to the get handler. """ namespace = self.request.get('namespace') kinds = self.request.get_all('kind') (namespace_str, kinds_str) = utils.GetPrintableStrs(namespace, kinds) token = self.request.get('xsrf_token') readonly_warning = self.request.get('readonly_warning') jobs = [] if (readonly_warning == 'True') and not self.request.get('confirm_readonly_delete'): parameters = [('noconfirm_error', '1')] else: if utils.ValidateXsrfToken(token, XSRF_ACTION): try: op = utils.StartOperation('Deleting %s%s' % (kinds_str, namespace_str)) name_template = 'Delete all %(kind)s objects%(namespace)s' mapreduce_params = {'force_ops_writes': True} queue = self.request.get('queue') queue = queue or os.environ.get( 'HTTP_X_APPENGINE_QUEUENAME', 'default') if queue[0] == '_': queue = 'default' jobs = utils.RunMapForKinds( op.key(), kinds, name_template, self.DELETE_HANDLER, self.INPUT_READER, None, {}, mapreduce_params=mapreduce_params, queue_name=queue, max_shard_count=utils.MAPREDUCE_DEFAULT_SHARDS) error = '' except Exception as e: error = self._HandleException(e) parameters = [('job', job) for job in jobs] if error: parameters.append(('error', error)) else: parameters = [('xsrf_error', '1')] query = urllib.parse.urlencode(parameters) self.redirect('%s/%s?%s' % (config.BASE_PATH, self.SUFFIX, query))
def post(self): """Handler for post requests to datastore_admin/backup_delete.do. Deletes are executed and user is redirected to the base-path handler. """ backup_ids = self.request.get_all('backup_id') token = self.request.get('xsrf_token') error = None if backup_ids and utils.ValidateXsrfToken(token, XSRF_ACTION): try: for backup_info in db.get(backup_ids): if backup_info: delete_backup_info(backup_info) except Exception, e: logging.exception('Failed to delete datastore backup.') error = str(e)
def post(self): """Handler for post requests to datastore_admin/backup.do. Redirects to the get handler after processing the request. """ token = self.request.get('xsrf_token') if not utils.ValidateXsrfToken(token, XSRF_ACTION): parameters = [('xsrf_error', '1')] else: try: parameters = self._ProcessPostRequest() except Exception, e: error = self._HandleException(e) parameters = [('error', error)]
def post(self): """Handler for post requests to datastore_admin/backup_delete.do. Jobs are executed and user is redirected to the base-path handler. """ backup_ids = self.request.get_all('backup_id') token = self.request.get('xsrf_token') error = None if backup_ids and utils.ValidateXsrfToken(token, XSRF_ACTION): try: for backup_info in db.get(backup_ids): if backup_info: blobstore_api.delete([ files.blobstore.get_blob_key(filename) for filename in backup_info.blob_files ]) backup_info.delete() except Exception, e: logging.exception('Failed to delete datastore backup.') error = str(e)
def post(self): """Handler for post requests to datastore_admin/delete.do. Jobs are executed and user is redirected to the get handler. """ namespace = self.request.get('namespace') kinds = self.request.get('kind', allow_multiple=True) (namespace_str, _) = _GetPrintableStrs(namespace, kinds) app_id = self.request.get('app_id') token = self.request.get('xsrf_token') jobs = [] if utils.ValidateXsrfToken(token, XSRF_ACTION): try: for kind in kinds: name = 'Delete all %s objects%s' % (kind, namespace_str) mapreduce_params = { 'entity_kind': kind, } if utils.config.CLEANUP_MAPREDUCE_STATE: mapreduce_params['done_callback'] = '%s/%s' % ( utils.config.BASE_PATH, DeleteDoneHandler.SUFFIX) jobs.append( control.start_map( name, self.DELETE_HANDLER, self.INPUT_READER, mapreduce_params, mapreduce_parameters=mapreduce_params, base_path=utils.config.MAPREDUCE_PATH, _app=app_id)) error = '' except Exception, e: error = self._HandleException(e) parameters = [('job', job) for job in jobs] if error: parameters.append(('error', error))
def post(self): """Handler for post requests to datastore_admin/delete.do. Jobs are executed and user is redirected to the get handler. """ namespace = self.request.get('namespace') kinds = self.request.get_all('kind') (namespace_str, kinds_str) = utils.GetPrintableStrs(namespace, kinds) token = self.request.get('xsrf_token') jobs = [] if utils.ValidateXsrfToken(token, XSRF_ACTION): try: op = utils.StartOperation('Deleting %s%s' % (kinds_str, namespace_str)) name_template = 'Delete all %(kind)s objects%(namespace)s' queue = self.request.get('queue') queue = queue or os.environ.get('HTTP_X_APPENGINE_QUEUENAME', 'default') if queue[0] == '_': queue = 'default' jobs = utils.RunMapForKinds( op.key(), kinds, name_template, self.DELETE_HANDLER, self.INPUT_READER, None, {}, queue_name=queue, max_shard_count=utils.MAPREDUCE_DEFAULT_SHARDS) error = '' except Exception, e: error = self._HandleException(e) parameters = [('job', job) for job in jobs] if error: parameters.append(('error', error))