5
5
6
6
from datetime import datetime
7
7
from os import getenv
8
- from typing import Any , List
8
+ from typing import List
9
9
10
- from fastapi import APIRouter , FastAPI
10
+ from fastapi import APIRouter , FastAPI , HTTPException , Query
11
11
from fastapi .middleware .cors import CORSMiddleware
12
12
from pydantic import (
13
13
BaseModel ,
16
16
HttpUrl ,
17
17
NonNegativeInt
18
18
)
19
+ from requests .exceptions import HTTPError
19
20
import uvicorn
20
21
21
22
from . import AsiceType , asicverifier , META_DATA , SUMMARY
@@ -95,17 +96,16 @@ class Asice(BaseModel):
95
96
file : List [AsicFile ]
96
97
97
98
98
- StringNoneEmptySpace : Any = Field ( pattern = r'^[\w\-]+$' )
99
+ non_empty_str : str = r'^[\w\-]+$'
99
100
100
101
101
102
class AsicVerifier (BaseModel ):
102
- security_server_url : HttpUrl
103
- query_id : str = StringNoneEmptySpace
104
- x_road_instance : str = StringNoneEmptySpace
105
- member_class : str = StringNoneEmptySpace
106
- member_code : str = StringNoneEmptySpace
107
- subsystem_code : str = StringNoneEmptySpace
108
- asice_type : AsiceType = AsiceType .REQUEST
103
+ security_server_url : HttpUrl = Field (alias = 'securityServerUrl' )
104
+ query_id : str = Field (alias = 'queryId' , pattern = non_empty_str )
105
+ x_road_instance : str = Field (alias = 'xRoadInstance' , pattern = non_empty_str )
106
+ member_class : str = Field (alias = 'memberClass' , pattern = non_empty_str )
107
+ member_code : str = Field (alias = 'memberCode' , pattern = non_empty_str )
108
+ subsystem_code : str = Field (alias = 'subsystemCode' , pattern = non_empty_str )
109
109
110
110
111
111
class RestfulApi :
@@ -119,6 +119,16 @@ def app() -> FastAPI:
119
119
api : FastAPI = FastAPI (
120
120
title = SUMMARY ,
121
121
version = META_DATA ['Version' ],
122
+ contact = dict (
123
+ name = META_DATA ['Author' ],
124
+ url = META_DATA ['Home-page' ],
125
+ email = META_DATA ['Author-email' ]
126
+ ),
127
+ license_info = dict (
128
+ name = META_DATA ['License' ],
129
+ identifier = META_DATA ['License' ],
130
+ url = f"{ META_DATA ['Home-page' ]} /blob/main/LICENSE"
131
+ ),
122
132
docs_url = f'{ RESTFUL_API_PATH } /docs' ,
123
133
redoc_url = f'{ RESTFUL_API_PATH } /redoc' ,
124
134
openapi_url = f'{ RESTFUL_API_PATH } /openapi.json'
@@ -138,15 +148,20 @@ def app() -> FastAPI:
138
148
139
149
@router .post ('/' )
140
150
async def verifier (
141
- data : AsicVerifier , conf_refresh : bool = None
151
+ data : AsicVerifier ,
152
+ asice_type : AsiceType = Query (
153
+ None , alias = 'type' , description = 'Default is request'
154
+ ),
155
+ conf_refresh : bool = Query (None , description = 'Default is false' )
142
156
) -> Asice :
143
- return asicverifier (
144
- ** {
145
- key : value if key == 'asice_type' else f'{ value } '
146
- for key , value in data
147
- },
148
- conf_refresh = conf_refresh
149
- )
157
+ try :
158
+ return asicverifier (
159
+ ** {key : f'{ value } ' for key , value in data },
160
+ asice_type = asice_type if asice_type else AsiceType .REQUEST ,
161
+ conf_refresh = conf_refresh
162
+ )
163
+ except HTTPError as error :
164
+ raise HTTPException (error .response .status_code )
150
165
151
166
api .include_router (router , prefix = RESTFUL_API_PATH )
152
167
return api
0 commit comments