Пример #1
0
def test_regions_with_highlights(mock_geocoding):
    try:
        regions_builder(level=LEVEL,
                        request=FILTER_LIST,
                        within=REGION_NAME,
                        highlights=True).build()
    except Exception:
        pass  # response doesn't contain proper feature with ids - ignore

    mock_geocoding.assert_called_with(
        GeocodingRequest(requested_payload=[PayloadKind.highlights],
                         resolution=None,
                         region_queries=[REGION_QUERY_LA, REGION_QUERY_NY],
                         level=LEVEL_KIND,
                         namesake_example_limit=NAMESAKES_EXAMPLE_LIMIT))
Пример #2
0
def test_empty():
    actual = \
        regions_builder()._get_queries()

    expected = [query()]

    assert expected == actual
Пример #3
0
def test_positional_empty():
    actual = \
        regions_builder(request=[])._get_queries()

    expected = [query()]

    assert expected == actual
def test_ambiguity_drop_not_matched():
    r = geodata.regions_builder(level='city', request=['gotham', 'new york city', 'manchester']) \
        .drop_not_matched() \
        .build()

    actual = r.to_data_frame()[DF_FOUND_NAME].tolist()
    assert ['New York City'] == actual
def test_ambiguity_allow_ambiguous():
    r = geodata.regions_builder(level='city', request=['gotham', 'new york city', 'manchester']) \
        .allow_ambiguous() \
        .build()

    actual = r.to_data_frame()[DF_FOUND_NAME].tolist()
    assert 28 == len(actual)  # 1 New York City + 27 Manchester
Пример #6
0
def test_positional_with_duplicated_queries_and_regions():
    actual = regions_builder(request=names(FOO, FOO),
                             within=regions_list(FOO, FOO))._get_queries()

    expected = [query(FOO.name, FOO.region), query(FOO.name, FOO.region)]

    assert expected == actual
Пример #7
0
def test_near_shapely_point():
    actual = \
        regions_builder(request=names(FOO, BAR)) \
            .where(names(BAR), near=ShapelyPoint(1., 2.)) \
            ._get_queries()

    expected = [query(FOO.name), query(BAR.name, near=GeoPoint(1., 2.))]

    assert expected == actual
Пример #8
0
def test_list_duplication_with_overriding_duplication():
    actual = \
        regions_builder(request=names(FOO, FOO)) \
            .where(names(FOO, FOO)) \
            ._get_queries()

    expected = [query(FOO.name), query(FOO.name)]

    assert expected == actual
Пример #9
0
def test_list_chaining_with_addition():
    actual = \
        regions_builder(request=names(FOO, BAR)) \
            .where(names(BAZ), single_region(BAZ)) \
            ._get_queries()

    expected = [query(FOO.name), query(BAR.name), query(BAZ.name, BAZ.region)]

    assert expected == actual
Пример #10
0
def test_single_chaining_with_overriding():
    actual = \
        regions_builder(request=names(FOO, BAR)) \
            .where(names(BAR), single_region(BAR)) \
            ._get_queries()

    expected = [query(FOO.name), query(BAR.name, BAR.region)]

    assert expected == actual
Пример #11
0
def test_simple_positional():
    actual = \
        regions_builder(
            request=names(FOO, BAR),
            within=regions_list(FOO, BAR)
        )._get_queries()

    expected = [query(FOO.name, FOO.region), query(BAR.name, BAR.region)]

    assert expected == actual
Пример #12
0
def test_with_regions():
    actual = \
        regions_builder(
            request=names(FOO),
            within=Regions(LevelKind.city, [FOO.feature])) \
            ._get_queries()

    expected = [query(FOO.name, FOO.region)]

    assert expected == actual
def test_ambiguity_drop_not_found():
    try:
        r = geodata.regions_builder(level='city', request=['gotham', 'new york city', 'manchester']) \
            .drop_not_found() \
            .build()
    except ValueError as ex:
        str(ex).startswith('Multiple objects (27) were found for manchester')
        return

    assert False, 'Should throw exception'
