Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions src/sap_cloud_sdk/outputmanagement/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
"""SAP Ariba Output Management Service SDK for Python."""

from .client import (
OutputManagementServiceClient,
OutputManagementServiceDefaultClient,
)
from .client_provider import (
OutputManagementServiceClientProvider,
OutputManagementServiceClientProviderBuilder,
)
from .models.output_request import OutputRequest, OutputRequestBuilder
from .models.output_response import (
OutputResponse,
OutputRequestStatusResponse,
DocumentResponse,
)
from .models.email_configuration import EmailConfiguration
from .models.attachment_config import AttachmentConfig
from .models.output_management_info import OutputManagementInfo
from .models.output_request_data import OutputRequestData
from .models.direct_share_configuration import DirectShareConfiguration
from .models.form_configuration import FormConfiguration
from .clients.email_client import EmailClient
from .config.destination_credential_config import DestinationCredentialConfig
from .constants import FileFormat, Channel, Status
from .exceptions import (
OutputManagementException,
AuthenticationException,
ValidationException,
NetworkException,
DestinationNotFoundException,
DestinationAccessException,
)

__version__ = "1.0.0"

__all__ = [
# Client classes
"OutputManagementServiceClient",
"OutputManagementServiceDefaultClient",
"OutputManagementServiceClientProvider",
"OutputManagementServiceClientProviderBuilder",
"EmailClient",
# Models
"OutputRequest",
"OutputRequestBuilder",
"OutputResponse",
"OutputRequestStatusResponse",
"DocumentResponse",
"EmailConfiguration",
"AttachmentConfig",
"OutputManagementInfo",
"OutputRequestData",
"DirectShareConfiguration",
"FormConfiguration",
# Configuration
"DestinationCredentialConfig",
# Constants/Enums
"FileFormat",
"Channel",
"Status",
# Exceptions
"OutputManagementException",
"AuthenticationException",
"ValidationException",
"NetworkException",
"DestinationNotFoundException",
"DestinationAccessException",
]




79 changes: 79 additions & 0 deletions src/sap_cloud_sdk/outputmanagement/client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
"""Main client classes."""

import logging
import requests
from abc import ABC, abstractmethod

from .clients.output_requests_client import OutputRequestsClient
from .clients.output_requests_client_impl import OutputRequestsClientImpl

logger = logging.getLogger(__name__)


class OutputManagementServiceClient(ABC):
"""Abstract base class for Output Management Service client."""

@abstractmethod
def get_output_requests_client(self) -> OutputRequestsClient:
"""Get output requests client.

Returns:
Output requests client
"""
pass


@abstractmethod
def close(self) -> None:
"""Close the client and release resources."""
pass


class OutputManagementServiceDefaultClient(OutputManagementServiceClient):
"""Default implementation of Output Management Service client."""

def __init__(
self,
base_url: str,
destination: any = None,
):
"""Initialize client.

Args:
base_url: Base URL of the service
destination: Optional Cloud SDK destination object for making requests
"""
self._base_url = base_url.rstrip("/")
self._destination = destination

# Create a simple requests session
self._session = requests.Session()

# Initialize output requests client
self._output_requests_client = OutputRequestsClientImpl(
self._session,
self._base_url,
self._destination,
)

logger.info(f"Initialized Output Management Service client for {base_url}")

def get_output_requests_client(self) -> OutputRequestsClient:
"""Get output requests client."""
return self._output_requests_client


def close(self) -> None:
"""Close the client and release resources."""
self._session.close()
logger.info("Output Management Service client closed")

def __enter__(self):
"""Context manager entry."""
return self

def __exit__(self, exc_type, exc_val, exc_tb):
"""Context manager exit."""
self.close()


92 changes: 92 additions & 0 deletions src/sap_cloud_sdk/outputmanagement/client_provider.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
"""Client provider and builder."""

import logging

from .client import (
OutputManagementServiceClient,
OutputManagementServiceDefaultClient,
)
from .config.destination_credential_config import DestinationCredentialConfig
from .exceptions import ValidationException

logger = logging.getLogger(__name__)


class OutputManagementServiceClientProvider:
"""Provider for Output Management Service client."""

def __init__(self, client: OutputManagementServiceClient):
"""Initialize provider.

Args:
client: Output Management Service client
"""
self._client = client

def get_client(self) -> OutputManagementServiceClient:
"""Get the client instance.

Returns:
Output Management Service client
"""
return self._client


class OutputManagementServiceClientProviderBuilder:
"""Builder for Output Management Service client provider."""

def __init__(self):
"""Initialize builder."""
self._destination_credential_config: DestinationCredentialConfig = None

def with_destination_credentials(
self, config: DestinationCredentialConfig
) -> "OutputManagementServiceClientProviderBuilder":
"""Configure with destination credentials.

Args:
config: Destination credential configuration

Returns:
Builder instance
"""
self._destination_credential_config = config
return self

def build(self) -> OutputManagementServiceClientProvider:
"""Build the client provider.

Returns:
Client provider

Raises:
ValidationException: If configuration is invalid
"""
if not self._destination_credential_config:
raise ValidationException(
"Destination credentials must be configured",
error_code="MISSING_CONFIGURATION",
)

# For destination credentials, use SAP Cloud SDK
logger.info("Using destination credential configuration")

# Get the destination object - it handles authentication automatically
http_destination = self._destination_credential_config.get_destination()

# Get the base URL from destinatiozxn
base_url = self._destination_credential_config.get_base_url()
logger.info(f"Retrieved destination base URL: {base_url}")

# Build client with destination object
# The destination object handles auth automatically
client = OutputManagementServiceDefaultClient(
base_url=base_url,
destination=http_destination,
)

logger.info("Built Output Management Service client provider")

return OutputManagementServiceClientProvider(client)


11 changes: 11 additions & 0 deletions src/sap_cloud_sdk/outputmanagement/clients/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""Client implementations."""

from .output_requests_client import OutputRequestsClient
from .output_requests_client_impl import OutputRequestsClientImpl
from .email_client import EmailClient

__all__ = [
"OutputRequestsClient",
"OutputRequestsClientImpl",
"EmailClient",
]
Loading