From 149985b1636e2aa634678536d99f6ee22d4e09b0 Mon Sep 17 00:00:00 2001 From: BasudevBharatBhushan Date: Sun, 29 Jun 2025 18:00:35 +0530 Subject: [PATCH] feat: added route for layout metadata --- python_fm_dapi_weaver/controllers/index.py | 6 ++- python_fm_dapi_weaver/controllers/records.py | 39 +++++++++++++++++++- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/python_fm_dapi_weaver/controllers/index.py b/python_fm_dapi_weaver/controllers/index.py index e850d88..4e42a25 100644 --- a/python_fm_dapi_weaver/controllers/index.py +++ b/python_fm_dapi_weaver/controllers/index.py @@ -7,7 +7,8 @@ update_record, delete_record, upload_container, - fetch_layouts + fetch_layouts, + fetch_layout_metadata ) # List of method names that do not require token/session validation. @@ -24,7 +25,8 @@ "signin": signin, "signout" : signout, "uploadContainer":upload_container, - "fetchLayouts": fetch_layouts + "fetchLayouts": fetch_layouts, + "fetchLayoutMetadata": fetch_layout_metadata } diff --git a/python_fm_dapi_weaver/controllers/records.py b/python_fm_dapi_weaver/controllers/records.py index 237ed76..0d8dc25 100644 --- a/python_fm_dapi_weaver/controllers/records.py +++ b/python_fm_dapi_weaver/controllers/records.py @@ -321,8 +321,9 @@ async def upload_container(req: Request): async def fetch_layouts(req: Request): data = req.state.body token = req.state.fmSessionToken + method_body = data.get("methodBody", {}) fm_server = data.get("fmServer") - database = data.get("database") + database = method_body.get("database") validate_required_params({ "fmSessionToken": token, @@ -346,4 +347,38 @@ async def fetch_layouts(req: Request): } except requests.HTTPError as e: - raise handle_api_error(e,"An error occurred while fetching the layouts.") \ No newline at end of file + raise handle_api_error(e,"An error occurred while fetching the layouts.") + +async def fetch_layout_metadata(req: Request): + data = req.state.body + token = req.state.fmSessionToken + fm_server = data.get("fmServer") + method_body = data.get("methodBody", {}) + + database = method_body.get("database") + layout = method_body.get("layout") + + validate_required_params({ + "fmSessionToken": token, + "fmServer": fm_server, + "database": database, + "layout": layout + }) + + apiUrl = f"https://{fm_server}/fmi/data/vLatest/databases/{database}/layouts/{layout}" + + headers = { + "Authorization": f"Bearer {token}" + } + + try: + response = requests.get(apiUrl, headers=headers, verify=False) + response.raise_for_status() + json_data = response.json() + return { + "layoutMetadata": json_data["response"]["layout"], + "session": token + } + + except requests.HTTPError as e: + raise handle_api_error(e,"An error occurred while fetching the layout metadata.") \ No newline at end of file