Skip to content

Commit

Permalink
Moving models to correct locations.
Browse files Browse the repository at this point in the history
  • Loading branch information
rhysrevans3 committed Aug 28, 2024
1 parent 0ecf3e5 commit 47a0b48
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 79 deletions.
Original file line number Diff line number Diff line change
@@ -1,52 +1,20 @@
"""Transaction extension."""

from typing import Any, Dict, List, Literal, Optional, Type, Union
from typing import List, Literal, Optional, Type, Union

import attr
from fastapi import APIRouter, Body, FastAPI, Header
from stac_pydantic import Collection, Item, ItemCollection
from stac_pydantic.shared import BBox, MimeTypes
from stac_pydantic.shared import MimeTypes
from starlette.responses import JSONResponse, Response
from typing_extensions import Annotated, TypedDict
from typing_extensions import Annotated

from stac_fastapi.api.models import CollectionUri, ItemUri
from stac_fastapi.api.routes import create_async_endpoint
from stac_fastapi.types.config import ApiSettings
from stac_fastapi.types.core import AsyncBaseTransactionsClient, BaseTransactionsClient
from stac_fastapi.types.extension import ApiExtension


class PartialCollection(TypedDict, total=False):
"""Partial STAC Collection."""

type: Optional[str]
stac_version: Optional[str]
stac_extensions: Optional[List[str]]
id: Optional[str]
title: Optional[str]
description: Optional[str]
links: List[Dict[str, Any]]
keywords: Optional[List[str]]
license: Optional[str]
providers: Optional[List[Dict[str, Any]]]
extent: Optional[Dict[str, Any]]
summaries: Optional[Dict[str, Any]]
assets: Optional[Dict[str, Any]]


class PartialItem(TypedDict, total=False):
"""Partial STAC Item."""

type: Optional[Literal["Feature"]]
stac_version: Optional[str]
stac_extensions: Optional[List[str]]
id: Optional[str]
geometry: Optional[Dict[str, Any]]
bbox: Optional[BBox]
properties: Optional[Dict[str, Any]]
links: Optional[List[Dict[str, Any]]]
assets: Optional[Dict[str, Any]]
collection: Optional[str]
from stac_fastapi.types.stac import PartialCollection, PartialItem, PatchOperation


@attr.s
Expand All @@ -56,39 +24,6 @@ class PostItem(CollectionUri):
item: Annotated[Union[Item, ItemCollection], Body()] = attr.ib(default=None)


@attr.s
class PatchAddReplaceTest:
"""Add, Replace or Test Operation."""

path: str = attr.ib()
op: Literal["add", "replace", "test"] = attr.ib()
value: Any = attr.ib()


@attr.s
class PatchRemove:
"""Remove Operation."""

path: str = attr.ib()
op: Literal["remove"] = attr.ib()


@attr.s
class PatchMoveCopy:
"""Move or Copy Operation."""

path: str = attr.ib()
op: Literal["move", "copy"] = attr.ib()

def __attrs_init__(self, *args, **kwargs):
"""Init function to add 'from' field."""
super().__init__(*args, **kwargs)
self.__setattr__("from", kwargs["from"])


PatchOperation = Union[PatchAddReplaceTest, PatchMoveCopy, PatchRemove]


@attr.s
class PutItem(ItemUri):
"""Update Item."""
Expand Down
14 changes: 10 additions & 4 deletions stac_fastapi/extensions/tests/test_transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from stac_fastapi.extensions.core import TransactionExtension
from stac_fastapi.types.config import ApiSettings
from stac_fastapi.types.core import BaseCoreClient, BaseTransactionsClient
from stac_fastapi.types.transaction import PatchOperation
from stac_fastapi.types.stac import PatchOperation


class DummyCoreClient(BaseCoreClient):
Expand Down Expand Up @@ -145,7 +145,9 @@ def test_merge_patch_item(client: TestClient, item: Item) -> None:


