From 1904a6ef9a1539a7a572651103bafc011c4e2d42 Mon Sep 17 00:00:00 2001 From: "Yashmeet ." Date: Thu, 17 Sep 2026 20:38:47 +0530 Subject: [PATCH 1/9] add instruction source attribute to ExtensionSourceMapping --- src/sap_cloud_sdk/core/telemetry/__init__.py | 4 +++ .../core/telemetry/extensions.py | 8 +++++ src/sap_cloud_sdk/extensibility/_models.py | 31 +++++++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/src/sap_cloud_sdk/core/telemetry/__init__.py b/src/sap_cloud_sdk/core/telemetry/__init__.py index ad8a88e6..f141334f 100644 --- a/src/sap_cloud_sdk/core/telemetry/__init__.py +++ b/src/sap_cloud_sdk/core/telemetry/__init__.py @@ -44,6 +44,8 @@ ATTR_SUMMARY_HOOK_CALL_COUNT, ATTR_SUMMARY_HAS_INSTRUCTION, ATTR_SUMMARY_JOULE_STUDIO_GSID, + ATTR_SUMMARY_IS_EXTENSION, + ATTR_SUMMARY_SOLUTION_ID, resolve_source_info, build_extension_span_attributes, reset_tool_call_metrics, @@ -98,6 +100,8 @@ "ATTR_SUMMARY_HOOK_CALL_COUNT", "ATTR_SUMMARY_HAS_INSTRUCTION", "ATTR_SUMMARY_JOULE_STUDIO_GSID", + "ATTR_SUMMARY_IS_EXTENSION", + "ATTR_SUMMARY_SOLUTION_ID", "resolve_source_info", "build_extension_span_attributes", "reset_tool_call_metrics", diff --git a/src/sap_cloud_sdk/core/telemetry/extensions.py b/src/sap_cloud_sdk/core/telemetry/extensions.py index 6c77f159..96b2a81f 100644 --- a/src/sap_cloud_sdk/core/telemetry/extensions.py +++ b/src/sap_cloud_sdk/core/telemetry/extensions.py @@ -218,6 +218,8 @@ def get_extension_context() -> dict[str, Any] | None: ATTR_SUMMARY_HOOK_CALL_COUNT = "sap.extension.summary.hookCallCount" ATTR_SUMMARY_HAS_INSTRUCTION = "sap.extension.summary.hasInstruction" ATTR_SUMMARY_JOULE_STUDIO_GSID = "sap.extension.joule_studio_gsid" +ATTR_SUMMARY_IS_EXTENSION = "sap.extension.isExtension" +ATTR_SUMMARY_SOLUTION_ID = "sap.extension.solutionId" # --------------------------------------------------------------------------- # Private state @@ -614,6 +616,7 @@ def emit_extensions_summary_span( has_instruction: bool, total_duration_ms: float, joule_studio_gsid: str = "", + solution_id: str = "", ) -> None: """Emit a sibling summary span with aggregate extension metrics. @@ -637,6 +640,8 @@ def emit_extensions_summary_span( operations. joule_studio_gsid: Global solution ID of Joule Studio (empty string if not available). + solution_id: Solution ID of the contributing extension (empty string + if not available). """ total = tool_call_count + hook_call_count + (1 if has_instruction else 0) attrs = { @@ -645,9 +650,12 @@ def emit_extensions_summary_span( ATTR_SUMMARY_TOOL_CALL_COUNT: tool_call_count, ATTR_SUMMARY_HOOK_CALL_COUNT: hook_call_count, ATTR_SUMMARY_HAS_INSTRUCTION: has_instruction, + ATTR_SUMMARY_IS_EXTENSION: True, } if joule_studio_gsid: attrs[ATTR_SUMMARY_JOULE_STUDIO_GSID] = joule_studio_gsid + if solution_id: + attrs[ATTR_SUMMARY_SOLUTION_ID] = solution_id span = _tracer.start_span("agent_extensions_summary", attributes=attrs) span.end() diff --git a/src/sap_cloud_sdk/extensibility/_models.py b/src/sap_cloud_sdk/extensibility/_models.py index 771aa1c4..a8122ee2 100644 --- a/src/sap_cloud_sdk/extensibility/_models.py +++ b/src/sap_cloud_sdk/extensibility/_models.py @@ -500,16 +500,19 @@ class ExtensionSourceMapping: (e.g., ``"create_ticket"``). Hook keys are hook IDs (UUIDs) (e.g., ``"3f5c8c8a-7b4d-4f9c-a4c0-7d5cb1a39f7e"``). + Instruction keys are extension instance IDs (e.g., ``"ext-instance-1"``). Values are :class:`ExtensionSourceInfo` objects containing the extension's name, version, and unique identifier. Attributes: tools: Mapping of tool name to extension source info. hooks: Mapping of hook ID to extension source info. + instructions: Mapping of extension instance ID to extension source info. """ tools: Dict[str, ExtensionSourceInfo] = field(default_factory=dict) hooks: Dict[str, ExtensionSourceInfo] = field(default_factory=dict) + instructions: Dict[str, ExtensionSourceInfo] = field(default_factory=dict) @classmethod def from_dict(cls, obj: Dict[str, Any]) -> ExtensionSourceMapping: @@ -531,6 +534,13 @@ def from_dict(cls, obj: Dict[str, Any]) -> ExtensionSourceMapping: "extensionVersion": "1", "extensionId": "a1b2c3d4-..." } + }, + "instructions": { + "ext-instance-1": { + "extensionName": "ServiceNow Extension", + "extensionVersion": "1.0.0", + "extensionId": "ext-instance-1" + } } } @@ -545,9 +555,11 @@ def from_dict(cls, obj: Dict[str, Any]) -> ExtensionSourceMapping: """ raw_tools = obj.get("tools", {}) raw_hooks = obj.get("hooks", {}) + raw_instructions = obj.get("instructions", {}) return cls( tools={k: ExtensionSourceInfo.from_value(v) for k, v in raw_tools.items()}, hooks={k: ExtensionSourceInfo.from_value(v) for k, v in raw_hooks.items()}, + instructions={k: ExtensionSourceInfo.from_value(v) for k, v in raw_instructions.items()}, ) @@ -812,3 +824,22 @@ def get_source_info_for_hook(self, hook_id: str) -> Optional[ExtensionSourceInfo if self.source and hook_id in self.source.hooks: return self.source.hooks[hook_id] return None + + def get_source_info_for_instruction(self, extension_id: str) -> Optional[ExtensionSourceInfo]: + """Look up the full source info for a specific instruction contributor. + + Returns the :class:`ExtensionSourceInfo` containing extension name, + version, and ID for the extension that contributed an instruction + fragment. Returns ``None`` when source mapping is not available or + the extension ID is not found. + + Args: + extension_id: The extension instance ID used as the key in + ``source.instructions`` (e.g., ``"ext-instance-1"``). + + Returns: + :class:`ExtensionSourceInfo` for the instruction contributor, or ``None``. + """ + if self.source and extension_id in self.source.instructions: + return self.source.instructions[extension_id] + return None From 59bb5c4d854a9f53e2182c0eabee62b105c6602e Mon Sep 17 00:00:00 2001 From: Rishi Kunnath Date: Thu, 17 Sep 2026 23:20:33 +0530 Subject: [PATCH 2/9] instruction fix --- .../extensibility/_ums_transport.py | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/sap_cloud_sdk/extensibility/_ums_transport.py b/src/sap_cloud_sdk/extensibility/_ums_transport.py index 1db87be3..2573d4e0 100644 --- a/src/sap_cloud_sdk/extensibility/_ums_transport.py +++ b/src/sap_cloud_sdk/extensibility/_ums_transport.py @@ -312,14 +312,15 @@ def _build_source_mapping( mcp_servers: List[McpServer], hooks: List[Hook], ) -> ExtensionSourceMapping: - """Build a source mapping from per-node title to contributed tools/hooks. + """Build a source mapping from per-node title to contributed tools/hooks/instructions. Each node has a ``title`` (the extension name) and a list of - ``capabilityImplementations`` whose tools and hooks were contributed - by that extension. + ``capabilityImplementations`` whose tools, hooks, and instructions were + contributed by that extension. """ tool_map: Dict[str, ExtensionSourceInfo] = {} hook_map: Dict[str, ExtensionSourceInfo] = {} + instruction_map: Dict[str, ExtensionSourceInfo] = {} for node in nodes: title = node.get("title", "") @@ -346,7 +347,19 @@ def _build_source_mapping( if hook_id: hook_map[hook_id] = source_info - return ExtensionSourceMapping(tools=tool_map, hooks=hook_map) + # Map instructions (use the extension instance id as the mapping key) + raw_instruction = cap_impl.get("instruction") + if raw_instruction and isinstance(raw_instruction, dict): + if raw_instruction.get("text"): + instruction_key = node.get("id", "") or title + if instruction_key: + instruction_map[instruction_key] = source_info + + return ExtensionSourceMapping( + tools=tool_map, + hooks=hook_map, + instructions=instruction_map, + ) def _transform_ums_response( From 1923e0f3a4437b1d9d5149366622e04d52d9d542 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath Date: Fri, 18 Sep 2026 00:41:24 +0530 Subject: [PATCH 3/9] fix uts --- tests/extensibility/unit/test_ums_parsing.py | 115 +++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/tests/extensibility/unit/test_ums_parsing.py b/tests/extensibility/unit/test_ums_parsing.py index 0cb2af6b..09b2892a 100644 --- a/tests/extensibility/unit/test_ums_parsing.py +++ b/tests/extensibility/unit/test_ums_parsing.py @@ -197,6 +197,7 @@ def test_empty_nodes(self): mapping = _build_source_mapping([], [], []) assert mapping.tools == {} assert mapping.hooks == {} + assert mapping.instructions == {} def test_null_hooks_in_capability(self): """hooks: null should not crash _build_source_mapping.""" @@ -243,6 +244,105 @@ def test_missing_extension_version_defaults_to_empty(self): mapping = _build_source_mapping(nodes, [], []) assert mapping.tools["tool_x"].extension_version == "" + def test_maps_instruction_by_instance_id(self): + nodes = [ + { + "id": "ext-instance-1", + "title": "ServiceNow Extension", + "extensionVersion": "2.1.0", + "solutionId": "sol-abc", + "jouleStudioGsid": "gsid-xyz", + "capabilityImplementations": [ + { + "capabilityId": "default", + "instruction": {"text": "Use ServiceNow tools."}, + "tools": {"additions": []}, + "hooks": [], + } + ], + } + ] + mapping = _build_source_mapping(nodes, [], []) + assert "ext-instance-1" in mapping.instructions + info = mapping.instructions["ext-instance-1"] + assert info.extension_name == "ServiceNow Extension" + assert info.extension_id == "ext-instance-1" + assert info.extension_version == "2.1.0" + assert info.solution_id == "sol-abc" + assert info.joule_studio_gsid == "gsid-xyz" + + def test_instruction_falls_back_to_title_when_id_missing(self): + """Node without an id keys the instruction map by title.""" + nodes = [ + { + "title": "Titled Extension", + "capabilityImplementations": [ + { + "capabilityId": "default", + "instruction": {"text": "Some instruction."}, + "tools": {"additions": []}, + "hooks": [], + } + ], + } + ] + mapping = _build_source_mapping(nodes, [], []) + assert "Titled Extension" in mapping.instructions + + def test_instruction_without_text_not_mapped(self): + nodes = [ + { + "id": "ext-1", + "title": "Empty Instruction", + "capabilityImplementations": [ + { + "capabilityId": "default", + "instruction": {"text": ""}, + "tools": {"additions": []}, + "hooks": [], + } + ], + } + ] + mapping = _build_source_mapping(nodes, [], []) + assert mapping.instructions == {} + + def test_missing_instruction_not_mapped(self): + nodes = [ + { + "id": "ext-1", + "title": "No Instruction", + "capabilityImplementations": [ + { + "capabilityId": "default", + "tools": {"additions": []}, + "hooks": [], + } + ], + } + ] + mapping = _build_source_mapping(nodes, [], []) + assert mapping.instructions == {} + + def test_instruction_non_dict_not_mapped(self): + """A legacy plain-string instruction should not crash or map.""" + nodes = [ + { + "id": "ext-1", + "title": "String Instruction", + "capabilityImplementations": [ + { + "capabilityId": "default", + "instruction": "plain string", + "tools": {"additions": []}, + "hooks": [], + } + ], + } + ] + mapping = _build_source_mapping(nodes, [], []) + assert mapping.instructions == {} + # --------------------------------------------------------------------------- # Tests: _transform_ums_response # --------------------------------------------------------------------------- @@ -330,6 +430,21 @@ def test_source_mapping_populated(self): assert result.source.tools["create_ticket"].extension_id == "ext-instance-1" assert result.source.tools["create_ticket"].extension_version == "2.1.0" assert "9f6e5f66-7e4f-4ef0-a9f6-e6e1c1220c11" in result.source.hooks + # Instruction attribution is mapped by extension instance id + assert "ext-instance-1" in result.source.instructions + assert ( + result.source.instructions["ext-instance-1"].extension_name + == "ServiceNow Extension" + ) + assert ( + result.source.instructions["ext-instance-1"].extension_id + == "ext-instance-1" + ) + + def test_source_instructions_empty_when_no_instruction(self): + result = _transform_ums_response(UMS_RESPONSE_NO_INSTRUCTION["data"], "default") + assert result.source is not None + assert result.source.instructions == {} def test_hooks_with_unknown_type_skipped(self): data = { From abd420f298a9b15c138e5040adf73f4e09fb9a7f Mon Sep 17 00:00:00 2001 From: Rishi Kunnath Date: Fri, 18 Sep 2026 00:44:45 +0530 Subject: [PATCH 4/9] version update --- pyproject.toml | 2 +- uv.lock | 26 ++++++-------------------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b375e35b..fce3e853 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "sap-cloud-sdk" -version = "0.53.3" +version = "0.54.0" description = "SAP Cloud SDK for Python" readme = "README.md" license = "Apache-2.0" diff --git a/uv.lock b/uv.lock index 05a51d19..c6ef820b 100644 --- a/uv.lock +++ b/uv.lock @@ -166,9 +166,9 @@ name = "aiologic" version = "0.17.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sniffio" }, - { name = "typing-extensions" }, - { name = "wrapt" }, + { name = "sniffio", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "wrapt", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f1/7a/d51f2fde1e8ae8a83431f8e97b7a71e9358cdb1d4d2ce6be387fa44d68de/aiologic-0.17.1.tar.gz", hash = "sha256:2e1b93b9e88ced318c2a63ad7b382688f40cbfe40e3d42258d49dc9c5aea179d", size = 252354, upload-time = "2026-06-27T20:41:33.25Z" } wheels = [ @@ -816,8 +816,8 @@ name = "culsans" version = "0.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiologic" }, - { name = "typing-extensions" }, + { name = "aiologic", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d9/e3/49afa1bc180e0d28008ec6bcdf82a4072d1c7a41032b5b759b60814ca4b0/culsans-0.11.0.tar.gz", hash = "sha256:0b43d0d05dce6106293d114c86e3fb4bfc63088cfe8ff08ed3fe36891447fe33", size = 107546, upload-time = "2025-12-31T23:15:38.196Z" } wheels = [ @@ -1187,9 +1187,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4e/a3/07297917485ee2ca85bc3c8dc6ed85ad3fffcf424047fba62671dba68e97/greenlet-3.5.5-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:be63afcbbccfad3dd95a1ba12ada84dab2ef32031973d80b5b92df67fa763a61", size = 294165, upload-time = "2026-08-10T13:25:17.987Z" }, { url = "https://files.pythonhosted.org/packages/db/51/6f732f9314cda54c5fd48a7620c7160f4f286967e8045ad94b9d66ce80b7/greenlet-3.5.5-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a268024ce2d7d2b04694bf1594058981a9fa663d1df4b762dee499211ed7c1c", size = 613610, upload-time = "2026-08-10T14:14:33.829Z" }, { url = "https://files.pythonhosted.org/packages/d8/c0/b27589e25d220289edcd4d582b2b17b83058d1a56d53d971b6ea1a34f10d/greenlet-3.5.5-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:35cbb8bf55ace57fbccb4fb8622c4521713acd8691e77f4696d416ea7ca527da", size = 625481, upload-time = "2026-08-10T14:27:23.647Z" }, - { url = "https://files.pythonhosted.org/packages/39/82/5c873dbb4fb001d22fbbd50e80d4c1b0181ddae106856132160f84b94e88/greenlet-3.5.5-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:abc8bc8d9f935cd685457545b6a53863a877fdc12c2c0f5ee9beee18d9db139c", size = 633329, upload-time = "2026-08-10T14:30:06.062Z" }, { url = "https://files.pythonhosted.org/packages/51/2d/f2c928218ac52f26d7a2c188c171d1b7e728b23782cb3347e7b4fce1493a/greenlet-3.5.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cc6df89ec5302337adc9cf096221cbed2510fd444b0e0f1586cf0470740864", size = 624562, upload-time = "2026-08-10T13:40:48.064Z" }, - { url = "https://files.pythonhosted.org/packages/70/12/f7df98e72a8eb4a7edfec5a08d6d1a4ab53a52c95ba0b2ea6c10b8dd9bd0/greenlet-3.5.5-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:3134291427bb0f3526e9d90311988caf336eb43730e95244997a4fb15f45144f", size = 428145, upload-time = "2026-08-10T14:30:01.071Z" }, { url = "https://files.pythonhosted.org/packages/3e/4a/92fc51d5d35912f4f06eec037ba347985defd0be47463a010a325634d9d2/greenlet-3.5.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d9b454c5fc48aeaa7c4337813dbf513a6870468e426438a04d922c6d0fe63db", size = 1584909, upload-time = "2026-08-10T14:15:04.343Z" }, { url = "https://files.pythonhosted.org/packages/ac/58/ed98b80ac5738c149a5258544843c45601ade1fd70f61740cdaead6351b3/greenlet-3.5.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03551ed792cb1b4fc0277a0c60dfd8c343894a0ba06fe60dcd22f568b433da39", size = 1651184, upload-time = "2026-08-10T13:40:28.879Z" }, { url = "https://files.pythonhosted.org/packages/d8/be/b582ceb80cefdf9d8da34078714e4b12b3d16f509dee0f65e40a5cc8fc7d/greenlet-3.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:ab3df3dffb58bf70564e93a5cec7941e4d9faa5a36cc4234a10d3131afe04f53", size = 323280, upload-time = "2026-08-10T13:26:07.495Z" }, @@ -1197,9 +1195,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2e/7e/9ecd0285e3153532ae07aeb88063c43c72b4221cf0d4d123b02f3682e3ff/greenlet-3.5.5-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:49520f0c95a48b42cf55414b8e8479beb274ea70431afc33e3f79903c71f4380", size = 295809, upload-time = "2026-08-10T13:25:34.023Z" }, { url = "https://files.pythonhosted.org/packages/35/73/60e4bbcc89252037b18087f2ec16405d5b2d5be42dde191bbf3667e96102/greenlet-3.5.5-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55272212cbc5f43d1d723725ab931f1939969b7e9523882ca58b55061769d053", size = 611910, upload-time = "2026-08-10T14:14:35.18Z" }, { url = "https://files.pythonhosted.org/packages/a4/17/cd5134be659cd4a443e7a61ae670dabec165a814c51162916d637b6dd38e/greenlet-3.5.5-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655bca754a2ef4efcb0eb48a94d3f4593536d0f3d48f8ed44343c01d16a92f95", size = 624198, upload-time = "2026-08-10T14:27:25.229Z" }, - { url = "https://files.pythonhosted.org/packages/9b/30/87c212b5c684d0e72974f1063b7a9687631e8985902c06e1016542c874e7/greenlet-3.5.5-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ca5d6ae0739e5764f2cfcfaa562ac5a990cbdaedca93251c5e3cf07c362371f", size = 629504, upload-time = "2026-08-10T14:30:07.967Z" }, { url = "https://files.pythonhosted.org/packages/78/ac/5c5b959999b6f09c3026b5dfe171575bc3121c5236ce74f495096f25b203/greenlet-3.5.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:147b25a42e5ca5be3d42356e8f608b37af715a1c196e9bf9d1627f3341adfe1d", size = 621439, upload-time = "2026-08-10T13:40:49.391Z" }, - { url = "https://files.pythonhosted.org/packages/63/2c/eb487fafc9f50ffff2b1e0b697f70fb34bf150821c08ab225aacf5583a7e/greenlet-3.5.5-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:1b5ed9162c0c098e0bbc2cf88a94f433c1b8926f831745252e099e5d83e17759", size = 432462, upload-time = "2026-08-10T14:30:02.309Z" }, { url = "https://files.pythonhosted.org/packages/c8/8b/6acf112ed8aee499f25b4d6949820fb02ac950ff9c1f3d793bd5be0599f2/greenlet-3.5.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:27493374cff1d1b7919dc8126547f2aea582737e3046147b434b1e12de56389b", size = 1581342, upload-time = "2026-08-10T14:15:05.653Z" }, { url = "https://files.pythonhosted.org/packages/b8/d7/734e5f198888876b42d7616ff6644c075baf6b8a2412deadd6b0e1b8b20c/greenlet-3.5.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:12e2ee66c2aba86133f10fd99d6a8856c6d351ffb7be0e4d52ef2cc5fbb705b2", size = 1645744, upload-time = "2026-08-10T13:40:30.353Z" }, { url = "https://files.pythonhosted.org/packages/de/30/1f42b88dc587b5899ee50616ad56ee40cafaf225df4fb829f10183c62a5c/greenlet-3.5.5-cp312-cp312-win_amd64.whl", hash = "sha256:49ddacd36af37735fab103846f4ee4d18a492dde72730d1699c0c8ebe30d9f18", size = 324171, upload-time = "2026-08-10T13:28:44.472Z" }, @@ -1207,9 +1203,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fb/3d/8cef5f724ec0d4add2af8961d504535ec60c3cca9e464f6d03bdba29d85b/greenlet-3.5.5-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:b79fd2a5bc099b5e744f34c4c9a58954a5f4cb7529fb4b6e8446057d61b6edaa", size = 294730, upload-time = "2026-08-10T13:27:51.206Z" }, { url = "https://files.pythonhosted.org/packages/88/4b/8e7aa3f514273aecff30a16ab1bac09ff54cfc7e6860fdd8058c37ff2499/greenlet-3.5.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:634cf15a233a949136879dd388e25d3296e16f3f1e217d2456797b8579ebc6ed", size = 614536, upload-time = "2026-08-10T14:14:36.589Z" }, { url = "https://files.pythonhosted.org/packages/85/48/4e95e9dd5a8a397dc6a6345dd7f1935113d0fca4f85e89d3976da9cd988d/greenlet-3.5.5-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:499adea519f748407fc6806d20eedabac2884fd73b9f38d81236e190ba20dfef", size = 626924, upload-time = "2026-08-10T14:27:27.048Z" }, - { url = "https://files.pythonhosted.org/packages/0e/84/eaa476d6bf3816828d0d70e80dcc36bf30a058233bd889e707e693f6e860/greenlet-3.5.5-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7278591501941bb2456af102bb9cd59aab48c6cfd6e2dd68fa1290bb0c49a42", size = 632726, upload-time = "2026-08-10T14:30:09.874Z" }, { url = "https://files.pythonhosted.org/packages/89/5d/398a1c71fa7a277deeb376c999979de6786f08fc2d5747a0b9d6e11738dd/greenlet-3.5.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2eabb980975cba5b93a95f6f69287d05fc05ac955bfd6a320a7c083eeb52c0b0", size = 623906, upload-time = "2026-08-10T13:40:50.501Z" }, - { url = "https://files.pythonhosted.org/packages/d0/f2/0cc2849ede68579291e9c59b3ab6ec1958f98681cca5b14d8fc75bf674a4/greenlet-3.5.5-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:4dfc7c4470354e7b09184d1a3a985761053a2fd694ddb5b5c80242afc2c8c90b", size = 434966, upload-time = "2026-08-10T14:30:03.729Z" }, { url = "https://files.pythonhosted.org/packages/04/1b/745450fc5ea9e0cb17d840d248f284db3363de736d362c7d2d883e3eadba/greenlet-3.5.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:03115c2e0a371999bf8ae616aa8d653f96641d4705c457aebaa187276e9f7537", size = 1581430, upload-time = "2026-08-10T14:15:06.853Z" }, { url = "https://files.pythonhosted.org/packages/d4/29/d51b296e3191bb15d3d81ec375af1909e4466c0f395d744ed475801798a9/greenlet-3.5.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4441153ffba21b90d3ca89fe3d31f5c093ae6c0bf0cfdfc98f54cde22f95b62e", size = 1645684, upload-time = "2026-08-10T13:40:32.133Z" }, { url = "https://files.pythonhosted.org/packages/12/63/369f1a1625e64e9e31df3963c6044056e3fdfa3fa3fdba3c54ffefa6e987/greenlet-3.5.5-cp313-cp313-win_amd64.whl", hash = "sha256:95c5b1f4b3a193f8a0c2de4bfdcb48d119f7f1063941f1de1f2168051b3e52dd", size = 324075, upload-time = "2026-08-10T13:26:58.974Z" }, @@ -1217,9 +1211,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/8c/080e881fa2be95ff1ddbd6994b2bab3b1a78df3b3fcab39306011764fcc7/greenlet-3.5.5-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d4a389a852e392a6366058651a20fa5ba40d979865aa81bea2ccbdc44805070d", size = 295309, upload-time = "2026-08-10T13:26:03.032Z" }, { url = "https://files.pythonhosted.org/packages/25/cc/0ac614e6586c0e42d4cc281a5819150f4f43685744a4c5ff77139286409d/greenlet-3.5.5-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70b157cd319873e8b544ddc2de158f55bbd0a9b0218c8ce9332039801518e328", size = 661185, upload-time = "2026-08-10T14:14:37.867Z" }, { url = "https://files.pythonhosted.org/packages/5e/b9/6808725354be8ad305dfe5172377664fc9642d4fc043be246b3314cf4482/greenlet-3.5.5-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8bdfd1424abcf26832961e766570cae79efdb9599d709088c9cb6ef82b194926", size = 673419, upload-time = "2026-08-10T14:27:28.652Z" }, - { url = "https://files.pythonhosted.org/packages/eb/52/f005d579acde46c3d1cc3cab1c9f3d5708c8a3006a4120e8cf5da801afe9/greenlet-3.5.5-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d98ef6f92e67c6dbf299dbfd8facc1b0d2d9cedf91e325e73b3d0373fe4309d8", size = 677863, upload-time = "2026-08-10T14:30:11.663Z" }, { url = "https://files.pythonhosted.org/packages/42/2e/40c509967da7f254680826a2fa0dd22138ec79946c70b97542d74cde8b43/greenlet-3.5.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:182de51c6b572a705f2fafaab2e783bcf7d2760940229dfe73086cbae037af3e", size = 670822, upload-time = "2026-08-10T13:40:51.833Z" }, - { url = "https://files.pythonhosted.org/packages/c4/8a/a75f8a2bdcef3c358a3147cdc9db3aa83755f0a038f766ab0bedb66f512c/greenlet-3.5.5-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:159df1942d88e8f784cbb38d6f18bdb365cd11319cfbb3e89623de2b97892d53", size = 480554, upload-time = "2026-08-10T14:30:05.171Z" }, { url = "https://files.pythonhosted.org/packages/2d/22/c3c2eee4a8fe191d6d1d183086c56133d646024e3d70bfd414829f64560b/greenlet-3.5.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8fec3f165dfe332e490c3247c0f6c23b0bfc45f06496ad7f00ddb00e3d35e4dc", size = 1628469, upload-time = "2026-08-10T14:15:08.11Z" }, { url = "https://files.pythonhosted.org/packages/f7/87/25babd09b94cb1f03e71db815fde463f0262e40cfbd953d58a8d77311351/greenlet-3.5.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c6ce25fee6cabc8bf22cb8b52e642cbb821be5b9aec8094d07ff03378141b8e9", size = 1691952, upload-time = "2026-08-10T13:40:33.502Z" }, { url = "https://files.pythonhosted.org/packages/2e/3d/5cc9701117ea4dc0eb7bf1f4f9b7888a6e2e5277ddfae095805ace50f2b6/greenlet-3.5.5-cp314-cp314-win_amd64.whl", hash = "sha256:7dffc5c859fe6059974df1e37d7923d654a83e2ae18fdd616994270e001115e1", size = 327458, upload-time = "2026-08-10T13:27:02.868Z" }, @@ -1227,18 +1219,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/24/e0/50cd600b469e5734c72709b6b1838b6bc63f307b573c772c3132d6ecfe92/greenlet-3.5.5-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:0e5a7de979d764aea1f5b6e95cf92b5b37741b9823702041f34b126e7f690277", size = 305471, upload-time = "2026-08-10T13:26:20.568Z" }, { url = "https://files.pythonhosted.org/packages/75/a3/77acd66dfc6387b5219b2080806c0cabb73c10eb1bb44b413c40a62015ba/greenlet-3.5.5-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fef01bd457f11fc158b130ca0027a3c365693280e8e231b65bdaf57999f39f5b", size = 672470, upload-time = "2026-08-10T14:14:39.058Z" }, { url = "https://files.pythonhosted.org/packages/b9/71/0d178142dca3ec19f46fb2212ae73d30ad53b9d548dc64804086033a7089/greenlet-3.5.5-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5173a72310725a74afc82c164f0e52cb8ad0de62f2bb623f24f6c0cc07d80272", size = 679973, upload-time = "2026-08-10T14:27:30.072Z" }, - { url = "https://files.pythonhosted.org/packages/aa/ac/0d7887aa4bbfc9eba075cc428244dfc96f623478454d5ec81180d0d6bd5a/greenlet-3.5.5-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5e9ec2e7c98e895fcea0c5cc57b2606cf86ece6d0a56578f3eb225e2af4f0387", size = 681587, upload-time = "2026-08-10T14:30:13.519Z" }, { url = "https://files.pythonhosted.org/packages/6e/31/46eb8567302eaf787abf88d09df014e14ae3baf460af1b8b0efdbd3efcd5/greenlet-3.5.5-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44f08341873200ba8a60a8bc14ace3d91f1754f7fa7bc66157714a8cd420a476", size = 676634, upload-time = "2026-08-10T13:40:53.004Z" }, - { url = "https://files.pythonhosted.org/packages/4f/18/8d58ba1c429b0383e3219a3d0e0bba241d0444d8ed05b73349953c7d7c7b/greenlet-3.5.5-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:102817506f6090b5176c746a82603341a549b40e5c3d5b72a4c672228a918c41", size = 510175, upload-time = "2026-08-10T14:30:07.047Z" }, { url = "https://files.pythonhosted.org/packages/a3/e9/b88bbf5b29970cb84172dc2c32aa3e5e579ceb94c808e81c826454138850/greenlet-3.5.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d246c0db9a2513cd45f019ba178ea4d4d4705bd210ee465e2c15d76a1ab13874", size = 1637320, upload-time = "2026-08-10T14:15:09.317Z" }, { url = "https://files.pythonhosted.org/packages/6d/8c/7631ed29cc6f0392f11830076e172ce4885e70b0bc2c1bce1731176d4b4e/greenlet-3.5.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:72507285b5caa1d17904a3f7c322ca780823a54170a0e04ec3f37bcc60d4db71", size = 1697412, upload-time = "2026-08-10T13:40:34.924Z" }, { url = "https://files.pythonhosted.org/packages/da/0f/f7dd935f9c4cb1be49098770587f54d8a78518e55c89bce86c4fb4109057/greenlet-3.5.5-cp314-cp314t-win_amd64.whl", hash = "sha256:7805655781fb8f28a55d05fe57ed61f5f10f1892fb587673e3bb5264f28041f0", size = 331514, upload-time = "2026-08-10T13:29:20.611Z" }, { url = "https://files.pythonhosted.org/packages/b7/e5/681b01f8fbc1b55232822f99e8f8afeb78a55a7c76a7bf9dbdc7ccb03a6d/greenlet-3.5.5-cp315-cp315-macosx_11_0_universal2.whl", hash = "sha256:c0db80fcd5b8aece93f66c64f78a786bbb6b96c5fe63ef5a5a4581ecf8bab206", size = 295975, upload-time = "2026-08-10T13:28:45.985Z" }, { url = "https://files.pythonhosted.org/packages/11/f2/69b488cd9e7267bf4b0fe8cdebf25d8d6df680d21bdf41150d23e23d6652/greenlet-3.5.5-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b241c32f912ada659808d68e308c568baf577eebf757d15471472de0c18cfad", size = 666823, upload-time = "2026-08-10T14:14:40.222Z" }, { url = "https://files.pythonhosted.org/packages/84/d4/d5bc2fdebbdda0c94555925ba79948b8395d75a7f6a36cc85dce5bab9f11/greenlet-3.5.5-cp315-cp315-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ef6a08349401d8eaf3cb12688ac8557de95788556b8631ef17555a4a173022c0", size = 677613, upload-time = "2026-08-10T14:27:31.543Z" }, - { url = "https://files.pythonhosted.org/packages/65/53/4e13642efc4d7ad6554ecb2242a5be42666b2e1a067323e88dfc0124a04b/greenlet-3.5.5-cp315-cp315-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37faa97daccb6d9f4c2141ce3118d023c3c5506864a7d8bdf726f665018c1f76", size = 681436, upload-time = "2026-08-10T14:30:14.839Z" }, { url = "https://files.pythonhosted.org/packages/bd/93/542d8a3a90f3b35c6ad8bf7e56a03010287f2cafa289a5b7985b5207db39/greenlet-3.5.5-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2e3d061b8e13aec2f0441689b3c71b244a20e5d274a52cb0f7e31bd1d139552", size = 675930, upload-time = "2026-08-10T13:40:54.205Z" }, - { url = "https://files.pythonhosted.org/packages/cd/32/188447c9a468d6977d2989397226b0c6b65ab6f4cf943f931643328512fc/greenlet-3.5.5-cp315-cp315-manylinux_2_39_riscv64.whl", hash = "sha256:b18007dc2473a7942fd157366b55f01da6fed7ce85318591005b419e0a439474", size = 487404, upload-time = "2026-08-10T14:30:08.903Z" }, { url = "https://files.pythonhosted.org/packages/52/b5/89c9f2e8460d71101037d47a1feed11928615a5edd42370be290e0657eeb/greenlet-3.5.5-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:9ab5f5b93655e77fe0d6c2dfd22b5eac751bb1f876d8ec21761b7c1fb9266007", size = 1633878, upload-time = "2026-08-10T14:15:10.693Z" }, { url = "https://files.pythonhosted.org/packages/b8/60/297de93f3b02ac78a5e04d32bb8bbe3080f4a73d8ed95016561463b70618/greenlet-3.5.5-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:f0e5a21bd4452a88cf032fc43c4a5b307ab1380eacb63b5988f9c0317885e773", size = 1696597, upload-time = "2026-08-10T13:40:36.252Z" }, { url = "https://files.pythonhosted.org/packages/18/25/54c6eaff4f337fb670215e89eb2d00d9499487b658e709d4b477be4a342e/greenlet-3.5.5-cp315-cp315-win_amd64.whl", hash = "sha256:469dbb0a78625642f4a626cfd0c6e8bccc0385b5e49189b6308bbe849ec88a8e", size = 327700, upload-time = "2026-08-10T13:28:06.752Z" }, @@ -1246,9 +1234,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/e2/3144c0a116067ac1e30457b0139a94d60d1d36a86e015de68e9ac87cb3bc/greenlet-3.5.5-cp315-cp315t-macosx_11_0_universal2.whl", hash = "sha256:68184dfcf50ccaa8e864770fe0633a7e27250ea9329f8192ef47ee9ecfd78e1c", size = 306387, upload-time = "2026-08-10T13:27:00.897Z" }, { url = "https://files.pythonhosted.org/packages/5c/a1/cb4223a7e9b9f43b8807e8eb212358bfe2dfaa174a9ea2889eb1714dcba2/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ec0dc0e59dc9c61af5c47348365ccbbd7addfafe0a93b00336ff3da2907bdc6", size = 676472, upload-time = "2026-08-10T14:14:41.417Z" }, { url = "https://files.pythonhosted.org/packages/9e/cd/a154b4498e5d8f12ada291cfb3b8d596eadde2177f5bf09a9be699d2a446/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e604f58e35833fc46ef20302bcb314dddbfd3fcf33a4f936216d51dd678d63ae", size = 684238, upload-time = "2026-08-10T14:27:32.946Z" }, - { url = "https://files.pythonhosted.org/packages/ce/f4/e450a68a152f819491d8c7df6a8254e761d87e6a78759268961f8c5bd4dd/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2888a3a38bc5ee5bb6c438372197152e815837e4fab7ed7a1f86ef18ffd58ad1", size = 686022, upload-time = "2026-08-10T14:30:15.96Z" }, { url = "https://files.pythonhosted.org/packages/bf/bb/b0031d260c2968a3c87deebc51d80c64e499377f993aafe06ee3b7488cc2/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:40239b5384f96da3963585cc6d7eaa9b56f8ae67e8d92cc82dd9e202fc847de3", size = 681246, upload-time = "2026-08-10T13:40:55.402Z" }, - { url = "https://files.pythonhosted.org/packages/18/23/17e63d6bf3b9c9b9dbea981b7f643a71f79603bdfb4f1c3a9cf353e22aed/greenlet-3.5.5-cp315-cp315t-manylinux_2_39_riscv64.whl", hash = "sha256:1e8d9391fe77f15649589a907cef972dbbd6352ef7ff7dc0492f658c0c26495f", size = 516951, upload-time = "2026-08-10T14:30:10.907Z" }, { url = "https://files.pythonhosted.org/packages/9a/07/da554b71ab88e649da146e1065d86a48a5c5d92e50ab74ef41b504aa7f56/greenlet-3.5.5-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:a1eaccf5c3a1d3e46dead602c72e6836731e8e245c9de6a27764567b6b62d4c0", size = 1642735, upload-time = "2026-08-10T14:15:11.92Z" }, { url = "https://files.pythonhosted.org/packages/78/76/26a3782a051677668af9d92beaa47cd87ba9dd5072f762961144a03dd4c6/greenlet-3.5.5-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:19e4e026fe20691f333b8eb1a3bc9625eceba8c3f9d62ec5a6f8581afbc6b5a5", size = 1700925, upload-time = "2026-08-10T13:40:37.656Z" }, { url = "https://files.pythonhosted.org/packages/28/d9/fe7baf4190c2ae71f267efb9de21b3172bb35bc0ed1ef53dd6027d658e33/greenlet-3.5.5-cp315-cp315t-win_amd64.whl", hash = "sha256:712aee154f648bde84634654bb38bb78c69ac640c37a45c9effed800735049d8", size = 331829, upload-time = "2026-08-10T13:26:48.851Z" }, @@ -4300,7 +4286,7 @@ wheels = [ [[package]] name = "sap-cloud-sdk" -version = "0.53.3" +version = "0.54.0" source = { editable = "." } dependencies = [ { name = "cryptography" }, From b3ce9ecc055cce1ab1996d52346d3a1a18f6d581 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath Date: Fri, 18 Sep 2026 00:53:04 +0530 Subject: [PATCH 5/9] fix formatting --- src/sap_cloud_sdk/extensibility/_models.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/sap_cloud_sdk/extensibility/_models.py b/src/sap_cloud_sdk/extensibility/_models.py index a8122ee2..7780484a 100644 --- a/src/sap_cloud_sdk/extensibility/_models.py +++ b/src/sap_cloud_sdk/extensibility/_models.py @@ -559,7 +559,10 @@ def from_dict(cls, obj: Dict[str, Any]) -> ExtensionSourceMapping: return cls( tools={k: ExtensionSourceInfo.from_value(v) for k, v in raw_tools.items()}, hooks={k: ExtensionSourceInfo.from_value(v) for k, v in raw_hooks.items()}, - instructions={k: ExtensionSourceInfo.from_value(v) for k, v in raw_instructions.items()}, + instructions={ + k: ExtensionSourceInfo.from_value(v) + for k, v in raw_instructions.items() + }, ) @@ -825,7 +828,9 @@ def get_source_info_for_hook(self, hook_id: str) -> Optional[ExtensionSourceInfo return self.source.hooks[hook_id] return None - def get_source_info_for_instruction(self, extension_id: str) -> Optional[ExtensionSourceInfo]: + def get_source_info_for_instruction( + self, extension_id: str + ) -> Optional[ExtensionSourceInfo]: """Look up the full source info for a specific instruction contributor. Returns the :class:`ExtensionSourceInfo` containing extension name, From 0fdb39396daf5067747e4118baf29d302a1bf1a3 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath Date: Fri, 18 Sep 2026 00:55:13 +0530 Subject: [PATCH 6/9] update version --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index fce3e853..fc2a0760 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "sap-cloud-sdk" -version = "0.54.0" +version = "0.55.0" description = "SAP Cloud SDK for Python" readme = "README.md" license = "Apache-2.0" diff --git a/uv.lock b/uv.lock index c6ef820b..ec06daa0 100644 --- a/uv.lock +++ b/uv.lock @@ -4286,7 +4286,7 @@ wheels = [ [[package]] name = "sap-cloud-sdk" -version = "0.54.0" +version = "0.55.0" source = { editable = "." } dependencies = [ { name = "cryptography" }, From 9ded5ac3d63dc19f41d141886b8fdd71138f4f22 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath Date: Fri, 18 Sep 2026 22:04:01 +0530 Subject: [PATCH 7/9] update version --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index fc2a0760..2b932f1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "sap-cloud-sdk" -version = "0.55.0" +version = "0.56.0" description = "SAP Cloud SDK for Python" readme = "README.md" license = "Apache-2.0" diff --git a/uv.lock b/uv.lock index ec06daa0..050b036f 100644 --- a/uv.lock +++ b/uv.lock @@ -4286,7 +4286,7 @@ wheels = [ [[package]] name = "sap-cloud-sdk" -version = "0.55.0" +version = "0.56.0" source = { editable = "." } dependencies = [ { name = "cryptography" }, From a247e83355c18aaee3a870b61e732bbd35e10df6 Mon Sep 17 00:00:00 2001 From: Rishi Kunnath Date: Fri, 18 Sep 2026 22:05:19 +0530 Subject: [PATCH 8/9] fix version --- pyproject.toml | 2 +- uv.lock | 69 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 53e8ea16..d183e1a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "sap-cloud-sdk" -version = "0.56.0" +version = "0.55.1" description = "SAP Cloud SDK for Python" readme = "README.md" license = "Apache-2.0" diff --git a/uv.lock b/uv.lock index 050b036f..48fe3b6c 100644 --- a/uv.lock +++ b/uv.lock @@ -1894,6 +1894,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a5/54/12ed58d458474aaab5c3d180173e745a4fe131bb330370596876d19ff60f/mako-1.4.1-py3-none-any.whl", hash = "sha256:a359d9a94a541213958742b2698d0a7757bb83551767bc468a74b9905aba9617", size = 80010, upload-time = "2026-08-05T06:10:58.248Z" }, ] +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + [[package]] name = "markupsafe" version = "3.0.3" @@ -1993,6 +2005,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0b/04/d6b4fb82eefe9e81807aabca1ac98f460ae0883974b83a997aaa20c52545/mcp-1.29.1-py3-none-any.whl", hash = "sha256:b6310eeb59153300c4ab8b9aec4c52f4819a2d6a8e429eb43d908bed7c783648", size = 224653, upload-time = "2026-08-24T18:30:39.573Z" }, ] +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + [[package]] name = "minio" version = "7.2.16" @@ -3873,6 +3894,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, ] +[[package]] +name = "python-odata" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mako" }, + { name = "python-dateutil" }, + { name = "requests" }, + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/ec/a60f6f4e62a3ea6c9d3b7be1744190a2f85e81de726b8496478bed151bbb/python_odata-0.8.1.tar.gz", hash = "sha256:d31d80a5edd0ff1edb1dfd9069c323f99f52f84e7471ad933b3758c2f8e95427", size = 29576, upload-time = "2026-08-04T15:42:07.469Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/01/b3e9b6401114550162c6a469739ed6e5aa781460ff141decb7a5d9ad821a/python_odata-0.8.1-py3-none-any.whl", hash = "sha256:436329006ccc98464170f61f83198c957b4a272ba7398c91ce259cc43f055459", size = 37894, upload-time = "2026-08-04T15:42:06.525Z" }, +] + [[package]] name = "pywin32" version = "312" @@ -4124,6 +4160,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, ] +[[package]] +name = "responses" +version = "0.26.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, + { name = "requests" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/47/f216a33221db8eff328987661cf18371afee89c62a62b434b963d6b509c9/responses-0.26.3.tar.gz", hash = "sha256:b0c11ca8131b8b227b8d5108e6ed39772222bd5aab030ed430e8f99057c4c409", size = 86335, upload-time = "2026-08-26T19:17:24.373Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/86/ca7958de70cb0752350575e98229368a3a2f746a2942034b3364e17312bb/responses-0.26.3-py3-none-any.whl", hash = "sha256:74474f799334ac4f37d93b6437ecc3bb1bb5c77a8d31780a338643be2dce0af8", size = 36289, upload-time = "2026-08-26T19:17:23.176Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + [[package]] name = "rpds-py" version = "2026.6.3" @@ -4286,7 +4349,7 @@ wheels = [ [[package]] name = "sap-cloud-sdk" -version = "0.56.0" +version = "0.55.1" source = { editable = "." } dependencies = [ { name = "cryptography" }, @@ -4314,6 +4377,7 @@ dependencies = [ { name = "protovalidate" }, { name = "pydantic" }, { name = "pyjwt" }, + { name = "python-odata" }, { name = "requests" }, { name = "requests-oauthlib" }, { name = "setuptools" }, @@ -4367,6 +4431,7 @@ dev = [ { name = "pytest-bdd" }, { name = "pytest-cov" }, { name = "python-dotenv" }, + { name = "responses" }, { name = "ruff" }, { name = "sqlalchemy" }, { name = "starlette" }, @@ -4406,6 +4471,7 @@ requires-dist = [ { name = "protovalidate", specifier = ">=1.0.0,<2" }, { name = "pydantic", specifier = "~=2.12.3" }, { name = "pyjwt", specifier = ">=2.13.0,<3" }, + { name = "python-odata", specifier = ">=0.7.0" }, { name = "requests", specifier = ">=2.33.0,<3" }, { name = "requests-oauthlib", specifier = ">=2.0.0,<3" }, { name = "setuptools", specifier = ">=83.0,<84" }, @@ -4436,6 +4502,7 @@ dev = [ { name = "pytest-bdd", specifier = ">=7.2.0" }, { name = "pytest-cov", specifier = ">=7.0.0" }, { name = "python-dotenv", specifier = ">=1.0.0" }, + { name = "responses", specifier = ">=0.25" }, { name = "ruff", specifier = "==0.16.0" }, { name = "sqlalchemy", specifier = ">=2.0.0" }, { name = "starlette", specifier = ">=0.40.0" }, From aa94a890c7d3164217ab2cd0eb1b9299191e7afe Mon Sep 17 00:00:00 2001 From: Rishi Kunnath Date: Fri, 18 Sep 2026 22:11:17 +0530 Subject: [PATCH 9/9] update version --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d183e1a4..82987cf3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "sap-cloud-sdk" -version = "0.55.1" +version = "0.55.2" description = "SAP Cloud SDK for Python" readme = "README.md" license = "Apache-2.0" diff --git a/uv.lock b/uv.lock index 48fe3b6c..56f9d3a1 100644 --- a/uv.lock +++ b/uv.lock @@ -4349,7 +4349,7 @@ wheels = [ [[package]] name = "sap-cloud-sdk" -version = "0.55.1" +version = "0.55.2" source = { editable = "." } dependencies = [ { name = "cryptography" },