Skip to content

Commit 0a69617

Browse files
feat(brains): api to get all brains
1 parent 8f032a0 commit 0a69617

File tree

7 files changed

+68
-1
lines changed

7 files changed

+68
-1
lines changed

src/adapters/data.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,9 @@ def get_brain(self, name_key: str) -> Brain:
7676
Get a brain from the data client.
7777
"""
7878
return self.data.get_brain(name_key)
79+
80+
def get_brains_list(self) -> List[Brain]:
81+
"""
82+
Get the list of brains from the data client.
83+
"""
84+
return self.data.get_brains_list()

src/adapters/interfaces/data.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,10 @@ def get_brain(self, name_key: str) -> Brain:
8484
Get a brain from the data client.
8585
"""
8686
raise NotImplementedError("get_brain method not implemented")
87+
88+
@abstractmethod
89+
def get_brains_list(self) -> List[Brain]:
90+
"""
91+
Get the list of brains from the data client.
92+
"""
93+
raise NotImplementedError("get_brains_list method not implemented")

src/lib/mongo/client.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,5 +144,13 @@ def get_brain(self, name_key: str) -> Brain:
144144
return None
145145
return Brain(id=str(result["_id"]), name_key=result["name_key"])
146146

147+
def get_brains_list(self) -> List[Brain]:
148+
collection = self.get_collection("brains", "system")
149+
result = collection.find()
150+
return [
151+
Brain(id=str(result["_id"]), name_key=result["name_key"])
152+
for result in result
153+
]
154+
147155

148156
_mongo_client = MongoClient()

src/services/api/app.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from src.services.api.routes.ingest import ingest_router
2020
from src.services.api.routes.retrieve import retrieve_router
2121
from src.services.api.routes.meta import meta_router
22+
from src.services.api.routes.system import system_router
2223

2324

2425
app = FastAPI()
@@ -36,6 +37,7 @@
3637
app.include_router(ingest_router)
3738
app.include_router(retrieve_router)
3839
app.include_router(meta_router)
40+
app.include_router(system_router)
3941

4042
if __name__ == "__main__":
4143
run(app, host="0.0.0.0", port=8000, reload=os.getenv("ENV") == "development")
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
"""
2+
File: /system.py
3+
Created Date: Monday December 1st 2025
4+
Author: Christian Nonis <[email protected]>
5+
-----
6+
Last Modified: Monday December 1st 2025 10:13:27 pm
7+
Modified By: the developer formerly known as Christian Nonis at <[email protected]>
8+
-----
9+
"""
10+
11+
import asyncio
12+
from src.services.data.main import data_adapter
13+
14+
15+
async def get_brains_list():
16+
"""
17+
Get the list of brains.
18+
"""
19+
result = await asyncio.to_thread(data_adapter.get_brains_list)
20+
return result

src/services/api/middlewares/brains.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ async def receive():
5151
status_code=status.HTTP_400_BAD_REQUEST,
5252
content={"detail": "System brain is not allowed to be used."},
5353
)
54-
if not brain_id.isalnum():
54+
if brain_id and not brain_id.isalnum():
5555
return JSONResponse(
5656
status_code=status.HTTP_400_BAD_REQUEST,
5757
content={"detail": "Brain ID must be alphanumeric."},

src/services/api/routes/system.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"""
2+
File: /system.py
3+
Created Date: Monday December 1st 2025
4+
Author: Christian Nonis <[email protected]>
5+
-----
6+
Last Modified: Monday December 1st 2025 10:12:48 pm
7+
Modified By: the developer formerly known as Christian Nonis at <[email protected]>
8+
-----
9+
"""
10+
11+
from fastapi import APIRouter
12+
from src.services.api.controllers.system import (
13+
get_brains_list as get_brains_list_controller,
14+
)
15+
16+
system_router = APIRouter(prefix="/system", tags=["system"])
17+
18+
19+
@system_router.get(path="/brains-list")
20+
async def get_brains_list():
21+
"""
22+
Get the list of brains.
23+
"""
24+
return await get_brains_list_controller()

0 commit comments

Comments
 (0)