Esempio n. 1
0
 def test_key_transform_text_lookup_mixin_non_key_transform(self):
     transform = Transform('test')
     msg = (
         'Transform should be an instance of KeyTransform in order to use '
         'this lookup.')
     with self.assertRaisesMessage(TypeError, msg):
         KeyTransformTextLookupMixin(transform)
Esempio n. 2
0
    def resolve_expression(self, *args, **kwargs):
        res = super().resolve_expression(*args, **kwargs)

        # Ensure that expressions are geometric.
        source_fields = res.get_source_fields()
        for pos in self.geom_param_pos:
            field = source_fields[pos]
            if not isinstance(field, GeometryField):
                raise TypeError(
                    "%s function requires a GeometryField in position %s, got %s."
                    % (
                        self.name,
                        pos + 1,
                        type(field).__name__,
                    ))

        base_srid = res.srid
        for pos in self.geom_param_pos[1:]:
            expr = res.source_expressions[pos]
            expr_srid = expr.output_field.srid
            if expr_srid != base_srid:
                # Automatic SRID conversion so objects are comparable.
                res.source_expressions[pos] = Transform(
                    expr, base_srid).resolve_expression(*args, **kwargs)
        return res
Esempio n. 3
0
    def resolve_expression(self, *args, **kwargs):
        res = super().resolve_expression(*args, **kwargs)
        base_srid = res.srid
        if not base_srid:
            raise TypeError(
                "Geometry functions can only operate on geometric content.")

        for pos, expr in enumerate(res.source_expressions[1:], start=1):
            if isinstance(expr, GeomValue) and expr.srid != base_srid:
                # Automatic SRID conversion so objects are comparable
                res.source_expressions[pos] = Transform(
                    expr, base_srid).resolve_expression(*args, **kwargs)
        return res