Skip to content

Commit 42d512e

Browse files
authored
Add a check to the loader to make sure that the loader is compatible with the target database (#125)
1 parent 7b5ff07 commit 42d512e

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

pypgstac/pypgstac/load.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
from .db import PgstacDB
3939
from .hydration import dehydrate
40+
from .version import __version__
4041
from enum import Enum
4142

4243
logger = logging.getLogger(__name__)
@@ -159,6 +160,13 @@ def __init__(self, db: PgstacDB):
159160
self.db = db
160161
self._partition_cache: Dict[str, Partition] = {}
161162

163+
def check_version(self) -> None:
164+
if self.db.version != __version__:
165+
raise Exception(
166+
f"pypgstac version {__version__} is not compatible with the target"
167+
f" database version {self.db.version}."
168+
)
169+
162170
@lru_cache
163171
def collection_json(self, collection_id: str) -> Tuple[Dict[str, Any], int, str]:
164172
"""Get collection."""
@@ -183,6 +191,8 @@ def load_collections(
183191
insert_mode: Optional[Methods] = Methods.insert,
184192
) -> None:
185193
"""Load a collections json or ndjson file."""
194+
self.check_version()
195+
186196
if file is None:
187197
file = "stdin"
188198
conn = self.db.connect()
@@ -555,6 +565,8 @@ def load_items(
555565
chunksize: Optional[int] = 10000,
556566
) -> None:
557567
"""Load items json records."""
568+
self.check_version()
569+
558570
if file is None:
559571
file = "stdin"
560572
t = time.perf_counter()

pypgstac/tests/test_load.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Tests for pypgstac."""
22
import json
33
from pathlib import Path
4+
from unittest import mock
45
from pypgstac.load import Methods, Loader, read_json
56
from psycopg.errors import UniqueViolation
67
import pytest
@@ -339,3 +340,29 @@ def test_load_dehydrated(loader: Loader) -> None:
339340
loader.load_items(
340341
str(dehydrated_items), insert_mode=Methods.insert, dehydrated=True
341342
)
343+
344+
345+
def test_load_collections_incompatible_version(loader: Loader) -> None:
346+
"""Test pypgstac collections loader raises an exception for incompatible version."""
347+
with mock.patch(
348+
"pypgstac.db.PgstacDB.version", new_callable=mock.PropertyMock
349+
) as mock_version:
350+
mock_version.return_value = "dummy"
351+
with pytest.raises(Exception):
352+
loader.load_collections(
353+
str(TEST_COLLECTIONS_JSON),
354+
insert_mode=Methods.insert,
355+
)
356+
357+
358+
def test_load_items_incompatible_version(loader: Loader) -> None:
359+
"""Test pypgstac items loader raises an exception for incompatible version."""
360+
with mock.patch(
361+
"pypgstac.db.PgstacDB.version", new_callable=mock.PropertyMock
362+
) as mock_version:
363+
mock_version.return_value = "dummy"
364+
with pytest.raises(Exception):
365+
loader.load_items(
366+
str(TEST_ITEMS),
367+
insert_mode=Methods.insert,
368+
)

0 commit comments

Comments
 (0)