Skip to content

Commit 149985b

Browse files
feat: added route for layout metadata
1 parent 4310feb commit 149985b

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

python_fm_dapi_weaver/controllers/index.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
update_record,
88
delete_record,
99
upload_container,
10-
fetch_layouts
10+
fetch_layouts,
11+
fetch_layout_metadata
1112
)
1213

1314
# List of method names that do not require token/session validation.
@@ -24,7 +25,8 @@
2425
"signin": signin,
2526
"signout" : signout,
2627
"uploadContainer":upload_container,
27-
"fetchLayouts": fetch_layouts
28+
"fetchLayouts": fetch_layouts,
29+
"fetchLayoutMetadata": fetch_layout_metadata
2830

2931
}
3032

python_fm_dapi_weaver/controllers/records.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,9 @@ async def upload_container(req: Request):
321321
async def fetch_layouts(req: Request):
322322
data = req.state.body
323323
token = req.state.fmSessionToken
324+
method_body = data.get("methodBody", {})
324325
fm_server = data.get("fmServer")
325-
database = data.get("database")
326+
database = method_body.get("database")
326327

327328
validate_required_params({
328329
"fmSessionToken": token,
@@ -346,4 +347,38 @@ async def fetch_layouts(req: Request):
346347
}
347348

348349
except requests.HTTPError as e:
349-
raise handle_api_error(e,"An error occurred while fetching the layouts.")
350+
raise handle_api_error(e,"An error occurred while fetching the layouts.")
351+
352+
async def fetch_layout_metadata(req: Request):
353+
data = req.state.body
354+
token = req.state.fmSessionToken
355+
fm_server = data.get("fmServer")
356+
method_body = data.get("methodBody", {})
357+
358+
database = method_body.get("database")
359+
layout = method_body.get("layout")
360+
361+
validate_required_params({
362+
"fmSessionToken": token,
363+
"fmServer": fm_server,
364+
"database": database,
365+
"layout": layout
366+
})
367+
368+
apiUrl = f"https://{fm_server}/fmi/data/vLatest/databases/{database}/layouts/{layout}"
369+
370+
headers = {
371+
"Authorization": f"Bearer {token}"
372+
}
373+
374+
try:
375+
response = requests.get(apiUrl, headers=headers, verify=False)
376+
response.raise_for_status()
377+
json_data = response.json()
378+
return {
379+
"layoutMetadata": json_data["response"]["layout"],
380+
"session": token
381+
}
382+
383+
except requests.HTTPError as e:
384+
raise handle_api_error(e,"An error occurred while fetching the layout metadata.")

0 commit comments

Comments
 (0)