Skip to content

bulk load of items not working (?) #22

@keul

Description

@keul

Using the vanilla docker-compose provided by the project, and trying to use the /collections/{collection_id}/bulk_items endpoint on the stac_fastapi.sqlalchemy service.

For what I see from the swagger documentation, the POST payload must be something like:

{
  "items": {}
}

…and inspecting the code I guess items should a a structure of "item-id": { definition of item }

But I get an error:

stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/starlette/middleware/exceptions.py", line 64, in __call__
stac-fastapi-sqlalchemy               |     await self.app(scope, receive, sender)
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
stac-fastapi-sqlalchemy               |     raise e
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
stac-fastapi-sqlalchemy               |     await self.app(scope, receive, send)
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 680, in __call__
stac-fastapi-sqlalchemy               |     await route.handle(scope, receive, send)
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 275, in handle
stac-fastapi-sqlalchemy               |     await self.app(scope, receive, send)
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 65, in app
stac-fastapi-sqlalchemy               |     response = await func(request)
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 235, in app
stac-fastapi-sqlalchemy               |     raw_response = await run_endpoint_function(
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 161, in run_endpoint_function
stac-fastapi-sqlalchemy               |     return await dependant.call(**values)
stac-fastapi-sqlalchemy               |   File "/app/stac_fastapi/api/stac_fastapi/api/routes.py", line 68, in _endpoint
stac-fastapi-sqlalchemy               |     await func(request_data, request=request), response_class
stac-fastapi-sqlalchemy               |   File "/app/stac_fastapi/api/stac_fastapi/api/routes.py", line 32, in run
stac-fastapi-sqlalchemy               |     return await run_in_threadpool(func, *args, **kwargs)
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
stac-fastapi-sqlalchemy               |     return await anyio.to_thread.run_sync(func, *args)
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/anyio/to_thread.py", line 31, in run_sync
stac-fastapi-sqlalchemy               |     return await get_asynclib().run_sync_in_worker_thread(
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
stac-fastapi-sqlalchemy               |     return await future
stac-fastapi-sqlalchemy               |   File "/usr/local/lib/python3.8/site-packages/anyio/_backends/_asyncio.py", line 867, in run
stac-fastapi-sqlalchemy               |     result = context.run(func, *args)
stac-fastapi-sqlalchemy               |   File "/app/stac_fastapi/sqlalchemy/stac_fastapi/sqlalchemy/transactions.py", line 194, in bulk_item_insert
stac-fastapi-sqlalchemy               |     processed_items = [self._preprocess_item(item) for item in items]
stac-fastapi-sqlalchemy               |   File "/app/stac_fastapi/sqlalchemy/stac_fastapi/sqlalchemy/transactions.py", line 194, in <listcomp>
stac-fastapi-sqlalchemy               |     processed_items = [self._preprocess_item(item) for item in items]
stac-fastapi-sqlalchemy               |   File "/app/stac_fastapi/sqlalchemy/stac_fastapi/sqlalchemy/transactions.py", line 182, in _preprocess_item
stac-fastapi-sqlalchemy               |     db_model = self.item_serializer.stac_to_db(item)
stac-fastapi-sqlalchemy               |   File "/app/stac_fastapi/sqlalchemy/stac_fastapi/sqlalchemy/serializers.py", line 124, in stac_to_db
stac-fastapi-sqlalchemy               |     collection_id=stac_data["collection"],
stac-fastapi-sqlalchemy               | KeyError: 'collection'

I suspect the JSON format is not the proper ones (but I'm using test data from the same project).

In facts, it try to find the "collection" id from the stac_data, but to be honest I think it should load it from the request path parameter.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions