Skip to content

Releases: SAP/cloud-sdk-python

v0.29.1 - June 25, 2026

25 Jun 19:47
5249611

Choose a tag to compare

Bug Fixes

  • Pass tenant during destination-based resolution — Fixed a bug where the tenant parameter was not requested and therefore not propagated to get_destination(), causing destination lookups to resolve against the wrong subaccount in multi-tenant setups. This affects auditlog_ng.create_client() when using destination based resolution.

Contributors

@betinacosta

v0.29.0 - June 24, 2026

24 Jun 11:41
101492b

Choose a tag to compare

What's New

  • omit_none parameter on mcp_tool_to_langchain (sap_cloud_sdk.agentgateway.converters): New keyword-only boolean parameter (default True) that controls whether optional MCP tool parameters with a None value are stripped before being forwarded to call_tool. Set omit_none=False to forward None values explicitly to the MCP server.

Bug Fixes

  • mcp_tool_to_langchain optional parameter leak (sap_cloud_sdk.agentgateway.converters): LangChain was forwarding None for every optional MCP tool parameter not supplied by the LLM. Optional fields in the generated Pydantic args_schema are now typed as str | None with Field(default=None), and the run closure strips None values before calling call_tool (when omit_none=True).

Contributors

@NicoleMGomes

v0.28.1 - June 23, 2026

24 Jun 11:23
1c3d4be

Choose a tag to compare

