From ae12856f2280e1903daf11f2122f60f4223ebfe0 Mon Sep 17 00:00:00 2001 From: Luigi Marini Date: Mon, 23 Oct 2023 16:42:05 -0500 Subject: [PATCH 1/6] Added version to openapi docs and bottom of frontend client. Removed Alpha release from README.md. --- README.md | 2 +- backend/app/main.py | 12 ++++++++++-- frontend/src/components/Layout.tsx | 14 +++++++++++--- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7b2cca7a7..f3d775a9f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Clowder V2 (In Development - Alpha Release) +# Clowder V2 (In Active Development) *For the previous version of Clowder, please see [Clowder V1](https://github.com/clowder-framework/clowder).* diff --git a/backend/app/main.py b/backend/app/main.py index 0004c84ee..63f32d9d8 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -48,7 +48,6 @@ visualization, thumbnails, ) - # setup loggers # logging.config.fileConfig('logging.conf', disable_existing_loggers=False) from app.search.config import indexSettings @@ -57,7 +56,16 @@ logger = logging.getLogger(__name__) app = FastAPI( - title=settings.APP_NAME, openapi_url=f"{settings.API_V2_STR}/openapi.json" + title=settings.APP_NAME, openapi_url=f"{settings.API_V2_STR}/openapi.json", + description="A cloud native data management framework to support any research domain. Clowder was " + "developed to help researchers and scientists in data intensive domains manage raw data, complex " + "metadata, and automatic data pipelines. ", + version="2.0.0-beta.1", + contact={"name": "Clowder", "url": "https://clowderframework.org/"}, + license_info={ + "name": "Apache 2.0", + "url": "https://www.apache.org/licenses/LICENSE-2.0.html", + }, ) BaseConfig.arbitrary_types_allowed = True diff --git a/frontend/src/components/Layout.tsx b/frontend/src/components/Layout.tsx index e13da0d6e..c6ae419cc 100644 --- a/frontend/src/components/Layout.tsx +++ b/frontend/src/components/Layout.tsx @@ -3,7 +3,6 @@ import { useEffect } from "react"; import { styled, useTheme } from "@mui/material/styles"; import Box from "@mui/material/Box"; import Drawer from "@mui/material/Drawer"; -import CssBaseline from "@mui/material/CssBaseline"; import MuiAppBar, { AppBarProps as MuiAppBarProps } from "@mui/material/AppBar"; import Toolbar from "@mui/material/Toolbar"; import List from "@mui/material/List"; @@ -17,7 +16,7 @@ import ListItem from "@mui/material/ListItem"; import ListItemButton from "@mui/material/ListItemButton"; import ListItemIcon from "@mui/material/ListItemIcon"; import ListItemText from "@mui/material/ListItemText"; -import { Link, Menu, MenuItem, MenuList } from "@mui/material"; +import { Link, Menu, MenuItem, MenuList, Typography } from "@mui/material"; import { Link as RouterLink, useLocation } from "react-router-dom"; import { useSelector } from "react-redux"; import { RootState } from "../types/data"; @@ -136,7 +135,6 @@ export default function PersistentDrawerLeft(props) { // @ts-ignore return ( - {children} + + v2.0.0-beta.1 + ); From 8969c47ef21d3e096ff14f88694b662e3b3963d7 Mon Sep 17 00:00:00 2001 From: Luigi Marini Date: Wed, 8 Nov 2023 09:24:24 -0600 Subject: [PATCH 2/6] Simple status endpoint /status to return app version. --- backend/app/config.py | 1 + backend/app/main.py | 7 ++++++- backend/app/models/status.py | 7 +++++++ backend/app/routers/status.py | 11 +++++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 backend/app/models/status.py create mode 100644 backend/app/routers/status.py diff --git a/backend/app/config.py b/backend/app/config.py index 476327617..094923fe3 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -9,6 +9,7 @@ class Settings(BaseSettings): API_V2_STR: str = "/api/v2" admin_email: str = "devnull@ncsa.illinois.edu" frontend_url: str = "http://localhost:3000" + version: str = "2.0.0-beta.1" # Unique secret for hashing API keys. Generate with `openssl rand -hex 32` local_auth_secret = "clowder_secret_key" diff --git a/backend/app/main.py b/backend/app/main.py index 63f32d9d8..8edd8dc43 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -30,7 +30,7 @@ from app.models.users import UserDB, UserAPIKeyDB, ListenerAPIKeyDB from app.models.visualization_config import VisualizationConfigDB from app.models.visualization_data import VisualizationDataDB -from app.routers import folders, groups +from app.routers import folders, groups, status from app.routers import ( users, authorization, @@ -189,6 +189,11 @@ tags=["thumbnails"], dependencies=[Depends(get_current_username)], ) +api_router.include_router( + status.router, + prefix="/status", + tags=["status"] +) api_router.include_router(keycloak.router, prefix="/auth", tags=["auth"]) app.include_router(api_router, prefix=settings.API_V2_STR) diff --git a/backend/app/models/status.py b/backend/app/models/status.py new file mode 100644 index 000000000..55efff44d --- /dev/null +++ b/backend/app/models/status.py @@ -0,0 +1,7 @@ +from pydantic import BaseModel + +from app.config import settings + + +class Status(BaseModel): + version: str = settings.version \ No newline at end of file diff --git a/backend/app/routers/status.py b/backend/app/routers/status.py new file mode 100644 index 000000000..fb9a08220 --- /dev/null +++ b/backend/app/routers/status.py @@ -0,0 +1,11 @@ +from fastapi import APIRouter +from fastapi.security import HTTPBearer + +from app.models.status import Status + +router = APIRouter() +security = HTTPBearer() + +@router.get("", response_model=Status) +async def add_thumbnail(): + return Status() \ No newline at end of file From 36193e0abc95228d8cf685c20ee3a6741ff32ccd Mon Sep 17 00:00:00 2001 From: Luigi Marini Date: Wed, 8 Nov 2023 09:26:39 -0600 Subject: [PATCH 3/6] Black styling. --- backend/app/main.py | 14 ++++++-------- backend/app/models/status.py | 2 +- backend/app/routers/status.py | 3 ++- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/backend/app/main.py b/backend/app/main.py index 8edd8dc43..b3fb68764 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -48,6 +48,7 @@ visualization, thumbnails, ) + # setup loggers # logging.config.fileConfig('logging.conf', disable_existing_loggers=False) from app.search.config import indexSettings @@ -56,10 +57,11 @@ logger = logging.getLogger(__name__) app = FastAPI( - title=settings.APP_NAME, openapi_url=f"{settings.API_V2_STR}/openapi.json", + title=settings.APP_NAME, + openapi_url=f"{settings.API_V2_STR}/openapi.json", description="A cloud native data management framework to support any research domain. Clowder was " - "developed to help researchers and scientists in data intensive domains manage raw data, complex " - "metadata, and automatic data pipelines. ", + "developed to help researchers and scientists in data intensive domains manage raw data, complex " + "metadata, and automatic data pipelines. ", version="2.0.0-beta.1", contact={"name": "Clowder", "url": "https://clowderframework.org/"}, license_info={ @@ -189,11 +191,7 @@ tags=["thumbnails"], dependencies=[Depends(get_current_username)], ) -api_router.include_router( - status.router, - prefix="/status", - tags=["status"] -) +api_router.include_router(status.router, prefix="/status", tags=["status"]) api_router.include_router(keycloak.router, prefix="/auth", tags=["auth"]) app.include_router(api_router, prefix=settings.API_V2_STR) diff --git a/backend/app/models/status.py b/backend/app/models/status.py index 55efff44d..ee2be676e 100644 --- a/backend/app/models/status.py +++ b/backend/app/models/status.py @@ -4,4 +4,4 @@ class Status(BaseModel): - version: str = settings.version \ No newline at end of file + version: str = settings.version diff --git a/backend/app/routers/status.py b/backend/app/routers/status.py index fb9a08220..68f594701 100644 --- a/backend/app/routers/status.py +++ b/backend/app/routers/status.py @@ -6,6 +6,7 @@ router = APIRouter() security = HTTPBearer() + @router.get("", response_model=Status) async def add_thumbnail(): - return Status() \ No newline at end of file + return Status() From 25313d5c9c93c2e5f51ccfea76af7fc46fe83d8d Mon Sep 17 00:00:00 2001 From: Luigi Marini Date: Wed, 8 Nov 2023 12:26:54 -0600 Subject: [PATCH 4/6] Frontend codegen. --- frontend/src/openapi/v2/core/OpenAPI.ts | 2 +- frontend/src/openapi/v2/index.ts | 2 ++ frontend/src/openapi/v2/models/Status.ts | 7 ++++++ .../src/openapi/v2/services/StatusService.ts | 22 +++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 frontend/src/openapi/v2/models/Status.ts create mode 100644 frontend/src/openapi/v2/services/StatusService.ts diff --git a/frontend/src/openapi/v2/core/OpenAPI.ts b/frontend/src/openapi/v2/core/OpenAPI.ts index 5491ad81d..aa5c54fae 100644 --- a/frontend/src/openapi/v2/core/OpenAPI.ts +++ b/frontend/src/openapi/v2/core/OpenAPI.ts @@ -20,7 +20,7 @@ type Config = { export const OpenAPI: Config = { BASE: '', - VERSION: '0.1.0', + VERSION: '2.0.0-beta.1', WITH_CREDENTIALS: false, CREDENTIALS: 'include', TOKEN: undefined, diff --git a/frontend/src/openapi/v2/index.ts b/frontend/src/openapi/v2/index.ts index 2e3d17f12..dfde02490 100644 --- a/frontend/src/openapi/v2/index.ts +++ b/frontend/src/openapi/v2/index.ts @@ -56,6 +56,7 @@ export type { Repository } from './models/Repository'; export { RoleType } from './models/RoleType'; export type { SearchCriteria } from './models/SearchCriteria'; export type { SearchObject } from './models/SearchObject'; +export type { Status } from './models/Status'; export type { ThumbnailOut } from './models/ThumbnailOut'; export type { UserAndRole } from './models/UserAndRole'; export type { UserAPIKeyOut } from './models/UserAPIKeyOut'; @@ -81,6 +82,7 @@ export { ListenersService } from './services/ListenersService'; export { LoginService } from './services/LoginService'; export { MetadataService } from './services/MetadataService'; export { ServiceService } from './services/ServiceService'; +export { StatusService } from './services/StatusService'; export { ThumbnailsService } from './services/ThumbnailsService'; export { UsersService } from './services/UsersService'; export { VisualizationsService } from './services/VisualizationsService'; diff --git a/frontend/src/openapi/v2/models/Status.ts b/frontend/src/openapi/v2/models/Status.ts new file mode 100644 index 000000000..3560daa9b --- /dev/null +++ b/frontend/src/openapi/v2/models/Status.ts @@ -0,0 +1,7 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type Status = { + version?: string; +} diff --git a/frontend/src/openapi/v2/services/StatusService.ts b/frontend/src/openapi/v2/services/StatusService.ts new file mode 100644 index 000000000..f503c0888 --- /dev/null +++ b/frontend/src/openapi/v2/services/StatusService.ts @@ -0,0 +1,22 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from '../models/Status'; +import type { CancelablePromise } from '../core/CancelablePromise'; +import { request as __request } from '../core/request'; + +export class StatusService { + + /** + * Add Thumbnail + * @returns Status Successful Response + * @throws ApiError + */ + public static addThumbnailApiV2StatusGet(): CancelablePromise { + return __request({ + method: 'GET', + path: `/api/v2/status`, + }); + } + +} \ No newline at end of file From 825cad9765f63b09f3ada69f73e078c729bd05f8 Mon Sep 17 00:00:00 2001 From: Luigi Marini Date: Thu, 9 Nov 2023 16:31:05 -0600 Subject: [PATCH 5/6] Changed color of app version in bottom left to light primary. --- frontend/src/components/Layout.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/Layout.tsx b/frontend/src/components/Layout.tsx index c6ae419cc..f7e2887ed 100644 --- a/frontend/src/components/Layout.tsx +++ b/frontend/src/components/Layout.tsx @@ -333,7 +333,9 @@ export default function PersistentDrawerLeft(props) { width: "100%", }} > - v2.0.0-beta.1 + + v2.0.0-beta.1 + From f4c9408deeef4aff3c58b15ec1792c78edf7baf7 Mon Sep 17 00:00:00 2001 From: Luigi Marini Date: Mon, 13 Nov 2023 09:59:03 -0600 Subject: [PATCH 6/6] Updated status endpoint function name. --- backend/app/routers/status.py | 2 +- frontend/src/openapi/v2/services/StatusService.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/app/routers/status.py b/backend/app/routers/status.py index 68f594701..f1ace760b 100644 --- a/backend/app/routers/status.py +++ b/backend/app/routers/status.py @@ -8,5 +8,5 @@ @router.get("", response_model=Status) -async def add_thumbnail(): +async def get_status(): return Status() diff --git a/frontend/src/openapi/v2/services/StatusService.ts b/frontend/src/openapi/v2/services/StatusService.ts index f503c0888..e334ebc50 100644 --- a/frontend/src/openapi/v2/services/StatusService.ts +++ b/frontend/src/openapi/v2/services/StatusService.ts @@ -8,11 +8,11 @@ import { request as __request } from '../core/request'; export class StatusService { /** - * Add Thumbnail + * Get Status * @returns Status Successful Response * @throws ApiError */ - public static addThumbnailApiV2StatusGet(): CancelablePromise { + public static getStatusApiV2StatusGet(): CancelablePromise { return __request({ method: 'GET', path: `/api/v2/status`,