We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
WS id can be taken from url
**Describe the bug**
When using the 'second' swagger api (https://<azure_tre_fqdn>/api/workspaces/<workspace_id>/docs), the one intended for the ws owner. The url itself contains the ws id and then it is still required for each api call

If possible to reduce this parameter it will improve usability
**Steps to reproduce**

![image](https://user-images.githubusercontent.com/13205761/159153482-a625994d-f70c-4236-b9ef-b3756575ca49.png)



--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `api_app/api/routes/api.py`
Content:
```
1 from collections import defaultdict
2 from typing import Any, DefaultDict, Dict, Optional
3 
4 from fastapi import APIRouter, Request, Depends
5 from fastapi.openapi.docs import get_swagger_ui_html, get_swagger_ui_oauth2_redirect_html
6 from fastapi.openapi.utils import get_openapi
7 
8 from api.dependencies.database import get_repository
9 from db.repositories.workspaces import WorkspaceRepository
10 from api.routes import health, workspaces, workspace_templates, workspace_service_templates, user_resource_templates, \
11     shared_services, shared_service_templates
12 from core import config
13 
14 core_tags_metadata = [
15     {"name": "health", "description": "Verify that the TRE is up and running"},
16     {"name": "workspace templates", "description": "**TRE admin** registers and can access templates"},
17     {"name": "workspace service templates", "description": "**TRE admin** registers templates and can access templates"},
18     {"name": "user resource templates", "description": "**TRE admin** registers templates and can access templates"},
19     {"name": "workspaces", "description": "**TRE admin** administers workspaces, **TRE Users** can view their own workspaces"},
20 ]
21 
22 workspace_tags_metadata = [
23     {"name": "workspaces", "description": " **Workspace Owners and Researchers** can view their own workspaces"},
24     {"name": "workspace services", "description": "**Workspace Owners** administer workspace services, **Workspace Owners and Researchers** can view services in the workspaces they belong to"},
25     {"name": "user resources", "description": "**Researchers** administer and can view their own researchers, **Workspace Owners** can view/update/delete all user resources in their workspaces"},
26     {"name": "shared services", "description": "**TRE administratiors** administer shared services"},
27 ]
28 
29 router = APIRouter()
30 
31 # Core API
32 core_router = APIRouter(prefix=config.API_PREFIX)
33 core_router.include_router(health.router, tags=["health"])
34 core_router.include_router(workspace_templates.workspace_templates_admin_router, tags=["workspace templates"])
35 core_router.include_router(workspace_service_templates.workspace_service_templates_core_router, tags=["workspace service templates"])
36 core_router.include_router(user_resource_templates.user_resource_templates_core_router, tags=["user resource templates"])
37 core_router.include_router(shared_service_templates.shared_service_templates_core_router, tags=["shared service templates"])
38 core_router.include_router(shared_services.shared_services_router, tags=["shared services"])
39 core_router.include_router(workspaces.workspaces_core_router, tags=["workspaces"])
40 core_router.include_router(workspaces.workspaces_shared_router, tags=["workspaces"])
41 
42 core_swagger_router = APIRouter()
43 
44 openapi_definitions: DefaultDict[str, Optional[Dict[str, Any]]] = defaultdict(lambda: None)
45 
46 
47 @core_swagger_router.get("/openapi.json", include_in_schema=False, name="core_openapi")
48 async def core_openapi(request: Request):
49     global openapi_definitions
50 
51     if openapi_definitions["core"] is None:
52         openapi_definitions["core"] = get_openapi(
53             title=f"{config.PROJECT_NAME}",
54             description=config.API_DESCRIPTION,
55             version=config.VERSION,
56             routes=core_router.routes,
57             tags=core_tags_metadata
58         )
59 
60     return openapi_definitions["core"]
61 
62 
63 @core_swagger_router.get("/docs", include_in_schema=False, name="core_swagger")
64 async def get_swagger(request: Request):
65     swagger_ui_html = get_swagger_ui_html(
66         openapi_url="openapi.json",
67         title=request.app.title + " - Swagger UI",
68         oauth2_redirect_url="/api/docs/oauth2-redirect",
69         init_oauth={
70             "usePkceWithAuthorizationCodeGrant": True,
71             "clientId": config.SWAGGER_UI_CLIENT_ID,
72             "scopes": ["openid", "offline_access", f"api://{config.API_CLIENT_ID}/user_impersonation"]
73         }
74     )
75 
76     return swagger_ui_html
77 
78 
79 @core_swagger_router.get('/docs/oauth2-redirect', include_in_schema=False)
80 async def swagger_ui_redirect():
81     return get_swagger_ui_oauth2_redirect_html()
82 
83 core_router.include_router(core_swagger_router)
84 router.include_router(core_router)
85 
86 # Workspace API
87 workspace_router = APIRouter(prefix=config.API_PREFIX)
88 workspace_router.include_router(workspaces.workspaces_shared_router, tags=["workspaces"])
89 workspace_router.include_router(workspaces.workspace_services_workspace_router, tags=["workspace services"])
90 workspace_router.include_router(workspaces.user_resources_workspace_router, tags=["user resources"])
91 
92 workspace_swagger_router = APIRouter()
93 
94 
95 @workspace_swagger_router.get("/workspaces/{workspace_id}/openapi.json", include_in_schema=False, name="openapi_definitions")
96 async def get_openapi_json(workspace_id: str, request: Request, workspace_repo=Depends(get_repository(WorkspaceRepository))):
97     global openapi_definitions
98 
99     if openapi_definitions[workspace_id] is None:
100 
101         openapi_definitions[workspace_id] = get_openapi(
102             title=f"{config.PROJECT_NAME} - Workspace {workspace_id}",
103             description=config.API_DESCRIPTION,
104             version=config.VERSION,
105             routes=workspace_router.routes,
106             tags=workspace_tags_metadata
107         )
108 
109         workspace = workspace_repo.get_workspace_by_id(workspace_id)
110         ws_app_reg_id = workspace.properties['app_id']
111         workspace_scopes = {
112             f"api://{ws_app_reg_id}/user_impersonation": "List and Get TRE Workspaces"
113         }
114         openapi_definitions[workspace_id]['components']['securitySchemes']['oauth2']['flows']['authorizationCode']['scopes'] = workspace_scopes
115 
116     return openapi_definitions[workspace_id]
117 
118 
119 @workspace_swagger_router.get("/workspaces/{workspace_id}/docs", include_in_schema=False, name="workspace_swagger")
120 async def get_workspace_swagger(workspace_id, request: Request, workspace_repo=Depends(get_repository(WorkspaceRepository))):
121 
122     workspace = workspace_repo.get_workspace_by_id(workspace_id)
123     ws_app_reg_id = workspace.properties['app_id']
124     swagger_ui_html = get_swagger_ui_html(
125         openapi_url="openapi.json",
126         title=request.app.title + " - Swagger UI",
127         oauth2_redirect_url="/api/docs/oauth2-redirect",
128         init_oauth={
129             "usePkceWithAuthorizationCodeGrant": True,
130             "clientId": config.SWAGGER_UI_CLIENT_ID,
131             "scopes": ["openid", "offline_access", f"api://{ws_app_reg_id}/user_impersonation"]
132         }
133     )
134 
135     return swagger_ui_html
136 
137 workspace_router.include_router(workspace_swagger_router)
138 router.include_router(workspace_router)
139
```

Path: `api_app/_version.py`
Content:
```
1 __version__ = "0.2.13"
2
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/api_app/_version.py b/api_app/_version.py
--- a/api_app/_version.py
+++ b/api_app/_version.py
@@ -1 +1 @@
-__version__ = "0.2.13"
+__version__ = "0.2.14"
diff --git a/api_app/api/routes/api.py b/api_app/api/routes/api.py
--- a/api_app/api/routes/api.py
+++ b/api_app/api/routes/api.py
@@ -113,6 +113,14 @@
         }
         openapi_definitions[workspace_id]['components']['securitySchemes']['oauth2']['flows']['authorizationCode']['scopes'] = workspace_scopes
 
+        # Add an example into every workspace_id path parameter so users don't have to cut and paste them in.
+        for route in openapi_definitions[workspace_id]['paths'].values():
+            for verb in route.values():
+                # We now have a list of parameters for each route
+                for parameter in verb['parameters']:
+                    if (parameter['name'] == 'workspace_id'):
+                        parameter['schema']['example'] = workspace_id
+
     return openapi_definitions[workspace_id]

{"golden_diff": "diff --git a/api_app/_version.py b/api_app/_version.py\n--- a/api_app/_version.py\n+++ b/api_app/_version.py\n@@ -1 +1 @@\n-__version__ = \"0.2.13\"\n+__version__ = \"0.2.14\"\ndiff --git a/api_app/api/routes/api.py b/api_app/api/routes/api.py\n--- a/api_app/api/routes/api.py\n+++ b/api_app/api/routes/api.py\n@@ -113,6 +113,14 @@\n         }\n         openapi_definitions[workspace_id]['components']['securitySchemes']['oauth2']['flows']['authorizationCode']['scopes'] = workspace_scopes\n \n+        # Add an example into every workspace_id path parameter so users don't have to cut and paste them in.\n+        for route in openapi_definitions[workspace_id]['paths'].values():\n+            for verb in route.values():\n+                # We now have a list of parameters for each route\n+                for parameter in verb['parameters']:\n+                    if (parameter['name'] == 'workspace_id'):\n+                        parameter['schema']['example'] = workspace_id\n+\n     return openapi_definitions[workspace_id]\n", "issue": "WS id can be taken from url\n**Describe the bug**\r\nWhen using the 'second' swagger api (https://<azure_tre_fqdn>/api/workspaces/<workspace_id>/docs), the one intended for the ws owner. The url itself contains the ws id and then it is still required for each api call\r\n\r\nIf possible to reduce this parameter it will improve usability\r\n**Steps to reproduce**\r\n\r\n![image](https://user-images.githubusercontent.com/13205761/159153482-a625994d-f70c-4236-b9ef-b3756575ca49.png)\r\n\r\n\n", "before_files": [{"content": "from collections import defaultdict\nfrom typing import Any, DefaultDict, Dict, Optional\n\nfrom fastapi import APIRouter, Request, Depends\nfrom fastapi.openapi.docs import get_swagger_ui_html, get_swagger_ui_oauth2_redirect_html\nfrom fastapi.openapi.utils import get_openapi\n\nfrom api.dependencies.database import get_repository\nfrom db.repositories.workspaces import WorkspaceRepository\nfrom api.routes import health, workspaces, workspace_templates, workspace_service_templates, user_resource_templates, \\\n    shared_services, shared_service_templates\nfrom core import config\n\ncore_tags_metadata = [\n    {\"name\": \"health\", \"description\": \"Verify that the TRE is up and running\"},\n    {\"name\": \"workspace templates\", \"description\": \"**TRE admin** registers and can access templates\"},\n    {\"name\": \"workspace service templates\", \"description\": \"**TRE admin** registers templates and can access templates\"},\n    {\"name\": \"user resource templates\", \"description\": \"**TRE admin** registers templates and can access templates\"},\n    {\"name\": \"workspaces\", \"description\": \"**TRE admin** administers workspaces, **TRE Users** can view their own workspaces\"},\n]\n\nworkspace_tags_metadata = [\n    {\"name\": \"workspaces\", \"description\": \" **Workspace Owners and Researchers** can view their own workspaces\"},\n    {\"name\": \"workspace services\", \"description\": \"**Workspace Owners** administer workspace services, **Workspace Owners and Researchers** can view services in the workspaces they belong to\"},\n    {\"name\": \"user resources\", \"description\": \"**Researchers** administer and can view their own researchers, **Workspace Owners** can view/update/delete all user resources in their workspaces\"},\n    {\"name\": \"shared services\", \"description\": \"**TRE administratiors** administer shared services\"},\n]\n\nrouter = APIRouter()\n\n# Core API\ncore_router = APIRouter(prefix=config.API_PREFIX)\ncore_router.include_router(health.router, tags=[\"health\"])\ncore_router.include_router(workspace_templates.workspace_templates_admin_router, tags=[\"workspace templates\"])\ncore_router.include_router(workspace_service_templates.workspace_service_templates_core_router, tags=[\"workspace service templates\"])\ncore_router.include_router(user_resource_templates.user_resource_templates_core_router, tags=[\"user resource templates\"])\ncore_router.include_router(shared_service_templates.shared_service_templates_core_router, tags=[\"shared service templates\"])\ncore_router.include_router(shared_services.shared_services_router, tags=[\"shared services\"])\ncore_router.include_router(workspaces.workspaces_core_router, tags=[\"workspaces\"])\ncore_router.include_router(workspaces.workspaces_shared_router, tags=[\"workspaces\"])\n\ncore_swagger_router = APIRouter()\n\nopenapi_definitions: DefaultDict[str, Optional[Dict[str, Any]]] = defaultdict(lambda: None)\n\n\n@core_swagger_router.get(\"/openapi.json\", include_in_schema=False, name=\"core_openapi\")\nasync def core_openapi(request: Request):\n    global openapi_definitions\n\n    if openapi_definitions[\"core\"] is None:\n        openapi_definitions[\"core\"] = get_openapi(\n            title=f\"{config.PROJECT_NAME}\",\n            description=config.API_DESCRIPTION,\n            version=config.VERSION,\n            routes=core_router.routes,\n            tags=core_tags_metadata\n        )\n\n    return openapi_definitions[\"core\"]\n\n\n@core_swagger_router.get(\"/docs\", include_in_schema=False, name=\"core_swagger\")\nasync def get_swagger(request: Request):\n    swagger_ui_html = get_swagger_ui_html(\n        openapi_url=\"openapi.json\",\n        title=request.app.title + \" - Swagger UI\",\n        oauth2_redirect_url=\"/api/docs/oauth2-redirect\",\n        init_oauth={\n            \"usePkceWithAuthorizationCodeGrant\": True,\n            \"clientId\": config.SWAGGER_UI_CLIENT_ID,\n            \"scopes\": [\"openid\", \"offline_access\", f\"api://{config.API_CLIENT_ID}/user_impersonation\"]\n        }\n    )\n\n    return swagger_ui_html\n\n\n@core_swagger_router.get('/docs/oauth2-redirect', include_in_schema=False)\nasync def swagger_ui_redirect():\n    return get_swagger_ui_oauth2_redirect_html()\n\ncore_router.include_router(core_swagger_router)\nrouter.include_router(core_router)\n\n# Workspace API\nworkspace_router = APIRouter(prefix=config.API_PREFIX)\nworkspace_router.include_router(workspaces.workspaces_shared_router, tags=[\"workspaces\"])\nworkspace_router.include_router(workspaces.workspace_services_workspace_router, tags=[\"workspace services\"])\nworkspace_router.include_router(workspaces.user_resources_workspace_router, tags=[\"user resources\"])\n\nworkspace_swagger_router = APIRouter()\n\n\n@workspace_swagger_router.get(\"/workspaces/{workspace_id}/openapi.json\", include_in_schema=False, name=\"openapi_definitions\")\nasync def get_openapi_json(workspace_id: str, request: Request, workspace_repo=Depends(get_repository(WorkspaceRepository))):\n    global openapi_definitions\n\n    if openapi_definitions[workspace_id] is None:\n\n        openapi_definitions[workspace_id] = get_openapi(\n            title=f\"{config.PROJECT_NAME} - Workspace {workspace_id}\",\n            description=config.API_DESCRIPTION,\n            version=config.VERSION,\n            routes=workspace_router.routes,\n            tags=workspace_tags_metadata\n        )\n\n        workspace = workspace_repo.get_workspace_by_id(workspace_id)\n        ws_app_reg_id = workspace.properties['app_id']\n        workspace_scopes = {\n            f\"api://{ws_app_reg_id}/user_impersonation\": \"List and Get TRE Workspaces\"\n        }\n        openapi_definitions[workspace_id]['components']['securitySchemes']['oauth2']['flows']['authorizationCode']['scopes'] = workspace_scopes\n\n    return openapi_definitions[workspace_id]\n\n\n@workspace_swagger_router.get(\"/workspaces/{workspace_id}/docs\", include_in_schema=False, name=\"workspace_swagger\")\nasync def get_workspace_swagger(workspace_id, request: Request, workspace_repo=Depends(get_repository(WorkspaceRepository))):\n\n    workspace = workspace_repo.get_workspace_by_id(workspace_id)\n    ws_app_reg_id = workspace.properties['app_id']\n    swagger_ui_html = get_swagger_ui_html(\n        openapi_url=\"openapi.json\",\n        title=request.app.title + \" - Swagger UI\",\n        oauth2_redirect_url=\"/api/docs/oauth2-redirect\",\n        init_oauth={\n            \"usePkceWithAuthorizationCodeGrant\": True,\n            \"clientId\": config.SWAGGER_UI_CLIENT_ID,\n            \"scopes\": [\"openid\", \"offline_access\", f\"api://{ws_app_reg_id}/user_impersonation\"]\n        }\n    )\n\n    return swagger_ui_html\n\nworkspace_router.include_router(workspace_swagger_router)\nrouter.include_router(workspace_router)\n", "path": "api_app/api/routes/api.py"}, {"content": "__version__ = \"0.2.13\"\n", "path": "api_app/_version.py"}], "after_files": [{"content": "from collections import defaultdict\nfrom typing import Any, DefaultDict, Dict, Optional\n\nfrom fastapi import APIRouter, Request, Depends\nfrom fastapi.openapi.docs import get_swagger_ui_html, get_swagger_ui_oauth2_redirect_html\nfrom fastapi.openapi.utils import get_openapi\n\nfrom api.dependencies.database import get_repository\nfrom db.repositories.workspaces import WorkspaceRepository\nfrom api.routes import health, workspaces, workspace_templates, workspace_service_templates, user_resource_templates, \\\n    shared_services, shared_service_templates\nfrom core import config\n\ncore_tags_metadata = [\n    {\"name\": \"health\", \"description\": \"Verify that the TRE is up and running\"},\n    {\"name\": \"workspace templates\", \"description\": \"**TRE admin** registers and can access templates\"},\n    {\"name\": \"workspace service templates\", \"description\": \"**TRE admin** registers templates and can access templates\"},\n    {\"name\": \"user resource templates\", \"description\": \"**TRE admin** registers templates and can access templates\"},\n    {\"name\": \"workspaces\", \"description\": \"**TRE admin** administers workspaces, **TRE Users** can view their own workspaces\"},\n]\n\nworkspace_tags_metadata = [\n    {\"name\": \"workspaces\", \"description\": \" **Workspace Owners and Researchers** can view their own workspaces\"},\n    {\"name\": \"workspace services\", \"description\": \"**Workspace Owners** administer workspace services, **Workspace Owners and Researchers** can view services in the workspaces they belong to\"},\n    {\"name\": \"user resources\", \"description\": \"**Researchers** administer and can view their own researchers, **Workspace Owners** can view/update/delete all user resources in their workspaces\"},\n    {\"name\": \"shared services\", \"description\": \"**TRE administratiors** administer shared services\"},\n]\n\nrouter = APIRouter()\n\n# Core API\ncore_router = APIRouter(prefix=config.API_PREFIX)\ncore_router.include_router(health.router, tags=[\"health\"])\ncore_router.include_router(workspace_templates.workspace_templates_admin_router, tags=[\"workspace templates\"])\ncore_router.include_router(workspace_service_templates.workspace_service_templates_core_router, tags=[\"workspace service templates\"])\ncore_router.include_router(user_resource_templates.user_resource_templates_core_router, tags=[\"user resource templates\"])\ncore_router.include_router(shared_service_templates.shared_service_templates_core_router, tags=[\"shared service templates\"])\ncore_router.include_router(shared_services.shared_services_router, tags=[\"shared services\"])\ncore_router.include_router(workspaces.workspaces_core_router, tags=[\"workspaces\"])\ncore_router.include_router(workspaces.workspaces_shared_router, tags=[\"workspaces\"])\n\ncore_swagger_router = APIRouter()\n\nopenapi_definitions: DefaultDict[str, Optional[Dict[str, Any]]] = defaultdict(lambda: None)\n\n\n@core_swagger_router.get(\"/openapi.json\", include_in_schema=False, name=\"core_openapi\")\nasync def core_openapi(request: Request):\n    global openapi_definitions\n\n    if openapi_definitions[\"core\"] is None:\n        openapi_definitions[\"core\"] = get_openapi(\n            title=f\"{config.PROJECT_NAME}\",\n            description=config.API_DESCRIPTION,\n            version=config.VERSION,\n            routes=core_router.routes,\n            tags=core_tags_metadata\n        )\n\n    return openapi_definitions[\"core\"]\n\n\n@core_swagger_router.get(\"/docs\", include_in_schema=False, name=\"core_swagger\")\nasync def get_swagger(request: Request):\n    swagger_ui_html = get_swagger_ui_html(\n        openapi_url=\"openapi.json\",\n        title=request.app.title + \" - Swagger UI\",\n        oauth2_redirect_url=\"/api/docs/oauth2-redirect\",\n        init_oauth={\n            \"usePkceWithAuthorizationCodeGrant\": True,\n            \"clientId\": config.SWAGGER_UI_CLIENT_ID,\n            \"scopes\": [\"openid\", \"offline_access\", f\"api://{config.API_CLIENT_ID}/user_impersonation\"]\n        }\n    )\n\n    return swagger_ui_html\n\n\n@core_swagger_router.get('/docs/oauth2-redirect', include_in_schema=False)\nasync def swagger_ui_redirect():\n    return get_swagger_ui_oauth2_redirect_html()\n\ncore_router.include_router(core_swagger_router)\nrouter.include_router(core_router)\n\n# Workspace API\nworkspace_router = APIRouter(prefix=config.API_PREFIX)\nworkspace_router.include_router(workspaces.workspaces_shared_router, tags=[\"workspaces\"])\nworkspace_router.include_router(workspaces.workspace_services_workspace_router, tags=[\"workspace services\"])\nworkspace_router.include_router(workspaces.user_resources_workspace_router, tags=[\"user resources\"])\n\nworkspace_swagger_router = APIRouter()\n\n\n@workspace_swagger_router.get(\"/workspaces/{workspace_id}/openapi.json\", include_in_schema=False, name=\"openapi_definitions\")\nasync def get_openapi_json(workspace_id: str, request: Request, workspace_repo=Depends(get_repository(WorkspaceRepository))):\n    global openapi_definitions\n\n    if openapi_definitions[workspace_id] is None:\n\n        openapi_definitions[workspace_id] = get_openapi(\n            title=f\"{config.PROJECT_NAME} - Workspace {workspace_id}\",\n            description=config.API_DESCRIPTION,\n            version=config.VERSION,\n            routes=workspace_router.routes,\n            tags=workspace_tags_metadata\n        )\n\n        workspace = workspace_repo.get_workspace_by_id(workspace_id)\n        ws_app_reg_id = workspace.properties['app_id']\n        workspace_scopes = {\n            f\"api://{ws_app_reg_id}/user_impersonation\": \"List and Get TRE Workspaces\"\n        }\n        openapi_definitions[workspace_id]['components']['securitySchemes']['oauth2']['flows']['authorizationCode']['scopes'] = workspace_scopes\n\n        # Add an example into every workspace_id path parameter so users don't have to cut and paste them in.\n        for route in openapi_definitions[workspace_id]['paths'].values():\n            for verb in route.values():\n                # We now have a list of parameters for each route\n                for parameter in verb['parameters']:\n                    if (parameter['name'] == 'workspace_id'):\n                        parameter['schema']['example'] = workspace_id\n\n    return openapi_definitions[workspace_id]\n\n\n@workspace_swagger_router.get(\"/workspaces/{workspace_id}/docs\", include_in_schema=False, name=\"workspace_swagger\")\nasync def get_workspace_swagger(workspace_id, request: Request, workspace_repo=Depends(get_repository(WorkspaceRepository))):\n\n    workspace = workspace_repo.get_workspace_by_id(workspace_id)\n    ws_app_reg_id = workspace.properties['app_id']\n    swagger_ui_html = get_swagger_ui_html(\n        openapi_url=\"openapi.json\",\n        title=request.app.title + \" - Swagger UI\",\n        oauth2_redirect_url=\"/api/docs/oauth2-redirect\",\n        init_oauth={\n            \"usePkceWithAuthorizationCodeGrant\": True,\n            \"clientId\": config.SWAGGER_UI_CLIENT_ID,\n            \"scopes\": [\"openid\", \"offline_access\", f\"api://{ws_app_reg_id}/user_impersonation\"]\n        }\n    )\n\n    return swagger_ui_html\n\nworkspace_router.include_router(workspace_swagger_router)\nrouter.include_router(workspace_router)\n", "path": "api_app/api/routes/api.py"}, {"content": "__version__ = \"0.2.14\"\n", "path": "api_app/_version.py"}]}