File: test_fields.py

package info (click to toggle)
stac-pydantic 3.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 664 kB
  • sloc: python: 1,787; makefile: 4
file content (49 lines) | stat: -rw-r--r-- 1,372 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from datetime import datetime, timezone

from shapely.geometry import Polygon

from stac_pydantic.api import Item
from stac_pydantic.api.extensions.fields import FieldsExtension
from stac_pydantic.api.search import Search


def test_fields_filter_item():
    fields = FieldsExtension(
        includes={"id", "geometry", "properties.foo"}, excludes={"properties.bar"}
    )

    item = Item(
        id="test-fields-filter",
        geometry=Polygon.from_bounds(0, 0, 0, 0),
        properties={"datetime": datetime.now(timezone.utc), "foo": "foo", "bar": "bar"},
        assets={},
        links=[
            {"href": "http://link", "rel": "self"},
            {
                "href": "http://root",
                "rel": "root",
            },
            {
                "href": "http://collection",
                "rel": "collection",
            },
        ],
        bbox=[0, 0, 0, 0],
        type="Feature",
    )

    d = item.model_dump(**fields.filter)
    assert d.pop("id") == item.id
    assert d.pop("geometry") == item.geometry.model_dump(exclude_unset=True)
    props = d.pop("properties")
    assert props["foo"] == "foo"

    assert not props.get("bar")
    assert not d


def test_api_fields_extension():
    Search(
        collections=["collection1"],
        fields={"includes": {"field1", "field2"}, "excludes": {"field3", "field4"}},
    )