def datastore_delete(context, data_dict): '''Deletes a table or a set of records from the DataStore. :param resource_id: resource id that the data will be deleted from. (optional) :type resource_id: string :param force: set to True to edit a read-only resource :type force: bool (optional, default: False) :param filters: filters to apply before deleting (eg {"name": "fred"}). If missing delete whole table and all dependent views. (optional) :type filters: dictionary :param calculate_record_count: updates the stored count of records, used to optimize datastore_search in combination with the `total_estimation_threshold` parameter. If doing a series of requests to change a resource, you only need to set this to True on the last request. :type calculate_record_count: bool (optional, default: False) **Results:** :returns: Original filters sent. :rtype: dictionary ''' schema = context.get('schema', dsschema.datastore_delete_schema()) backend = DatastoreBackend.get_active_backend() # Remove any applied filters before running validation. filters = data_dict.pop('filters', None) data_dict, errors = _validate(data_dict, schema, context) if filters is not None: if not isinstance(filters, dict): raise p.toolkit.ValidationError( {'filters': ['filters must be either a dict or null.']}) data_dict['filters'] = filters if errors: raise p.toolkit.ValidationError(errors) p.toolkit.check_access('datastore_delete', context, data_dict) if not data_dict.pop('force', False): resource_id = data_dict['resource_id'] _check_read_only(context, resource_id) res_id = data_dict['resource_id'] res_exists = backend.resource_exists(res_id) if not res_exists: raise p.toolkit.ObjectNotFound( p.toolkit._(u'Resource "{0}" was not found.'.format(res_id))) result = backend.delete(context, data_dict) if data_dict.get('calculate_record_count', False): backend.calculate_record_count(data_dict['resource_id']) # Set the datastore_active flag on the resource if necessary model = _get_or_bust(context, 'model') resource = model.Resource.get(data_dict['resource_id']) if (not data_dict.get('filters') and resource is not None and resource.extras.get('datastore_active') is True): log.debug('Setting datastore_active=False on resource {0}'.format( resource.id)) set_datastore_active_flag(model, data_dict, False) result.pop('id', None) result.pop('connection_url', None) return result
def datastore_delete(context, data_dict): '''Deletes a table or a set of records from the DataStore. :param resource_id: resource id that the data will be deleted from. (optional) :type resource_id: string :param force: set to True to edit a read-only resource :type force: bool (optional, default: False) :param filters: filters to apply before deleting (eg {"name": "fred"}). If missing delete whole table and all dependent views. (optional) :type filters: dictionary :param calculate_record_count: updates the stored count of records, used to optimize datastore_search in combination with the `total_estimation_threshold` parameter. If doing a series of requests to change a resource, you only need to set this to True on the last request. :type calculate_record_count: bool (optional, default: False) **Results:** :returns: Original filters sent. :rtype: dictionary ''' schema = context.get('schema', dsschema.datastore_delete_schema()) backend = DatastoreBackend.get_active_backend() # Remove any applied filters before running validation. filters = data_dict.pop('filters', None) data_dict, errors = _validate(data_dict, schema, context) if filters is not None: if not isinstance(filters, dict): raise p.toolkit.ValidationError({ 'filters': [ 'filters must be either a dict or null.' ] }) data_dict['filters'] = filters if errors: raise p.toolkit.ValidationError(errors) p.toolkit.check_access('datastore_delete', context, data_dict) if not data_dict.pop('force', False): resource_id = data_dict['resource_id'] _check_read_only(context, resource_id) res_id = data_dict['resource_id'] res_exists = backend.resource_exists(res_id) if not res_exists: raise p.toolkit.ObjectNotFound(p.toolkit._( u'Resource "{0}" was not found.'.format(res_id) )) result = backend.delete(context, data_dict) if data_dict.get('calculate_record_count', False): backend.calculate_record_count(data_dict['resource_id']) # Set the datastore_active flag on the resource if necessary model = _get_or_bust(context, 'model') resource = model.Resource.get(data_dict['resource_id']) if (not data_dict.get('filters') and resource is not None and resource.extras.get('datastore_active') is True): log.debug( 'Setting datastore_active=False on resource {0}'.format( resource.id) ) set_datastore_active_flag(model, data_dict, False) result.pop('id', None) result.pop('connection_url', None) return result