From 6a6554ed1fc8b1f25bb746be1248f82e36a69b9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=20=E6=9F=8F?= Date: Tue, 21 Nov 2023 21:20:02 +0900 Subject: [PATCH] add APIException --- backend/app/api/api_v1/routers/kintone.py | 122 +++++++++-------- backend/app/api/api_v1/routers/platform.py | 146 +++++++++++++++------ backend/app/core/config.py | 3 + 3 files changed, 177 insertions(+), 94 deletions(-) diff --git a/backend/app/api/api_v1/routers/kintone.py b/backend/app/api/api_v1/routers/kintone.py index 35a3b99..f076435 100644 --- a/backend/app/api/api_v1/routers/kintone.py +++ b/backend/app/api/api_v1/routers/kintone.py @@ -302,12 +302,15 @@ async def test(file:UploadFile= File(...),app:str=None): @r.post("/download",) -async def download(key,c:config.KINTONE_ENV=Depends(getkintoneenv)): - headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE} - params = {"fileKey":key} - url = f"{c.BASE_URL}/k/v1/file.json" - r = httpx.get(url,headers=headers,params=params) - return r.json() +async def download(request:Request,key,c:config.KINTONE_ENV=Depends(getkintoneenv)): + try: + headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE} + params = {"fileKey":key} + url = f"{c.BASE_URL}/k/v1/file.json" + r = httpx.get(url,headers=headers,params=params) + return r.json() + except Exception as e: + raise APIException('kintone:upload',request.url._url,f"Error occurred while download file.json: {str(e)}") @r.post("/upload") async def upload(request:Request,files:t.List[UploadFile] = File(...)): @@ -327,7 +330,7 @@ async def upload(request:Request,files:t.List[UploadFile] = File(...)): return {"files": [file.filename for file in files]} @r.post("/updatejscss") -async def jscss(app:str,files:t.List[UploadFile] = File(...),env = Depends(getkintoneenv)): +async def jscss(request:Request,app:str,files:t.List[UploadFile] = File(...),env = Depends(getkintoneenv)): try: jscs=[] for file in files: @@ -345,56 +348,74 @@ async def jscss(app:str,files:t.List[UploadFile] = File(...),env = Depends(getki deoployappfromkintone(app,appjscs["revision"],env) return appjscs except Exception as e: - raise HTTPException(status_code=400, detail=f"Error occurred while update file {file.filename}: {str(e)}") + raise APIException('kintone:updatejscss',request.url._url, detail=f"Error occurred while update js/css {file.filename} is not an Excel file") @r.get("/app") -async def app(app:str,c:config.KINTONE_ENV=Depends(getkintoneenv)): - headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE} - url = f"{c.BASE_URL}{config.API_V1_STR}/app.json" - params ={"id":app} - r = httpx.get(url,headers=headers,params=params) - return r.json() +async def app(request:Request,app:str,c:config.KINTONE_ENV=Depends(getkintoneenv)): + try: + headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE} + url = f"{c.BASE_URL}{config.API_V1_STR}/app.json" + params ={"id":app} + r = httpx.get(url,headers=headers,params=params) + return r.json() + except Exception as e: + raise APIException('kintone:app',request.url._url, detail=f"Error occurred while get app({c.DOMAIN_NAM}->{app}) : {str(e)}") @r.get("/allapps") -async def allapps(c:config.KINTONE_ENV=Depends(getkintoneenv)): - headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE} - url = f"{c.BASE_URL}{config.API_V1_STR}/apps.json" - r = httpx.get(url,headers=headers) - return r.json() +async def allapps(request:Request,c:config.KINTONE_ENV=Depends(getkintoneenv)): + try: + headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE} + url = f"{c.BASE_URL}{config.API_V1_STR}/apps.json" + r = httpx.get(url,headers=headers) + return r.json() + except Exception as e: + raise APIException('kintone:allapps',request.url._url, detail=f"Error occurred while get allapps({c.DOMAIN_NAM}) : {str(e)}") @r.get("/appfields") -async def appfields(app:str,env = Depends(getkintoneenv)): - return getfieldsfromkintone(app,env) +async def appfields(request:Request,app:str,env = Depends(getkintoneenv)): + try: + return getfieldsfromkintone(app,env) + except Exception as e: + raise APIException('kintone:appfields',request.url._url, detail=f"Error occurred while get app fileds({env.DOMAIN_NAM}->{app}) : {str(e)}") @r.get("/appprocess") -async def appprocess(app:str,env = Depends(getkintoneenv)): - return getprocessfromkintone(app,env) +async def appprocess(request:Request,app:str,env = Depends(getkintoneenv)): + try: + return getprocessfromkintone(app,env) + except Exception as e: + raise APIException('kintone:appprocess',request.url._url, detail=f"Error occurred while get app process({env.DOMAIN_NAM}->{app}) : {str(e)}") @r.get("/alljscss") -async def alljscs(app:str,c:config.KINTONE_ENV=Depends(getkintoneenv)): - headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE} - url = f"{c.BASE_URL}{config.API_V1_STR}/app/customize.json" - params = {"app":app} - r = httpx.get(url,headers=headers,params=params) - return r.json() +async def alljscs(request:Request,app:str,c:config.KINTONE_ENV=Depends(getkintoneenv)): + try: + headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE} + url = f"{c.BASE_URL}{config.API_V1_STR}/app/customize.json" + params = {"app":app} + r = httpx.get(url,headers=headers,params=params) + return r.json() + except Exception as e: + raise APIException('kintone:alljscss',request.url._url, detail=f"Error occurred while get app js/css({c.DOMAIN_NAM}->{app}) : {str(e)}") @r.post("/createapp",) -async def createapp(name:str,c:config.KINTONE_ENV=Depends(getkintoneenv)): - headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE,"Content-Type": "application/json"} - data = {"name":name} - url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app.json" - r = httpx.post(url,headers=headers,data=json.dumps(data)) - result = r.json() - if result.get("app") != None: - url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app/deploy.json" - data = {"apps":[result],"revert": False} +async def createapp(request:Request,name:str,c:config.KINTONE_ENV=Depends(getkintoneenv)): + try: + headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE,"Content-Type": "application/json"} + data = {"name":name} + url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app.json" r = httpx.post(url,headers=headers,data=json.dumps(data)) - return r.json + result = r.json() + if result.get("app") != None: + url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app/deploy.json" + data = {"apps":[result],"revert": False} + r = httpx.post(url,headers=headers,data=json.dumps(data)) + return r.json + except Exception as e: + raise APIException('kintone:createapp',request.url._url, detail=f"Error occurred while create app({c.DOMAIN_NAM}->{name}) : {str(e)}") property=["label","code","type","required","defaultValue","options"] @r.post("/createappfromexcel",) -async def createappfromexcel(files:t.List[UploadFile] = File(...),env = Depends(getkintoneenv)): +async def createappfromexcel(request:Request,files:t.List[UploadFile] = File(...),env = Depends(getkintoneenv)): for file in files: if file.filename.endswith('.xlsx'): try: @@ -421,14 +442,14 @@ async def createappfromexcel(files:t.List[UploadFile] = File(...),env = Depends( result["revision"] = app["revision"] deoployappfromkintone(result["app"],result["revision"],env) except Exception as e: - raise HTTPException(status_code=400, detail=f"Error occurred while parsing file {file.filename}: {str(e)}") + raise APIException('kintone:createappfromexcel',request.url._url, detail=f"Error occurred while parsing file ({env.DOMAIN_NAM}->{file.filename}) : {str(e)}") else: - raise HTTPException(status_code=400, detail=f"File {file.filename} is not an Excel file") + raise APIException('kintone:createappfromexcel',request.url._url, detail=f"File {file.filename} is not an Excel file") return result @r.post("/updateappfromexcel") -async def updateappfromexcel(app:str,files:t.List[UploadFile] = File(...),env = Depends(getkintoneenv)): +async def updateappfromexcel(request:Request,app:str,files:t.List[UploadFile] = File(...),env = Depends(getkintoneenv)): for file in files: if file.filename.endswith('.xlsx'): try: @@ -472,14 +493,13 @@ async def updateappfromexcel(app:str,files:t.List[UploadFile] = File(...),env = if deploy: result = deoployappfromkintone(app,revision,env) except Exception as e: - raise HTTPException(status_code=400, detail=f"Error occurred while parsing file {file.filename}: {str(e)}") + raise APIException('kintone:updateappfromexcel',request.url._url, detail=f"Error occurred while parsing file ({env.DOMAIN_NAM}->{file.filename}) : {str(e)}") else: - raise HTTPException(status_code=400, detail=f"File {file.filename} is not an Excel file") - + raise APIException('kintone:updateappfromexcel',request.url._url, detail=f"File {file.filename} is not an Excel file") return result @r.post("/updateprocessfromexcel",) -async def updateprocessfromexcel(app:str,env = Depends(getkintoneenv)): +async def updateprocessfromexcel(request:Request,app:str,env = Depends(getkintoneenv)): try: excel = getprocessfromexcel() @@ -510,14 +530,13 @@ async def updateprocessfromexcel(app:str,env = Depends(getkintoneenv)): if deploy: result = deoployappfromkintone(app,revision,env) except Exception as e: - raise HTTPException(status_code=400, detail=f"Error occurred : {str(e)}") + raise APIException('kintone:updateprocessfromexcel',request.url._url, detail=f"Error occurred while update process ({env.DOMAIN_NAM}->{app}) : {str(e)}") return result @r.post("/createjstokintone",) -async def createjstokintone(app:str,env:config.KINTONE_ENV = Depends(getkintoneenv)): - +async def createjstokintone(request:Request,app:str,env:config.KINTONE_ENV = Depends(getkintoneenv)): try: jscs=[] files=[] @@ -532,5 +551,4 @@ async def createjstokintone(app:str,env:config.KINTONE_ENV = Depends(getkintonee deoployappfromkintone(app,appjscs["revision"],env) return appjscs except Exception as e: - print(str(e)) - raise HTTPException(status_code=400, detail=f"Error occurred : {str(e)}") + raise APIException('kintone:createjstokintone',request.url._url, detail=f"Error occurred while create js ({env.DOMAIN_NAM}->{app}) : {str(e)}") diff --git a/backend/app/api/api_v1/routers/platform.py b/backend/app/api/api_v1/routers/platform.py index 83e258a..7fb8dc5 100644 --- a/backend/app/api/api_v1/routers/platform.py +++ b/backend/app/api/api_v1/routers/platform.py @@ -5,6 +5,7 @@ from app.db.crud import * from app.db.schemas import * from typing import List from app.core.auth import get_current_active_user,get_current_user +from app.core.apiexception import APIException platform_router = r = APIRouter() @@ -18,9 +19,11 @@ async def appsetting_details( id: int, db=Depends(get_db), ): - app = get_appsetting(db, id) - return app - + try: + app = get_appsetting(db, id) + return app + except Exception as e: + raise APIException('platform:appsettings',request.url._url,f"Error occurred while get app setting: {str(e)}") @r.post("/appsettings", response_model=App, response_model_exclude_none=True) async def appsetting_create( @@ -28,7 +31,10 @@ async def appsetting_create( app: AppBase, db=Depends(get_db), ): - return create_appsetting(db, app) + try: + return create_appsetting(db, app) + except Exception as e: + raise APIException('platform:appsettings',request.url._url,f"Error occurred while get create app setting: {str(e)}") @r.put( @@ -40,7 +46,10 @@ async def appsetting_edit( app: AppEdit, db=Depends(get_db), ): - return edit_appsetting(db, id, app) + try: + return edit_appsetting(db, id, app) + except Exception as e: + raise APIException('platform:appsettings',request.url._url,f"Error occurred while edit app setting: {str(e)}") @r.delete( @@ -51,8 +60,10 @@ async def appsettings_delete( id: int, db=Depends(get_db), ): - - return delete_appsetting(db, id) + try: + return delete_appsetting(db, id) + except Exception as e: + raise APIException('platform:appsettings',request.url._url,f"Error occurred while delete app setting: {str(e)}") @r.get( @@ -65,8 +76,11 @@ async def kintone_data( type: int, db=Depends(get_db), ): - kintone = get_kintones(db, type) - return kintone + try: + kintone = get_kintones(db, type) + return kintone + except Exception as e: + raise APIException('platform:kintone',request.url._url,f"Error occurred while get kintone env: {str(e)}") @r.get( "/actions", @@ -78,8 +92,11 @@ async def action_data( request: Request, db=Depends(get_db), ): - actions = get_actions(db) - return actions + try: + actions = get_actions(db) + return actions + except Exception as e: + raise APIException('platform:actions',request.url._url,f"Error occurred while get actions: {str(e)}") @r.get( "/flow/{flowid}", @@ -91,8 +108,11 @@ async def flow_details( flowid: str, db=Depends(get_db), ): - app = get_flow(db, flowid) - return app + try: + app = get_flow(db, flowid) + return app + except Exception as e: + raise APIException('platform:flow',request.url._url,f"Error occurred while get flow by flowid: {str(e)}") @r.get( @@ -106,10 +126,13 @@ async def flow_list( user=Depends(get_current_user), db=Depends(get_db), ): - domain = get_activedomain(db, user.id) - print("domain=>",domain) - flows = get_flows_by_app(db, domain.id, appid) - return flows + try: + domain = get_activedomain(db, user.id) + print("domain=>",domain) + flows = get_flows_by_app(db, domain.id, appid) + return flows + except Exception as e: + raise APIException('platform:flow',request.url._url,f"Error occurred while get flow by appid: {str(e)}") @r.post("/flow", response_model=Flow, response_model_exclude_none=True) @@ -119,8 +142,11 @@ async def flow_create( user=Depends(get_current_user), db=Depends(get_db), ): - domain = get_activedomain(db, user.id) - return create_flow(db, domain.id, flow) + try: + domain = get_activedomain(db, user.id) + return create_flow(db, domain.id, flow) + except Exception as e: + raise APIException('platform:flow',request.url._url,f"Error occurred while create flow: {str(e)}") @r.put( @@ -131,7 +157,10 @@ async def flow_edit( flow: FlowBase, db=Depends(get_db), ): - return edit_flow(db, flow) + try: + return edit_flow(db, flow) + except Exception as e: + raise APIException('platform:flow',request.url._url,f"Error occurred while edit flow: {str(e)}") @r.delete( @@ -142,8 +171,10 @@ async def flow_delete( flowid: str, db=Depends(get_db), ): - - return delete_flow(db, flowid) + try: + return delete_flow(db, flowid) + except Exception as e: + raise APIException('platform:flow',request.url._url,f"Error occurred while delete flow: {str(e)}") @r.get( "/domains/{tenantid}", @@ -155,8 +186,11 @@ async def domain_details( tenantid:str, db=Depends(get_db), ): - domains = get_domains(db,tenantid) - return domains + try: + domains = get_domains(db,tenantid) + return domains + except Exception as e: + raise APIException('platform:domains',request.url._url,f"Error occurred while get domains: {str(e)}") @r.post("/domain", response_model=Domain, response_model_exclude_none=True) async def domain_create( @@ -164,7 +198,10 @@ async def domain_create( domain: DomainBase, db=Depends(get_db), ): - return create_domain(db, domain) + try: + return create_domain(db, domain) + except Exception as e: + raise APIException('platform:domain',request.url._url,f"Error occurred while create domain: {str(e)}") @r.put( @@ -175,7 +212,10 @@ async def domain_edit( domain: DomainBase, db=Depends(get_db), ): - return edit_domain(db, domain) + try: + return edit_domain(db, domain) + except Exception as e: + raise APIException('platform:domain',request.url._url,f"Error occurred while edit domain: {str(e)}") @r.delete( @@ -186,8 +226,10 @@ async def domain_delete( id: int, db=Depends(get_db), ): - - return delete_domain(db,id) + try: + return delete_domain(db,id) + except Exception as e: + raise APIException('platform:domain',request.url._url,f"Error occurred while delete domain: {str(e)}") @r.get( "/domain", @@ -199,8 +241,11 @@ async def userdomain_details( user=Depends(get_current_user), db=Depends(get_db), ): - domains = get_domain(db, user.id) - return domains + try: + domains = get_domain(db, user.id) + return domains + except Exception as e: + raise APIException('platform:domain',request.url._url,f"Error occurred while get user({user.id}) domain: {str(e)}") @r.post( "/domain/{userid}", @@ -212,8 +257,11 @@ async def create_userdomain( domainids:list, db=Depends(get_db), ): - domain = add_userdomain(db, userid,domainids) - return domain + try: + domain = add_userdomain(db, userid,domainids) + return domain + except Exception as e: + raise APIException('platform:domain',request.url._url,f"Error occurred while add user({userid}) domain: {str(e)}") @r.delete( "/domain/{domainid}/{userid}", response_model_exclude_none=True @@ -224,7 +272,10 @@ async def userdomain_delete( userid: int, db=Depends(get_db), ): - return delete_userdomain(db, userid,domainid) + try: + return delete_userdomain(db, userid,domainid) + except Exception as e: + raise APIException('platform:delete',request.url._url,f"Error occurred while delete user({userid}) domain: {str(e)}") @r.get( @@ -237,8 +288,11 @@ async def get_useractivedomain( user=Depends(get_current_user), db=Depends(get_db), ): - domain = get_activedomain(db, user.id) - return domain + try: + domain = get_activedomain(db, user.id) + return domain + except Exception as e: + raise APIException('platform:activedomain',request.url._url,f"Error occurred while get user({user.id}) activedomain: {str(e)}") @r.put( "/activedomain/{domainid}", @@ -250,9 +304,11 @@ async def update_activeuserdomain( user=Depends(get_current_user), db=Depends(get_db), ): - domain = active_userdomain(db, user.id,domainid) - return domain - + try: + domain = active_userdomain(db, user.id,domainid) + return domain + except Exception as e: + raise APIException('platform:activedomain',request.url._url,f"Error occurred while update user({user.id}) activedomain: {str(e)}") @r.get( "/events", @@ -264,8 +320,11 @@ async def event_data( request: Request, db=Depends(get_db), ): - events = get_events(db) - return events + try: + events = get_events(db) + return events + except Exception as e: + raise APIException('platform:events',request.url._url,f"Error occurred while get events: {str(e)}") @r.get( @@ -279,5 +338,8 @@ async def eventactions_data( eventid: str, db=Depends(get_db), ): - actions = get_eventactions(db,eventid) - return actions \ No newline at end of file + try: + actions = get_eventactions(db,eventid) + return actions + except Exception as e: + raise APIException('platform:eventactions',request.url._url,f"Error occurred while get eventactions: {str(e)}") \ No newline at end of file diff --git a/backend/app/core/config.py b/backend/app/core/config.py index ba07025..d022148 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -26,7 +26,10 @@ class KINTONE_ENV: DOMAIN_ID = "" + DOMAIN_NAME ="" + def __init__(self,domain) -> None: + self.DOMAIN_NAME=domain.name self.DOMAIN_ID=domain.id self.BASE_URL = domain.url self.KINTONE_USER = domain.kintoneuser