From c1792a7730e1bdbcae333c82dff5d2d90f427d0d Mon Sep 17 00:00:00 2001 From: Georg-Stahn Date: Mon, 4 Dec 2023 21:54:10 +0100 Subject: [PATCH] get attached - done and health check done --- pkgs/clan-cli/clan_cli/webui/app.py | 4 +- .../clan_cli/webui/routers/sql_connect.py | 43 ++++++++++--------- pkgs/clan-cli/clan_cli/webui/sql_crud.py | 19 ++++++-- 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/webui/app.py b/pkgs/clan-cli/clan_cli/webui/app.py index eb4f2f6..7782e9d 100644 --- a/pkgs/clan-cli/clan_cli/webui/app.py +++ b/pkgs/clan-cli/clan_cli/webui/app.py @@ -34,8 +34,8 @@ async def lifespan(app: FastAPI) -> Any: def setup_app() -> FastAPI: # bind sql engine # TODO comment aut and add flag to run with pupulated data rm *.sql run pytest with marked then start clan webui - # https://docs.pytest.org/en/7.1.x/example/markers.html - sql_models.Base.metadata.drop_all(engine) + # https://docs.pytest.org/en/7.1.x/example/markers.html + # sql_models.Base.metadata.drop_all(engine) sql_models.Base.metadata.create_all(bind=engine) app = FastAPI(lifespan=lifespan) 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 4ce85f0..d5b0878 100644 --- a/pkgs/clan-cli/clan_cli/webui/routers/sql_connect.py +++ b/pkgs/clan-cli/clan_cli/webui/routers/sql_connect.py @@ -160,15 +160,17 @@ def get_entities( @router.get("/api/v1/get_entity", response_model=Optional[Entity], tags=[Tags.entities]) def get_entity( entity_did: str = "did:sov:test:1234", - skip: int = 0, - limit: int = 100, db: Session = Depends(sql_db.get_db), ) -> Optional[sql_models.Entity]: entity = sql_crud.get_entity_by_did(db, did=entity_did) return entity -@router.get("/api/v1/get_attached_entities", response_model=Optional[Entity], tags=[Tags.entities]) +@router.get( + "/api/v1/get_attached_entities", + response_model=List[Entity], + tags=[Tags.entities], +) def get_attached_entities( skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db) ) -> List[sql_models.Entity]: @@ -198,26 +200,27 @@ async def attach( limit: int = 100, db: Session = Depends(sql_db.get_db), ) -> dict[str, str]: - background_tasks.add_task( - attach_entity(entity_did, db), db, entity_did - ) + background_tasks.add_task(attach_entity, db, entity_did) return {"message": "Attaching in the background"} + # TODO -async def attach_entity(entity_did: str, db: Session) -> None: +def attach_entity(db: Session, entity_did: str) -> None: db_entity = sql_crud.set_attached_by_entity_did(db, entity_did, True) try: - while db_entity.attached: - #query status endpoint - # https://www.python-httpx.org/ - response = httpx.get(f"http://{db_entity.ip}", timeout=2) - print(response) - # test with: - # while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | nc -l -N localhost 5555 ; done - # except not reached set false - time.sleep(1) + if db_entity is not None: + while db_entity.attached: + # query status endpoint + # https://www.python-httpx.org/ + response = httpx.get(f"http://{db_entity.ip}", timeout=2) + print(response) + # test with: + # while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | nc -l -N localhost 5555 ; done + # client test (apt install python3-httpx): + # httpx http://localhost:5555 + # except not reached set false + time.sleep(1) except Exception as e: - raise e - -#async with httpx.AsyncClient() as client: -# r =await client.get \ No newline at end of file + print(e) + if db_entity is not None: + db_entity = sql_crud.set_attached_by_entity_did(db, entity_did, False) diff --git a/pkgs/clan-cli/clan_cli/webui/sql_crud.py b/pkgs/clan-cli/clan_cli/webui/sql_crud.py index e86743b..1f6cab3 100644 --- a/pkgs/clan-cli/clan_cli/webui/sql_crud.py +++ b/pkgs/clan-cli/clan_cli/webui/sql_crud.py @@ -1,3 +1,5 @@ +from sqlalchemy.sql.expression import true + from typing import List, Optional from sqlalchemy.orm import Session @@ -142,13 +144,22 @@ def get_entity_by_did(db: Session, did: str) -> Optional[sql_models.Entity]: def get_attached_entities( db: Session, skip: int = 0, limit: int = 100 ) -> List[sql_models.Entity]: - return db.query(sql_models.Entity).offset(skip).limit(limit).filter(sql_models.Entity.attached is True) + return ( + db.query(sql_models.Entity) + .filter(sql_models.Entity.attached == true()) + # https://stackoverflow.com/questions/18998010/flake8-complains-on-boolean-comparison-in-filter-clause + .offset(skip) + .limit(limit) + .all() + ) # set attached - # None if did not found - # Returns same entity if setting didnt changed something -def set_attached_by_entity_did(db: Session, entity_did: str, value: bool) -> bool: +# None if did not found +# Returns same entity if setting didnt changed something +def set_attached_by_entity_did( + db: Session, entity_did: str, value: bool +) -> Optional[sql_models.Entity]: # ste attached to true db_entity = get_entity_by_did(db, entity_did) if db_entity is not None: