From 9a31fbe0102010974b3f0060d7266e32aaec0309 Mon Sep 17 00:00:00 2001 From: Georg-Stahn Date: Sun, 3 Dec 2023 16:56:16 +0100 Subject: [PATCH] added attach with background task --- .../clan_cli/webui/routers/sql_connect.py | 21 ++++++++++-- pkgs/clan-cli/clan_cli/webui/sql_crud.py | 19 +++++++++++ pkgs/clan-cli/tests/test_db_api.py | 32 +++++++++++-------- 3 files changed, 57 insertions(+), 15 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/webui/routers/sql_connect.py b/pkgs/clan-cli/clan_cli/webui/routers/sql_connect.py index 284f8b9..e2b2813 100644 --- a/pkgs/clan-cli/clan_cli/webui/routers/sql_connect.py +++ b/pkgs/clan-cli/clan_cli/webui/routers/sql_connect.py @@ -1,6 +1,6 @@ from typing import List, Optional -from fastapi import APIRouter, Depends +from fastapi import APIRouter, BackgroundTasks, Depends from sqlalchemy.orm import Session from .. import sql_crud, sql_db, sql_models @@ -139,8 +139,11 @@ def get_repository( @router.post("/api/v1/create_entity", response_model=Entity, tags=[Tags.entities]) def create_entity( entity: EntityCreate, db: Session = Depends(sql_db.get_db) -) -> EntityCreate: +) -> EntityCreate | str: # todo checken ob schon da ... + if sql_crud.get_entity_by_did(db, did=entity.did): + print("did already exsists") + return "Error did already exsists in db" return sql_crud.create_entity(db, entity) @@ -161,3 +164,17 @@ def get_entity( ) -> Optional[sql_models.Entity]: entity = sql_crud.get_entity_by_did(db, did=entity_did) return entity + + +@router.get("/api/v1/attach", response_model=Optional[Entity], tags=[Tags.entities]) +async def attach( + background_tasks: BackgroundTasks, + entity_did: str = "did:sov:test:1234", + skip: int = 0, + limit: int = 100, + db: Session = Depends(sql_db.get_db), +) -> dict[str, str]: + background_tasks.add_task( + sql_crud.check_health, db, entity_did, message="Not attched any more" + ) + return {"message": "Attaching in the background"} diff --git a/pkgs/clan-cli/clan_cli/webui/sql_crud.py b/pkgs/clan-cli/clan_cli/webui/sql_crud.py index f25690c..3d46cb7 100644 --- a/pkgs/clan-cli/clan_cli/webui/sql_crud.py +++ b/pkgs/clan-cli/clan_cli/webui/sql_crud.py @@ -1,3 +1,4 @@ +import time from typing import List, Optional from sqlalchemy.orm import Session @@ -136,3 +137,21 @@ def get_entities( def get_entity_by_did(db: Session, did: str) -> Optional[sql_models.Entity]: return db.query(sql_models.Entity).filter(sql_models.Entity.did == did).first() + + +def check_health(db: Session, entity_did: str, message: str) -> str: + # ste attached to true + db_entity = get_entity_by_did(db, entity_did) + if db_entity is not None: + # db_entity.attached = Column(True) + setattr(db_entity, "attached", True) + # save changes in db + db.add(db_entity) + db.commit() + db.refresh(db_entity) + # check every 5 secounds if status has changed + while db_entity.attached: + time.sleep(5) + return f"{entity_did} message" + else: + return f"{entity_did} not found and not attached" diff --git a/pkgs/clan-cli/tests/test_db_api.py b/pkgs/clan-cli/tests/test_db_api.py index f1da20e..5f6d16e 100644 --- a/pkgs/clan-cli/tests/test_db_api.py +++ b/pkgs/clan-cli/tests/test_db_api.py @@ -84,6 +84,7 @@ def test_producer(api: TestClient) -> None: # get_request = "entity_did=did%3Asov%3Atest%3A1234" make_test_post_and_get(api, request_body, paramter) + def test_producer2(api: TestClient) -> None: request_body = { "uuid": "8e285c0c-4e40-430a-a477-26b3b81e30d1", @@ -95,9 +96,10 @@ def test_producer2(api: TestClient) -> None: "entity_did": default_entity_did2, } paramter = "producer" - get_request = "entity_did="+url.quote(default_entity_did2) + get_request = "entity_did=" + url.quote(default_entity_did2) make_test_post_and_get(api, request_body, paramter, get_request) + def test_producer3(api: TestClient) -> None: request_body = { "uuid": "8e285c0c-4e40-430a-a477-26b3b81e30d2", @@ -109,7 +111,7 @@ def test_producer3(api: TestClient) -> None: "entity_did": default_entity_did3, } paramter = "producer" - get_request = "entity_did="+url.quote(default_entity_did3) + get_request = "entity_did=" + url.quote(default_entity_did3) make_test_post_and_get(api, request_body, paramter, get_request) @@ -124,7 +126,7 @@ def test_producer4(api: TestClient) -> None: "entity_did": default_entity_did4, } paramter = "producer" - get_request = "entity_did="+url.quote(default_entity_did4) + get_request = "entity_did=" + url.quote(default_entity_did4) make_test_post_and_get(api, request_body, paramter, get_request) @@ -139,11 +141,10 @@ def test_producer5(api: TestClient) -> None: "entity_did": default_entity_did5, } paramter = "producer" - get_request = "entity_did="+url.quote(default_entity_did5) + get_request = "entity_did=" + url.quote(default_entity_did5) make_test_post_and_get(api, request_body, paramter, get_request) - ######################### # # # Consumer # @@ -159,6 +160,7 @@ def test_consumer(api: TestClient) -> None: # get_request = "entity_did=did%3Asov%3Atest%3A1234" make_test_post_and_get(api, request_body, paramter) + def test_consumer2(api: TestClient) -> None: request_body = { "entity_did": default_entity_did2, @@ -166,9 +168,10 @@ def test_consumer2(api: TestClient) -> None: "other": {"war": "games"}, } paramter = "consumer" - get_request = "entity_did="+url.quote(default_entity_did2) + get_request = "entity_did=" + url.quote(default_entity_did2) make_test_post_and_get(api, request_body, paramter, get_request) + ######################### # # # REPOSITORY # @@ -187,6 +190,8 @@ def test_repository(api: TestClient) -> None: paramter = "repository" # get_request = "entity_did=did%3Asov%3Atest%3A1234" make_test_post_and_get(api, request_body, paramter) + + def test_repository2(api: TestClient) -> None: request_body = { "uuid": "8e285c0c-4e40-430a-a477-26b3b81e30d1", @@ -198,9 +203,10 @@ def test_repository2(api: TestClient) -> None: "entity_did": default_entity_did2, } paramter = "repository" - get_request = "entity_did="+url.quote(default_entity_did2) + get_request = "entity_did=" + url.quote(default_entity_did2) make_test_post_and_get(api, request_body, paramter, get_request) + def test_repository3(api: TestClient) -> None: request_body = { "uuid": "8e285c0c-4e40-430a-a477-26b3b81e30d2", @@ -212,7 +218,7 @@ def test_repository3(api: TestClient) -> None: "entity_did": default_entity_did3, } paramter = "repository" - get_request = "entity_did="+url.quote(default_entity_did3) + get_request = "entity_did=" + url.quote(default_entity_did3) make_test_post_and_get(api, request_body, paramter, get_request) @@ -227,7 +233,7 @@ def test_repository4(api: TestClient) -> None: "entity_did": default_entity_did4, } paramter = "repository" - get_request = "entity_did="+url.quote(default_entity_did4) + get_request = "entity_did=" + url.quote(default_entity_did4) make_test_post_and_get(api, request_body, paramter, get_request) @@ -242,11 +248,10 @@ def test_repository5(api: TestClient) -> None: "entity_did": default_entity_did5, } paramter = "repository" - get_request = "entity_did="+url.quote(default_entity_did5) + get_request = "entity_did=" + url.quote(default_entity_did5) make_test_post_and_get(api, request_body, paramter, get_request) - ######################### # # # Entity # @@ -264,6 +269,7 @@ def test_entity(api: TestClient) -> None: # get_request = "entity_did=did%3Asov%3Atest%3A1234" make_test_post_and_get(api, request_body, paramter) + def test_entity2(api: TestClient) -> None: request_body = { "did": default_entity_did2, @@ -273,5 +279,5 @@ def test_entity2(api: TestClient) -> None: "other": {"test": "test"}, } paramter = "entity" - get_request = "entity_did="+url.quote(default_entity_did2) - make_test_post_and_get(api, request_body, paramter, get_request) \ No newline at end of file + get_request = "entity_did=" + url.quote(default_entity_did2) + make_test_post_and_get(api, request_body, paramter, get_request)