Improvements

  • Dependency updates since v0.28.0:
    • Bump pydantic-settings from 2.14.1 to 2.14.2 (#176)
    • Bump cryptography from 46.0.7 to 48.0.1 (#166)
    • Bump langsmith from 0.8.3 to 0.8.18 (#175)

Contributors

  • Application Foundation Toolkit Libraries Team

v0.28.0 - June 23, 2026

23 Jun 18:06
366b53f

Choose a tag to compare

What's New

  • Destination-based configuration for Audit Log NGcreate_client() in sap_cloud_sdk.core.auditlog_ng now accepts three new keyword arguments: destination_name, destination_instance, and fragment_name. When provided (or when the defaults destination_name="AuditLogV3_Destination" / destination_instance="default" are in effect), the function resolves endpoint, deployment_id, and namespace automatically from the named SAP Destination at subaccount level, eliminating the need to pass these values explicitly in SPII-based deployments.

Improvements

  • create_client() now documents three mutually exclusive configuration paths evaluated in order: explicit config object → destination-based resolution → explicit keyword arguments (endpoint, deployment_id, namespace).
  • deploymentRegion destination property is accepted as a fallback for deployment_id when deploymentId is absent or empty.
  • Destination import is lazy, so importing auditlog_ng in environments without the destination module installed continues to work without errors.
  • User guide (auditlog_ng/user-guide.md) updated with a new Destination-based configuration section, parameter tables, and usage examples.
  • Unit tests for create_client() extended with a TestCreateClientFromDestination suite covering happy path, deploymentRegion fallback, missing required properties, and regression tests for the existing explicit-args path.
  • starlette dev dependency bumped from 1.0.0 to 1.3.1.

Contributors

@betinacosta, @cassiofariasmachado, @NicoleMGomes

v0.27.1 - Jun 18, 2026

18 Jun 11:38
af151b4

Choose a tag to compare

Bug Fixes

  • mcp_tool_to_langchain now respects optional MCP tool parameters.
    Previously, all fields in the generated Pydantic args_schema were unconditionally marked as required (...), causing Pydantic validation errors when optional parameters were omitted. The converter now reads the "required" array from the tool's input_schema — fields listed there remain required, while all others are marked optional (str | None, defaulting to None).

    # input_schema with required + optional fields
    tool = MCPTool(
        input_schema={
            "type": "object",
            "required": ["eventid"],          # only eventid is required
            "properties": {
                "eventid": {...},
                "datafetchmode": {...},        # optional — no longer raises ValidationError
            },
        },
        ...
    )
    langchain_tool = mcp_tool_to_langchain(tool, call_tool, get_user_token)
    # calling without datafetchmode now works correctly

Contributors

@NicoleMGomes

v0.27.0 - June 17, 2026

17 Jun 14:47
12465ba

Choose a tag to compare

What's New

  • SAP Print Service module (sap_cloud_sdk.print): A new first-class integration for the SAP Print Service. Use create_client() to get a fully configured PrintClient that handles OAuth2
    token acquisition, credential resolution, and all core print operations out of the box.
  • PrintClient operations: Manage print queues (list_queues, create_queue), retrieve print profiles (get_print_profiles), upload documents with optional virus scanning (upload_document),
    and submit print jobs (create_print_task).
  • Credential loading: Credentials are resolved automatically from mounted volumes (/etc/secrets/appfnd/print/{instance}/) with fallback to environment variables
    (CLOUD_SDK_CFG_PRINT_{INSTANCE}_{FIELD}), consistent with the SDK's existing secret-resolution pattern.

Contributors

v0.26.1 - June 16, 2026

16 Jun 08:51
6e4de9d

Choose a tag to compare

Improvements

  • [DMS — Integration Tests]: The session-scoped _setup_test_repositories fixture in tests/dms/integration/conftest.py now automatically onboards a standard and a version-enabled test repository at session start and deletes them on teardown. No pre-existing repositories are required.
  • [Docs]: docs/INTEGRATION_TESTS.md updated with DMS-specific environment variable instructions and a note about the auto-repository setup.

Contributors

v0.26.0 - June 11, 2026

11 Jun 16:51
9e39c4c

Choose a tag to compare

What's New

  • sap_cloud_sdk.adms module — full-featured sync and async Python client for the SAP Advanced Document Management Service (ADM), backed by IAS X.509 client-credentials authentication and OData V4.

    Clients

    • AdmsClient (sync) and AsyncAdmsClient (async) with sub-namespaces documents, relations, jobs, and config
    • create_client() / create_async_client() factories that load IAS bindings from a mounted secret volume with CLOUD_SDK_CFG_ADMS_DEFAULT_* environment-variable fallback

    Document API

    • Document CRUD: create, get, update, delete
    • Content download URL generation; scan-state handling (PENDING / CLEAN / INFECTED)
    • get_all() transparently queries DocumentRelation?$expand=Document (the ADM service has no top-level Document collection)
    • update() returns the full entity (follows up with a GET after UpdateDocument)
    • Fields: DocumentStateText, DocumentContentHash; size fields typed as int

    DocumentRelation API

    • Full draft lifecycle: create_draft, validate_draft, activate_draft, discard_draft
    • delete_business_object_node — removes all relations for a BO node (requires system-user scope)
    • get_change_logs() and get_bo_node_change_logs() — read-only audit trails
    • New model: DraftAdministrativeData (returned by draft lifecycle responses)
    • New fields: is_active_entity, has_active_entity, has_draft_entity, document_relation_is_output_relevant, draft_messages, doc_relation_changed_by_user_name, doc_relation_changed_at_date_time

    Configuration API

    • AllowedDomain, DocumentType, BusinessObjectNodeType, DocumentTypeBusinessObjectTypeMap: full CRUD including get_by_id and update (PATCH)
    • FileExtensionPolicy CRUD: get_all, create, get, delete
    • ApplicationTenant CRUD: get_all, create, get, delete
    • mark_default(mapping_id) — sets a DocType↔BOType map as default

    Jobs API

    • ZIP_DOWNLOAD and DELETE_USER_DATA job orchestration via AdminService
    • get_status sync/async parity — both accept use_admin_service parameter

    OData query options — tiered dataclasses replace scattered keyword arguments:

    • ConfigQueryOptions (filter, top, skip)
    • RelationQueryOptions (+ select, expand)
    • DocumentQueryOptions (+ orderby)

    Authentication & token cache

    • IasTokenFetcherclient_credentials (cached) and jwt-bearer OBO (intentionally not cached; OBO tokens are user-scoped and must not be shared across pods)
    • Pluggable TokenCache protocol with InMemoryTokenCache (thread-safe); TokenCache and InMemoryTokenCache exported from sap_cloud_sdk.adms

Contributors

v0.25.2 - June 11, 2026

11 Jun 13:15
e953cfe

Choose a tag to compare

Bug Fixes

  • Fixed all ty type errors that were blocking the pre-commit hook from passing:
    • tests/agent_memory/integration/test_agentmemory_bdd.py: replaced "USER" string literal with MessageRole.USER enum value
    • tests/agentgateway/integration/test_agw_bdd.py: narrowed Optional[str] token to str before using it in a Callable[[], str] lambda
    • tests/core/integration/telemetry/_agent.py: moved top-level langgraph and langchain_core imports inside the try/except ImportError block; added # ty: ignore[unresolved-import] for optional dependencies absent from the base venv
    • tests/core/unit/data_anonymization/test_http_transport.py: annotated DummyResponse.headers as Mapping[str, str] to satisfy the _ResponseLike protocol
    • tests/dms/integration/: removed two stale # ty: ignore suppression comments

Improvements

  • CI now runs all pre-commit hooks (check-yaml, trailing whitespace, ruff format, ruff lint, ty type check) via a single uvx pre-commit run --all-files step, replacing the previous individual ruff and ty steps
  • Version-bump check now only triggers when .py, .pyi, or .proto files under src/ are modified — py.typed markers, user guides, and other non-code assets no longer require a bump

Contributors

v0.25.1 - June 10, 2026

10 Jun 13:14
608c9ee

Choose a tag to compare

Bug Fixes

  • When a global Tracer had already been set, auto_instrument was not able to merge its own resource attributes into existing ones. The fix accesses internally cached tracers to merge all resources with newly-created ones so that SDK resource attributes are present in all spans.

Contributors