diff --git a/api-server/app/main.py b/api-server/app/main.py index 9f0756e3..56a86f0c 100644 --- a/api-server/app/main.py +++ b/api-server/app/main.py @@ -6,7 +6,7 @@ from fastapi import FastAPI from contextlib import asynccontextmanager from dotenv import load_dotenv -from motor.motor_asyncio import AsyncIOMotorClient +from pymongo import AsyncMongoClient from fastapi.security import OAuth2PasswordBearer # injecting singletons @@ -39,8 +39,13 @@ async def lifespan(app: FastAPI): logger.info("server starting") # initializing beanie - client = AsyncIOMotorClient(os.getenv("MONGO_URI")) - db = client[os.getenv("MONGO_DATABASE_NAME")] + client = AsyncMongoClient(os.getenv("MONGO_URI")) + + # Get the database name from environment variables. + # If not set, use "default" to avoid errors when accessing client[db_name] + # os.getenv can return None, which is not valid for dictionary-style access + db_name = os.getenv("MONGO_DATABASE_NAME", "exosphere-api-server") + db = client[db_name] await init_beanie(db, document_models=[User, Project, Satellite]) logger.info("beanie dbs initialized") diff --git a/api-server/pyproject.toml b/api-server/pyproject.toml index 1f2e1f31..a74d5997 100644 --- a/api-server/pyproject.toml +++ b/api-server/pyproject.toml @@ -6,7 +6,7 @@ readme = "README.md" requires-python = ">=3.12" dependencies = [ "bcrypt>=4.3.0", - "beanie>=1.30.0", + "beanie>=2.0.0", "docker-image-py>=0.1.13", "email-validator>=2.2.0", "fastapi>=0.115.14", diff --git a/api-server/run.py b/api-server/run.py index edcd515d..a69dcdc8 100644 --- a/api-server/run.py +++ b/api-server/run.py @@ -9,7 +9,6 @@ args = parser.parse_args() load_dotenv() - def serve(): mode = args.mode if mode == "development": diff --git a/api-server/uv.lock b/api-server/uv.lock index dd095624..7a0ba1ca 100644 --- a/api-server/uv.lock +++ b/api-server/uv.lock @@ -51,7 +51,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "bcrypt", specifier = ">=4.3.0" }, - { name = "beanie", specifier = ">=1.30.0" }, + { name = "beanie", specifier = ">=2.0.0" }, { name = "docker-image-py", specifier = ">=0.1.13" }, { name = "email-validator", specifier = ">=2.2.0" }, { name = "fastapi", specifier = ">=0.115.14" }, @@ -127,18 +127,18 @@ wheels = [ [[package]] name = "beanie" -version = "1.30.0" +version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "lazy-model" }, - { name = "motor" }, { name = "pydantic" }, + { name = "pymongo" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/46/1c/feee03924a8f255d76236a8f71fde310da52ab4e03abd1254cd9309d73e1/beanie-1.30.0.tar.gz", hash = "sha256:33ead17ff2742144c510b4b24e188f6b316dd1b614d86b57a3cfe20bc7b768c9", size = 176743, upload-time = "2025-06-10T19:48:01.119Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/c3/21152df5974f6b690a74a990a1b706102ad694b56bd2a59f7903b6424696/beanie-2.0.0.tar.gz", hash = "sha256:07982e42618cea01722f62d2b4028514a508a2c2c2c71ff85f07f6009112ffb3", size = 169854, upload-time = "2025-07-20T06:55:27.515Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/f2/adfea21c19d73ad2e90f5346c166523dadc33493a0b398d543eeb9b67e7a/beanie-1.30.0-py3-none-any.whl", hash = "sha256:385f1b850b36a19dd221aeb83e838c83ec6b47bbf6aeac4e5bf8b8d40bfcfe51", size = 87140, upload-time = "2025-06-10T19:47:59.066Z" }, + { url = "https://files.pythonhosted.org/packages/47/36/c40577bc8e3564639b89db32aff1e9e8af14c990e3a7ed85a79b74ec4b78/beanie-2.0.0-py3-none-any.whl", hash = "sha256:0d5c0e0de09f2a316c74d17bbba1ceb68ebcbfd3046ae5be69038b2023682372", size = 87051, upload-time = "2025-07-20T06:55:25.944Z" }, ] [[package]] @@ -295,26 +295,14 @@ wheels = [ [[package]] name = "lazy-model" -version = "0.2.0" +version = "0.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/9e/c60681be72f03845c209a86d5ce0404540c8d1818fc29bc64fc95220de5c/lazy-model-0.2.0.tar.gz", hash = "sha256:57c0e91e171530c4fca7aebc3ac05a163a85cddd941bf7527cc46c0ddafca47c", size = 8152, upload-time = "2023-09-10T02:29:57.974Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/13/e37962a20f7051b2d6d286c3feb85754f9ea8c4cac302927971e910cc9f6/lazy_model-0.2.0-py3-none-any.whl", hash = "sha256:5a3241775c253e36d9069d236be8378288a93d4fc53805211fd152e04cc9c342", size = 13719, upload-time = "2023-09-10T02:29:59.067Z" }, -] - -[[package]] -name = "motor" -version = "3.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pymongo" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/93/ae/96b88362d6a84cb372f7977750ac2a8aed7b2053eed260615df08d5c84f4/motor-3.7.1.tar.gz", hash = "sha256:27b4d46625c87928f331a6ca9d7c51c2f518ba0e270939d395bc1ddc89d64526", size = 280997, upload-time = "2025-05-14T18:56:33.653Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/fa/158a07f8c25c76568534328bf3ab8d16dba92abcb27cc9cfd84bbc652815/lazy-model-0.3.0.tar.gz", hash = "sha256:e425a189897dc926cc79af196a7cb385d1fd3ac7a7bccb4436fc93661f63b811", size = 8172, upload-time = "2025-04-22T17:03:33.923Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/9a/35e053d4f442addf751ed20e0e922476508ee580786546d699b0567c4c67/motor-3.7.1-py3-none-any.whl", hash = "sha256:8a63b9049e38eeeb56b4fdd57c3312a6d1f25d01db717fe7d82222393c410298", size = 74996, upload-time = "2025-05-14T18:56:31.665Z" }, + { url = "https://files.pythonhosted.org/packages/74/a4/55bb305df9fe0d343ff8f0dd4da25b2cc33ba65f8596238aa7a4ecbe9777/lazy_model-0.3.0-py3-none-any.whl", hash = "sha256:67c112cad3fbc1816d32c070bf3b3ac1f48aefeb4e46e9eb70e12acc92c6859d", size = 13719, upload-time = "2025-04-22T17:03:34.764Z" }, ] [[package]]