Пример #14
0
def test_override_twice():
    actual = \
        regions_builder(request=names(FOO)) \
            .where(names(FOO), single_region(FOO)) \
            .where(names(FOO), 'foofoo_region') \
            ._get_queries()

    expected = [query(FOO.name, 'foofoo_region')]

    assert expected == actual
def test_ambiguity_near_boston_by_coord():
    r = geodata.regions_builder(
        level='city',
        request='Warwick'
    ) \
        .where('Warwick', near=ShapelyPoint(BOSTON_LON, BOSTON_LAT)) \
        .build()

    assert_row(r.to_data_frame(), id=WARWICK_ID, found_name='Warwick')
    assert_row(r.centroids(), lon=WARWICK_LON, lat=WARWICK_LAT)
def test_havana_new_york():
    try:
        r = geodata.regions_builder(request=['havana', 'new york city']) \
            .where(request='havana', within=geodata.regions_country('cuba')) \
            .where(request='new york city', within=geodata.regions_state('new york')) \
            .build()
    except ValueError as ex:
        assert 'No objects were found for new york city.\n' == str(ex)
        return

    assert False, 'Should throw exception'
Пример #17
0
def test_positional_where_full_replace():
    actual = \
        regions_builder(
            request=names(FOO, BAR)
        ) \
            .where(names(FOO, BAR), regions_list(FOO, BAR)) \
            ._get_queries()

    expected = [query(FOO.name, FOO.region), query(BAR.name, BAR.region)]

    assert expected == actual
def test_where_request_level_detection():
    """
    where('new york', region=geodata.regions_state('new york')) gives county as first detected level
    where('boston', region=geodata.regions_country('usa')) gives city as first detected level
    But 'new york' also matches a city name so common level should be a city
    """
    r = geodata.regions_builder(request=['new york', 'boston']) \
        .where('new york', within=geodata.regions_state('new york')) \
        .where('boston', within=geodata.regions_country('usa')) \
        .build()

    assert [NYC_ID, BOSTON_ID] == r.to_data_frame().id.tolist()
Пример #19
0
def test_only_default_ignoring_strategy():
    actual = \
        regions_builder(request=names(FOO, BAR)) \
            .allow_ambiguous() \
            ._get_queries()

    expected = [
        query(FOO.name, ignoring_strategy=IgnoringStrategyKind.take_namesakes),
        query(BAR.name, ignoring_strategy=IgnoringStrategyKind.take_namesakes)
    ]

    assert expected == actual
Пример #20
0
def test_within_shapely_box():
    actual = \
        regions_builder(request=names(FOO, BAR)) \
            .where(names(BAR), within=shapely.geometry.box(0, 1, 2, 3)) \
            ._get_queries()

    expected = [
        query(FOO.name),
        query(BAR.name,
              box=GeoRect(min_lon=0, min_lat=1, max_lon=2, max_lat=3))
    ]

    assert expected == actual
Пример #21
0
def test_positional_ctor_with_duplicated_queries_and_different_regions():
    actual = \
        regions_builder(
            request=names(FOO, FOO_NAMESAKE),
            within=regions_list(FOO, FOO_NAMESAKE),
        )._get_queries()

    expected = [
        query(FOO.name, FOO.region),
        query(FOO_NAMESAKE.name, FOO_NAMESAKE.region)
    ]

    assert expected == actual
Пример #22
0
def test_order_with_positional_where():
    actual = \
        regions_builder(
            request=names(FOO, BAR, BAZ)
        ) \
            .where(names(BAR), regions_list(BAR)) \
            .where(names(BAZ, FOO), regions_list(BAZ, FOO)) \
            ._get_queries()

    expected = [
        query(FOO.name, FOO.region),
        query(BAR.name, BAR.region),
        query(BAZ.name, BAZ.region)
    ]

    assert expected == actual
