Skip to content

Commit

Permalink
Merge pull request #50 from Clinical-Genomics/update-demo
Browse files Browse the repository at this point in the history
update demo
  • Loading branch information
Måns Magnusson committed Apr 6, 2021
2 parents 5eb9abe + d1a20ab commit 3f626b7
Show file tree
Hide file tree
Showing 28 changed files with 282 additions and 361 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -79,6 +79,7 @@ celerybeat-schedule

# dotenv
.env
NIPTool/.env

# virtualenv
.venv
Expand Down
21 changes: 0 additions & 21 deletions NIPTool/API/external/api/api_v1/api.py

This file was deleted.

12 changes: 4 additions & 8 deletions NIPTool/API/external/api/api_v1/endpoints/batches.py
@@ -1,15 +1,12 @@
from fastapi import APIRouter, Depends, Request
from NIPTool.adapter.plugin import NiptAdapter
from NIPTool.API.external.constants import TRISOMI_TRESHOLDS
from NIPTool.API.external.utils import *
from NIPTool.config import get_nipt_adapter, templates
from NIPTool.crud import find
from NIPTool.models.database import Batch, User
from NIPTool.API.external.utils import *
from NIPTool.API.external.constants import TRISOMI_TRESHOLDS
from NIPTool.API.external.api.deps import get_nipt_adapter

from fastapi.templating import Jinja2Templates

router = APIRouter()
templates = Jinja2Templates(directory="templates")
CURRENT_USER = User(username="mayapapaya", email="mayabrandi@123.com", role="RW").dict()


Expand All @@ -18,7 +15,6 @@ def batches(
request: Request, adapter: NiptAdapter = Depends(get_nipt_adapter)
): # , user: User = Depends(get_current_active_user)):
"""List of all batches"""

