Skip to content

Commit

Permalink
reorg
Browse files Browse the repository at this point in the history
  • Loading branch information
jonhealy1 committed Jan 30, 2024
1 parent 0cc0c33 commit 022dcb7
Show file tree
Hide file tree
Showing 9 changed files with 65 additions and 35 deletions.
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ repos:
# E501 let black handle all line length decisions
# W503 black conflicts with "line break before operator" rule
# E203 black conflicts with "whitespace before ':'" rule
'--ignore=E501,W503,E203,C901' ]
'--ignore=E501,W503,E203,C901,E402' ]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.991
hooks:
Expand Down
44 changes: 28 additions & 16 deletions stac_fastapi/common/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,6 @@
import attr
import orjson
import stac_pydantic
from common.base_database_logic import BaseDatabaseLogic
from common.models.links import PagingLinks
from elastic_search import serializers
from elastic_search.serializers import CollectionSerializer, ItemSerializer
from elastic_search.session import Session
from fastapi import HTTPException, Request
from overrides import overrides
from pydantic import ValidationError
Expand All @@ -24,6 +19,11 @@
from stac_pydantic.links import Relations
from stac_pydantic.shared import MimeTypes

# from common.base_database_logic import BaseDatabaseLogic
from stac_fastapi.common.models.links import PagingLinks
from stac_fastapi.elastic_search import serializers
from stac_fastapi.elastic_search.serializers import CollectionSerializer, ItemSerializer
from stac_fastapi.elastic_search.session import Session
from stac_fastapi.extensions.third_party.bulk_transactions import (
BaseBulkTransactionsClient,
BulkTransactionMethod,
Expand Down Expand Up @@ -66,12 +66,12 @@ class CoreClient(AsyncBaseCoreClient):

session: Session = attr.ib(default=attr.Factory(Session.create_from_env))
item_serializer: Type[serializers.ItemSerializer] = attr.ib(
default=serializers.ItemSerializer
default=serializers.ItemSerializer # type: ignore
)
collection_serializer: Type[serializers.CollectionSerializer] = attr.ib(
default=serializers.CollectionSerializer
default=serializers.CollectionSerializer # type: ignore
)
database: BaseDatabaseLogic = attr.ib(init=False)
post_request_model = attr.ib(default=BaseSearchPostRequest)

def __attrs_post_init__(self):
"""
Expand All @@ -84,11 +84,15 @@ def __attrs_post_init__(self):
"""
try:
# Dynamically import the database logic based on installed package
database_module = importlib.import_module("elastic_search.database_logic")
database_module = importlib.import_module(
"stac_fastapi.elastic_search.database_logic"
)
DatabaseLogicClass = getattr(database_module, "DatabaseLogic")
except ImportError:
# Fall back to OpenSearch if Elasticsearch is not available
database_module = importlib.import_module("open_search.database_logic")
database_module = importlib.import_module(
"stac_fastapi.open_search.database_logic"
)
DatabaseLogicClass = getattr(database_module, "DatabaseLogic")

self.database = DatabaseLogicClass()
Expand Down Expand Up @@ -562,7 +566,7 @@ class TransactionsClient(AsyncBaseTransactionsClient):
"""Transactions extension specific CRUD operations."""

session: Session = attr.ib(default=attr.Factory(Session.create_from_env))
database: BaseDatabaseLogic = attr.ib(init=False)
# database: BaseDatabaseLogic = attr.ib(init=False)

def __attrs_post_init__(self):
"""
Expand All @@ -575,11 +579,15 @@ def __attrs_post_init__(self):
"""
try:
# Dynamically import the database logic based on installed package
database_module = importlib.import_module("elastic_search.database_logic")
database_module = importlib.import_module(
"stac_fastapi.elastic_search.database_logic"
)
DatabaseLogicClass = getattr(database_module, "DatabaseLogic")
except ImportError:
# Fall back to OpenSearch if Elasticsearch is not available
database_module = importlib.import_module("opensearch.database_logic")
database_module = importlib.import_module(
"stac_fastapi.opensearch.database_logic"
)
DatabaseLogicClass = getattr(database_module, "DatabaseLogic")

self.database = DatabaseLogicClass()
Expand Down Expand Up @@ -752,7 +760,7 @@ class BulkTransactionsClient(BaseBulkTransactionsClient):
"""

session: Session = attr.ib(default=attr.Factory(Session.create_from_env))
database: BaseDatabaseLogic = attr.ib(init=False)
# database: BaseDatabaseLogic = attr.ib(init=False)

def __attrs_post_init__(self):
"""
Expand All @@ -765,11 +773,15 @@ def __attrs_post_init__(self):
"""
try:
# Dynamically import the database logic based on installed package
database_module = importlib.import_module("elastic_search.database_logic")
database_module = importlib.import_module(
"stac_fastapi.elastic_search.database_logic"
)
DatabaseLogicClass = getattr(database_module, "DatabaseLogic")
except ImportError:
# Fall back to OpenSearch if Elasticsearch is not available
database_module = importlib.import_module("opensearch.database_logic")
database_module = importlib.import_module(
"stac_fastapi.opensearch.database_logic"
)
DatabaseLogicClass = getattr(database_module, "DatabaseLogic")

self.database = DatabaseLogicClass()
Expand Down
11 changes: 7 additions & 4 deletions stac_fastapi/elastic_search/app.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
"""FastAPI application."""
from elastic_search.config import ElasticsearchSettings
from elastic_search.database_logic import create_collection_index
from elastic_search.session import Session
import sys

from stac_fastapi.api.app import StacApi
from stac_fastapi.api.models import create_get_request_model, create_post_request_model
Expand All @@ -12,6 +10,9 @@
TransactionsClient,
)
from stac_fastapi.common.extensions import QueryExtension
from stac_fastapi.elastic_search.config import ElasticsearchSettings
from stac_fastapi.elastic_search.database_logic import create_collection_index
from stac_fastapi.elastic_search.session import Session
from stac_fastapi.extensions.core import (
ContextExtension,
FieldsExtension,
Expand All @@ -22,6 +23,8 @@
)
from stac_fastapi.extensions.third_party import BulkTransactionExtension

print("API sys.path:", sys.path)

settings = ElasticsearchSettings()
session = Session.create_from_settings(settings)

Expand All @@ -46,7 +49,7 @@
api = StacApi(
settings=settings,
extensions=extensions,
client=CoreClient(session=session),
client=CoreClient(session=session, post_request_model=post_request_model),
search_get_request_model=create_get_request_model(extensions),
search_post_request_model=post_request_model,
)
Expand Down
16 changes: 9 additions & 7 deletions stac_fastapi/elastic_search/database_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,16 @@
from typing import Any, Dict, Iterable, List, Optional, Protocol, Tuple, Type, Union

import attr
from common.extensions import filter
from elastic_search import serializers
from elastic_search.config import AsyncElasticsearchSettings
from elastic_search.config import ElasticsearchSettings as SyncElasticsearchSettings
from elastic_search.utilities import bbox2polygon
from elasticsearch_dsl import Q, Search

from elasticsearch import exceptions, helpers # type: ignore
from stac_fastapi.common.extensions import filter
from stac_fastapi.elastic_search import serializers
from stac_fastapi.elastic_search.config import AsyncElasticsearchSettings
from stac_fastapi.elastic_search.config import (
ElasticsearchSettings as SyncElasticsearchSettings,
)
from stac_fastapi.elastic_search.utilities import bbox2polygon
from stac_fastapi.types.errors import ConflictError, NotFoundError
from stac_fastapi.types.stac import Collection, Item

Expand Down Expand Up @@ -281,10 +283,10 @@ class DatabaseLogic:
sync_client = SyncElasticsearchSettings().create_client

item_serializer: Type[serializers.ItemSerializer] = attr.ib(
default=serializers.ItemSerializer
default=serializers.ItemSerializer # type: ignore
)
collection_serializer: Type[serializers.CollectionSerializer] = attr.ib(
default=serializers.CollectionSerializer
default=serializers.CollectionSerializer # type: ignore
)

"""CORE LOGIC"""
Expand Down
2 changes: 1 addition & 1 deletion stac_fastapi/elastic_search/pytest.ini
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[pytest]
testpaths = tests
testpaths = elastic_search/tests
addopts = -sv
asyncio_mode = auto
2 changes: 1 addition & 1 deletion stac_fastapi/elastic_search/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
from typing import Any

import attr
from common.datetime_utils import now_to_rfc3339_str

from stac_fastapi.common.datetime_utils import now_to_rfc3339_str
from stac_fastapi.types import stac as stac_types
from stac_fastapi.types.links import CollectionLinks, ItemLinks, resolve_links

Expand Down
6 changes: 4 additions & 2 deletions stac_fastapi/elastic_search/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,14 @@
url="https://github.com/stac-utils/stac-fastapi-elasticsearch",
license="MIT",
packages=find_namespace_packages(
include=["elasticsearch", "elasticsearch.*", "common", "common.*"],
include=["elastic_search", "elastic_search.*", "common", "common.*"],
exclude=["tests", "scripts"],
),
zip_safe=False,
install_requires=install_requires,
tests_require=extra_reqs["dev"],
extras_require=extra_reqs,
entry_points={"console_scripts": ["stac-fastapi-elasticsearch=app:run"]},
entry_points={
"console_scripts": ["stac-fastapi-elasticsearch=elastic_search.app:run"]
},
)
15 changes: 13 additions & 2 deletions stac_fastapi/elastic_search/tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import sys

sys.path.insert(0, "/app")

import asyncio
import copy
import json
Expand All @@ -6,14 +10,18 @@

import pytest
import pytest_asyncio
from common.core import BulkTransactionsClient, CoreClient, TransactionsClient
from common.extensions import QueryExtension
from elastic_search.config import AsyncElasticsearchSettings
from elastic_search.database_logic import create_collection_index
from httpx import AsyncClient

from stac_fastapi.api.app import StacApi
from stac_fastapi.api.models import create_get_request_model, create_post_request_model
from stac_fastapi.common.core import (
BulkTransactionsClient,
CoreClient,
TransactionsClient,
)
from stac_fastapi.common.extensions import QueryExtension
from stac_fastapi.extensions.core import ( # FieldsExtension,
ContextExtension,
FieldsExtension,
Expand All @@ -24,6 +32,9 @@
)
from stac_fastapi.types.config import Settings

# # Assuming your tests are in the 'tests' directory at the same level as 'stac_fastapi'
# sys.path.append(str(Path(__file__).parent.parent))

DATA_DIR = os.path.join(os.path.dirname(__file__), "data")


Expand Down
2 changes: 1 addition & 1 deletion stac_fastapi/elastic_search/tests/resources/test_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
import ciso8601
import pystac
import pytest
from common.core import CoreClient
from common.datetime_utils import now_to_rfc3339_str
from geojson_pydantic.geometries import Polygon
from pystac.utils import datetime_to_str

from stac_fastapi.common.core import CoreClient
from stac_fastapi.types.core import LandingPageMixin

from ..conftest import create_item, refresh_indices
Expand Down

0 comments on commit 022dcb7

Please sign in to comment.