File: test_summaries.py

package info (click to toggle)
pystac 1.13.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 19,904 kB
  • sloc: python: 24,370; makefile: 124; sh: 7
file content (106 lines) | stat: -rw-r--r-- 3,336 bytes parent folder | download
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import socket
from typing import Any

import pytest

from pystac.summaries import RangeSummary, Summaries, Summarizer, SummaryStrategy
from tests.utils import TestCases


def test_summary() -> None:
    coll = TestCases.case_5()
    summaries = Summarizer().summarize(coll.get_items(recursive=True))
    summaries_dict = summaries.to_dict()
    assert len(summaries_dict["eo:bands"]) == 4
    assert len(summaries_dict["proj:code"]) == 1


def test_summary_limit() -> None:
    coll = TestCases.case_5()
    summaries = Summarizer().summarize(coll.get_items(recursive=True))
    summaries.maxcount = 2
    summaries_dict = summaries.to_dict()
    assert summaries_dict.get("eo:bands") is None
    assert len(summaries_dict["proj:code"]) == 1


def test_summary_custom_fields_file() -> None:
    coll = TestCases.case_5()
    path = TestCases.get_path("data-files/summaries/fields_no_bands.json")
    summaries = Summarizer(path).summarize(coll.get_items(recursive=True))
    summaries_dict = summaries.to_dict()
    assert summaries_dict.get("eo:bands") is None
    assert len(summaries_dict["proj:code"]) == 1


def test_summary_custom_fields_dict() -> None:
    coll = TestCases.case_5()
    spec = {
        "eo:bands": SummaryStrategy.DONT_SUMMARIZE,
        "proj:code": SummaryStrategy.ARRAY,
    }
    obj = Summarizer(spec)
    assert "eo:bands" not in obj.summaryfields
    assert obj.summaryfields["proj:code"] == SummaryStrategy.ARRAY
    summaries = obj.summarize(coll.get_items(recursive=True))
    summaries_dict = summaries.to_dict()
    assert summaries_dict.get("eo:bands") is None
    assert len(summaries_dict["proj:code"]) == 1


def test_summary_wrong_custom_fields_file() -> None:
    coll = TestCases.case_5()
    with pytest.raises(FileNotFoundError) as context:
        Summarizer("wrong/path").summarize(coll.get_items(recursive=True))
    assert "No such file or directory" in str(context.value)


def test_can_open_fields_file_even_with_no_nework() -> None:
    old_socket = socket.socket
    try:

        class no_network(socket.socket):
            def __init__(self, *args: Any, **kwargs: Any):
                raise Exception("Network call blocked")

        socket.socket = no_network  # type:ignore
        Summarizer()
    finally:
        # even if this test fails, it should not break the whole test suite
        socket.socket = old_socket  # type:ignore


def test_summary_empty() -> None:
    summaries = Summaries.empty()
    assert summaries.is_empty()


def test_summary_not_empty() -> None:
    coll = TestCases.case_5()
    summaries = Summarizer().summarize(coll.get_items(recursive=True))
    assert not summaries.is_empty()


def test_clone_summary() -> None:
    coll = TestCases.case_5()
    summaries = Summarizer().summarize(coll.get_items(recursive=True))
    summaries_dict = summaries.to_dict()
    clone = summaries.clone()
    assert isinstance(clone, Summaries)
    clone_dict = clone.to_dict()
    assert clone_dict == summaries_dict


def test_RangeSummary_repr() -> None:
    rs = RangeSummary(5, 10)
    assert "{'minimum': 5, 'maximum': 10}" == rs.__repr__()


def test_RangeSummary_equality() -> None:
    rs_1 = RangeSummary(5, 10)
    rs_2 = RangeSummary(5, 10)
    rs_3 = RangeSummary(5, 11)

    assert rs_1 == rs_2
    assert rs_1 != rs_3
    assert rs_1 != (5, 10)