def clean(self, request, resource): if resource not in self.get_resources(): raise NotFound() adapter = DatabaseAdapter() self.sql = ''' SELECT %(id_field)s, %(ra_field)s, %(dec_field)s FROM %(schema)s.%(table)s WHERE %(ra_field)s BETWEEN (%%(RA)s - 0.5 * %%(SR)s) AND (%%(RA)s + 0.5 * %%(SR)s) AND %(dec_field)s BETWEEN (%%(DEC)s - 0.5 * %%(SR)s) AND (%%(DEC)s + 0.5 * %%(SR)s) LIMIT %(limit)s ''' % { 'id_field': adapter.escape_identifier('id'), 'ra_field': adapter.escape_identifier('ra'), 'dec_field': adapter.escape_identifier('dec'), 'schema': settings.CONESEARCH_SCHEMA, 'table': settings.CONESEARCH_TABLE, 'limit': self.max_records } self.args, errors = self.parse_query_dict(request) if errors: raise ValidationError(errors)
def clean(self, request, resource): from daiquiri.metadata.models import Schema, Table resources = self.get_resources() if resource not in resources: raise NotFound schema_name = resources[resource]['schema_name'] table_name = resources[resource]['table_name'] data = make_query_dict_upper_case(request.GET) errors = {} # check if the user is allowed to access the schema try: schema = Schema.objects.filter_by_access_level(request.user).get(name=schema_name) except Schema.DoesNotExist: raise NotFound # check if the user is allowed to access the table try: table = Table.objects.filter_by_access_level(request.user).filter(schema=schema).get(name=table_name) except Table.DoesNotExist: raise NotFound # fetch the columns accoring to the verbosity verb = data.get('VERB', '2') if verb == '1': self.columns = table.columns.filter(name__in=resources[resource]['column_names']).values() elif verb == '2': self.columns = table.columns.filter(principal=True).values() elif verb == '3': self.columns = table.columns.values() else: errors['VERB'] = [_('This field must be 1, 2, or 3.')] # construct sql query adapter = DatabaseAdapter() escaped_column_names = [adapter.escape_identifier(column['name']) for column in self.columns] self.sql = self.sql_pattern % { 'schema': adapter.escape_identifier(schema_name), 'table': adapter.escape_identifier(table_name), 'columns': ', '.join(escaped_column_names) } # parse RA, DEC, and SR arguments self.args = {} for key in ['RA', 'DEC', 'SR']: try: value = float(data[key]) if self.ranges[key]['min'] <= value <= self.ranges[key]['max']: self.args[key] = value else: errors[key] = [_('This value must be between %(min)g and %(max)g.' % self.ranges[key])] except KeyError: errors[key] = [_('This field may not be blank.')] except ValueError: errors[key] = [_('This field must be a float.')] if errors: raise ValidationError(errors)