def test_json_patch_item(client: TestClient) -> None:
operations = [{"op": "add", "path": "properties.new_prop", "value": "new_prop_value"}]
operations = [
{"op": "add", "path": "properties.new_prop", "value": "new_prop_value"}
]
headers = {"Content-Type": "application/json-patch+json"}
response = client.patch(
"/collections/a-collection/items/an-item",
Expand Down Expand Up @@ -189,7 +191,9 @@ def test_merge_patch_collection(client: TestClient, collection: Collection) -> N


def test_json_patch_collection(client: TestClient) -> None:
operations = [{"op": "add", "path": "summaries.new_prop", "value": "new_prop_value"}]
operations = [
{"op": "add", "path": "summaries.new_prop", "value": "new_prop_value"}
]
headers = {"Content-Type": "application/json-patch+json"}
response = client.patch(
"/collections/a-collection/items/an-item",
Expand Down Expand Up @@ -269,7 +273,9 @@ def collection() -> Collection:
"description": "A test collection",
"extent": {
"spatial": {"bbox": [[-180, -90, 180, 90]]},
"temporal": {"interval": [["2000-01-01T00:00:00Z", "2024-01-01T00:00:00Z"]]},
"temporal": {
"interval": [["2000-01-01T00:00:00Z", "2024-01-01T00:00:00Z"]]
},
},
"links": [],
"assets": {},
Expand Down
9 changes: 3 additions & 6 deletions stac_fastapi/types/stac_fastapi/types/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,12 @@
from stac_fastapi.types import stac
from stac_fastapi.types.config import ApiSettings
from stac_fastapi.types.conformance import BASE_CONFORMANCE_CLASSES
from stac_fastapi.types.extension import (
ApiExtension,
PartialCollection,
PartialItem,
PatchOperation,
)
from stac_fastapi.types.extension import ApiExtension
from stac_fastapi.types.requests import get_base_url
from stac_fastapi.types.rfc3339 import DateTimeType
from stac_fastapi.types.search import BaseSearchPostRequest
from stac_fastapi.types.stac import (PartialCollection, PartialItem,
PatchOperation)

__all__ = [
"NumType",
Expand Down
67 changes: 67 additions & 0 deletions stac_fastapi/types/stac_fastapi/types/stac.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from typing import Any, Dict, List, Literal, Optional, Union

import attr
from stac_pydantic.shared import BBox
from typing_extensions import TypedDict

Expand Down Expand Up @@ -74,3 +75,69 @@ class Collections(TypedDict, total=False):

collections: List[Collection]
links: List[Dict[str, Any]]


class PartialCollection(TypedDict, total=False):
"""Partial STAC Collection."""

type: Optional[str]
stac_version: Optional[str]
stac_extensions: Optional[List[str]]
id: Optional[str]
title: Optional[str]
description: Optional[str]
links: List[Dict[str, Any]]
keywords: Optional[List[str]]
license: Optional[str]
providers: Optional[List[Dict[str, Any]]]
extent: Optional[Dict[str, Any]]
summaries: Optional[Dict[str, Any]]
assets: Optional[Dict[str, Any]]


class PartialItem(TypedDict, total=False):
"""Partial STAC Item."""

type: Optional[Literal["Feature"]]
stac_version: Optional[str]
stac_extensions: Optional[List[str]]
id: Optional[str]
geometry: Optional[Dict[str, Any]]
bbox: Optional[BBox]
properties: Optional[Dict[str, Any]]
links: Optional[List[Dict[str, Any]]]
assets: Optional[Dict[str, Any]]
collection: Optional[str]


@attr.s
class PatchAddReplaceTest:
"""Add, Replace or Test Operation."""

path: str = attr.ib()
op: Literal["add", "replace", "test"] = attr.ib()
value: Any = attr.ib()


@attr.s
class PatchRemove:
"""Remove Operation."""

path: str = attr.ib()
op: Literal["remove"] = attr.ib()


@attr.s
class PatchMoveCopy:
"""Move or Copy Operation."""

path: str = attr.ib()
op: Literal["move", "copy"] = attr.ib()

def __attrs_init__(self, *args, **kwargs):
"""Init function to add 'from' field."""
super().__init__(*args, **kwargs)
self.__setattr__("from", kwargs["from"])


PatchOperation = Union[PatchAddReplaceTest, PatchMoveCopy, PatchRemove]

0 comments on commit 47a0b48

Please sign in to comment.