landing, links, references, structures, versions, ) from optimade.server.routers.utils import BASE_URL_PREFIXES, JSONAPIResponse if config_warnings: LOGGER.warn( f"Invalid config file or no config file provided, running server with default settings. Errors: " f"{[warnings.formatwarning(w.message, w.category, w.filename, w.lineno, '') for w in config_warnings]}" ) else: LOGGER.info( f"Loaded settings from {os.getenv('OPTIMADE_CONFIG_FILE', DEFAULT_CONFIG_FILE_PATH)}." ) if CONFIG.debug: # pragma: no cover LOGGER.info("DEBUG MODE") app = FastAPI( root_path=CONFIG.root_path, title="OPTIMADE API", description= (f"""The [Open Databases Integration for Materials Design (OPTIMADE) consortium](https://www.optimade.org/) aims to make materials databases interoperational by developing a common REST API. This specification is generated using [`optimade-python-tools`](https://github.com/Materials-Consortia/optimade-python-tools/tree/v{__version__}) v{__version__}.""" ), version=__api_version__, docs_url=f"{BASE_URL_PREFIXES['major']}/extensions/docs",
from typing import Dict, Tuple, List, Any from optimade.filterparser import LarkParser from optimade.filtertransformers.mongo import MongoTransformer from optimade.models import EntryResource from optimade.server.config import CONFIG from optimade.server.entry_collections import EntryCollection from optimade.server.logger import LOGGER from optimade.server.mappers import BaseResourceMapper if CONFIG.database_backend.value == "mongodb": from pymongo import MongoClient LOGGER.info("Using: Real MongoDB (pymongo)") elif CONFIG.database_backend.value == "mongomock": from mongomock import MongoClient LOGGER.info("Using: Mock MongoDB (mongomock)") if CONFIG.database_backend.value in ("mongomock", "mongodb"): CLIENT = MongoClient(CONFIG.mongo_uri) class MongoCollection(EntryCollection): """Class for querying MongoDB collections (implemented by either pymongo or mongomock) containing serialized [`EntryResource`][optimade.models.entries.EntryResource]s objects. """ def __init__( self,
from optimade.server.middleware import ( AddWarnings, CheckWronglyVersionedBaseUrls, EnsureQueryParamIntegrity, HandleApiHint, ) from optimade.server.routers import index_info, links, versions from optimade.server.routers.utils import BASE_URL_PREFIXES if CONFIG.config_file is None: LOGGER.warn( f"Invalid config file or no config file provided, running server with default settings. Errors: " f"{[warnings.formatwarning(w.message, w.category, w.filename, w.lineno, '') for w in config_warnings]}" ) else: LOGGER.info(f"Loaded settings from {CONFIG.config_file}.") if CONFIG.debug: # pragma: no cover LOGGER.info("DEBUG MODE") app = FastAPI( title="OPTIMADE API - Index meta-database", description= (f"""The [Open Databases Integration for Materials Design (OPTIMADE) consortium](https://www.optimade.org/) aims to make materials databases interoperational by developing a common REST API. This is the "special" index meta-database. This specification is generated using [`optimade-python-tools`](https://github.com/Materials-Consortia/optimade-python-tools/tree/v{__version__}) v{__version__}.""" ), version=__api_version__, docs_url=f"{BASE_URL_PREFIXES['major']}/extensions/docs", redoc_url=f"{BASE_URL_PREFIXES['major']}/extensions/redoc",
from optimade.filtertransformers.elasticsearch import ElasticTransformer from optimade.server.config import CONFIG from optimade.server.logger import LOGGER from optimade.models import EntryResource from optimade.server.mappers import BaseResourceMapper from optimade.server.entry_collections import EntryCollection if CONFIG.database_backend.value == "elastic": from elasticsearch import Elasticsearch from elasticsearch.helpers import bulk from elasticsearch_dsl import Search CLIENT = Elasticsearch(hosts=CONFIG.elastic_hosts) LOGGER.info("Using: Elasticsearch backend at %s", CONFIG.elastic_hosts) class ElasticCollection(EntryCollection): def __init__( self, name: str, resource_cls: EntryResource, resource_mapper: BaseResourceMapper, client: Optional["Elasticsearch"] = None, ): """Initialize the ElasticCollection for the given parameters. Parameters: name: The name of the collection. resource_cls: The type of entry resource that is stored by the collection.