def test_missing_address(address, drop_not_found, found, error):
    # use_local_server()
    builder = geodata.regions_builder(level='city',
                                      request=address,
                                      within='usa')
    if drop_not_found:
        builder.drop_not_found()

    if error is not None:
        try:
            builder.build()
        except ValueError as e:
            assert str(e).startswith(error)
    else:
        r = builder.build()
        assert_found_names(r.to_data_frame(), found)
Пример #24
0
def test_near_to_region(mock_request):
    mock_request.return_value = make_success_response() \
        .set_geocoded_features(
        [
            feature(BAZ).set_centroid(GeoPoint(1, 2)).build_geocoded()
        ]
    ).build()

    actual = \
        regions_builder(request=names(FOO, BAR)) \
            .where(names(BAR), near=single_region(BAZ)) \
            ._get_queries()

    expected = [query(FOO.name), query(BAR.name, near=GeoPoint(1, 2))]

    assert expected == actual
Пример #25
0
def test_order_with_where():
    actual = \
        regions_builder(
            request=names(FOO, BAR, BAZ)
        ) \
            .where(names(BAR), regions_list(BAR)) \
            .where(names(BAZ, FOO), single_region(BAZ, FOO)) \
            ._get_queries()

    expected = [
        query(FOO.name, map_region([BAZ, FOO])),
        query(BAR.name, BAR.region),
        query(BAZ.name, map_region([BAZ, FOO]))
    ]

    assert expected == actual
Пример #26
0
def test_controversy_positional_where_with_duplicated_queries_and_different_regions(
):
    # We have to add duplicated objects with properly set regions. It's imposible to fix it later

    actual = \
        regions_builder(
            request=names(FOO, FOO_NAMESAKE)
        ).where(
            request=names(FOO, FOO_NAMESAKE),
            within=regions_list(FOO, FOO_NAMESAKE)
        )._get_queries()

    expected = [
        query(FOO.name, FOO_NAMESAKE.region),
        query(FOO_NAMESAKE.name, FOO_NAMESAKE.region)
    ]

    assert expected == actual
def test_ambiguity_near_boston_by_box():
    boston = geodata.regions_city('boston').centroids().iloc[[0]]
    buffer = 0.6
    boston_centroid = ShapelyPoint(boston.geometry.x, boston.geometry.y)

    r = geodata.regions_builder(
        level='city',
        request='Warwick'
    ) \
        .where('Warwick',
               within=shapely.geometry.box(
                   boston_centroid.x - buffer,
                   boston_centroid.y - buffer,
                   boston_centroid.x + buffer,
                   boston_centroid.y + buffer
               )) \
        .build()

    assert_row(r.to_data_frame(), id=WARWICK_ID, found_name='Warwick')
    assert_row(r.centroids(), lon=WARWICK_LON, lat=WARWICK_LAT)
Пример #28
0
def test_near_with_default_ignoring_strategy(mock_request):
    mock_request.return_value = make_success_response() \
        .set_geocoded_features(
        [
            feature(BAZ).set_centroid(GeoPoint(1., 2.)).build_geocoded()
        ]
    ).build()

    actual = \
        regions_builder(request=names(FOO, BAR)) \
            .allow_ambiguous() \
            .where(names(BAR), near=single_region(BAZ)) \
            ._get_queries()

    expected = [
        query(FOO.name, ignoring_strategy=IgnoringStrategyKind.take_namesakes),
        query(BAR.name, near=GeoPoint(1., 2.), ignoring_strategy=None)
    ]

    assert expected == actual
Пример #29
0
def test_ctor():
    actual = \
        regions_builder(request=names(FOO), within=single_region(FOO)) \
            ._get_queries()
    expected = [query(FOO.name, FOO.region)]
    assert expected == actual
Пример #30
0
def test_positional_wrong_size():
    try:
        regions_builder(request=names(FOO, BAR))._get_queries()
    except ValueError as e:
        assert 'Length of filter and region is not equal' == str(e)