all_batches: List[Batch] = find.batches(adapter=adapter)
return templates.TemplateResponse(
"batches.html",
Expand All @@ -36,8 +32,8 @@ def batches(
request: Request, adapter: NiptAdapter = Depends(get_nipt_adapter)
): # , user: User = Depends(get_current_active_user)):
"""List of all batches"""

all_batches: List[Batch] = find.batches(adapter=adapter)

return templates.TemplateResponse(
"batches.html",
context={
Expand Down
18 changes: 9 additions & 9 deletions NIPTool/API/external/api/api_v1/endpoints/download.py
@@ -1,13 +1,13 @@
from pathlib import Path

from fastapi import APIRouter, Depends, Request
from fastapi.responses import FileResponse, RedirectResponse
from NIPTool.adapter.plugin import NiptAdapter
from NIPTool.API.external.api.deps import get_nipt_adapter, get_current_active_user
from fastapi.templating import Jinja2Templates
from NIPTool.config import get_nipt_adapter, templates
from NIPTool.crud import find
from NIPTool.parse.batch import validate_file_path
from pathlib import Path
from fastapi.responses import RedirectResponse, FileResponse

router = APIRouter()
templates = Jinja2Templates(directory="templates")


@router.get("/batch_download/{batch_id}/{file_id}")
Expand All @@ -16,11 +16,11 @@ def batch_download(
):
"""View for batch downloads"""

batch = adapter.batch(batch_id)
batch: dict = find.batch(adapter=adapter, batch_id=batch_id).dict()
file_path = batch.get(file_id)

if not validate_file_path(file_path):
# handle the redirect responce!
# handle the redirect response!
return RedirectResponse(request.url)

path = Path(file_path)
Expand All @@ -36,10 +36,10 @@ def sample_download(
):
"""View for sample downloads"""

sample = adapter.sample(sample_id)
sample: dict = find.sample(adapter=adapter, sample_id=sample_id).dict()
file_path = sample.get(file_id)
if not validate_file_path(file_path):
# handle the redirect responce!
# handle the redirect response!
return RedirectResponse(request.url)

file = Path(file_path)
Expand Down
7 changes: 2 additions & 5 deletions NIPTool/API/external/api/api_v1/endpoints/index.py
@@ -1,12 +1,9 @@

from fastapi import APIRouter, Request
from fastapi.templating import Jinja2Templates


templates = Jinja2Templates(directory="templates")
from NIPTool.config import templates

router = APIRouter()


@router.post("/")
def index(request: Request):
"""Log in view."""
Expand Down
17 changes: 5 additions & 12 deletions NIPTool/API/external/api/api_v1/endpoints/login.py
@@ -1,17 +1,10 @@
from fastapi import APIRouter, Response
from fastapi.responses import RedirectResponse
from datetime import timedelta

from fastapi import Depends, HTTPException, status, Security
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.responses import RedirectResponse
from fastapi.security import OAuth2PasswordRequestForm
from NIPTool.models.server.login import Token, UserInDB, User

from NIPTool.API.external.api.deps import (
get_current_active_user,
authenticate_user,
create_access_token,
temp_get_config,
)
from datetime import timedelta
from NIPTool.API.external.api.deps import authenticate_user, create_access_token, temp_get_config
from NIPTool.models.server.login import Token, UserInDB

router = APIRouter()

Expand Down
13 changes: 5 additions & 8 deletions NIPTool/API/external/api/api_v1/endpoints/sample.py
@@ -1,19 +1,16 @@
from fastapi import APIRouter, Depends, Request
from NIPTool.adapter.plugin import NiptAdapter
from NIPTool.crud import find
from NIPTool.models.database import User
from NIPTool.API.external.utils import *
from NIPTool.API.external.api.deps import get_nipt_adapter

from fastapi.templating import Jinja2Templates
from NIPTool.config import get_nipt_adapter, templates
from NIPTool.crud import find
from NIPTool.models.database import Batch, User

router = APIRouter()
templates = Jinja2Templates(directory="templates")


@router.get("/samples/{sample_id}/")
def sample(request: Request, sample_id: str, adapter: NiptAdapter = Depends(get_nipt_adapter)):
"""Sample view with sample information."""
"""Get sample with id"""

sample: dict = find.sample(sample_id=sample_id, adapter=adapter).dict()
batch: Batch = find.batch(batch_id=sample.get("batch_id"), adapter=adapter)
Expand All @@ -34,7 +31,7 @@ def sample(request: Request, sample_id: str, adapter: NiptAdapter = Depends(get_

@router.post("/samples/{sample_id}/")
def sample(request: Request, sample_id: str, adapter: NiptAdapter = Depends(get_nipt_adapter)):
"""Sample view with sample information."""
"""Post sample with id"""

sample: dict = find.sample(sample_id=sample_id, adapter=adapter).dict()
batch: Batch = find.batch(batch_id=sample.get("batch_id"), adapter=adapter)
Expand Down
9 changes: 2 additions & 7 deletions NIPTool/API/external/api/api_v1/endpoints/statistics.py
@@ -1,19 +1,14 @@
from typing import List

from fastapi import APIRouter, Depends, Request
from NIPTool.adapter.plugin import NiptAdapter
from NIPTool.models.database import User
from NIPTool.API.external.utils import (
get_last_batches,
get_statistics_for_box_plot,
get_statistics_for_scatter_plot,
)
from NIPTool.API.external.api.deps import get_nipt_adapter

from fastapi.templating import Jinja2Templates
from NIPTool.config import get_nipt_adapter, templates
from NIPTool.models.database import User

router = APIRouter()
templates = Jinja2Templates(directory="templates")


@router.get("/statistics")
Expand Down
10 changes: 4 additions & 6 deletions NIPTool/API/external/api/api_v1/endpoints/update.py
@@ -1,17 +1,15 @@
import logging
from datetime import datetime
from typing import Iterable

from fastapi import APIRouter, Depends, Request
from fastapi.responses import RedirectResponse
from starlette.datastructures import FormData

from NIPTool.adapter.plugin import NiptAdapter
from NIPTool.API.external.utils import *
from NIPTool.config import get_nipt_adapter
from NIPTool.crud import update

from NIPTool.models.database import User
from NIPTool.API.external.utils import *
from NIPTool.API.external.api.deps import get_nipt_adapter, get_current_active_user
from datetime import datetime
from starlette.datastructures import FormData

router = APIRouter()

Expand Down
57 changes: 21 additions & 36 deletions NIPTool/API/external/api/deps.py
@@ -1,23 +1,14 @@
from pydantic import BaseSettings

from NIPTool.adapter.plugin import NiptAdapter
from pymongo import MongoClient
from fastapi.security import OAuth2PasswordBearer
from fastapi import HTTPException, status
from NIPTool.models.server.login import User, UserInDB, TokenData
from fastapi import Depends
from passlib.context import CryptContext
from datetime import datetime, timedelta
from typing import Optional
from jose import JWTError, jwt


class Settings(BaseSettings):
db_uri: str = "test_uri"
db_name: str = "test_db"


settings = Settings()
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt
from NIPTool.adapter.plugin import NiptAdapter
from NIPTool.config import get_nipt_adapter
from NIPTool.crud import find
from NIPTool.models.server.login import TokenData, User, UserInDB
from passlib.context import CryptContext


def temp_get_config():
Expand All @@ -30,11 +21,6 @@ def temp_get_config():
}


def get_nipt_adapter():
client = MongoClient(settings.db_uri)
return NiptAdapter(client, db_name=settings.db_name)


oauth2_scheme = OAuth2PasswordBearer(
tokenUrl="/api/v1/login/token",
scopes={"me": "Read information about the current user.", "items": "Read items."},
Expand All @@ -61,10 +47,10 @@ def get_current_user(
token_data = TokenData(username=username)
except JWTError:
raise credentials_exception
user = adapter.user(token_data.username)
user: User = find.user(adapter=adapter, user_name=token_data.username)
if not user:
raise credentials_exception
return User(**user)
return user


def get_current_active_user(current_user: User = Depends(get_current_user)) -> User:
Expand All @@ -81,26 +67,25 @@ def get_password_hash(password):
return pwd_context.hash(password)


def authenticate_user(username: str, password: str) -> UserInDB:
def authenticate_user(username: str, password: str) -> Optional[UserInDB]:
adapter = get_nipt_adapter()
user_dict = adapter.user(username)
if not user_dict:
return False
user = UserInDB(**user_dict)
user: User = find.user(adapter=adapter, user_name=username)
if not user:
return False
if not verify_password(password, user.hashed_password):
return False
return user
return None
db_user = UserInDB(**user.dict())
if not db_user:
return None
if not verify_password(password, db_user.hashed_password):
return None
return db_user


def create_access_token(data: dict, expires_delta: Optional[timedelta] = None):
config: dict = temp_get_config()
configs: dict = temp_get_config()
to_encode = data.copy()
if expires_delta:
expire = datetime.utcnow() + expires_delta
else:
expire = datetime.utcnow() + timedelta(minutes=15)
to_encode.update({"exp": expire})
encoded_jwt = jwt.encode(to_encode, config.get("SECRET_KEY"), algorithm=config.get("ALGORITHM"))
return encoded_jwt
return jwt.encode(to_encode, configs.get("SECRET_KEY"), algorithm=configs.get("ALGORITHM"))
8 changes: 0 additions & 8 deletions NIPTool/API/internal/api/api_v1/api.py

This file was deleted.

9 changes: 4 additions & 5 deletions NIPTool/API/internal/api/api_v1/endpoints/insert.py
Expand Up @@ -3,12 +3,12 @@

from fastapi import APIRouter, Depends, Response, status
from NIPTool.adapter.plugin import NiptAdapter
from NIPTool.crud.insert import insert_batch, insert_samples, insert_user
from NIPTool.config import get_nipt_adapter
from NIPTool.crud import find
from NIPTool.crud.insert import insert_batch, insert_samples, insert_user
from NIPTool.models.database import Batch, Sample
from NIPTool.models.server.load import BatchRequestBody, UserRequestBody
from NIPTool.parse.batch import get_batch, get_samples
from NIPTool.API.internal.api.deps import get_nipt_adapter

router = APIRouter()

Expand All @@ -20,15 +20,14 @@ def batch(
adapter: NiptAdapter = Depends(get_nipt_adapter),
):
"""Function to load batch data into the database with rest"""

nipt_results = Path(batch_files.result_file)
if not nipt_results.exists():
response.status_code = status.HTTP_422_UNPROCESSABLE_ENTITY
return {"message": "Results file missing."}
samples: List[Sample] = get_samples(nipt_results)
batch: Batch = get_batch(nipt_results)
if find.batch(adapter=adapter, batch_id=batch.batch_id):
return "batch allready in database"
return "batch already in database"

insert_batch(adapter=adapter, batch=batch, batch_files=batch_files)
insert_samples(adapter=adapter, samples=samples, segmental_calls=batch_files.segmental_calls)
Expand All @@ -44,7 +43,7 @@ def user(
"""Function to load user into the database with rest"""

if find.user(adapter=adapter, email=user.email):
return "user allready in database"
return "user already in database"
insert_user(adapter=adapter, user=user)

response.status_code = status.HTTP_200_OK
Expand Down
16 changes: 0 additions & 16 deletions NIPTool/API/internal/api/deps.py

This file was deleted.

0 comments on commit 3f626b7

Please sign in to comment.