Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
c3ca68d
address #412
sanghoonio Dec 11, 2024
52853cd
work on schemas2.0
khoroshevskyi Mar 6, 2025
44ec72c
fixed schema response
khoroshevskyi Mar 6, 2025
d17d027
Merge branch 'dev' into schemas2.0
khoroshevskyi Mar 6, 2025
fc5f78a
begin addressing #416. added beforeCopy and beforePaste hooks to the …
sanghoonio Mar 12, 2025
4dd87c9
safari navbar alignment
sanghoonio Mar 12, 2025
fd3bffa
Schema2.0 for pephub
khoroshevskyi Mar 15, 2025
d794cf3
Merge branch 'master' into schemas2.0
khoroshevskyi Mar 18, 2025
234a9f4
fixed pepdbagent branch
khoroshevskyi Mar 18, 2025
7f2b029
Merge branch 'master' into schemas2.0
khoroshevskyi Mar 18, 2025
6113f28
Merge branch 'master' into schemas2.0
khoroshevskyi Mar 18, 2025
e013259
reduce cpu request
nsheff Mar 18, 2025
5e19425
updated namespace info endpoint
khoroshevskyi Mar 18, 2025
973e778
Merge pull request #422 from pepkit/master
nsheff Mar 19, 2025
6796522
fixed return format for schemas
khoroshevskyi Mar 19, 2025
959f8fd
Merge remote-tracking branch 'origin/schemas2.0' into schemas2.0
khoroshevskyi Mar 19, 2025
b8eb1ec
schema 2.0 ui progress
sanghoonio Mar 19, 2025
3d24bb8
requirements typo
sanghoonio Mar 19, 2025
a4f34fe
Merge branch 'schemas2.0' of github.com:pepkit/pephub into schemas2.0
sanghoonio Mar 19, 2025
212ba7c
schema page redesign
sanghoonio Mar 20, 2025
34fa77b
Updated namespace schema endpoints
khoroshevskyi Mar 20, 2025
0cdc10e
Merge remote-tracking branch 'origin/schemas2.0' into schemas2.0
khoroshevskyi Mar 20, 2025
03fbefb
updated lint
khoroshevskyi Mar 20, 2025
55bc12e
updated lint
khoroshevskyi Mar 20, 2025
290a478
add schema edit and version modals
sanghoonio Mar 20, 2025
8e598c8
Merge branch 'schemas2.0' of github.com:pepkit/pephub into schemas2.0
sanghoonio Mar 20, 2025
605e47d
schemas 2.0 basic features working (add json or file, edit, create ve…
sanghoonio Mar 20, 2025
4191335
black
sanghoonio Mar 20, 2025
33755d6
few endpoint specification fixes
khoroshevskyi Mar 24, 2025
55b84ed
Merge remote-tracking branch 'origin/schemas2.0' into schemas2.0
khoroshevskyi Mar 24, 2025
63c3e21
frontend progress
sanghoonio Mar 24, 2025
56658fe
Merge branch 'schemas2.0' of github.com:pepkit/pephub into schemas2.0
sanghoonio Mar 24, 2025
7f91d72
changed upload schema endpoints to allow optional description, lifecy…
sanghoonio Mar 24, 2025
25cd988
Added download json format in schemas
khoroshevskyi Mar 25, 2025
10633ce
Merge remote-tracking branch 'origin/schemas2.0' into schemas2.0
khoroshevskyi Mar 25, 2025
2854e43
Fixed #417
khoroshevskyi Mar 25, 2025
012a978
schema ui checkpoint
sanghoonio Mar 25, 2025
71c54eb
error schema page
sanghoonio Mar 25, 2025
fb3cb86
Fixed Home page stats
khoroshevskyi Mar 25, 2025
cba33f1
schema ui fixes and namespace page loading
sanghoonio Mar 25, 2025
a79c660
updated dev tasks
khoroshevskyi Mar 26, 2025
7d08c8d
updated requirements
khoroshevskyi Mar 26, 2025
2e7453e
Merge pull request #423 from pepkit/schemas2.0
khoroshevskyi Mar 26, 2025
337aa26
Update web/src/api/schemas.ts
khoroshevskyi Mar 26, 2025
d951224
comment out print
sanghoonio Mar 27, 2025
fbf5197
Merge pull request #418 from pepkit/sample_table_fixes
sanghoonio Mar 27, 2025
be10634
updated version, ruff, and fixed pr comments
khoroshevskyi Mar 27, 2025
e836bd9
Merge remote-tracking branch 'origin/dev' into dev
khoroshevskyi Mar 27, 2025
586555c
address ui comments
sanghoonio Mar 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/black.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: psf/black@stable
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: psf/black@stable
4 changes: 2 additions & 2 deletions deployment/task_defs/dev.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@
"name": "GH_CLIENT_SECRET"
},
{
"valueFrom": "PEPHUB_GH_REDIRECT_URI",
"valueFrom": "PEPHUB_DEV_GH_REDIRECT_URI",
"name": "REDIRECT_URI"
},
{
"valueFrom": "PEPHUB_BASE_URI",
"valueFrom": "PEPHUB_DEV_BASE_URI",
"name": "BASE_URI"
},
{
Expand Down
2 changes: 1 addition & 1 deletion deployment/task_defs/primary.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"containerDefinitions": [
{
"name": "pephub-container",
"cpu": 512,
"cpu": 128,
"memory": 6096,
"memoryReservation": 512,
"portMappings": [
Expand Down
5 changes: 2 additions & 3 deletions launch_docker.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash

docker run -p 80:80 \
docker run -p 8000:80 \
--env POSTGRES_HOST=$POSTGRES_HOST \
--env POSTGRES_DB=$POSTGRES_DB \
--env POSTGRES_USER=$POSTGRES_USER \
Expand All @@ -9,8 +9,7 @@ docker run -p 80:80 \
--env QDRANT_PORT=$QDRANT_PORT \
--env QDRANT_ENABLED=$QDRANT_ENABLED \
--env QDRANT_API_KEY=$QDRANT_API_KEY \
--env HF_MODEL=$HF_MODEL \
--env GH_CLIENT_ID=$GH_CLIENT_ID \
--env GH_CLIENT_SECRET=$GH_CLIENT_SECRET \
--env BASE_URI=$BASE_URI \
pephub
databio/pephub:dev
2 changes: 1 addition & 1 deletion pephub/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.14.4"
__version__ = "0.15.0"
16 changes: 12 additions & 4 deletions pephub/dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ def read_authorization_header(authorization: str = Header(None)) -> Union[dict,


def get_organizations_from_session_info(
session_info: Union[dict, None] = Depends(read_authorization_header)
session_info: Union[dict, None] = Depends(read_authorization_header),
) -> List[str]:
organizations = []
if session_info:
Expand All @@ -168,7 +168,7 @@ def get_organizations_from_session_info(


def get_user_from_session_info(
session_info: Union[dict, None] = Depends(read_authorization_header)
session_info: Union[dict, None] = Depends(read_authorization_header),
) -> Union[str, None]:
user = None
if session_info:
Expand Down Expand Up @@ -405,8 +405,16 @@ def get_namespace_info(


@cached(TTLCache(maxsize=100, ttl=5 * 60))
def get_pepdb_namespace_info(limit: int = 10) -> ListOfNamespaceInfo:
def get_pepdb_namespace_info(
page: int = 0,
page_size: int = 10,
order_by: str = "number_of_projects",
) -> ListOfNamespaceInfo:
"""
Get the information on the biggest namespaces in the database.
"""
return agent.namespace.info(limit=limit)
return agent.namespace.info(
page=page,
page_size=page_size,
order_by=order_by,
)
23 changes: 23 additions & 0 deletions pephub/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import jwt
import pandas as pd
import yaml
import json
from fastapi import Response, UploadFile
from fastapi.exceptions import HTTPException
from peppy.const import (
Expand Down Expand Up @@ -119,6 +120,28 @@ def download_yaml(content: dict, file_name: str = "unnamed.yaml") -> Response:
)


def download_json(content: dict, file_name: str = "unnamed.json") -> Response:
"""
Convert json/dict to downloading io format

:param content: content of the file
:param file_name: name of the file
return Response: response object
"""

json_string = json.dumps(content)

json_bytes = io.BytesIO()
json_bytes.write(json_string.encode("utf-8"))
json_bytes.seek(0)

return Response(
json_bytes.getvalue(),
media_type="application/json",
headers={"Content-Disposition": f"attachment; filename={file_name}"},
)


def build_authorization_url(
client_id: str,
redirect_uri: str,
Expand Down
2 changes: 1 addition & 1 deletion pephub/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@

# build routes
app.include_router(api_base)
app.include_router(api_namespace)
app.include_router(api_namespaces)
app.include_router(api_namespace)
app.include_router(api_project)
app.include_router(api_projects)
app.include_router(api_search)
Expand Down
33 changes: 25 additions & 8 deletions pephub/routers/api/v1/namespace.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import peppy
from dotenv import load_dotenv
from fastapi import APIRouter, Depends, File, Form, HTTPException, UploadFile
from fastapi import APIRouter, Depends, File, Form, HTTPException, UploadFile, Request
from fastapi.responses import JSONResponse
from pepdbagent import PEPDatabaseAgent
from pepdbagent.const import DEFAULT_LIMIT_INFO
Expand All @@ -18,7 +18,6 @@
)
from pepdbagent.models import (
AnnotationList,
ListOfNamespaceInfo,
Namespace,
NamespaceStats,
TarNamespaceModelReturn,
Expand All @@ -40,7 +39,12 @@
get_pepdb_namespace_info,
)
from ....helpers import parse_user_file_upload, split_upload_files_on_init_file
from ...models import FavoriteRequest, ProjectJsonRequest, ProjectRawModel
from ...models import (
FavoriteRequest,
ProjectJsonRequest,
ProjectRawModel,
NamespaceInfoReturnModel,
)

# from bedms.const import AVAILABLE_SCHEMAS

Expand Down Expand Up @@ -379,14 +383,27 @@ async def remove_from_stars(


@namespaces.get(
"/info",
"",
summary="Get information list of biggest namespaces",
response_model=ListOfNamespaceInfo,
response_model=NamespaceInfoReturnModel,
)
async def get_namespace_information(
limit: Optional[int] = DEFAULT_LIMIT_INFO,
) -> ListOfNamespaceInfo:
return get_pepdb_namespace_info(limit)
request: Request,
page: int = 0,
page_size: int = DEFAULT_LIMIT_INFO,
order_by: Literal[
"number_of_projects",
"number_of_schemas",
] = "number_of_projects",
) -> NamespaceInfoReturnModel:
results = get_pepdb_namespace_info(
page=page,
page_size=page_size,
order_by=order_by,
)
return NamespaceInfoReturnModel(
**results.model_dump(), server=f"{str(request.base_url)}api/v1/schemas"
)


@namespaces.get(
Expand Down
15 changes: 7 additions & 8 deletions pephub/routers/api/v1/project.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import logging
from typing import Annotated, Any, Callable, Dict, List, Optional, Union
from typing import Annotated, Any, Literal, Dict, List, Optional, Union

import eido
import numpy as np
Expand Down Expand Up @@ -29,7 +29,7 @@
ProjectViews,
HistoryAnnotationModel,
)
from peppy.const import SAMPLE_DF_KEY, SAMPLE_RAW_DICT_KEY
from peppy.const import SAMPLE_RAW_DICT_KEY

# from ....const import SAMPLE_CONVERSION_FUNCTIONS
from ....dependencies import (
Expand All @@ -53,12 +53,9 @@
ProjectHistoryResponse,
SamplesResponseModel,
ConfigResponseModel,
StandardizerResponse,
)
from ....const import (
MAX_PROCESSED_PROJECT_SIZE,
BEDMS_REPO_URL,
MAX_STANDARDIZED_PROJECT_SIZE,
)
from .helpers import verify_updated_project

Expand Down Expand Up @@ -237,7 +234,7 @@ async def delete_a_pep(
@project.get("/samples", response_model=Union[SamplesResponseModel, str, list, dict])
async def get_pep_samples(
proj: dict = Depends(get_project),
format: Optional[str] = None,
format: Optional[Union[Literal["basic", "csv", "yaml", "json"], None]] = None,
raw: Optional[bool] = True,
):
"""
Expand Down Expand Up @@ -277,9 +274,11 @@ async def get_pep_samples(
"samples": [sample.to_dict() for sample in proj.samples],
}
elif format == "csv":
return eido.convert_project(proj, "csv")["samples"]
return PlainTextResponse(eido.convert_project(proj, "csv")["samples"])
elif format == "yaml":
return eido.convert_project(proj, "yaml-samples")["samples"]
return PlainTextResponse(
eido.convert_project(proj, "yaml-samples")["samples"]
)
elif format == "basic":
return eido.convert_project(proj, "basic")

Expand Down
Loading
Loading