diff --git a/stac_api/app.py b/stac_api/app.py index ebd940a5f..7354726c9 100644 --- a/stac_api/app.py +++ b/stac_api/app.py @@ -1,4 +1,4 @@ -from fastapi import FastAPI +from fastapi import FastAPI, APIRouter from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker @@ -9,11 +9,14 @@ app = FastAPI() app.debug = settings.DEBUG -app.include_router(mgmt.router) -app.include_router(conformance.router) -app.include_router(collection.router) -app.include_router(item.router) +stac_router = APIRouter() +stac_router.include_router(conformance.router) +stac_router.include_router(collection.router) +stac_router.include_router(item.router) + +app.include_router(mgmt.router) +app.include_router(stac_router) @app.on_event("startup") async def on_startup(): diff --git a/stac_api/clients/collection_crud.py b/stac_api/clients/collection_crud.py index fa1456083..addd09e38 100644 --- a/stac_api/clients/collection_crud.py +++ b/stac_api/clients/collection_crud.py @@ -4,6 +4,7 @@ from fastapi import Depends from sqlalchemy.orm import Session +from sqlalchemy.sql import func from sqlakeyset import get_page, Page from .base_crud import BaseCrudClient @@ -34,14 +35,15 @@ def get_item_collection( ) -> Tuple[Page, int]: """Read an item collection from the database""" try: - collection_children = ( + query = ( self.lookup_id(collection_id) .first() .children.order_by(database.Item.datetime.desc(), database.Item.id) ) - count = collection_children.count() + count_query = query.statement.with_only_columns([func.count()]).order_by(None) + count = query.session.execute(count_query).scalar() token = self.pagination_client.get(token) if token else token - page = get_page(collection_children, per_page=limit, page=(token or False)) + page = get_page(query, per_page=limit, page=(token or False)) # Create dynamic attributes for each page page.next = ( self.pagination_client.insert(keyset=page.paging.bookmark_next) diff --git a/stac_api/clients/item_crud.py b/stac_api/clients/item_crud.py index 385d8dac4..0fffb1d94 100644 --- a/stac_api/clients/item_crud.py +++ b/stac_api/clients/item_crud.py @@ -6,6 +6,7 @@ import geoalchemy2 as ga import sqlalchemy as sa from sqlalchemy.orm import Session +from sqlalchemy.sql import func from sqlakeyset import get_page, Page from .base_crud import BaseCrudClient @@ -110,7 +111,8 @@ def stac_search(self, search_request: schemas.STACSearch) -> Tuple[Page, int]: query = query.filter(op.operator(field, value)) try: - count = query.count() + count_query = query.statement.with_only_columns([func.count()]).order_by(None) + count = query.session.execute(count_query).scalar() page = get_page(query, per_page=search_request.limit, page=token) # Create dynamic attributes for each page page.next = ( diff --git a/stac_api/resources/conformance.py b/stac_api/resources/conformance.py index 7889c94b2..67d7c0511 100644 --- a/stac_api/resources/conformance.py +++ b/stac_api/resources/conformance.py @@ -19,7 +19,7 @@ def landing_page( ): resp = LandingPage( title="Arturo STAC API", - description="Arturo raster datastore", + description="Arturo STAC API", links=[ Link(rel=Relations.self, type=MimeTypes.json, href=base_url), Link( diff --git a/stac_api/resources/item.py b/stac_api/resources/item.py index 46e3c912f..67bcaa640 100644 --- a/stac_api/resources/item.py +++ b/stac_api/resources/item.py @@ -298,7 +298,6 @@ def search_items_get( query: Optional[str] = Query(None), token: Optional[str] = None, fields: Optional[List[str]] = Depends(parse_list_factory("fields")), - cloudfront_ttl: Optional[int] = 2628000, sortby: Optional[str] = Depends(parse_list_factory("sortby")), crud_client: ItemCrudClient = Depends(item_crud_client_factory), base_url: str = Depends(discover_base_url), @@ -310,7 +309,6 @@ def search_items_get( "bbox": bbox, "limit": limit, "token": token, - "cloudfront_ttl": cloudfront_ttl, "query": json.loads(query) if query else query, } if datetime: