def test_query_with_no_models(self, session): query = session.query() spec = {'field': 'name', 'op': '==', 'value': 'name_1'} with pytest.raises(BadQuery) as err: get_model_from_spec(spec, query) assert 'The query does not contain any models.' == err.value.args[0]
def test_multiple_models_ambiquous_spec(self, session): query = session.query(Bar, Qux) spec = {'field': 'name', 'op': '==', 'value': 'name_1'} with pytest.raises(BadSpec) as err: get_model_from_spec(spec, query) assert 'Ambiguous spec. Please specify a model.' == err.value.args[0]
def test_query_with_missing_named_model(self, session): query = session.query(Bar) spec = {'model': 'Buz'} with pytest.raises(BadSpec) as err: get_model_from_spec(spec, query) assert 'The query does not contain model `Buz`.' == err.value.args[0]
def format_for_sqlalchemy(self, query, default_model): sort_spec = self.sort_spec direction = self.direction field_name = self.field_name model = get_model_from_spec(sort_spec, query, default_model) # Check if json field field_specs = field_name.split(".") if len(field_specs) > 1: field_name = field_specs[0] inner_field = field_specs[1] field = Field(model, field_name) sqlalchemy_field = field.get_sqlalchemy_field() if direction == SORT_ASCENDING: sort_fnc = sqlalchemy_field[inner_field].astext.asc elif direction == SORT_DESCENDING: sort_fnc = sqlalchemy_field[inner_field].astext.desc else: field = Field(model, field_name) sqlalchemy_field = field.get_sqlalchemy_field() if direction == SORT_ASCENDING: sort_fnc = sqlalchemy_field.asc elif direction == SORT_DESCENDING: sort_fnc = sqlalchemy_field.desc if self.nullsfirst: return sort_fnc().nullsfirst() elif self.nullslast: return sort_fnc().nullslast() else: return sort_fnc()
def format_for_sqlalchemy(self, query, default_model): filter_spec = self.filter_spec operator = self.operator value = self.value model = get_model_from_spec(filter_spec, query, default_model) function = operator.function arity = operator.arity field_name = self.filter_spec["field"] field = Field(model, field_name) sqlalchemy_field = field.get_sqlalchemy_field() if arity == 1: return function(sqlalchemy_field) if arity == 2: return function(sqlalchemy_field, value)
def test_query_with_named_model(self, session): query = session.query(Bar) spec = {'model': 'Bar'} model = get_model_from_spec(spec, query) assert model == Bar