Example #1
0
    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]
Example #2
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]
Example #3
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]
Example #4
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()
Example #5
0
    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)
Example #6
0
    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