77
88from .._constants import APP_PRODUCTS_KEY , RQ_PRODUCT_KEY
99from .._meta import API_VTAG
10- from ._api import get_default_product_name
1110from ._model import Product
1211
1312_logger = logging .getLogger (__name__ )
1413
1514
15+ def _get_default_product_name (app : web .Application ) -> str :
16+ product_name : str = app [f"{ APP_PRODUCTS_KEY } _default" ]
17+ return product_name
18+
19+
1620def _discover_product_by_hostname (request : web .Request ) -> str | None :
1721 products : OrderedDict [str , Product ] = request .app [APP_PRODUCTS_KEY ]
1822 #
@@ -39,24 +43,22 @@ def _discover_product_by_request_header(request: web.Request) -> str | None:
3943 return None
4044
4145
42- _INCLUDE_PATHS : set [str ] = {"/static-frontend-data.json" , "/socket.io/" }
43-
44-
4546def _get_diagnose_msg (request : web .Request ):
46- return (
47- "\n " .join (
48- [
49- f"{ request .url = } " ,
50- f"{ request .host = } " ,
51- f"{ request .remote = } " ,
52- * [f"{ k } :{ request .headers [k ][:20 ]} " for k in request .headers ],
53- f"{ request .headers .get ('X-Forwarded-Host' )= } " ,
54- f"{ request .get (RQ_PRODUCT_KEY )= } " ,
55- ]
56- ),
47+ return "\n " .join (
48+ [
49+ f"{ request .url = } " ,
50+ f"{ request .host = } " ,
51+ f"{ request .remote = } " ,
52+ * [f"{ k } :{ request .headers [k ][:20 ]} " for k in request .headers ],
53+ f"{ request .headers .get ('X-Forwarded-Host' )= } " ,
54+ f"{ request .get (RQ_PRODUCT_KEY )= } " ,
55+ ]
5756 )
5857
5958
59+ _INCLUDE_PATHS : set [str ] = {"/static-frontend-data.json" , "/socket.io/" }
60+
61+
6062@web .middleware
6163async def discover_product_middleware (request : web .Request , handler : Handler ):
6264 """
@@ -65,47 +67,39 @@ async def discover_product_middleware(request: web.Request, handler: Handler):
6567 - request[RQ_PRODUCT_KEY] is set to discovered product in 3 types of entrypoints
6668 - if no product discovered, then it is set to default
6769 """
68- request [RQ_PRODUCT_KEY ] = get_default_product_name (request .app )
6970
7071 if (
7172 # - API entrypoints
7273 # - /static info for front-end
7374 request .path .startswith (f"/{ API_VTAG } " )
7475 or request .path in _INCLUDE_PATHS
7576 ):
76- request [RQ_PRODUCT_KEY ] = _discover_product_by_request_header (
77- request
78- ) or _discover_product_by_hostname (request )
79-
80- if not request [RQ_PRODUCT_KEY ]:
81- bad_request_error = web .HTTPBadRequest (
82- reason = "web api request must define a product"
83- )
84- _logger .warning ("%s:\n %s" , bad_request_error , _get_diagnose_msg (request ))
85- raise bad_request_error
77+ request [RQ_PRODUCT_KEY ] = (
78+ _discover_product_by_request_header (request )
79+ or _discover_product_by_hostname (request )
80+ or _get_default_product_name (request .app )
81+ )
8682
87- elif (
83+ else :
8884 # - Publications entrypoint: redirections from other websites. SEE studies_access.py::access_study
8985 # - Root entrypoint: to serve front-end apps
90- request .path .startswith ("/study/" )
91- or request .path .startswith ("/view" )
92- or request .path == "/"
93- ):
86+ # request.path.startswith("/study/")
87+ # or request.path.startswith("/view")
88+ # or request.path == "/" )
9489 request [RQ_PRODUCT_KEY ] = _discover_product_by_hostname (
9590 request
96- ) and get_default_product_name (request .app )
91+ ) or _get_default_product_name (request .app )
9792
98- assert request [RQ_PRODUCT_KEY ] # nosec
93+ # FIXME: session[product]
94+ # if product_session := get_session(request).get('product_name'):
95+ # assert get_product_name(request) == product_session
9996
10097 _logger .warning (
10198 "\n %s\n %s\n %s\n " ,
10299 "------------------TESTING-------------------" ,
103100 _get_diagnose_msg (request ),
104101 "-------------------------------------------" ,
105102 )
106-
107- assert request .get (RQ_PRODUCT_KEY ) is not None or request .path .startswith ( # nosec
108- "/dev/doc"
109- )
103+ assert request [RQ_PRODUCT_KEY ] # nosec
110104
111105 return await handler (request )
0 commit comments