Skip to content

Commit d1d795b

Browse files
committed
migrate over projects and tests
1 parent 11a4860 commit d1d795b

File tree

5 files changed

+459
-26
lines changed

5 files changed

+459
-26
lines changed

backend/app/main.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import logging
22

33
import uvicorn
4+
from beanie import init_beanie
5+
from fastapi import APIRouter, Depends, FastAPI
6+
from fastapi.middleware.cors import CORSMiddleware
7+
from motor.motor_asyncio import AsyncIOMotorClient
8+
from pydantic import BaseConfig
9+
410
from app.config import settings
511
from app.keycloak_auth import get_current_username
612
from app.models.authorization import AuthorizationDB
@@ -26,6 +32,7 @@
2632
MetadataDefinitionDB,
2733
MetadataFreezeDB,
2834
)
35+
from app.models.projects import ProjectDB
2936
from app.models.thumbnails import ThumbnailDB, ThumbnailDBViewList, ThumbnailFreezeDB
3037
from app.models.tokens import TokenDB
3138
from app.models.users import ListenerAPIKeyDB, UserAPIKeyDB, UserDB
@@ -48,6 +55,7 @@
4855
files,
4956
folders,
5057
groups,
58+
projects,
5159
jobs,
5260
keycloak,
5361
licenses,
@@ -67,25 +75,19 @@
6775
users,
6876
visualization,
6977
)
70-
7178
# setup loggers
7279
# logging.config.fileConfig('logging.conf', disable_existing_loggers=False)
7380
from app.search.config import indexSettings
7481
from app.search.connect import connect_elasticsearch, create_index
75-
from beanie import init_beanie
76-
from fastapi import APIRouter, Depends, FastAPI
77-
from fastapi.middleware.cors import CORSMiddleware
78-
from motor.motor_asyncio import AsyncIOMotorClient
79-
from pydantic import BaseConfig
8082

8183
logger = logging.getLogger(__name__)
8284

8385
app = FastAPI(
8486
title=settings.APP_NAME,
8587
openapi_url=f"{settings.API_V2_STR}/openapi.json",
8688
description="A cloud native data management framework to support any research domain. Clowder was "
87-
"developed to help researchers and scientists in data intensive domains manage raw data, complex "
88-
"metadata, and automatic data pipelines. ",
89+
"developed to help researchers and scientists in data intensive domains manage raw data, complex "
90+
"metadata, and automatic data pipelines. ",
8991
version="2.0.0-beta.2",
9092
contact={"name": "Clowder", "url": "https://clowderframework.org/"},
9193
license_info={
@@ -228,6 +230,11 @@
228230
tags=["groups"],
229231
dependencies=[Depends(get_current_username)],
230232
)
233+
api_router.include_router(
234+
projects.router,
235+
prefix="/projects",
236+
tags=["projects"],
237+
)
231238
api_router.include_router(
232239
visualization.router,
233240
prefix="/visualizations",
@@ -303,6 +310,7 @@ async def startup_beanie():
303310
UserAPIKeyDB,
304311
ListenerAPIKeyDB,
305312
GroupDB,
313+
ProjectDB,
306314
TokenDB,
307315
ErrorDB,
308316
VisualizationConfigDB,

backend/app/models/projects.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from datetime import datetime
2+
from typing import List, Optional
3+
4+
from beanie import Document, PydanticObjectId
5+
from pydantic import BaseModel, Field
6+
7+
from app.models.users import UserOut
8+
9+
10+
class ProjectMember(BaseModel):
11+
user: UserOut
12+
editor: bool = False
13+
14+
15+
class ProjectBase(BaseModel):
16+
creator: UserOut
17+
created: datetime = Field(default_factory=datetime.utcnow)
18+
name: str
19+
description: Optional[str] = None
20+
users: List[ProjectMember] = []
21+
dataset_ids: Optional[List[PydanticObjectId]] = []
22+
23+
24+
class ProjectDB(Document, ProjectBase):
25+
class Settings:
26+
name = "projects"
27+
28+
29+
class ProjectIn(ProjectBase):
30+
pass
31+
32+
33+
class ProjectOut(ProjectDB):
34+
class Config:
35+
fields = {"id": "id"}

0 commit comments

Comments
 (0)