def test_get_range_field():
    storage_fields = parse_fields({
        'lat': {
            'type': 'float-range',
            'max_offset': [['extents', 'geospatial_lat_max']],
            'min_offset': [
                ['extents', 'geospatial_lat_other'],
                ['extents', 'geospatial_lat_min']
            ],
        },
    }, DATASET.c.metadata)
    field = storage_fields['lat']
    _assert_same(
        field,
        NumericRangeDocField(
            'lat', None,
            DATASET.c.metadata,
            True,
            max_offset=[
                ['extents', 'geospatial_lat_max']
            ],
            min_offset=[
                ['extents', 'geospatial_lat_other'],
                ['extents', 'geospatial_lat_min']
            ],
        )
    )
    assert isinstance(field, RangeDocField)
    extracted = field.extract({'extents': {'geospatial_lat_min': 2, 'geospatial_lat_max': 4}})
    assert extracted == Range(begin=2, end=4)
Exemple #2
0
def test_build_query_expressions():
    _sat_field = SimpleDocField('platform', None, None, None)
    _sens_field = SimpleDocField('instrument', None, None, None)
    _lat_field = NumericRangeDocField('lat', None, None, None)
    _fields = {
        'platform': _sat_field,
        'instrument': _sens_field,
        'lat': _lat_field
    }

    assert [EqualsExpression(_sat_field, "LANDSAT_8")
            ] == to_expressions(_fields.get, platform="LANDSAT_8")
    assert [
        RangeBetweenExpression(_lat_field, 4, 23.0, _range_class=NumericRange)
    ] == to_expressions(_fields.get, lat=Range(4, 23))
Exemple #3
0
from __future__ import absolute_import

from datetime import datetime

from dateutil.tz.tz import tzutc
from psycopg2.extras import NumericRange

from datacube.index.fields import to_expressions
from datacube.drivers.postgres._fields import SimpleDocField, RangeBetweenExpression, EqualsExpression, \
    NumericRangeDocField
from datacube.model import Range
from datacube.ui import parse_expressions

_sat_field = SimpleDocField('platform', None, None, None)
_sens_field = SimpleDocField('instrument', None, None, None)
_lat_field = NumericRangeDocField('lat', None, None, None)
_fields = {
    'platform': _sat_field,
    'instrument': _sens_field,
    'lat': _lat_field
}


def test_parse_simple_expression():
    assert {'platform': 4} == parse_expressions('platform = 4')
    assert {'platform': 'LANDSAT_8'} == parse_expressions('platform = "LANDSAT_8"')
    assert {'platform': 'LANDSAT_8'} == parse_expressions('platform = LANDSAT_8')
    assert {'platform': 'LAND SAT_8'} == parse_expressions('platform = "LAND SAT_8"')

    between_exp = {'lat': Range(4, 6)}
    assert between_exp == parse_expressions('4<lat<6')