Skip to content
Merged
Changes from 2 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
177a48a
prepare dependencies for CollectionSearchExtension and FreeTextExtension
fmigneault May 1, 2025
9a2ffb9
update enabled experimental extensions
fmigneault May 1, 2025
6616793
Merge remote-tracking branch 'origin/main' into more-stac-extensions
fmigneault May 2, 2025
55e72f8
add changes
fmigneault Jun 9, 2025
1cab6ea
fix lint
fmigneault Jun 9, 2025
1a155bb
resolve extension conflicts
fmigneault Jul 7, 2025
7cf889f
remove unused imports
fmigneault Jul 7, 2025
0973afb
Merge remote-tracking branch 'origin/main' into more-stac-extensions
fmigneault Jul 7, 2025
19b6941
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 7, 2025
fa3a777
Update CHANGES.md
fmigneault Jul 7, 2025
7328534
Update CHANGES.md
fmigneault Jul 7, 2025
1887752
fix lint
fmigneault Jul 7, 2025
38fd3f4
Merge branch 'more-stac-extensions' of github.com:crim-ca/stac-app in…
fmigneault Jul 7, 2025
f89b277
Merge branch 'stac-fastapi-6' into more-stac-extensions
fmigneault Jul 16, 2025
21aee0e
use stac-extensions validation (depends on https://github.com/stac-ut…
fmigneault Jul 17, 2025
5ce01b7
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 17, 2025
586ee85
fix free text search extensions (basic and advanced simultaneously)
fmigneault Aug 15, 2025
a58158f
Merge branch 'more-stac-extensions' of github.com:crim-ca/stac-app in…
fmigneault Aug 15, 2025
4c4dbc5
update changelog
fmigneault Aug 15, 2025
6da300b
Merge branch 'main' into more-stac-extensions
fmigneault Aug 15, 2025
d0ef01d
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 15, 2025
fb9d835
add changelog entry
fmigneault Aug 15, 2025
f97347e
fix pre-commit linting
fmigneault Aug 15, 2025
fa15226
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions src/stac_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,38 @@
import time
from typing import Optional, Type, cast

import attr
import asyncpg
from buildpg import render
from fastapi import APIRouter, HTTPException, Request, Response
from fastapi.responses import ORJSONResponse
from stac_fastapi.api.app import StacApi
from stac_fastapi.api.models import (
EmptyRequest,
ItemCollectionUri,
create_request_model,
create_get_request_model,
create_post_request_model
)
from stac_fastapi.types.stac import ItemCollection
from stac_fastapi.types.search import APIRequest
from stac_fastapi.extensions.core import (
CollectionSearchExtension,
CollectionSearchFilterExtension,
CollectionSearchPostExtension,
FreeTextAdvancedExtension,
FieldsExtension,
FilterExtension,
ItemCollectionFilterExtension,
PaginationExtension,
QueryExtension,
SortExtension,
TokenPaginationExtension,
TransactionExtension,
)
from stac_fastapi.extensions.core.collection_search.client import BaseCollectionSearchClient
from stac_fastapi.extensions.core.collection_search.request import BaseCollectionSearchPostRequest
from stac_fastapi.extensions.core.free_text.request import FreeTextAdvancedExtensionPostRequest
from stac_fastapi.pgstac.config import Settings
from stac_fastapi.pgstac.core import CoreCrudClient
from stac_fastapi.pgstac.db import close_db_connection, connect_to_db
Expand All @@ -49,6 +60,25 @@
mixins=[TokenPaginationExtension().GET],
)
)
collections_get_request_model = cast(
Type[APIRequest],
create_request_model(
"CollectionsURI",
base_model=EmptyRequest,
mixins=[TokenPaginationExtension().GET, PaginationExtension().GET],
)
)

class CollectionSearchPostRequest(BaseCollectionSearchPostRequest, FreeTextAdvancedExtensionPostRequest):
pass


@attr.s
class CollectionSearchPostClient(BaseCollectionSearchClient):
def post_all_collections(
self, search_request: CollectionSearchPostRequest, **kwargs
) -> ItemCollection:
return search_request.model_dump()

extensions = [
TransactionExtension(
Expand All @@ -59,7 +89,13 @@
QueryExtension(),
SortExtension(),
FieldsExtension(),
FreeTextAdvancedExtension(),
# FIXME: following 'Filter' variants are conflicting (duplicate GET model) - what are their differences???
FilterExtension(client=FiltersClient()),
#ItemCollectionFilterExtension(),
#CollectionSearchFilterExtension(),
#CollectionSearchExtension(), # only GET
CollectionSearchPostExtension(client=CollectionSearchPostClient(), settings=settings), # GET + POST
TokenPaginationExtension(),
PaginationExtension(),
]
Expand All @@ -76,6 +112,7 @@
client=CoreCrudClient(pgstac_search_model=post_request_model),
search_get_request_model=create_get_request_model(extensions),
search_post_request_model=post_request_model,
collections_get_request_model=collections_get_request_model,
items_get_request_model=items_get_request_model,
response_class=ORJSONResponse,
title=(os.getenv("STAC_FASTAPI_TITLE") or "Data Analytics for Canadian Climate Services STAC API"),
Expand Down