From 9f9b6c79da8c3a710879cac40ca417d7d4d28bc3 Mon Sep 17 00:00:00 2001 From: cb-karthikp Date: Mon, 22 Jun 2026 10:28:15 +0530 Subject: [PATCH 1/5] OTEL core changes --- README.md | 73 +++++++++ chargebee/__init__.py | 8 + chargebee/environment.py | 2 + chargebee/main.py | 6 + chargebee/request.py | 42 +++++- chargebee/telemetry/__init__.py | 50 +++++++ chargebee/telemetry/telemetry_executor.py | 175 ++++++++++++++++++++++ chargebee/telemetry/telemetry_support.py | 164 ++++++++++++++++++++ chargebee/telemetry/types.py | 76 ++++++++++ 9 files changed, 593 insertions(+), 3 deletions(-) create mode 100644 chargebee/telemetry/__init__.py create mode 100644 chargebee/telemetry/telemetry_executor.py create mode 100644 chargebee/telemetry/telemetry_support.py create mode 100644 chargebee/telemetry/types.py diff --git a/README.md b/README.md index 673c66d2..29f07f43 100644 --- a/README.md +++ b/README.md @@ -278,6 +278,79 @@ cb_client.update_retry_config(retry_config) ``` +### Telemetry (OpenTelemetry) + +Optional. Pass a `telemetry_adapter` when you want Chargebee API calls traced in your observability stack (Datadog, Splunk, Honeycomb, Jaeger, etc.). OpenTelemetry is not bundled with `chargebee` — install and configure it in your app, implement `TelemetryAdapter`, and wire it on the client. + +The SDK builds standardized span attributes (`context.start_attributes`, `result.end_attributes`) following the stable [OpenTelemetry HTTP semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/) (`url.full`, `http.request.method`, `http.response.status_code`, `server.address`, `error.type`) plus Chargebee-specific `chargebee.*` attributes — use them as-is so spans render correctly in your APM and stay consistent across SDKs. + +Spans are named `chargebee.{resource}.{operation}` (e.g. `chargebee.subscription.create`). + +#### OpenTelemetry example + +```sh +pip install chargebee opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-grpc +``` + +Configure OpenTelemetry at app startup, then pass your adapter: + +```python +# App startup — configure once +from opentelemetry import trace +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter +from opentelemetry.sdk.resources import Resource +from opentelemetry.sdk.trace import TracerProvider +from opentelemetry.sdk.trace.export import BatchSpanProcessor + +provider = TracerProvider(resource=Resource.create({"service.name": "billing-service"})) +provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter())) +trace.set_tracer_provider(provider) +``` + +```python +from chargebee import Chargebee, RequestTelemetryContext, RequestTelemetryResult, TelemetryAdapter +from opentelemetry import trace +from opentelemetry.trace import SpanKind, Status, StatusCode + + +class OtelTelemetryAdapter: + def __init__(self, tracer): + self._tracer = tracer + + def on_request_start(self, context: RequestTelemetryContext, request_headers: dict): + span = self._tracer.start_span( + context.span_name, + kind=SpanKind.CLIENT, + attributes=dict(context.start_attributes), + ) + # Inject W3C trace context into outbound headers + from opentelemetry.propagate import inject + from opentelemetry.trace import set_span_in_context + + inject(request_headers, context=set_span_in_context(span)) + return span + + def on_request_end(self, handle, result: RequestTelemetryResult): + if handle is None: + return + span = handle + for key, value in result.end_attributes.items(): + span.set_attribute(key, value) + if result.error: + span.set_status(Status(StatusCode.ERROR, result.error.message)) + else: + span.set_status(Status(StatusCode.OK)) + span.end() + + +cb_client = Chargebee( + api_key="{{api-key}}", + site="{{site}}", + telemetry_adapter=OtelTelemetryAdapter(trace.get_tracer("chargebee-python")), +) +``` + +Spans are exported by your own OpenTelemetry setup, so they flow to whatever backend you've configured (Datadog, Splunk, Honeycomb, Jaeger, etc.). The Chargebee config above stays the same regardless of backend — refer to your APM vendor's OpenTelemetry/OTLP documentation for exporter endpoints. ## Feedback diff --git a/chargebee/__init__.py b/chargebee/__init__.py index a1ea3ec3..07644d50 100644 --- a/chargebee/__init__.py +++ b/chargebee/__init__.py @@ -8,3 +8,11 @@ from chargebee.filters import Filters from chargebee.main import Chargebee from chargebee.models import * +from chargebee.telemetry import ( + CHARGEBEE_SDK_NAME, + RequestTelemetryContext, + RequestTelemetryError, + RequestTelemetryResult, + TelemetryAdapter, + TelemetryAttributeKeys, +) diff --git a/chargebee/environment.py b/chargebee/environment.py index be860d7b..fb7f1b84 100644 --- a/chargebee/environment.py +++ b/chargebee/environment.py @@ -12,10 +12,12 @@ class Environment(object): retry_config = RetryConfig() enable_debug_logs = False use_async_client = False + telemetry_adapter = None def __init__(self, options): self.api_key = options["api_key"] self.site = options["site"] + self.telemetry_adapter = None def set_api_endpoint(self): self.api_endpoint = "%s://%s.%s/api/%s" % ( diff --git a/chargebee/main.py b/chargebee/main.py index 27fff9bb..17fba076 100644 --- a/chargebee/main.py +++ b/chargebee/main.py @@ -22,8 +22,11 @@ def __init__( connection_time_out: int = None, read_time_out: int = None, use_async_client: bool = False, + telemetry_adapter=None, ): self.env = Environment({"api_key": api_key, "site": site}) + if telemetry_adapter is not None: + self.env.telemetry_adapter = telemetry_adapter if chargebee_domain is not None: self.update_chargebee_domain(chargebee_domain) if protocol is not None: @@ -179,3 +182,6 @@ def update_retry_config(self, retry_config): def update_enable_debug_logs(self, enable_debug_logs): self.env.enable_debug_logs = enable_debug_logs + + def update_telemetry_adapter(self, telemetry_adapter): + self.env.telemetry_adapter = telemetry_adapter diff --git a/chargebee/request.py b/chargebee/request.py index 6b6b6105..0e2a0f7b 100644 --- a/chargebee/request.py +++ b/chargebee/request.py @@ -3,6 +3,7 @@ from chargebee import compat, environment, util, http_request from chargebee.responses import Response +from chargebee.telemetry.telemetry_executor import execute_async, execute_sync def lowercase_keys(data): @@ -28,6 +29,9 @@ def send_list_request( isJsonRequest=False, jsonKeys=None, options=None, + resource=None, + operation=None, + telemetry_adapter=None, ): serialized = {} @@ -49,6 +53,9 @@ def send_list_request( isJsonRequest, jsonKeys, options, + resource=resource, + operation=operation, + telemetry_adapter=telemetry_adapter, ) @@ -63,6 +70,9 @@ def send( isJsonRequest=False, jsonKeys=None, options=None, + resource=None, + operation=None, + telemetry_adapter=None, ): params = lowercase_keys(params) @@ -85,11 +95,27 @@ def send( "use_async_client": env.use_async_client, } + def run_http(request_headers): + args = {**request_args, "headers": request_headers} + return http_request.request(**args) + + async def run_http_async(request_headers): + args = {**request_args, "headers": request_headers} + return await http_request.request(**args) + if env.use_async_client: async def async_request(): - response, response_headers, http_code = await http_request.request( - **request_args + response, response_headers, http_code = await execute_async( + env, + resource, + operation, + method, + url, + subDomain, + headers, + run_http_async, + telemetry_adapter, ) return Response( response_type, response, response_headers, http_code @@ -97,7 +123,17 @@ async def async_request(): return async_request() else: - response, response_headers, http_code = http_request.request(**request_args) + response, response_headers, http_code = execute_sync( + env, + resource, + operation, + method, + url, + subDomain, + headers, + run_http, + telemetry_adapter, + ) return Response(response_type, response, response_headers, http_code).parse() diff --git a/chargebee/telemetry/__init__.py b/chargebee/telemetry/__init__.py new file mode 100644 index 00000000..82658419 --- /dev/null +++ b/chargebee/telemetry/__init__.py @@ -0,0 +1,50 @@ +""" +This file is auto-generated by Chargebee. +For more information on how to make changes to this file, please see the README. +Reach out to dx@chargebee.com for any questions. +Copyright 2026 Chargebee Inc. +""" + +from .telemetry_support import ( + NO_OP_TELEMETRY_ADAPTER, + NoOpTelemetryAdapter, + TelemetryAdapter, + build_request_end_span_attributes, + build_request_start_span_attributes, + build_request_telemetry_context, + build_request_telemetry_result, + build_span_name, + extract_http_status_code, + extract_request_telemetry_error, + resolve_chargebee_api_version, +) +from .types import ( + CHARGEBEE_SDK_NAME, + TELEMETRY_SPAN_NAME_PREFIX, + BuildRequestTelemetryContextInput, + RequestTelemetryContext, + RequestTelemetryError, + RequestTelemetryResult, + TelemetryAttributeKeys, +) + +__all__ = [ + "CHARGEBEE_SDK_NAME", + "TELEMETRY_SPAN_NAME_PREFIX", + "BuildRequestTelemetryContextInput", + "NO_OP_TELEMETRY_ADAPTER", + "NoOpTelemetryAdapter", + "RequestTelemetryContext", + "RequestTelemetryError", + "RequestTelemetryResult", + "TelemetryAdapter", + "TelemetryAttributeKeys", + "build_request_end_span_attributes", + "build_request_start_span_attributes", + "build_request_telemetry_context", + "build_request_telemetry_result", + "build_span_name", + "extract_http_status_code", + "extract_request_telemetry_error", + "resolve_chargebee_api_version", +] diff --git a/chargebee/telemetry/telemetry_executor.py b/chargebee/telemetry/telemetry_executor.py new file mode 100644 index 00000000..469de6b5 --- /dev/null +++ b/chargebee/telemetry/telemetry_executor.py @@ -0,0 +1,175 @@ +"""Executes Chargebee API calls with optional telemetry adapter hooks.""" + +from __future__ import annotations + +import logging +import time +from typing import Awaitable, Callable, TypeVar +from urllib.parse import urlparse + +from chargebee import environment +from chargebee.telemetry.telemetry_support import ( + BuildRequestTelemetryContextInput, + TelemetryAdapter, + build_request_telemetry_context, + build_request_telemetry_result, + extract_http_status_code, + extract_request_telemetry_error, + resolve_chargebee_api_version, +) +from chargebee.version import VERSION + +logger = logging.getLogger(__name__) + +HttpResult = tuple[object, object, int] +SyncHttpAction = Callable[[dict[str, str] | None], HttpResult] +AsyncHttpAction = Callable[[dict[str, str] | None], Awaitable[HttpResult]] +T = TypeVar("T") + + +def resolve_adapter( + env: environment.Environment, adapter_override: TelemetryAdapter | None = None +) -> TelemetryAdapter | None: + if adapter_override is not None: + return adapter_override + return getattr(env, "telemetry_adapter", None) + + +def build_context( + env: environment.Environment, + resource: str, + operation: str, + method: str, + url: str, + subDomain: str | None, +) -> BuildRequestTelemetryContextInput: + full_url = env.api_url(url, subDomain) + parsed = urlparse(full_url) + http_url = f"{parsed.scheme}://{parsed.netloc}{parsed.path}" + server_address = parsed.hostname or parsed.netloc.split(":")[0] + api_path = f"/api/{env.API_VERSION}" + return BuildRequestTelemetryContextInput( + resource=resource, + operation=operation, + http_method=method.upper(), + http_url=http_url, + server_address=server_address, + chargebee_site=env.site, + chargebee_api_version=resolve_chargebee_api_version(api_path), # type: ignore[arg-type] + sdk_version=VERSION, + ) + + +def _start_telemetry( + env: environment.Environment, + adapter: TelemetryAdapter, + resource: str, + operation: str, + method: str, + url: str, + subDomain: str | None, + headers: dict[str, str] | None, +) -> tuple[object | None, dict[str, str]]: + telemetry_headers = dict(headers or {}) + try: + context = build_request_telemetry_context( + build_context(env, resource, operation, method, url, subDomain) + ) + handle = adapter.on_request_start(context, telemetry_headers) + return handle, telemetry_headers + except Exception as err: + logger.exception( + "Telemetry adapter on_request_start failed: %s. Continuing without telemetry.", + err, + ) + return None, dict(headers or {}) + + +def _end_success( + adapter: TelemetryAdapter, handle: object | None, start_ms: float, http_status_code: int +) -> None: + try: + adapter.on_request_end( + handle, + build_request_telemetry_result( + http_status_code, int(time.time() * 1000 - start_ms), None + ), + ) + except Exception as err: + logger.exception("Telemetry adapter on_request_end failed: %s", err) + + +def _end_failure( + adapter: TelemetryAdapter, handle: object | None, start_ms: float, err: BaseException +) -> None: + status = extract_http_status_code(err) + http_status_code = status if status is not None else 500 + try: + adapter.on_request_end( + handle, + build_request_telemetry_result( + http_status_code, + int(time.time() * 1000 - start_ms), + extract_request_telemetry_error(err), + ), + ) + except Exception as telemetry_err: + logger.exception("Telemetry adapter on_request_end failed: %s", telemetry_err) + + +def execute_sync( + env: environment.Environment, + resource: str | None, + operation: str | None, + method: str, + url: str, + subDomain: str | None, + headers: dict[str, str] | None, + action: SyncHttpAction, + adapter_override: TelemetryAdapter | None = None, +) -> HttpResult: + adapter = resolve_adapter(env, adapter_override) + if adapter is None or not resource or not operation: + return action(headers) + + start_ms = time.time() * 1000 + handle, telemetry_headers = _start_telemetry( + env, adapter, resource, operation, method, url, subDomain, headers + ) + + try: + result = action(telemetry_headers) + _end_success(adapter, handle, start_ms, result[2]) + return result + except Exception as err: + _end_failure(adapter, handle, start_ms, err) + raise + + +async def execute_async( + env: environment.Environment, + resource: str | None, + operation: str | None, + method: str, + url: str, + subDomain: str | None, + headers: dict[str, str] | None, + action: AsyncHttpAction, + adapter_override: TelemetryAdapter | None = None, +) -> HttpResult: + adapter = resolve_adapter(env, adapter_override) + if adapter is None or not resource or not operation: + return await action(headers) + + start_ms = time.time() * 1000 + handle, telemetry_headers = _start_telemetry( + env, adapter, resource, operation, method, url, subDomain, headers + ) + + try: + result = await action(telemetry_headers) + _end_success(adapter, handle, start_ms, result[2]) + return result + except Exception as err: + _end_failure(adapter, handle, start_ms, err) + raise diff --git a/chargebee/telemetry/telemetry_support.py b/chargebee/telemetry/telemetry_support.py new file mode 100644 index 00000000..fc0e74b1 --- /dev/null +++ b/chargebee/telemetry/telemetry_support.py @@ -0,0 +1,164 @@ +""" +This file is auto-generated by Chargebee. +For more information on how to make changes to this file, please see the README. +Reach out to dx@chargebee.com for any questions. +Copyright 2026 Chargebee Inc. +""" + +from __future__ import annotations + +from typing import Any, Mapping, Protocol, runtime_checkable + +from chargebee.api_error import APIError + +from .types import ( + CHARGEBEE_SDK_NAME, + BuildRequestTelemetryContextInput, + RequestTelemetryContext, + RequestTelemetryError, + RequestTelemetryResult, + TELEMETRY_SPAN_NAME_PREFIX, + TelemetryAttributeKeys, +) + + +@runtime_checkable +class TelemetryAdapter(Protocol): + """ + Optional telemetry adapter for observability integrations (e.g. OpenTelemetry). + + When not configured, the SDK skips all telemetry work — zero overhead. The SDK + stores the adapter by reference and never clones or deep-copies it. + + Implementations may inject W3C trace context headers (traceparent, tracestate) + into request_headers during on_request_start. + """ + + def on_request_start( + self, + context: RequestTelemetryContext, + request_headers: dict[str, str], + ) -> Any: + """Called once per SDK API call before the request is sent (including retries).""" + + def on_request_end(self, handle: Any, result: RequestTelemetryResult) -> None: + """Called once per SDK API call after the final response or terminal failure.""" + + +class NoOpTelemetryAdapter: + def on_request_start( + self, + context: RequestTelemetryContext, + request_headers: dict[str, str], + ) -> None: + return None + + def on_request_end(self, handle: Any, result: RequestTelemetryResult) -> None: + return None + + +NO_OP_TELEMETRY_ADAPTER = NoOpTelemetryAdapter() + + +def build_span_name(resource: str, operation: str) -> str: + return f"{TELEMETRY_SPAN_NAME_PREFIX}.{resource}.{operation}" + + +def resolve_chargebee_api_version(api_path: str) -> str: + return "v1" if api_path == "/api/v1" else "v2" + + +def build_request_start_span_attributes( + input: BuildRequestTelemetryContextInput, +) -> dict[str, str]: + return { + TelemetryAttributeKeys.URL_FULL: input.http_url, + TelemetryAttributeKeys.HTTP_REQUEST_METHOD: input.http_method, + TelemetryAttributeKeys.SERVER_ADDRESS: input.server_address, + TelemetryAttributeKeys.CHARGEBEE_SITE: input.chargebee_site, + TelemetryAttributeKeys.CHARGEBEE_API_VERSION: input.chargebee_api_version, + TelemetryAttributeKeys.CHARGEBEE_RESOURCE: input.resource, + TelemetryAttributeKeys.CHARGEBEE_OPERATION: input.operation, + TelemetryAttributeKeys.CHARGEBEE_SDK_NAME: CHARGEBEE_SDK_NAME, + TelemetryAttributeKeys.CHARGEBEE_SDK_VERSION: input.sdk_version, + } + + +def build_request_end_span_attributes( + http_status_code: int, + error: RequestTelemetryError | None, +) -> dict[str, str | int]: + attributes: dict[str, str | int] = { + TelemetryAttributeKeys.HTTP_RESPONSE_STATUS_CODE: http_status_code, + } + + if error is not None: + attributes[TelemetryAttributeKeys.ERROR_TYPE] = str(http_status_code) + if error.chargebee_error_code is not None: + attributes[TelemetryAttributeKeys.CHARGEBEE_ERROR_CODE] = ( + error.chargebee_error_code + ) + if error.chargebee_api_error_type is not None: + attributes[TelemetryAttributeKeys.CHARGEBEE_ERROR_TYPE] = ( + error.chargebee_api_error_type + ) + if error.chargebee_error_param is not None: + attributes[TelemetryAttributeKeys.CHARGEBEE_ERROR_PARAM] = ( + error.chargebee_error_param + ) + + return attributes + + +def build_request_telemetry_context( + input: BuildRequestTelemetryContextInput, +) -> RequestTelemetryContext: + return RequestTelemetryContext( + span_name=build_span_name(input.resource, input.operation), + resource=input.resource, + operation=input.operation, + http_method=input.http_method, + http_url=input.http_url, + server_address=input.server_address, + chargebee_site=input.chargebee_site, + chargebee_api_version=input.chargebee_api_version, # type: ignore[arg-type] + sdk_name=CHARGEBEE_SDK_NAME, + sdk_version=input.sdk_version, + start_attributes=build_request_start_span_attributes(input), + ) + + +def build_request_telemetry_result( + http_status_code: int, + duration_ms: int, + error: RequestTelemetryError | None, +) -> RequestTelemetryResult: + return RequestTelemetryResult( + http_status_code=http_status_code, + duration_ms=duration_ms, + error=error, + end_attributes=build_request_end_span_attributes(http_status_code, error), + ) + + +def extract_request_telemetry_error(err: BaseException | None) -> RequestTelemetryError | None: + if err is None: + return None + + message = str(err) if str(err) else "Chargebee API request failed" + + if isinstance(err, APIError): + return RequestTelemetryError( + message=message, + chargebee_error_code=err.api_error_code, + chargebee_api_error_type=err.type, + chargebee_error_param=err.param, + ) + + return RequestTelemetryError(message=message) + + +def extract_http_status_code(err: BaseException | None) -> int | None: + if isinstance(err, APIError): + return err.http_status_code + return None diff --git a/chargebee/telemetry/types.py b/chargebee/telemetry/types.py new file mode 100644 index 00000000..1992dcb5 --- /dev/null +++ b/chargebee/telemetry/types.py @@ -0,0 +1,76 @@ +""" +This file is auto-generated by Chargebee. +For more information on how to make changes to this file, please see the README. +Reach out to dx@chargebee.com for any questions. +Copyright 2026 Chargebee Inc. +""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Literal, Mapping, Union + +CHARGEBEE_SDK_NAME = "chargebee-python" +TELEMETRY_SPAN_NAME_PREFIX = "chargebee" + + +class TelemetryAttributeKeys: + """Span attribute keys shared across Chargebee SDKs.""" + + URL_FULL = "url.full" + HTTP_REQUEST_METHOD = "http.request.method" + HTTP_RESPONSE_STATUS_CODE = "http.response.status_code" + SERVER_ADDRESS = "server.address" + ERROR_TYPE = "error.type" + CHARGEBEE_SITE = "chargebee.site" + CHARGEBEE_API_VERSION = "chargebee.api_version" + CHARGEBEE_RESOURCE = "chargebee.resource" + CHARGEBEE_OPERATION = "chargebee.operation" + CHARGEBEE_SDK_NAME = "chargebee.sdk.name" + CHARGEBEE_SDK_VERSION = "chargebee.sdk.version" + CHARGEBEE_ERROR_CODE = "chargebee.error.code" + CHARGEBEE_ERROR_TYPE = "chargebee.error.type" + CHARGEBEE_ERROR_PARAM = "chargebee.error.param" + + +@dataclass(frozen=True) +class RequestTelemetryError: + message: str + chargebee_error_code: str | None = None + chargebee_api_error_type: str | None = None + chargebee_error_param: str | None = None + + +@dataclass(frozen=True) +class RequestTelemetryContext: + span_name: str + resource: str + operation: str + http_method: str + http_url: str + server_address: str + chargebee_site: str + chargebee_api_version: Literal["v1", "v2"] + sdk_name: str + sdk_version: str + start_attributes: Mapping[str, str] + + +@dataclass(frozen=True) +class RequestTelemetryResult: + http_status_code: int + duration_ms: int + error: RequestTelemetryError | None + end_attributes: Mapping[str, Union[str, int]] + + +@dataclass(frozen=True) +class BuildRequestTelemetryContextInput: + resource: str + operation: str + http_method: str + http_url: str + server_address: str + chargebee_site: str + chargebee_api_version: Literal["v1", "v2"] + sdk_version: str From 5f7430af82979cdf0f1f5899d105d87809ce65da Mon Sep 17 00:00:00 2001 From: cb-karthikp Date: Mon, 22 Jun 2026 17:13:41 +0530 Subject: [PATCH 2/5] Model changes --- chargebee/models/addon/operations.py | 15 ++++ chargebee/models/address/operations.py | 5 ++ chargebee/models/attached_item/operations.py | 11 +++ .../models/business_entity/operations.py | 5 ++ chargebee/models/card/operations.py | 11 +++ chargebee/models/comment/operations.py | 9 +++ chargebee/models/configuration/operations.py | 3 + chargebee/models/coupon/operations.py | 19 +++++ chargebee/models/coupon_code/operations.py | 9 +++ chargebee/models/coupon_set/operations.py | 15 ++++ chargebee/models/credit_note/operations.py | 29 +++++++ chargebee/models/currency/operations.py | 13 +++ chargebee/models/customer/operations.py | 53 ++++++++++++ .../models/customer_entitlement/operations.py | 3 + .../models/differential_price/operations.py | 11 +++ chargebee/models/entitlement/operations.py | 5 ++ .../models/entitlement_override/operations.py | 5 ++ chargebee/models/estimate/operations.py | 41 ++++++++++ chargebee/models/event/operations.py | 5 ++ chargebee/models/export/operations.py | 37 +++++++++ chargebee/models/feature/operations.py | 17 ++++ chargebee/models/gift/operations.py | 15 ++++ chargebee/models/hosted_page/operations.py | 45 +++++++++++ .../models/in_app_subscription/operations.py | 9 +++ chargebee/models/invoice/operations.py | 81 +++++++++++++++++++ .../models/invoice_estimate/operations.py | 1 + chargebee/models/item/operations.py | 11 +++ .../models/item_entitlement/operations.py | 9 +++ chargebee/models/item_family/operations.py | 11 +++ chargebee/models/item_price/operations.py | 15 ++++ chargebee/models/offer_event/operations.py | 3 + .../models/offer_fulfillment/operations.py | 7 ++ .../omnichannel_one_time_order/operations.py | 5 ++ .../omnichannel_subscription/operations.py | 9 +++ .../operations.py | 3 + chargebee/models/order/operations.py | 25 ++++++ chargebee/models/payment_intent/operations.py | 7 ++ .../payment_schedule_scheme/operations.py | 7 ++ chargebee/models/payment_source/operations.py | 33 ++++++++ .../models/payment_voucher/operations.py | 9 +++ .../models/personalized_offer/operations.py | 3 + chargebee/models/plan/operations.py | 15 ++++ chargebee/models/portal_session/operations.py | 9 +++ chargebee/models/price_variant/operations.py | 11 +++ .../models/pricing_page_session/operations.py | 5 ++ .../models/promotional_credit/operations.py | 11 +++ chargebee/models/purchase/operations.py | 5 ++ chargebee/models/quote/operations.py | 39 +++++++++ chargebee/models/ramp/operations.py | 11 +++ .../models/recorded_purchase/operations.py | 5 ++ .../models/resource_migration/operations.py | 3 + chargebee/models/rule/operations.py | 3 + .../site_migration_detail/operations.py | 3 + chargebee/models/subscription/operations.py | 74 +++++++++++++++++ .../subscription_entitlement/operations.py | 5 ++ chargebee/models/time_machine/operations.py | 7 ++ chargebee/models/transaction/operations.py | 23 ++++++ .../models/unbilled_charge/operations.py | 13 +++ chargebee/models/usage/operations.py | 11 +++ chargebee/models/usage_event/operations.py | 5 ++ chargebee/models/usage_file/operations.py | 5 ++ .../models/virtual_bank_account/operations.py | 13 +++ .../models/webhook_endpoint/operations.py | 11 +++ 63 files changed, 916 insertions(+) diff --git a/chargebee/models/addon/operations.py b/chargebee/models/addon/operations.py index a05e43cf..5b13071f 100644 --- a/chargebee/models/addon/operations.py +++ b/chargebee/models/addon/operations.py @@ -8,6 +8,7 @@ @dataclass class Addon: + env: environment.Environment class Type(Enum): @@ -226,6 +227,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="addon", + operation="create", ) def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: @@ -246,6 +249,8 @@ def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: False, jsonKeys, options, + resource="addon", + operation="update", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -262,6 +267,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="addon", + operation="list", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -278,6 +285,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="addon", + operation="retrieve", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -296,6 +305,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="addon", + operation="delete", ) def copy(self, params: CopyParams, headers=None) -> CopyResponse: @@ -314,6 +325,8 @@ def copy(self, params: CopyParams, headers=None) -> CopyResponse: False, jsonKeys, options, + resource="addon", + operation="copy", ) def unarchive(self, id, headers=None) -> UnarchiveResponse: @@ -332,4 +345,6 @@ def unarchive(self, id, headers=None) -> UnarchiveResponse: False, jsonKeys, options, + resource="addon", + operation="unarchive", ) diff --git a/chargebee/models/address/operations.py b/chargebee/models/address/operations.py index 130b6d6b..f462dae2 100644 --- a/chargebee/models/address/operations.py +++ b/chargebee/models/address/operations.py @@ -6,6 +6,7 @@ @dataclass class Address: + env: environment.Environment class RetrieveParams(TypedDict): @@ -44,6 +45,8 @@ def retrieve(self, params: RetrieveParams, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="address", + operation="retrieve", ) def update(self, params: UpdateParams, headers=None) -> UpdateResponse: @@ -62,4 +65,6 @@ def update(self, params: UpdateParams, headers=None) -> UpdateResponse: False, jsonKeys, options, + resource="address", + operation="update", ) diff --git a/chargebee/models/attached_item/operations.py b/chargebee/models/attached_item/operations.py index c15fc25b..747e643d 100644 --- a/chargebee/models/attached_item/operations.py +++ b/chargebee/models/attached_item/operations.py @@ -8,6 +8,7 @@ @dataclass class AttachedItem: + env: environment.Environment class Type(Enum): @@ -77,6 +78,8 @@ def create(self, id, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="attachedItem", + operation="create", ) def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: @@ -95,6 +98,8 @@ def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: False, jsonKeys, options, + resource="attachedItem", + operation="update", ) def retrieve(self, id, params: RetrieveParams, headers=None) -> RetrieveResponse: @@ -111,6 +116,8 @@ def retrieve(self, id, params: RetrieveParams, headers=None) -> RetrieveResponse False, jsonKeys, options, + resource="attachedItem", + operation="retrieve", ) def delete(self, id, params: DeleteParams, headers=None) -> DeleteResponse: @@ -129,6 +136,8 @@ def delete(self, id, params: DeleteParams, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="attachedItem", + operation="delete", ) def list(self, id, params: ListParams = None, headers=None) -> ListResponse: @@ -145,4 +154,6 @@ def list(self, id, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="attachedItem", + operation="list", ) diff --git a/chargebee/models/business_entity/operations.py b/chargebee/models/business_entity/operations.py index 9ebb708d..b9018375 100644 --- a/chargebee/models/business_entity/operations.py +++ b/chargebee/models/business_entity/operations.py @@ -7,6 +7,7 @@ @dataclass class BusinessEntity: + env: environment.Environment class Status(Enum): @@ -50,6 +51,8 @@ def create_transfers( False, jsonKeys, options, + resource="businessEntity", + operation="createTransfers", ) def get_transfers( @@ -68,4 +71,6 @@ def get_transfers( False, jsonKeys, options, + resource="businessEntity", + operation="getTransfers", ) diff --git a/chargebee/models/card/operations.py b/chargebee/models/card/operations.py index a670a5d2..7a5ba9c8 100644 --- a/chargebee/models/card/operations.py +++ b/chargebee/models/card/operations.py @@ -7,6 +7,7 @@ @dataclass class Card: + env: environment.Environment class PreferredScheme(Enum): @@ -121,6 +122,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="card", + operation="retrieve", ) def update_card_for_customer( @@ -141,6 +144,8 @@ def update_card_for_customer( False, jsonKeys, options, + resource="card", + operation="updateCardForCustomer", ) def switch_gateway_for_customer( @@ -161,6 +166,8 @@ def switch_gateway_for_customer( False, jsonKeys, options, + resource="card", + operation="switchGatewayForCustomer", ) def copy_card_for_customer( @@ -181,6 +188,8 @@ def copy_card_for_customer( False, jsonKeys, options, + resource="card", + operation="copyCardForCustomer", ) def delete_card_for_customer( @@ -201,4 +210,6 @@ def delete_card_for_customer( False, jsonKeys, options, + resource="card", + operation="deleteCardForCustomer", ) diff --git a/chargebee/models/comment/operations.py b/chargebee/models/comment/operations.py index 5cc1075c..c21b7b7c 100644 --- a/chargebee/models/comment/operations.py +++ b/chargebee/models/comment/operations.py @@ -8,6 +8,7 @@ @dataclass class Comment: + env: environment.Environment class Type(Enum): @@ -47,6 +48,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="comment", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -63,6 +66,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="comment", + operation="retrieve", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -79,6 +84,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="comment", + operation="list", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -97,4 +104,6 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="comment", + operation="delete", ) diff --git a/chargebee/models/configuration/operations.py b/chargebee/models/configuration/operations.py index e79f871f..32d38b5e 100644 --- a/chargebee/models/configuration/operations.py +++ b/chargebee/models/configuration/operations.py @@ -5,6 +5,7 @@ @dataclass class Configuration: + env: environment.Environment def list(self, headers=None) -> ListResponse: @@ -21,4 +22,6 @@ def list(self, headers=None) -> ListResponse: False, jsonKeys, options, + resource="configuration", + operation="list", ) diff --git a/chargebee/models/coupon/operations.py b/chargebee/models/coupon/operations.py index 3c2af835..a33593c6 100644 --- a/chargebee/models/coupon/operations.py +++ b/chargebee/models/coupon/operations.py @@ -8,6 +8,7 @@ @dataclass class Coupon: + env: environment.Environment class DiscountType(Enum): @@ -301,6 +302,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="coupon", + operation="create", ) def create_for_items( @@ -327,6 +330,8 @@ def create_for_items( False, jsonKeys, options, + resource="coupon", + operation="createForItems", ) def update_for_items( @@ -353,6 +358,8 @@ def update_for_items( False, jsonKeys, options, + resource="coupon", + operation="updateForItems", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -369,6 +376,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="coupon", + operation="list", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -385,6 +394,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="coupon", + operation="retrieve", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -405,6 +416,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="coupon", + operation="update", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -423,6 +436,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="coupon", + operation="delete", ) def copy(self, params: CopyParams, headers=None) -> CopyResponse: @@ -441,6 +456,8 @@ def copy(self, params: CopyParams, headers=None) -> CopyResponse: False, jsonKeys, options, + resource="coupon", + operation="copy", ) def unarchive(self, id, headers=None) -> UnarchiveResponse: @@ -459,4 +476,6 @@ def unarchive(self, id, headers=None) -> UnarchiveResponse: False, jsonKeys, options, + resource="coupon", + operation="unarchive", ) diff --git a/chargebee/models/coupon_code/operations.py b/chargebee/models/coupon_code/operations.py index 1d486517..1b05a21f 100644 --- a/chargebee/models/coupon_code/operations.py +++ b/chargebee/models/coupon_code/operations.py @@ -7,6 +7,7 @@ @dataclass class CouponCode: + env: environment.Environment class Status(Enum): @@ -46,6 +47,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="couponCode", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -62,6 +65,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="couponCode", + operation="retrieve", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -78,6 +83,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="couponCode", + operation="list", ) def archive(self, id, headers=None) -> ArchiveResponse: @@ -96,4 +103,6 @@ def archive(self, id, headers=None) -> ArchiveResponse: False, jsonKeys, options, + resource="couponCode", + operation="archive", ) diff --git a/chargebee/models/coupon_set/operations.py b/chargebee/models/coupon_set/operations.py index 082522e3..f5ca69b4 100644 --- a/chargebee/models/coupon_set/operations.py +++ b/chargebee/models/coupon_set/operations.py @@ -6,6 +6,7 @@ @dataclass class CouponSet: + env: environment.Environment class CreateParams(TypedDict): @@ -49,6 +50,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="couponSet", + operation="create", ) def add_coupon_codes( @@ -69,6 +72,8 @@ def add_coupon_codes( False, jsonKeys, options, + resource="couponSet", + operation="addCouponCodes", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -85,6 +90,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="couponSet", + operation="list", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -101,6 +108,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="couponSet", + operation="retrieve", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -121,6 +130,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="couponSet", + operation="update", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -139,6 +150,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="couponSet", + operation="delete", ) def delete_unused_coupon_codes( @@ -159,4 +172,6 @@ def delete_unused_coupon_codes( False, jsonKeys, options, + resource="couponSet", + operation="deleteUnusedCouponCodes", ) diff --git a/chargebee/models/credit_note/operations.py b/chargebee/models/credit_note/operations.py index 3e5045b0..5b1817cb 100644 --- a/chargebee/models/credit_note/operations.py +++ b/chargebee/models/credit_note/operations.py @@ -8,6 +8,7 @@ @dataclass class CreditNote: + env: environment.Environment class Type(Enum): @@ -492,6 +493,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="creditNote", + operation="create", ) def retrieve( @@ -510,6 +513,8 @@ def retrieve( False, jsonKeys, options, + resource="creditNote", + operation="retrieve", ) def pdf(self, id, params: PdfParams = None, headers=None) -> PdfResponse: @@ -528,6 +533,8 @@ def pdf(self, id, params: PdfParams = None, headers=None) -> PdfResponse: False, jsonKeys, options, + resource="creditNote", + operation="pdf", ) def download_einvoice(self, id, headers=None) -> DownloadEinvoiceResponse: @@ -544,6 +551,8 @@ def download_einvoice(self, id, headers=None) -> DownloadEinvoiceResponse: False, jsonKeys, options, + resource="creditNote", + operation="downloadEinvoice", ) def refund(self, id, params: RefundParams = None, headers=None) -> RefundResponse: @@ -562,6 +571,8 @@ def refund(self, id, params: RefundParams = None, headers=None) -> RefundRespons False, jsonKeys, options, + resource="creditNote", + operation="refund", ) def record_refund( @@ -582,6 +593,8 @@ def record_refund( False, jsonKeys, options, + resource="creditNote", + operation="recordRefund", ) def void_credit_note( @@ -602,6 +615,8 @@ def void_credit_note( False, jsonKeys, options, + resource="creditNote", + operation="voidCreditNote", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -618,6 +633,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="creditNote", + operation="list", ) def credit_notes_for_customer( @@ -636,6 +653,8 @@ def credit_notes_for_customer( False, jsonKeys, options, + resource="creditNote", + operation="creditNotesForCustomer", ) def delete(self, id, params: DeleteParams = None, headers=None) -> DeleteResponse: @@ -654,6 +673,8 @@ def delete(self, id, params: DeleteParams = None, headers=None) -> DeleteRespons False, jsonKeys, options, + resource="creditNote", + operation="delete", ) def remove_tax_withheld_refund( @@ -674,6 +695,8 @@ def remove_tax_withheld_refund( False, jsonKeys, options, + resource="creditNote", + operation="removeTaxWithheldRefund", ) def resend_einvoice(self, id, headers=None) -> ResendEinvoiceResponse: @@ -692,6 +715,8 @@ def resend_einvoice(self, id, headers=None) -> ResendEinvoiceResponse: False, jsonKeys, options, + resource="creditNote", + operation="resendEinvoice", ) def send_einvoice(self, id, headers=None) -> SendEinvoiceResponse: @@ -710,6 +735,8 @@ def send_einvoice(self, id, headers=None) -> SendEinvoiceResponse: False, jsonKeys, options, + resource="creditNote", + operation="sendEinvoice", ) def import_credit_note( @@ -730,4 +757,6 @@ def import_credit_note( False, jsonKeys, options, + resource="creditNote", + operation="importCreditNote", ) diff --git a/chargebee/models/currency/operations.py b/chargebee/models/currency/operations.py index d4175110..b8f5c850 100644 --- a/chargebee/models/currency/operations.py +++ b/chargebee/models/currency/operations.py @@ -6,6 +6,7 @@ @dataclass class Currency: + env: environment.Environment class ForexType(Enum): @@ -46,6 +47,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="currency", + operation="list", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -62,6 +65,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="currency", + operation="retrieve", ) def create(self, params: CreateParams, headers=None) -> CreateResponse: @@ -80,6 +85,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="currency", + operation="create", ) def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: @@ -98,6 +105,8 @@ def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: False, jsonKeys, options, + resource="currency", + operation="update", ) def add_schedule( @@ -118,6 +127,8 @@ def add_schedule( False, jsonKeys, options, + resource="currency", + operation="addSchedule", ) def remove_schedule(self, id, headers=None) -> RemoveScheduleResponse: @@ -136,4 +147,6 @@ def remove_schedule(self, id, headers=None) -> RemoveScheduleResponse: False, jsonKeys, options, + resource="currency", + operation="removeSchedule", ) diff --git a/chargebee/models/customer/operations.py b/chargebee/models/customer/operations.py index d89ec9a6..799b8604 100644 --- a/chargebee/models/customer/operations.py +++ b/chargebee/models/customer/operations.py @@ -8,6 +8,7 @@ @dataclass class Customer: + env: environment.Environment class VatNumberStatus(Enum): @@ -680,6 +681,8 @@ def create(self, params: CreateParams = None, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="customer", + operation="create", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -696,6 +699,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="customer", + operation="list", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -712,6 +717,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="customer", + operation="retrieve", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -733,6 +740,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="customer", + operation="update", ) def update_payment_method( @@ -755,6 +764,8 @@ def update_payment_method( False, jsonKeys, options, + resource="customer", + operation="updatePaymentMethod", ) def update_billing_info( @@ -775,6 +786,8 @@ def update_billing_info( False, jsonKeys, options, + resource="customer", + operation="updateBillingInfo", ) def contacts_for_customer( @@ -793,6 +806,8 @@ def contacts_for_customer( False, jsonKeys, options, + resource="customer", + operation="contactsForCustomer", ) def assign_payment_role( @@ -813,6 +828,8 @@ def assign_payment_role( False, jsonKeys, options, + resource="customer", + operation="assignPaymentRole", ) def add_contact( @@ -833,6 +850,8 @@ def add_contact( False, jsonKeys, options, + resource="customer", + operation="addContact", ) def update_contact( @@ -853,6 +872,8 @@ def update_contact( False, jsonKeys, options, + resource="customer", + operation="updateContact", ) def delete_contact( @@ -873,6 +894,8 @@ def delete_contact( False, jsonKeys, options, + resource="customer", + operation="deleteContact", ) def add_promotional_credits( @@ -893,6 +916,8 @@ def add_promotional_credits( False, jsonKeys, options, + resource="customer", + operation="addPromotionalCredits", ) def deduct_promotional_credits( @@ -913,6 +938,8 @@ def deduct_promotional_credits( False, jsonKeys, options, + resource="customer", + operation="deductPromotionalCredits", ) def set_promotional_credits( @@ -933,6 +960,8 @@ def set_promotional_credits( False, jsonKeys, options, + resource="customer", + operation="setPromotionalCredits", ) def record_excess_payment( @@ -953,6 +982,8 @@ def record_excess_payment( False, jsonKeys, options, + resource="customer", + operation="recordExcessPayment", ) def collect_payment( @@ -975,6 +1006,8 @@ def collect_payment( False, jsonKeys, options, + resource="customer", + operation="collectPayment", ) def delete(self, id, params: DeleteParams = None, headers=None) -> DeleteResponse: @@ -993,6 +1026,8 @@ def delete(self, id, params: DeleteParams = None, headers=None) -> DeleteRespons False, jsonKeys, options, + resource="customer", + operation="delete", ) def move(self, params: MoveParams, headers=None) -> MoveResponse: @@ -1011,6 +1046,8 @@ def move(self, params: MoveParams, headers=None) -> MoveResponse: False, jsonKeys, options, + resource="customer", + operation="move", ) def change_billing_date( @@ -1031,6 +1068,8 @@ def change_billing_date( False, jsonKeys, options, + resource="customer", + operation="changeBillingDate", ) def merge(self, params: MergeParams, headers=None) -> MergeResponse: @@ -1049,6 +1088,8 @@ def merge(self, params: MergeParams, headers=None) -> MergeResponse: False, jsonKeys, options, + resource="customer", + operation="merge", ) def clear_personal_data(self, id, headers=None) -> ClearPersonalDataResponse: @@ -1067,6 +1108,8 @@ def clear_personal_data(self, id, headers=None) -> ClearPersonalDataResponse: False, jsonKeys, options, + resource="customer", + operation="clearPersonalData", ) def relationships( @@ -1087,6 +1130,8 @@ def relationships( False, jsonKeys, options, + resource="customer", + operation="relationships", ) def delete_relationship(self, id, headers=None) -> DeleteRelationshipResponse: @@ -1105,6 +1150,8 @@ def delete_relationship(self, id, headers=None) -> DeleteRelationshipResponse: False, jsonKeys, options, + resource="customer", + operation="deleteRelationship", ) def hierarchy(self, id, params: HierarchyParams, headers=None) -> HierarchyResponse: @@ -1121,6 +1168,8 @@ def hierarchy(self, id, params: HierarchyParams, headers=None) -> HierarchyRespo False, jsonKeys, options, + resource="customer", + operation="hierarchy", ) def list_hierarchy_detail( @@ -1139,6 +1188,8 @@ def list_hierarchy_detail( False, jsonKeys, options, + resource="customer", + operation="listHierarchyDetail", ) def update_hierarchy_settings( @@ -1159,4 +1210,6 @@ def update_hierarchy_settings( False, jsonKeys, options, + resource="customer", + operation="updateHierarchySettings", ) diff --git a/chargebee/models/customer_entitlement/operations.py b/chargebee/models/customer_entitlement/operations.py index 86dd52ec..871a5822 100644 --- a/chargebee/models/customer_entitlement/operations.py +++ b/chargebee/models/customer_entitlement/operations.py @@ -5,6 +5,7 @@ @dataclass class CustomerEntitlement: + env: environment.Environment class EntitlementsForCustomerParams(TypedDict): @@ -28,4 +29,6 @@ def entitlements_for_customer( False, jsonKeys, options, + resource="customerEntitlement", + operation="entitlementsForCustomer", ) diff --git a/chargebee/models/differential_price/operations.py b/chargebee/models/differential_price/operations.py index 7667830a..c7cd96fe 100644 --- a/chargebee/models/differential_price/operations.py +++ b/chargebee/models/differential_price/operations.py @@ -8,6 +8,7 @@ @dataclass class DifferentialPrice: + env: environment.Environment class Status(Enum): @@ -115,6 +116,8 @@ def create(self, id, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="differentialPrice", + operation="create", ) def retrieve(self, id, params: RetrieveParams, headers=None) -> RetrieveResponse: @@ -131,6 +134,8 @@ def retrieve(self, id, params: RetrieveParams, headers=None) -> RetrieveResponse False, jsonKeys, options, + resource="differentialPrice", + operation="retrieve", ) def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: @@ -151,6 +156,8 @@ def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: False, jsonKeys, options, + resource="differentialPrice", + operation="update", ) def delete(self, id, params: DeleteParams, headers=None) -> DeleteResponse: @@ -169,6 +176,8 @@ def delete(self, id, params: DeleteParams, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="differentialPrice", + operation="delete", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -185,4 +194,6 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="differentialPrice", + operation="list", ) diff --git a/chargebee/models/entitlement/operations.py b/chargebee/models/entitlement/operations.py index 31e0cb9e..bb57c2e5 100644 --- a/chargebee/models/entitlement/operations.py +++ b/chargebee/models/entitlement/operations.py @@ -8,6 +8,7 @@ @dataclass class Entitlement: + env: environment.Environment class EntityType(Enum): @@ -55,6 +56,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="entitlement", + operation="list", ) def create(self, params: CreateParams, headers=None) -> CreateResponse: @@ -73,4 +76,6 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="entitlement", + operation="create", ) diff --git a/chargebee/models/entitlement_override/operations.py b/chargebee/models/entitlement_override/operations.py index 813e5583..f8847736 100644 --- a/chargebee/models/entitlement_override/operations.py +++ b/chargebee/models/entitlement_override/operations.py @@ -7,6 +7,7 @@ @dataclass class EntitlementOverride: + env: environment.Environment class ScheduleStatus(Enum): @@ -59,6 +60,8 @@ def add_entitlement_override_for_subscription( False, jsonKeys, options, + resource="entitlementOverride", + operation="addEntitlementOverrideForSubscription", ) def list_entitlement_override_for_subscription( @@ -80,4 +83,6 @@ def list_entitlement_override_for_subscription( False, jsonKeys, options, + resource="entitlementOverride", + operation="listEntitlementOverrideForSubscription", ) diff --git a/chargebee/models/estimate/operations.py b/chargebee/models/estimate/operations.py index 0ee24ed6..448cadb7 100644 --- a/chargebee/models/estimate/operations.py +++ b/chargebee/models/estimate/operations.py @@ -16,6 +16,7 @@ @dataclass class Estimate: + env: environment.Environment class PaymentScheduleEstimateEntityType(Enum): @@ -1111,6 +1112,8 @@ def create_subscription( False, jsonKeys, options, + resource="estimate", + operation="createSubscription", ) def create_sub_item_estimate( @@ -1131,6 +1134,8 @@ def create_sub_item_estimate( False, jsonKeys, options, + resource="estimate", + operation="createSubItemEstimate", ) def create_sub_for_customer_estimate( @@ -1149,6 +1154,8 @@ def create_sub_for_customer_estimate( False, jsonKeys, options, + resource="estimate", + operation="createSubForCustomerEstimate", ) def create_sub_item_for_customer_estimate( @@ -1167,6 +1174,8 @@ def create_sub_item_for_customer_estimate( False, jsonKeys, options, + resource="estimate", + operation="createSubItemForCustomerEstimate", ) def update_subscription( @@ -1185,6 +1194,8 @@ def update_subscription( False, jsonKeys, options, + resource="estimate", + operation="updateSubscription", ) def update_subscription_for_items( @@ -1203,6 +1214,8 @@ def update_subscription_for_items( False, jsonKeys, options, + resource="estimate", + operation="updateSubscriptionForItems", ) def renewal_estimate( @@ -1221,6 +1234,8 @@ def renewal_estimate( False, jsonKeys, options, + resource="estimate", + operation="renewalEstimate", ) def advance_invoice_estimate( @@ -1239,6 +1254,8 @@ def advance_invoice_estimate( False, jsonKeys, options, + resource="estimate", + operation="advanceInvoiceEstimate", ) def regenerate_invoice_estimate( @@ -1257,6 +1274,8 @@ def regenerate_invoice_estimate( False, jsonKeys, options, + resource="estimate", + operation="regenerateInvoiceEstimate", ) def upcoming_invoices_estimate( @@ -1275,6 +1294,8 @@ def upcoming_invoices_estimate( False, jsonKeys, options, + resource="estimate", + operation="upcomingInvoicesEstimate", ) def change_term_end( @@ -1293,6 +1314,8 @@ def change_term_end( False, jsonKeys, options, + resource="estimate", + operation="changeTermEnd", ) def cancel_subscription( @@ -1311,6 +1334,8 @@ def cancel_subscription( False, jsonKeys, options, + resource="estimate", + operation="cancelSubscription", ) def cancel_subscription_for_items( @@ -1331,6 +1356,8 @@ def cancel_subscription_for_items( False, jsonKeys, options, + resource="estimate", + operation="cancelSubscriptionForItems", ) def pause_subscription( @@ -1349,6 +1376,8 @@ def pause_subscription( False, jsonKeys, options, + resource="estimate", + operation="pauseSubscription", ) def resume_subscription( @@ -1367,6 +1396,8 @@ def resume_subscription( False, jsonKeys, options, + resource="estimate", + operation="resumeSubscription", ) def gift_subscription( @@ -1387,6 +1418,8 @@ def gift_subscription( False, jsonKeys, options, + resource="estimate", + operation="giftSubscription", ) def gift_subscription_for_items( @@ -1407,6 +1440,8 @@ def gift_subscription_for_items( False, jsonKeys, options, + resource="estimate", + operation="giftSubscriptionForItems", ) def create_invoice( @@ -1425,6 +1460,8 @@ def create_invoice( False, jsonKeys, options, + resource="estimate", + operation="createInvoice", ) def create_invoice_for_items( @@ -1443,6 +1480,8 @@ def create_invoice_for_items( False, jsonKeys, options, + resource="estimate", + operation="createInvoiceForItems", ) def payment_schedules( @@ -1463,4 +1502,6 @@ def payment_schedules( False, jsonKeys, options, + resource="estimate", + operation="paymentSchedules", ) diff --git a/chargebee/models/event/operations.py b/chargebee/models/event/operations.py index a4a56e6e..6f64c414 100644 --- a/chargebee/models/event/operations.py +++ b/chargebee/models/event/operations.py @@ -9,6 +9,7 @@ @dataclass class Event: + env: environment.Environment class WebhookStatus(Enum): @@ -90,6 +91,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="event", + operation="list", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -106,4 +109,6 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="event", + operation="retrieve", ) diff --git a/chargebee/models/export/operations.py b/chargebee/models/export/operations.py index 52638283..a3cb071a 100644 --- a/chargebee/models/export/operations.py +++ b/chargebee/models/export/operations.py @@ -8,6 +8,7 @@ @dataclass class Export: + env: environment.Environment class MimeType(Enum): @@ -478,6 +479,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="export", + operation="retrieve", ) def revenue_recognition( @@ -498,6 +501,8 @@ def revenue_recognition( False, jsonKeys, options, + resource="export", + operation="revenueRecognition", ) def deferred_revenue( @@ -518,6 +523,8 @@ def deferred_revenue( False, jsonKeys, options, + resource="export", + operation="deferredRevenue", ) def plans(self, params: PlansParams = None, headers=None) -> PlansResponse: @@ -536,6 +543,8 @@ def plans(self, params: PlansParams = None, headers=None) -> PlansResponse: False, jsonKeys, options, + resource="export", + operation="plans", ) def addons(self, params: AddonsParams = None, headers=None) -> AddonsResponse: @@ -554,6 +563,8 @@ def addons(self, params: AddonsParams = None, headers=None) -> AddonsResponse: False, jsonKeys, options, + resource="export", + operation="addons", ) def coupons(self, params: CouponsParams = None, headers=None) -> CouponsResponse: @@ -572,6 +583,8 @@ def coupons(self, params: CouponsParams = None, headers=None) -> CouponsResponse False, jsonKeys, options, + resource="export", + operation="coupons", ) def customers( @@ -592,6 +605,8 @@ def customers( False, jsonKeys, options, + resource="export", + operation="customers", ) def subscriptions( @@ -612,6 +627,8 @@ def subscriptions( False, jsonKeys, options, + resource="export", + operation="subscriptions", ) def invoices(self, params: InvoicesParams = None, headers=None) -> InvoicesResponse: @@ -630,6 +647,8 @@ def invoices(self, params: InvoicesParams = None, headers=None) -> InvoicesRespo False, jsonKeys, options, + resource="export", + operation="invoices", ) def credit_notes( @@ -650,6 +669,8 @@ def credit_notes( False, jsonKeys, options, + resource="export", + operation="creditNotes", ) def transactions( @@ -670,6 +691,8 @@ def transactions( False, jsonKeys, options, + resource="export", + operation="transactions", ) def orders(self, params: OrdersParams = None, headers=None) -> OrdersResponse: @@ -688,6 +711,8 @@ def orders(self, params: OrdersParams = None, headers=None) -> OrdersResponse: False, jsonKeys, options, + resource="export", + operation="orders", ) def item_families( @@ -708,6 +733,8 @@ def item_families( False, jsonKeys, options, + resource="export", + operation="itemFamilies", ) def items(self, params: ItemsParams = None, headers=None) -> ItemsResponse: @@ -726,6 +753,8 @@ def items(self, params: ItemsParams = None, headers=None) -> ItemsResponse: False, jsonKeys, options, + resource="export", + operation="items", ) def item_prices( @@ -746,6 +775,8 @@ def item_prices( False, jsonKeys, options, + resource="export", + operation="itemPrices", ) def attached_items( @@ -766,6 +797,8 @@ def attached_items( False, jsonKeys, options, + resource="export", + operation="attachedItems", ) def differential_prices( @@ -786,6 +819,8 @@ def differential_prices( False, jsonKeys, options, + resource="export", + operation="differentialPrices", ) def price_variants( @@ -806,4 +841,6 @@ def price_variants( False, jsonKeys, options, + resource="export", + operation="priceVariants", ) diff --git a/chargebee/models/feature/operations.py b/chargebee/models/feature/operations.py index 0d0e88b8..288920a6 100644 --- a/chargebee/models/feature/operations.py +++ b/chargebee/models/feature/operations.py @@ -7,6 +7,7 @@ @dataclass class Feature: + env: environment.Environment class Status(Enum): @@ -80,6 +81,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="feature", + operation="list", ) def create(self, params: CreateParams, headers=None) -> CreateResponse: @@ -98,6 +101,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="feature", + operation="create", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -116,6 +121,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="feature", + operation="update", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -132,6 +139,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="feature", + operation="retrieve", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -150,6 +159,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="feature", + operation="delete", ) def activate(self, id, headers=None) -> ActivateResponse: @@ -168,6 +179,8 @@ def activate(self, id, headers=None) -> ActivateResponse: False, jsonKeys, options, + resource="feature", + operation="activate", ) def archive(self, id, headers=None) -> ArchiveResponse: @@ -186,6 +199,8 @@ def archive(self, id, headers=None) -> ArchiveResponse: False, jsonKeys, options, + resource="feature", + operation="archive", ) def reactivate(self, id, headers=None) -> ReactivateResponse: @@ -204,4 +219,6 @@ def reactivate(self, id, headers=None) -> ReactivateResponse: False, jsonKeys, options, + resource="feature", + operation="reactivate", ) diff --git a/chargebee/models/gift/operations.py b/chargebee/models/gift/operations.py index 0a3d47ca..4874e51e 100644 --- a/chargebee/models/gift/operations.py +++ b/chargebee/models/gift/operations.py @@ -8,6 +8,7 @@ @dataclass class Gift: + env: environment.Environment class Status(Enum): @@ -212,6 +213,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="gift", + operation="create", ) def create_for_items( @@ -235,6 +238,8 @@ def create_for_items( False, jsonKeys, options, + resource="gift", + operation="createForItems", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -251,6 +256,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="gift", + operation="retrieve", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -267,6 +274,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="gift", + operation="list", ) def claim(self, id, headers=None) -> ClaimResponse: @@ -285,6 +294,8 @@ def claim(self, id, headers=None) -> ClaimResponse: False, jsonKeys, options, + resource="gift", + operation="claim", ) def cancel(self, id, headers=None) -> CancelResponse: @@ -303,6 +314,8 @@ def cancel(self, id, headers=None) -> CancelResponse: False, jsonKeys, options, + resource="gift", + operation="cancel", ) def update_gift( @@ -323,4 +336,6 @@ def update_gift( False, jsonKeys, options, + resource="gift", + operation="updateGift", ) diff --git a/chargebee/models/hosted_page/operations.py b/chargebee/models/hosted_page/operations.py index 781d9e13..4d988e1b 100644 --- a/chargebee/models/hosted_page/operations.py +++ b/chargebee/models/hosted_page/operations.py @@ -8,6 +8,7 @@ @dataclass class HostedPage: + env: environment.Environment class Type(Enum): @@ -908,6 +909,8 @@ def checkout_new( False, jsonKeys, options, + resource="hostedPage", + operation="checkoutNew", ) def checkout_one_time( @@ -928,6 +931,8 @@ def checkout_one_time( False, jsonKeys, options, + resource="hostedPage", + operation="checkoutOneTime", ) def checkout_one_time_for_items( @@ -948,6 +953,8 @@ def checkout_one_time_for_items( False, jsonKeys, options, + resource="hostedPage", + operation="checkoutOneTimeForItems", ) def checkout_new_for_items( @@ -968,6 +975,8 @@ def checkout_new_for_items( False, jsonKeys, options, + resource="hostedPage", + operation="checkoutNewForItems", ) def checkout_existing( @@ -988,6 +997,8 @@ def checkout_existing( False, jsonKeys, options, + resource="hostedPage", + operation="checkoutExisting", ) def checkout_existing_for_items( @@ -1008,6 +1019,8 @@ def checkout_existing_for_items( False, jsonKeys, options, + resource="hostedPage", + operation="checkoutExistingForItems", ) def update_card(self, params: UpdateCardParams, headers=None) -> UpdateCardResponse: @@ -1026,6 +1039,8 @@ def update_card(self, params: UpdateCardParams, headers=None) -> UpdateCardRespo False, jsonKeys, options, + resource="hostedPage", + operation="updateCard", ) def update_payment_method( @@ -1046,6 +1061,8 @@ def update_payment_method( False, jsonKeys, options, + resource="hostedPage", + operation="updatePaymentMethod", ) def manage_payment_sources( @@ -1066,6 +1083,8 @@ def manage_payment_sources( False, jsonKeys, options, + resource="hostedPage", + operation="managePaymentSources", ) def collect_now(self, params: CollectNowParams, headers=None) -> CollectNowResponse: @@ -1084,6 +1103,8 @@ def collect_now(self, params: CollectNowParams, headers=None) -> CollectNowRespo False, jsonKeys, options, + resource="hostedPage", + operation="collectNow", ) def accept_quote( @@ -1104,6 +1125,8 @@ def accept_quote( False, jsonKeys, options, + resource="hostedPage", + operation="acceptQuote", ) def extend_subscription( @@ -1124,6 +1147,8 @@ def extend_subscription( False, jsonKeys, options, + resource="hostedPage", + operation="extendSubscription", ) def checkout_gift( @@ -1144,6 +1169,8 @@ def checkout_gift( False, jsonKeys, options, + resource="hostedPage", + operation="checkoutGift", ) def checkout_gift_for_items( @@ -1164,6 +1191,8 @@ def checkout_gift_for_items( False, jsonKeys, options, + resource="hostedPage", + operation="checkoutGiftForItems", ) def claim_gift(self, params: ClaimGiftParams, headers=None) -> ClaimGiftResponse: @@ -1182,6 +1211,8 @@ def claim_gift(self, params: ClaimGiftParams, headers=None) -> ClaimGiftResponse False, jsonKeys, options, + resource="hostedPage", + operation="claimGift", ) def retrieve_agreement_pdf( @@ -1202,6 +1233,8 @@ def retrieve_agreement_pdf( False, jsonKeys, options, + resource="hostedPage", + operation="retrieveAgreementPdf", ) def acknowledge(self, id, headers=None) -> AcknowledgeResponse: @@ -1220,6 +1253,8 @@ def acknowledge(self, id, headers=None) -> AcknowledgeResponse: False, jsonKeys, options, + resource="hostedPage", + operation="acknowledge", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -1236,6 +1271,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="hostedPage", + operation="retrieve", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -1252,6 +1289,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="hostedPage", + operation="list", ) def pre_cancel(self, params: PreCancelParams, headers=None) -> PreCancelResponse: @@ -1270,6 +1309,8 @@ def pre_cancel(self, params: PreCancelParams, headers=None) -> PreCancelResponse False, jsonKeys, options, + resource="hostedPage", + operation="preCancel", ) def events(self, params: EventsParams, headers=None) -> EventsResponse: @@ -1290,6 +1331,8 @@ def events(self, params: EventsParams, headers=None) -> EventsResponse: False, jsonKeys, options, + resource="hostedPage", + operation="events", ) def view_voucher( @@ -1310,4 +1353,6 @@ def view_voucher( False, jsonKeys, options, + resource="hostedPage", + operation="viewVoucher", ) diff --git a/chargebee/models/in_app_subscription/operations.py b/chargebee/models/in_app_subscription/operations.py index b9ec35c7..c43cce7e 100644 --- a/chargebee/models/in_app_subscription/operations.py +++ b/chargebee/models/in_app_subscription/operations.py @@ -6,6 +6,7 @@ @dataclass class InAppSubscription: + env: environment.Environment class StoreStatus(Enum): @@ -90,6 +91,8 @@ def process_receipt( False, jsonKeys, options, + resource="inAppSubscription", + operation="processReceipt", ) def import_receipt( @@ -110,6 +113,8 @@ def import_receipt( False, jsonKeys, options, + resource="inAppSubscription", + operation="importReceipt", ) def import_subscription( @@ -130,6 +135,8 @@ def import_subscription( False, jsonKeys, options, + resource="inAppSubscription", + operation="importSubscription", ) def retrieve_store_subs( @@ -150,4 +157,6 @@ def retrieve_store_subs( False, jsonKeys, options, + resource="inAppSubscription", + operation="retrieveStoreSubs", ) diff --git a/chargebee/models/invoice/operations.py b/chargebee/models/invoice/operations.py index 430a76b8..72d1e9b5 100644 --- a/chargebee/models/invoice/operations.py +++ b/chargebee/models/invoice/operations.py @@ -15,6 +15,7 @@ @dataclass class Invoice: + env: environment.Environment class Status(Enum): @@ -1244,6 +1245,8 @@ def create(self, params: CreateParams = None, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="invoice", + operation="create", ) def create_for_charge_items_and_charges( @@ -1267,6 +1270,8 @@ def create_for_charge_items_and_charges( False, jsonKeys, options, + resource="invoice", + operation="createForChargeItemsAndCharges", ) def charge(self, params: ChargeParams, headers=None) -> ChargeResponse: @@ -1285,6 +1290,8 @@ def charge(self, params: ChargeParams, headers=None) -> ChargeResponse: False, jsonKeys, options, + resource="invoice", + operation="charge", ) def charge_addon( @@ -1305,6 +1312,8 @@ def charge_addon( False, jsonKeys, options, + resource="invoice", + operation="chargeAddon", ) def create_for_charge_item( @@ -1325,6 +1334,8 @@ def create_for_charge_item( False, jsonKeys, options, + resource="invoice", + operation="createForChargeItem", ) def stop_dunning( @@ -1345,6 +1356,8 @@ def stop_dunning( False, jsonKeys, options, + resource="invoice", + operation="stopDunning", ) def pause_dunning( @@ -1365,6 +1378,8 @@ def pause_dunning( False, jsonKeys, options, + resource="invoice", + operation="pauseDunning", ) def resume_dunning( @@ -1385,6 +1400,8 @@ def resume_dunning( False, jsonKeys, options, + resource="invoice", + operation="resumeDunning", ) def import_invoice( @@ -1405,6 +1422,8 @@ def import_invoice( False, jsonKeys, options, + resource="invoice", + operation="importInvoice", ) def apply_payments( @@ -1425,6 +1444,8 @@ def apply_payments( False, jsonKeys, options, + resource="invoice", + operation="applyPayments", ) def sync_usages(self, id, headers=None) -> SyncUsagesResponse: @@ -1443,6 +1464,8 @@ def sync_usages(self, id, headers=None) -> SyncUsagesResponse: False, jsonKeys, options, + resource="invoice", + operation="syncUsages", ) def delete_line_items( @@ -1463,6 +1486,8 @@ def delete_line_items( False, jsonKeys, options, + resource="invoice", + operation="deleteLineItems", ) def apply_credits( @@ -1483,6 +1508,8 @@ def apply_credits( False, jsonKeys, options, + resource="invoice", + operation="applyCredits", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -1499,6 +1526,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="invoice", + operation="list", ) def invoices_for_customer( @@ -1517,6 +1546,8 @@ def invoices_for_customer( False, jsonKeys, options, + resource="invoice", + operation="invoicesForCustomer", ) def invoices_for_subscription( @@ -1535,6 +1566,8 @@ def invoices_for_subscription( False, jsonKeys, options, + resource="invoice", + operation="invoicesForSubscription", ) def retrieve( @@ -1553,6 +1586,8 @@ def retrieve( False, jsonKeys, options, + resource="invoice", + operation="retrieve", ) def pdf(self, id, params: PdfParams = None, headers=None) -> PdfResponse: @@ -1571,6 +1606,8 @@ def pdf(self, id, params: PdfParams = None, headers=None) -> PdfResponse: False, jsonKeys, options, + resource="invoice", + operation="pdf", ) def download_einvoice(self, id, headers=None) -> DownloadEinvoiceResponse: @@ -1587,6 +1624,8 @@ def download_einvoice(self, id, headers=None) -> DownloadEinvoiceResponse: False, jsonKeys, options, + resource="invoice", + operation="downloadEinvoice", ) def list_payment_reference_numbers( @@ -1605,6 +1644,8 @@ def list_payment_reference_numbers( False, jsonKeys, options, + resource="invoice", + operation="listPaymentReferenceNumbers", ) def add_charge( @@ -1625,6 +1666,8 @@ def add_charge( False, jsonKeys, options, + resource="invoice", + operation="addCharge", ) def add_addon_charge( @@ -1645,6 +1688,8 @@ def add_addon_charge( False, jsonKeys, options, + resource="invoice", + operation="addAddonCharge", ) def add_charge_item( @@ -1665,6 +1710,8 @@ def add_charge_item( False, jsonKeys, options, + resource="invoice", + operation="addChargeItem", ) def close(self, id, params: CloseParams = None, headers=None) -> CloseResponse: @@ -1683,6 +1730,8 @@ def close(self, id, params: CloseParams = None, headers=None) -> CloseResponse: False, jsonKeys, options, + resource="invoice", + operation="close", ) def collect_payment( @@ -1703,6 +1752,8 @@ def collect_payment( False, jsonKeys, options, + resource="invoice", + operation="collectPayment", ) def record_payment( @@ -1723,6 +1774,8 @@ def record_payment( False, jsonKeys, options, + resource="invoice", + operation="recordPayment", ) def record_tax_withheld( @@ -1743,6 +1796,8 @@ def record_tax_withheld( False, jsonKeys, options, + resource="invoice", + operation="recordTaxWithheld", ) def remove_tax_withheld( @@ -1763,6 +1818,8 @@ def remove_tax_withheld( False, jsonKeys, options, + resource="invoice", + operation="removeTaxWithheld", ) def refund(self, id, params: RefundParams = None, headers=None) -> RefundResponse: @@ -1781,6 +1838,8 @@ def refund(self, id, params: RefundParams = None, headers=None) -> RefundRespons False, jsonKeys, options, + resource="invoice", + operation="refund", ) def record_refund( @@ -1801,6 +1860,8 @@ def record_refund( False, jsonKeys, options, + resource="invoice", + operation="recordRefund", ) def remove_payment( @@ -1821,6 +1882,8 @@ def remove_payment( False, jsonKeys, options, + resource="invoice", + operation="removePayment", ) def remove_credit_note( @@ -1841,6 +1904,8 @@ def remove_credit_note( False, jsonKeys, options, + resource="invoice", + operation="removeCreditNote", ) def void_invoice( @@ -1861,6 +1926,8 @@ def void_invoice( False, jsonKeys, options, + resource="invoice", + operation="voidInvoice", ) def write_off( @@ -1881,6 +1948,8 @@ def write_off( False, jsonKeys, options, + resource="invoice", + operation="writeOff", ) def delete(self, id, params: DeleteParams = None, headers=None) -> DeleteResponse: @@ -1899,6 +1968,8 @@ def delete(self, id, params: DeleteParams = None, headers=None) -> DeleteRespons False, jsonKeys, options, + resource="invoice", + operation="delete", ) def update_details( @@ -1919,6 +1990,8 @@ def update_details( False, jsonKeys, options, + resource="invoice", + operation="updateDetails", ) def apply_payment_schedule_scheme( @@ -1939,6 +2012,8 @@ def apply_payment_schedule_scheme( False, jsonKeys, options, + resource="invoice", + operation="applyPaymentScheduleScheme", ) def payment_schedules(self, id, headers=None) -> PaymentSchedulesResponse: @@ -1955,6 +2030,8 @@ def payment_schedules(self, id, headers=None) -> PaymentSchedulesResponse: False, jsonKeys, options, + resource="invoice", + operation="paymentSchedules", ) def resend_einvoice(self, id, headers=None) -> ResendEinvoiceResponse: @@ -1973,6 +2050,8 @@ def resend_einvoice(self, id, headers=None) -> ResendEinvoiceResponse: False, jsonKeys, options, + resource="invoice", + operation="resendEinvoice", ) def send_einvoice(self, id, headers=None) -> SendEinvoiceResponse: @@ -1991,4 +2070,6 @@ def send_einvoice(self, id, headers=None) -> SendEinvoiceResponse: False, jsonKeys, options, + resource="invoice", + operation="sendEinvoice", ) diff --git a/chargebee/models/invoice_estimate/operations.py b/chargebee/models/invoice_estimate/operations.py index f0221346..8904206e 100644 --- a/chargebee/models/invoice_estimate/operations.py +++ b/chargebee/models/invoice_estimate/operations.py @@ -7,6 +7,7 @@ @dataclass class InvoiceEstimate: + env: environment.Environment class LineItemEntityType(Enum): diff --git a/chargebee/models/item/operations.py b/chargebee/models/item/operations.py index 7ddc6e68..25671427 100644 --- a/chargebee/models/item/operations.py +++ b/chargebee/models/item/operations.py @@ -8,6 +8,7 @@ @dataclass class Item: + env: environment.Environment class Status(Enum): @@ -181,6 +182,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="item", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -197,6 +200,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="item", + operation="retrieve", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -217,6 +222,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="item", + operation="update", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -233,6 +240,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="item", + operation="list", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -251,4 +260,6 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="item", + operation="delete", ) diff --git a/chargebee/models/item_entitlement/operations.py b/chargebee/models/item_entitlement/operations.py index b6b3572d..846bae7b 100644 --- a/chargebee/models/item_entitlement/operations.py +++ b/chargebee/models/item_entitlement/operations.py @@ -7,6 +7,7 @@ @dataclass class ItemEntitlement: + env: environment.Environment class ItemType(Enum): @@ -69,6 +70,8 @@ def item_entitlements_for_item( False, jsonKeys, options, + resource="itemEntitlement", + operation="itemEntitlementsForItem", ) def item_entitlements_for_feature( @@ -87,6 +90,8 @@ def item_entitlements_for_feature( False, jsonKeys, options, + resource="itemEntitlement", + operation="itemEntitlementsForFeature", ) def add_item_entitlements( @@ -107,6 +112,8 @@ def add_item_entitlements( False, jsonKeys, options, + resource="itemEntitlement", + operation="addItemEntitlements", ) def upsert_or_remove_item_entitlements_for_item( @@ -127,4 +134,6 @@ def upsert_or_remove_item_entitlements_for_item( False, jsonKeys, options, + resource="itemEntitlement", + operation="upsertOrRemoveItemEntitlementsForItem", ) diff --git a/chargebee/models/item_family/operations.py b/chargebee/models/item_family/operations.py index 1bb8b4ce..009195e1 100644 --- a/chargebee/models/item_family/operations.py +++ b/chargebee/models/item_family/operations.py @@ -7,6 +7,7 @@ @dataclass class ItemFamily: + env: environment.Environment class Status(Enum): @@ -51,6 +52,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="itemFamily", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -67,6 +70,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="itemFamily", + operation="retrieve", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -83,6 +88,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="itemFamily", + operation="list", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -101,6 +108,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="itemFamily", + operation="update", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -119,4 +128,6 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="itemFamily", + operation="delete", ) diff --git a/chargebee/models/item_price/operations.py b/chargebee/models/item_price/operations.py index 26e719fa..8575fa09 100644 --- a/chargebee/models/item_price/operations.py +++ b/chargebee/models/item_price/operations.py @@ -8,6 +8,7 @@ @dataclass class ItemPrice: + env: environment.Environment class Status(Enum): @@ -280,6 +281,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="itemPrice", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -296,6 +299,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="itemPrice", + operation="retrieve", ) def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: @@ -316,6 +321,8 @@ def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: False, jsonKeys, options, + resource="itemPrice", + operation="update", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -332,6 +339,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="itemPrice", + operation="list", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -350,6 +359,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="itemPrice", + operation="delete", ) def find_applicable_items( @@ -368,6 +379,8 @@ def find_applicable_items( False, jsonKeys, options, + resource="itemPrice", + operation="findApplicableItems", ) def find_applicable_item_prices( @@ -386,4 +399,6 @@ def find_applicable_item_prices( False, jsonKeys, options, + resource="itemPrice", + operation="findApplicableItemPrices", ) diff --git a/chargebee/models/offer_event/operations.py b/chargebee/models/offer_event/operations.py index 210702cd..262b5d49 100644 --- a/chargebee/models/offer_event/operations.py +++ b/chargebee/models/offer_event/operations.py @@ -6,6 +6,7 @@ @dataclass class OfferEvent: + env: environment.Environment class Type(Enum): @@ -35,4 +36,6 @@ def offer_events( True, jsonKeys, options, + resource="offerEvent", + operation="offerEvents", ) diff --git a/chargebee/models/offer_fulfillment/operations.py b/chargebee/models/offer_fulfillment/operations.py index d6f42b5f..1485c043 100644 --- a/chargebee/models/offer_fulfillment/operations.py +++ b/chargebee/models/offer_fulfillment/operations.py @@ -6,6 +6,7 @@ @dataclass class OfferFulfillment: + env: environment.Environment class ProcessingType(Enum): @@ -65,6 +66,8 @@ def offer_fulfillments( True, jsonKeys, options, + resource="offerFulfillment", + operation="offerFulfillments", ) def offer_fulfillments_get(self, id, headers=None) -> OfferFulfillmentsGetResponse: @@ -81,6 +84,8 @@ def offer_fulfillments_get(self, id, headers=None) -> OfferFulfillmentsGetRespon True, jsonKeys, options, + resource="offerFulfillment", + operation="offerFulfillmentsGet", ) def offer_fulfillments_update( @@ -99,4 +104,6 @@ def offer_fulfillments_update( True, jsonKeys, options, + resource="offerFulfillment", + operation="offerFulfillmentsUpdate", ) diff --git a/chargebee/models/omnichannel_one_time_order/operations.py b/chargebee/models/omnichannel_one_time_order/operations.py index b2df08ba..c0d01114 100644 --- a/chargebee/models/omnichannel_one_time_order/operations.py +++ b/chargebee/models/omnichannel_one_time_order/operations.py @@ -8,6 +8,7 @@ @dataclass class OmnichannelOneTimeOrder: + env: environment.Environment class Source(Enum): @@ -56,6 +57,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="omnichannelOneTimeOrder", + operation="retrieve", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -72,4 +75,6 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="omnichannelOneTimeOrder", + operation="list", ) diff --git a/chargebee/models/omnichannel_subscription/operations.py b/chargebee/models/omnichannel_subscription/operations.py index 40cdb7f9..d93253fa 100644 --- a/chargebee/models/omnichannel_subscription/operations.py +++ b/chargebee/models/omnichannel_subscription/operations.py @@ -8,6 +8,7 @@ @dataclass class OmnichannelSubscription: + env: environment.Environment class Source(Enum): @@ -100,6 +101,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="omnichannelSubscription", + operation="retrieve", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -116,6 +119,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="omnichannelSubscription", + operation="list", ) def omnichannel_transactions_for_omnichannel_subscription( @@ -139,6 +144,8 @@ def omnichannel_transactions_for_omnichannel_subscription( False, jsonKeys, options, + resource="omnichannelSubscription", + operation="omnichannel_transactionsForOmnichannelSubscription", ) def move(self, id, params: MoveParams, headers=None) -> MoveResponse: @@ -157,4 +164,6 @@ def move(self, id, params: MoveParams, headers=None) -> MoveResponse: False, jsonKeys, options, + resource="omnichannelSubscription", + operation="move", ) diff --git a/chargebee/models/omnichannel_subscription_item/operations.py b/chargebee/models/omnichannel_subscription_item/operations.py index 2870922d..b8787f54 100644 --- a/chargebee/models/omnichannel_subscription_item/operations.py +++ b/chargebee/models/omnichannel_subscription_item/operations.py @@ -7,6 +7,7 @@ @dataclass class OmnichannelSubscriptionItem: + env: environment.Environment class Status(Enum): @@ -76,4 +77,6 @@ def list_omni_sub_item_schedule_changes( False, jsonKeys, options, + resource="omnichannelSubscriptionItem", + operation="listOmniSubItemScheduleChanges", ) diff --git a/chargebee/models/order/operations.py b/chargebee/models/order/operations.py index 1c67e033..80df5e05 100644 --- a/chargebee/models/order/operations.py +++ b/chargebee/models/order/operations.py @@ -8,6 +8,7 @@ @dataclass class Order: + env: environment.Environment class Status(Enum): @@ -392,6 +393,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="order", + operation="create", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -410,6 +413,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="order", + operation="update", ) def import_order( @@ -430,6 +435,8 @@ def import_order( False, jsonKeys, options, + resource="order", + operation="importOrder", ) def assign_order_number(self, id, headers=None) -> AssignOrderNumberResponse: @@ -448,6 +455,8 @@ def assign_order_number(self, id, headers=None) -> AssignOrderNumberResponse: False, jsonKeys, options, + resource="order", + operation="assignOrderNumber", ) def cancel(self, id, params: CancelParams, headers=None) -> CancelResponse: @@ -466,6 +475,8 @@ def cancel(self, id, params: CancelParams, headers=None) -> CancelResponse: False, jsonKeys, options, + resource="order", + operation="cancel", ) def create_refundable_credit_note( @@ -486,6 +497,8 @@ def create_refundable_credit_note( False, jsonKeys, options, + resource="order", + operation="createRefundableCreditNote", ) def reopen(self, id, params: ReopenParams = None, headers=None) -> ReopenResponse: @@ -504,6 +517,8 @@ def reopen(self, id, params: ReopenParams = None, headers=None) -> ReopenRespons False, jsonKeys, options, + resource="order", + operation="reopen", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -520,6 +535,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="order", + operation="retrieve", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -538,6 +555,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="order", + operation="delete", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -554,6 +573,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="order", + operation="list", ) def orders_for_invoice( @@ -572,6 +593,8 @@ def orders_for_invoice( False, jsonKeys, options, + resource="order", + operation="ordersForInvoice", ) def resend(self, id, params: ResendParams = None, headers=None) -> ResendResponse: @@ -590,4 +613,6 @@ def resend(self, id, params: ResendParams = None, headers=None) -> ResendRespons False, jsonKeys, options, + resource="order", + operation="resend", ) diff --git a/chargebee/models/payment_intent/operations.py b/chargebee/models/payment_intent/operations.py index fe6c89e5..1e85dea7 100644 --- a/chargebee/models/payment_intent/operations.py +++ b/chargebee/models/payment_intent/operations.py @@ -7,6 +7,7 @@ @dataclass class PaymentIntent: + env: environment.Environment class Status(Enum): @@ -153,6 +154,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="paymentIntent", + operation="create", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -171,6 +174,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="paymentIntent", + operation="update", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -187,4 +192,6 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="paymentIntent", + operation="retrieve", ) diff --git a/chargebee/models/payment_schedule_scheme/operations.py b/chargebee/models/payment_schedule_scheme/operations.py index 5d83c558..6676fb5c 100644 --- a/chargebee/models/payment_schedule_scheme/operations.py +++ b/chargebee/models/payment_schedule_scheme/operations.py @@ -6,6 +6,7 @@ @dataclass class PaymentScheduleScheme: + env: environment.Environment class PeriodUnit(Enum): @@ -49,6 +50,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="paymentScheduleScheme", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -65,6 +68,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="paymentScheduleScheme", + operation="retrieve", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -83,4 +88,6 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="paymentScheduleScheme", + operation="delete", ) diff --git a/chargebee/models/payment_source/operations.py b/chargebee/models/payment_source/operations.py index af7b6346..535d5129 100644 --- a/chargebee/models/payment_source/operations.py +++ b/chargebee/models/payment_source/operations.py @@ -8,6 +8,7 @@ @dataclass class PaymentSource: + env: environment.Environment class Status(Enum): @@ -333,6 +334,8 @@ def create_using_temp_token( False, jsonKeys, options, + resource="paymentSource", + operation="createUsingTempToken", ) def create_using_permanent_token( @@ -355,6 +358,8 @@ def create_using_permanent_token( False, jsonKeys, options, + resource="paymentSource", + operation="createUsingPermanentToken", ) def create_using_token( @@ -375,6 +380,8 @@ def create_using_token( False, jsonKeys, options, + resource="paymentSource", + operation="createUsingToken", ) def create_using_payment_intent( @@ -398,6 +405,8 @@ def create_using_payment_intent( False, jsonKeys, options, + resource="paymentSource", + operation="createUsingPaymentIntent", ) def create_voucher_payment_source( @@ -420,6 +429,8 @@ def create_voucher_payment_source( False, jsonKeys, options, + resource="paymentSource", + operation="createVoucherPaymentSource", ) def create_card(self, params: CreateCardParams, headers=None) -> CreateCardResponse: @@ -440,6 +451,8 @@ def create_card(self, params: CreateCardParams, headers=None) -> CreateCardRespo False, jsonKeys, options, + resource="paymentSource", + operation="createCard", ) def create_bank_account( @@ -462,6 +475,8 @@ def create_bank_account( False, jsonKeys, options, + resource="paymentSource", + operation="createBankAccount", ) def update_card( @@ -485,6 +500,8 @@ def update_card( False, jsonKeys, options, + resource="paymentSource", + operation="updateCard", ) def update_bank_account( @@ -505,6 +522,8 @@ def update_bank_account( False, jsonKeys, options, + resource="paymentSource", + operation="updateBankAccount", ) def verify_bank_account( @@ -525,6 +544,8 @@ def verify_bank_account( False, jsonKeys, options, + resource="paymentSource", + operation="verifyBankAccount", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -541,6 +562,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="paymentSource", + operation="retrieve", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -557,6 +580,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="paymentSource", + operation="list", ) def switch_gateway_account( @@ -577,6 +602,8 @@ def switch_gateway_account( False, jsonKeys, options, + resource="paymentSource", + operation="switchGatewayAccount", ) def export_payment_source( @@ -597,6 +624,8 @@ def export_payment_source( False, jsonKeys, options, + resource="paymentSource", + operation="exportPaymentSource", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -615,6 +644,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="paymentSource", + operation="delete", ) def delete_local(self, id, headers=None) -> DeleteLocalResponse: @@ -633,4 +664,6 @@ def delete_local(self, id, headers=None) -> DeleteLocalResponse: False, jsonKeys, options, + resource="paymentSource", + operation="deleteLocal", ) diff --git a/chargebee/models/payment_voucher/operations.py b/chargebee/models/payment_voucher/operations.py index d31db5b8..908af3dc 100644 --- a/chargebee/models/payment_voucher/operations.py +++ b/chargebee/models/payment_voucher/operations.py @@ -8,6 +8,7 @@ @dataclass class PaymentVoucher: + env: environment.Environment class Status(Enum): @@ -68,6 +69,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="paymentVoucher", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -84,6 +87,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="paymentVoucher", + operation="retrieve", ) def payment_vouchers_for_invoice( @@ -102,6 +107,8 @@ def payment_vouchers_for_invoice( False, jsonKeys, options, + resource="paymentVoucher", + operation="payment_vouchersForInvoice", ) def payment_vouchers_for_customer( @@ -120,4 +127,6 @@ def payment_vouchers_for_customer( False, jsonKeys, options, + resource="paymentVoucher", + operation="payment_vouchersForCustomer", ) diff --git a/chargebee/models/personalized_offer/operations.py b/chargebee/models/personalized_offer/operations.py index 93712654..ba748645 100644 --- a/chargebee/models/personalized_offer/operations.py +++ b/chargebee/models/personalized_offer/operations.py @@ -6,6 +6,7 @@ @dataclass class PersonalizedOffer: + env: environment.Environment class OptionProcessingType(Enum): @@ -74,4 +75,6 @@ def personalized_offers( True, jsonKeys, options, + resource="personalizedOffer", + operation="personalizedOffers", ) diff --git a/chargebee/models/plan/operations.py b/chargebee/models/plan/operations.py index a0ca4c8e..fa6bb364 100644 --- a/chargebee/models/plan/operations.py +++ b/chargebee/models/plan/operations.py @@ -8,6 +8,7 @@ @dataclass class Plan: + env: environment.Environment class PeriodUnit(Enum): @@ -315,6 +316,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="plan", + operation="create", ) def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: @@ -335,6 +338,8 @@ def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: False, jsonKeys, options, + resource="plan", + operation="update", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -351,6 +356,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="plan", + operation="list", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -367,6 +374,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="plan", + operation="retrieve", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -385,6 +394,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="plan", + operation="delete", ) def copy(self, params: CopyParams, headers=None) -> CopyResponse: @@ -403,6 +414,8 @@ def copy(self, params: CopyParams, headers=None) -> CopyResponse: False, jsonKeys, options, + resource="plan", + operation="copy", ) def unarchive(self, id, headers=None) -> UnarchiveResponse: @@ -421,4 +434,6 @@ def unarchive(self, id, headers=None) -> UnarchiveResponse: False, jsonKeys, options, + resource="plan", + operation="unarchive", ) diff --git a/chargebee/models/portal_session/operations.py b/chargebee/models/portal_session/operations.py index 45d74069..8156d27a 100644 --- a/chargebee/models/portal_session/operations.py +++ b/chargebee/models/portal_session/operations.py @@ -6,6 +6,7 @@ @dataclass class PortalSession: + env: environment.Environment class Status(Enum): @@ -52,6 +53,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="portalSession", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -68,6 +71,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="portalSession", + operation="retrieve", ) def logout(self, id, headers=None) -> LogoutResponse: @@ -86,6 +91,8 @@ def logout(self, id, headers=None) -> LogoutResponse: False, jsonKeys, options, + resource="portalSession", + operation="logout", ) def activate(self, id, params: ActivateParams, headers=None) -> ActivateResponse: @@ -104,4 +111,6 @@ def activate(self, id, params: ActivateParams, headers=None) -> ActivateResponse False, jsonKeys, options, + resource="portalSession", + operation="activate", ) diff --git a/chargebee/models/price_variant/operations.py b/chargebee/models/price_variant/operations.py index 82f4f2c5..01484884 100644 --- a/chargebee/models/price_variant/operations.py +++ b/chargebee/models/price_variant/operations.py @@ -7,6 +7,7 @@ @dataclass class PriceVariant: + env: environment.Environment class Status(Enum): @@ -74,6 +75,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="priceVariant", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -90,6 +93,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="priceVariant", + operation="retrieve", ) def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: @@ -108,6 +113,8 @@ def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: False, jsonKeys, options, + resource="priceVariant", + operation="update", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -126,6 +133,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="priceVariant", + operation="delete", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -142,4 +151,6 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="priceVariant", + operation="list", ) diff --git a/chargebee/models/pricing_page_session/operations.py b/chargebee/models/pricing_page_session/operations.py index 991f638b..f4518b41 100644 --- a/chargebee/models/pricing_page_session/operations.py +++ b/chargebee/models/pricing_page_session/operations.py @@ -6,6 +6,7 @@ @dataclass class PricingPageSession: + env: environment.Environment class CreateForNewSubscriptionPricingPageParams(TypedDict): @@ -156,6 +157,8 @@ def create_for_new_subscription( False, jsonKeys, options, + resource="pricingPageSession", + operation="createForNewSubscription", ) def create_for_existing_subscription( @@ -180,4 +183,6 @@ def create_for_existing_subscription( False, jsonKeys, options, + resource="pricingPageSession", + operation="createForExistingSubscription", ) diff --git a/chargebee/models/promotional_credit/operations.py b/chargebee/models/promotional_credit/operations.py index 7c05654a..d5ad8497 100644 --- a/chargebee/models/promotional_credit/operations.py +++ b/chargebee/models/promotional_credit/operations.py @@ -8,6 +8,7 @@ @dataclass class PromotionalCredit: + env: environment.Environment class Type(Enum): @@ -68,6 +69,8 @@ def add(self, params: AddParams, headers=None) -> AddResponse: False, jsonKeys, options, + resource="promotionalCredit", + operation="add", ) def deduct(self, params: DeductParams, headers=None) -> DeductResponse: @@ -86,6 +89,8 @@ def deduct(self, params: DeductParams, headers=None) -> DeductResponse: False, jsonKeys, options, + resource="promotionalCredit", + operation="deduct", ) def set(self, params: SetParams, headers=None) -> SetResponse: @@ -104,6 +109,8 @@ def set(self, params: SetParams, headers=None) -> SetResponse: False, jsonKeys, options, + resource="promotionalCredit", + operation="set", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -120,6 +127,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="promotionalCredit", + operation="list", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -136,4 +145,6 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="promotionalCredit", + operation="retrieve", ) diff --git a/chargebee/models/purchase/operations.py b/chargebee/models/purchase/operations.py index ab2c33cc..9adeaa19 100644 --- a/chargebee/models/purchase/operations.py +++ b/chargebee/models/purchase/operations.py @@ -6,6 +6,7 @@ @dataclass class Purchase: + env: environment.Environment class CreatePurchaseItemParams(TypedDict): @@ -203,6 +204,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="purchase", + operation="create", ) def estimate(self, params: EstimateParams, headers=None) -> EstimateResponse: @@ -221,4 +224,6 @@ def estimate(self, params: EstimateParams, headers=None) -> EstimateResponse: False, jsonKeys, options, + resource="purchase", + operation="estimate", ) diff --git a/chargebee/models/quote/operations.py b/chargebee/models/quote/operations.py index 399520b6..fc22f19b 100644 --- a/chargebee/models/quote/operations.py +++ b/chargebee/models/quote/operations.py @@ -8,6 +8,7 @@ @dataclass class Quote: + env: environment.Environment class Status(Enum): @@ -1458,6 +1459,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="quote", + operation="retrieve", ) def create_sub_for_customer_quote( @@ -1478,6 +1481,8 @@ def create_sub_for_customer_quote( False, jsonKeys, options, + resource="quote", + operation="createSubForCustomerQuote", ) def edit_create_sub_for_customer_quote( @@ -1498,6 +1503,8 @@ def edit_create_sub_for_customer_quote( False, jsonKeys, options, + resource="quote", + operation="editCreateSubForCustomerQuote", ) def update_subscription_quote( @@ -1518,6 +1525,8 @@ def update_subscription_quote( False, jsonKeys, options, + resource="quote", + operation="updateSubscriptionQuote", ) def edit_update_subscription_quote( @@ -1538,6 +1547,8 @@ def edit_update_subscription_quote( False, jsonKeys, options, + resource="quote", + operation="editUpdateSubscriptionQuote", ) def create_for_onetime_charges( @@ -1558,6 +1569,8 @@ def create_for_onetime_charges( False, jsonKeys, options, + resource="quote", + operation="createForOnetimeCharges", ) def edit_one_time_quote( @@ -1578,6 +1591,8 @@ def edit_one_time_quote( False, jsonKeys, options, + resource="quote", + operation="editOneTimeQuote", ) def create_sub_items_for_customer_quote( @@ -1598,6 +1613,8 @@ def create_sub_items_for_customer_quote( False, jsonKeys, options, + resource="quote", + operation="createSubItemsForCustomerQuote", ) def edit_create_sub_customer_quote_for_items( @@ -1618,6 +1635,8 @@ def edit_create_sub_customer_quote_for_items( False, jsonKeys, options, + resource="quote", + operation="editCreateSubCustomerQuoteForItems", ) def update_subscription_quote_for_items( @@ -1638,6 +1657,8 @@ def update_subscription_quote_for_items( False, jsonKeys, options, + resource="quote", + operation="updateSubscriptionQuoteForItems", ) def edit_update_subscription_quote_for_items( @@ -1658,6 +1679,8 @@ def edit_update_subscription_quote_for_items( False, jsonKeys, options, + resource="quote", + operation="editUpdateSubscriptionQuoteForItems", ) def create_for_charge_items_and_charges( @@ -1678,6 +1701,8 @@ def create_for_charge_items_and_charges( False, jsonKeys, options, + resource="quote", + operation="createForChargeItemsAndCharges", ) def edit_for_charge_items_and_charges( @@ -1698,6 +1723,8 @@ def edit_for_charge_items_and_charges( False, jsonKeys, options, + resource="quote", + operation="editForChargeItemsAndCharges", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -1714,6 +1741,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="quote", + operation="list", ) def quote_line_groups_for_quote( @@ -1732,6 +1761,8 @@ def quote_line_groups_for_quote( False, jsonKeys, options, + resource="quote", + operation="quoteLineGroupsForQuote", ) def convert( @@ -1752,6 +1783,8 @@ def convert( False, jsonKeys, options, + resource="quote", + operation="convert", ) def update_status( @@ -1772,6 +1805,8 @@ def update_status( False, jsonKeys, options, + resource="quote", + operation="updateStatus", ) def extend_expiry_date( @@ -1792,6 +1827,8 @@ def extend_expiry_date( False, jsonKeys, options, + resource="quote", + operation="extendExpiryDate", ) def delete(self, id, params: DeleteParams = None, headers=None) -> DeleteResponse: @@ -1810,6 +1847,8 @@ def delete(self, id, params: DeleteParams = None, headers=None) -> DeleteRespons False, jsonKeys, options, + resource="quote", + operation="delete", ) def pdf(self, id, params: PdfParams = None, headers=None) -> PdfResponse: diff --git a/chargebee/models/ramp/operations.py b/chargebee/models/ramp/operations.py index 9abb0e73..0234b04c 100644 --- a/chargebee/models/ramp/operations.py +++ b/chargebee/models/ramp/operations.py @@ -8,6 +8,7 @@ @dataclass class Ramp: + env: environment.Environment class Status(Enum): @@ -278,6 +279,8 @@ def create_for_subscription( False, jsonKeys, options, + resource="ramp", + operation="createForSubscription", ) def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: @@ -296,6 +299,8 @@ def update(self, id, params: UpdateParams, headers=None) -> UpdateResponse: False, jsonKeys, options, + resource="ramp", + operation="update", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -312,6 +317,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="ramp", + operation="retrieve", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -330,6 +337,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="ramp", + operation="delete", ) def list(self, params: ListParams, headers=None) -> ListResponse: @@ -346,4 +355,6 @@ def list(self, params: ListParams, headers=None) -> ListResponse: False, jsonKeys, options, + resource="ramp", + operation="list", ) diff --git a/chargebee/models/recorded_purchase/operations.py b/chargebee/models/recorded_purchase/operations.py index 7f11f447..28ffb4fe 100644 --- a/chargebee/models/recorded_purchase/operations.py +++ b/chargebee/models/recorded_purchase/operations.py @@ -6,6 +6,7 @@ @dataclass class RecordedPurchase: + env: environment.Environment class Source(Enum): @@ -74,6 +75,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="recordedPurchase", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -90,4 +93,6 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="recordedPurchase", + operation="retrieve", ) diff --git a/chargebee/models/resource_migration/operations.py b/chargebee/models/resource_migration/operations.py index 048a43e4..854906bd 100644 --- a/chargebee/models/resource_migration/operations.py +++ b/chargebee/models/resource_migration/operations.py @@ -7,6 +7,7 @@ @dataclass class ResourceMigration: + env: environment.Environment class Status(Enum): @@ -38,4 +39,6 @@ def retrieve_latest( False, jsonKeys, options, + resource="resourceMigration", + operation="retrieveLatest", ) diff --git a/chargebee/models/rule/operations.py b/chargebee/models/rule/operations.py index ef5c7f34..fbcca67b 100644 --- a/chargebee/models/rule/operations.py +++ b/chargebee/models/rule/operations.py @@ -6,6 +6,7 @@ @dataclass class Rule: + env: environment.Environment class Status(Enum): @@ -29,4 +30,6 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="rule", + operation="retrieve", ) diff --git a/chargebee/models/site_migration_detail/operations.py b/chargebee/models/site_migration_detail/operations.py index 8754e01a..e12e9a4b 100644 --- a/chargebee/models/site_migration_detail/operations.py +++ b/chargebee/models/site_migration_detail/operations.py @@ -7,6 +7,7 @@ @dataclass class SiteMigrationDetail: + env: environment.Environment class Status(Enum): @@ -40,4 +41,6 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="siteMigrationDetail", + operation="list", ) diff --git a/chargebee/models/subscription/operations.py b/chargebee/models/subscription/operations.py index 5d6e8697..2a0ec588 100644 --- a/chargebee/models/subscription/operations.py +++ b/chargebee/models/subscription/operations.py @@ -1764,6 +1764,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="subscription", + operation="create", ) def create_for_customer( @@ -1787,6 +1789,8 @@ def create_for_customer( False, jsonKeys, options, + resource="subscription", + operation="createForCustomer", ) def create_with_items( @@ -1810,6 +1814,8 @@ def create_with_items( False, jsonKeys, options, + resource="subscription", + operation="createWithItems", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -1826,6 +1832,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="subscription", + operation="list", ) def subscriptions_for_customer( @@ -1844,6 +1852,8 @@ def subscriptions_for_customer( False, jsonKeys, options, + resource="subscription", + operation="subscriptionsForCustomer", ) def contract_terms_for_subscription( @@ -1862,6 +1872,8 @@ def contract_terms_for_subscription( False, jsonKeys, options, + resource="subscription", + operation="contractTermsForSubscription", ) def list_discounts( @@ -1880,6 +1892,8 @@ def list_discounts( False, jsonKeys, options, + resource="subscription", + operation="listDiscounts", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -1896,6 +1910,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="subscription", + operation="retrieve", ) def retrieve_with_scheduled_changes( @@ -1914,6 +1930,8 @@ def retrieve_with_scheduled_changes( False, jsonKeys, options, + resource="subscription", + operation="retrieveWithScheduledChanges", ) def remove_scheduled_changes( @@ -1934,6 +1952,8 @@ def remove_scheduled_changes( False, jsonKeys, options, + resource="subscription", + operation="removeScheduledChanges", ) def remove_scheduled_cancellation( @@ -1954,6 +1974,8 @@ def remove_scheduled_cancellation( False, jsonKeys, options, + resource="subscription", + operation="removeScheduledCancellation", ) def remove_coupons( @@ -1974,6 +1996,8 @@ def remove_coupons( False, jsonKeys, options, + resource="subscription", + operation="removeCoupons", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -1995,6 +2019,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="subscription", + operation="update", ) def update_for_items( @@ -2018,6 +2044,8 @@ def update_for_items( False, jsonKeys, options, + resource="subscription", + operation="updateForItems", ) def change_term_end( @@ -2038,6 +2066,8 @@ def change_term_end( False, jsonKeys, options, + resource="subscription", + operation="changeTermEnd", ) def reactivate( @@ -2060,6 +2090,8 @@ def reactivate( False, jsonKeys, options, + resource="subscription", + operation="reactivate", ) def add_charge_at_term_end( @@ -2080,6 +2112,8 @@ def add_charge_at_term_end( False, jsonKeys, options, + resource="subscription", + operation="addChargeAtTermEnd", ) def charge_addon_at_term_end( @@ -2100,6 +2134,8 @@ def charge_addon_at_term_end( False, jsonKeys, options, + resource="subscription", + operation="chargeAddonAtTermEnd", ) def charge_future_renewals( @@ -2120,6 +2156,8 @@ def charge_future_renewals( False, jsonKeys, options, + resource="subscription", + operation="chargeFutureRenewals", ) def edit_advance_invoice_schedule( @@ -2140,6 +2178,8 @@ def edit_advance_invoice_schedule( False, jsonKeys, options, + resource="subscription", + operation="editAdvanceInvoiceSchedule", ) def retrieve_advance_invoice_schedule( @@ -2158,6 +2198,8 @@ def retrieve_advance_invoice_schedule( False, jsonKeys, options, + resource="subscription", + operation="retrieveAdvanceInvoiceSchedule", ) def remove_advance_invoice_schedule( @@ -2178,6 +2220,8 @@ def remove_advance_invoice_schedule( False, jsonKeys, options, + resource="subscription", + operation="removeAdvanceInvoiceSchedule", ) def regenerate_invoice( @@ -2198,6 +2242,8 @@ def regenerate_invoice( False, jsonKeys, options, + resource="subscription", + operation="regenerateInvoice", ) def import_subscription( @@ -2221,6 +2267,8 @@ def import_subscription( False, jsonKeys, options, + resource="subscription", + operation="importSubscription", ) def import_for_customer( @@ -2243,6 +2291,8 @@ def import_for_customer( False, jsonKeys, options, + resource="subscription", + operation="importForCustomer", ) def import_contract_term( @@ -2263,6 +2313,8 @@ def import_contract_term( False, jsonKeys, options, + resource="subscription", + operation="importContractTerm", ) def import_unbilled_charges( @@ -2283,6 +2335,8 @@ def import_unbilled_charges( False, jsonKeys, options, + resource="subscription", + operation="importUnbilledCharges", ) def import_for_items( @@ -2305,6 +2359,8 @@ def import_for_items( False, jsonKeys, options, + resource="subscription", + operation="importForItems", ) def override_billing_profile( @@ -2325,6 +2381,8 @@ def override_billing_profile( False, jsonKeys, options, + resource="subscription", + operation="overrideBillingProfile", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -2343,6 +2401,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="subscription", + operation="delete", ) def pause(self, id, params: PauseParams = None, headers=None) -> PauseResponse: @@ -2361,6 +2421,8 @@ def pause(self, id, params: PauseParams = None, headers=None) -> PauseResponse: False, jsonKeys, options, + resource="subscription", + operation="pause", ) def cancel(self, id, params: CancelParams = None, headers=None) -> CancelResponse: @@ -2379,6 +2441,8 @@ def cancel(self, id, params: CancelParams = None, headers=None) -> CancelRespons False, jsonKeys, options, + resource="subscription", + operation="cancel", ) def cancel_for_items( @@ -2399,6 +2463,8 @@ def cancel_for_items( False, jsonKeys, options, + resource="subscription", + operation="cancelForItems", ) def resume(self, id, params: ResumeParams = None, headers=None) -> ResumeResponse: @@ -2419,6 +2485,8 @@ def resume(self, id, params: ResumeParams = None, headers=None) -> ResumeRespons False, jsonKeys, options, + resource="subscription", + operation="resume", ) def remove_scheduled_pause(self, id, headers=None) -> RemoveScheduledPauseResponse: @@ -2437,6 +2505,8 @@ def remove_scheduled_pause(self, id, headers=None) -> RemoveScheduledPauseRespon False, jsonKeys, options, + resource="subscription", + operation="removeScheduledPause", ) def remove_scheduled_resumption( @@ -2457,6 +2527,8 @@ def remove_scheduled_resumption( False, jsonKeys, options, + resource="subscription", + operation="removeScheduledResumption", ) def move(self, id, params: MoveParams, headers=None) -> MoveResponse: @@ -2475,4 +2547,6 @@ def move(self, id, params: MoveParams, headers=None) -> MoveResponse: False, jsonKeys, options, + resource="subscription", + operation="move", ) diff --git a/chargebee/models/subscription_entitlement/operations.py b/chargebee/models/subscription_entitlement/operations.py index c7a65ce8..26949b44 100644 --- a/chargebee/models/subscription_entitlement/operations.py +++ b/chargebee/models/subscription_entitlement/operations.py @@ -7,6 +7,7 @@ @dataclass class SubscriptionEntitlement: + env: environment.Environment class ScheduleStatus(Enum): @@ -61,6 +62,8 @@ def subscription_entitlements_for_subscription( False, jsonKeys, options, + resource="subscriptionEntitlement", + operation="subscriptionEntitlementsForSubscription", ) def set_subscription_entitlement_availability( @@ -83,4 +86,6 @@ def set_subscription_entitlement_availability( False, jsonKeys, options, + resource="subscriptionEntitlement", + operation="setSubscriptionEntitlementAvailability", ) diff --git a/chargebee/models/time_machine/operations.py b/chargebee/models/time_machine/operations.py index 9d237c2b..75dec261 100644 --- a/chargebee/models/time_machine/operations.py +++ b/chargebee/models/time_machine/operations.py @@ -8,6 +8,7 @@ @dataclass class TimeMachine: + env: environment.Environment class TimeTravelStatus(Enum): @@ -71,6 +72,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="timeMachine", + operation="retrieve", ) def start_afresh( @@ -91,6 +94,8 @@ def start_afresh( False, jsonKeys, options, + resource="timeMachine", + operation="startAfresh", ) def travel_forward( @@ -111,4 +116,6 @@ def travel_forward( False, jsonKeys, options, + resource="timeMachine", + operation="travelForward", ) diff --git a/chargebee/models/transaction/operations.py b/chargebee/models/transaction/operations.py index ffddf3b2..eea6d40e 100644 --- a/chargebee/models/transaction/operations.py +++ b/chargebee/models/transaction/operations.py @@ -8,6 +8,7 @@ @dataclass class Transaction: + env: environment.Environment class Type(Enum): @@ -191,6 +192,8 @@ def create_authorization( False, jsonKeys, options, + resource="transaction", + operation="createAuthorization", ) def void_transaction(self, id, headers=None) -> VoidTransactionResponse: @@ -209,6 +212,8 @@ def void_transaction(self, id, headers=None) -> VoidTransactionResponse: False, jsonKeys, options, + resource="transaction", + operation="voidTransaction", ) def record_refund( @@ -229,6 +234,8 @@ def record_refund( False, jsonKeys, options, + resource="transaction", + operation="recordRefund", ) def reconcile( @@ -249,6 +256,8 @@ def reconcile( False, jsonKeys, options, + resource="transaction", + operation="reconcile", ) def refund(self, id, params: RefundParams = None, headers=None) -> RefundResponse: @@ -267,6 +276,8 @@ def refund(self, id, params: RefundParams = None, headers=None) -> RefundRespons False, jsonKeys, options, + resource="transaction", + operation="refund", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -283,6 +294,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="transaction", + operation="list", ) def transactions_for_customer( @@ -301,6 +314,8 @@ def transactions_for_customer( False, jsonKeys, options, + resource="transaction", + operation="transactionsForCustomer", ) def transactions_for_subscription( @@ -319,6 +334,8 @@ def transactions_for_subscription( False, jsonKeys, options, + resource="transaction", + operation="transactionsForSubscription", ) def payments_for_invoice( @@ -337,6 +354,8 @@ def payments_for_invoice( False, jsonKeys, options, + resource="transaction", + operation="paymentsForInvoice", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -353,6 +372,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="transaction", + operation="retrieve", ) def delete_offline_transaction( @@ -373,4 +394,6 @@ def delete_offline_transaction( False, jsonKeys, options, + resource="transaction", + operation="deleteOfflineTransaction", ) diff --git a/chargebee/models/unbilled_charge/operations.py b/chargebee/models/unbilled_charge/operations.py index 40b396ed..2d3e248a 100644 --- a/chargebee/models/unbilled_charge/operations.py +++ b/chargebee/models/unbilled_charge/operations.py @@ -8,6 +8,7 @@ @dataclass class UnbilledCharge: + env: environment.Environment class EntityType(Enum): @@ -156,6 +157,8 @@ def create_unbilled_charge( False, jsonKeys, options, + resource="unbilledCharge", + operation="createUnbilledCharge", ) def create(self, params: CreateParams, headers=None) -> CreateResponse: @@ -174,6 +177,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="unbilledCharge", + operation="create", ) def invoice_unbilled_charges( @@ -194,6 +199,8 @@ def invoice_unbilled_charges( False, jsonKeys, options, + resource="unbilledCharge", + operation="invoiceUnbilledCharges", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -212,6 +219,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="unbilledCharge", + operation="delete", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -228,6 +237,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="unbilledCharge", + operation="list", ) def invoice_now_estimate( @@ -246,4 +257,6 @@ def invoice_now_estimate( False, jsonKeys, options, + resource="unbilledCharge", + operation="invoiceNowEstimate", ) diff --git a/chargebee/models/usage/operations.py b/chargebee/models/usage/operations.py index 00d0fa25..7d5ff290 100644 --- a/chargebee/models/usage/operations.py +++ b/chargebee/models/usage/operations.py @@ -7,6 +7,7 @@ @dataclass class Usage: + env: environment.Environment class PdfInvoiceParams(TypedDict): @@ -58,6 +59,8 @@ def create(self, id, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="usage", + operation="create", ) def retrieve(self, id, params: RetrieveParams, headers=None) -> RetrieveResponse: @@ -74,6 +77,8 @@ def retrieve(self, id, params: RetrieveParams, headers=None) -> RetrieveResponse False, jsonKeys, options, + resource="usage", + operation="retrieve", ) def delete(self, id, params: DeleteParams, headers=None) -> DeleteResponse: @@ -92,6 +97,8 @@ def delete(self, id, params: DeleteParams, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="usage", + operation="delete", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -108,6 +115,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="usage", + operation="list", ) def pdf(self, params: PdfParams, headers=None) -> PdfResponse: @@ -126,4 +135,6 @@ def pdf(self, params: PdfParams, headers=None) -> PdfResponse: False, jsonKeys, options, + resource="usage", + operation="pdf", ) diff --git a/chargebee/models/usage_event/operations.py b/chargebee/models/usage_event/operations.py index f71a303f..bd1194e8 100644 --- a/chargebee/models/usage_event/operations.py +++ b/chargebee/models/usage_event/operations.py @@ -5,6 +5,7 @@ @dataclass class UsageEvent: + env: environment.Environment class BatchIngestEventParams(TypedDict): @@ -38,6 +39,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: True, jsonKeys, options, + resource="usageEvent", + operation="create", ) def batch_ingest( @@ -58,4 +61,6 @@ def batch_ingest( True, jsonKeys, options, + resource="usageEvent", + operation="batchIngest", ) diff --git a/chargebee/models/usage_file/operations.py b/chargebee/models/usage_file/operations.py index 10a9907b..aef7eb8f 100644 --- a/chargebee/models/usage_file/operations.py +++ b/chargebee/models/usage_file/operations.py @@ -6,6 +6,7 @@ @dataclass class UsageFile: + env: environment.Environment class Status(Enum): @@ -40,6 +41,8 @@ def upload_url(self, params: UploadUrlParams, headers=None) -> UploadUrlResponse False, jsonKeys, options, + resource="usageFile", + operation="uploadUrl", ) def processing_status(self, id, headers=None) -> ProcessingStatusResponse: @@ -56,4 +59,6 @@ def processing_status(self, id, headers=None) -> ProcessingStatusResponse: False, jsonKeys, options, + resource="usageFile", + operation="processingStatus", ) diff --git a/chargebee/models/virtual_bank_account/operations.py b/chargebee/models/virtual_bank_account/operations.py index bbd2d14c..2d07f50b 100644 --- a/chargebee/models/virtual_bank_account/operations.py +++ b/chargebee/models/virtual_bank_account/operations.py @@ -7,6 +7,7 @@ @dataclass class VirtualBankAccount: + env: environment.Environment class Scheme(Enum): @@ -58,6 +59,8 @@ def create_using_permanent_token( False, jsonKeys, options, + resource="virtualBankAccount", + operation="createUsingPermanentToken", ) def create(self, params: CreateParams, headers=None) -> CreateResponse: @@ -76,6 +79,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="virtualBankAccount", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -92,6 +97,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="virtualBankAccount", + operation="retrieve", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -108,6 +115,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="virtualBankAccount", + operation="list", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -126,6 +135,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="virtualBankAccount", + operation="delete", ) def delete_local(self, id, headers=None) -> DeleteLocalResponse: @@ -144,4 +155,6 @@ def delete_local(self, id, headers=None) -> DeleteLocalResponse: False, jsonKeys, options, + resource="virtualBankAccount", + operation="deleteLocal", ) diff --git a/chargebee/models/webhook_endpoint/operations.py b/chargebee/models/webhook_endpoint/operations.py index 9533aa7a..8ef026fc 100644 --- a/chargebee/models/webhook_endpoint/operations.py +++ b/chargebee/models/webhook_endpoint/operations.py @@ -7,6 +7,7 @@ @dataclass class WebhookEndpoint: + env: environment.Environment class ApiVersion(Enum): @@ -59,6 +60,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="webhookEndpoint", + operation="create", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -77,6 +80,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="webhookEndpoint", + operation="update", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -93,6 +98,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="webhookEndpoint", + operation="retrieve", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -111,6 +118,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="webhookEndpoint", + operation="delete", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -127,4 +136,6 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="webhookEndpoint", + operation="list", ) From f51a745db5eda95214eb24074da9c3c086cea861 Mon Sep 17 00:00:00 2001 From: cb-karthikp Date: Wed, 1 Jul 2026 15:08:24 +0530 Subject: [PATCH 3/5] Version bump and header handler on otel --- CHANGELOG.md | 9 + README.md | 12 +- VERSION | 2 +- chargebee/models/alert/operations.py | 12 ++ chargebee/models/alert_status/operations.py | 4 + chargebee/models/usage_charge/operations.py | 2 + chargebee/models/usage_summary/operations.py | 2 + chargebee/telemetry/telemetry_executor.py | 14 +- chargebee/telemetry/telemetry_support.py | 42 +++- chargebee/telemetry/types.py | 5 + chargebee/version.py | 2 +- tests/test_telemetry.py | 213 +++++++++++++++++++ tests/test_telemetry_support.py | 40 ++++ 13 files changed, 345 insertions(+), 14 deletions(-) create mode 100644 tests/test_telemetry.py create mode 100644 tests/test_telemetry_support.py diff --git a/CHANGELOG.md b/CHANGELOG.md index e9251aba..cf5bd57b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +### v3.24.0 (2026-07-01) +* * * + +### New Features +* Added an optional telemetry adapter hook for tracing Chargebee API calls via OpenTelemetry (or any APM). Configure it via `Chargebee(..., telemetry_adapter=adapter)`. When unconfigured, the SDK skips all telemetry work — no behavior change for existing integrations. +* Each API call emits one CLIENT span (`chargebee.{resource}.{operation}`) with OpenTelemetry HTTP semantic-convention attributes plus `chargebee.*` attributes. Adapters may inject W3C trace context (`traceparent`) into outbound request headers for distributed tracing. +* Exposed the telemetry types (`TelemetryAdapter`, `RequestTelemetryContext`, `RequestTelemetryResult`, `RequestTelemetryError`), the `TelemetrySupport` helpers, and the `TelemetryAttributeKeys` constants under `chargebee.telemetry`. OpenTelemetry is not bundled with the SDK; bring your own OTel packages in the host application. + + ### v3.23.0 (2026-06-08) * * * ### New Attributes: diff --git a/README.md b/README.md index 29f07f43..1f247f61 100644 --- a/README.md +++ b/README.md @@ -280,11 +280,17 @@ cb_client.update_retry_config(retry_config) ### Telemetry (OpenTelemetry) -Optional. Pass a `telemetry_adapter` when you want Chargebee API calls traced in your observability stack (Datadog, Splunk, Honeycomb, Jaeger, etc.). OpenTelemetry is not bundled with `chargebee` — install and configure it in your app, implement `TelemetryAdapter`, and wire it on the client. +**Optional add-on.** Existing integrations do not need any changes — if you never set a telemetry adapter, API calls behave exactly as before. -The SDK builds standardized span attributes (`context.start_attributes`, `result.end_attributes`) following the stable [OpenTelemetry HTTP semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/) (`url.full`, `http.request.method`, `http.response.status_code`, `server.address`, `error.type`) plus Chargebee-specific `chargebee.*` attributes — use them as-is so spans render correctly in your APM and stay consistent across SDKs. +Pass a `telemetry_adapter` when you want Chargebee API calls traced in your observability stack (Datadog, Splunk, Honeycomb, Jaeger, etc.). OpenTelemetry is **not** bundled with `chargebee` — install and configure OTel (or your APM SDK) in your application, implement `TelemetryAdapter`, and wire it on the client. -Spans are named `chargebee.{resource}.{operation}` (e.g. `chargebee.subscription.create`). +The SDK builds standardized span attributes (`context.start_attributes`, `result.end_attributes`) following stable [OpenTelemetry HTTP semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/) (`url.full`, `http.request.method`, `http.response.status_code`, `server.address`, `error.type`) plus Chargebee-specific `chargebee.*` attributes (see `chargebee.telemetry.TelemetryAttributeKeys`). + +Span names follow `chargebee.{resource}.{operation}` (e.g. `chargebee.subscription.create`). One span is created per SDK API call; retries reuse the same span. Adapter failures are logged and never affect the underlying API request. + +Pass `telemetry_adapter` when constructing `Chargebee`, or call `update_telemetry_adapter()` on an existing client. Each new `Chargebee(...)` instance gets its own environment — set the adapter on every client you use for telemetry. + +To pass custom `chargebee-*` headers (promoted to `http.request.header.chargebee-*` span attributes), include them in the `headers` argument on resource methods. #### OpenTelemetry example diff --git a/VERSION b/VERSION index ee893b7e..954e2288 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.23.0 +3.24.0 diff --git a/chargebee/models/alert/operations.py b/chargebee/models/alert/operations.py index f3a9f28a..f27b3453 100644 --- a/chargebee/models/alert/operations.py +++ b/chargebee/models/alert/operations.py @@ -74,6 +74,8 @@ def create(self, params: CreateParams, headers=None) -> CreateResponse: False, jsonKeys, options, + resource="alert", + operation="create", ) def retrieve(self, id, headers=None) -> RetrieveResponse: @@ -90,6 +92,8 @@ def retrieve(self, id, headers=None) -> RetrieveResponse: False, jsonKeys, options, + resource="alert", + operation="retrieve", ) def list(self, params: ListParams = None, headers=None) -> ListResponse: @@ -106,6 +110,8 @@ def list(self, params: ListParams = None, headers=None) -> ListResponse: False, jsonKeys, options, + resource="alert", + operation="list", ) def update(self, id, params: UpdateParams = None, headers=None) -> UpdateResponse: @@ -124,6 +130,8 @@ def update(self, id, params: UpdateParams = None, headers=None) -> UpdateRespons False, jsonKeys, options, + resource="alert", + operation="update", ) def delete(self, id, headers=None) -> DeleteResponse: @@ -142,6 +150,8 @@ def delete(self, id, headers=None) -> DeleteResponse: False, jsonKeys, options, + resource="alert", + operation="delete", ) def application_alerts_for_subscription( @@ -160,4 +170,6 @@ def application_alerts_for_subscription( False, jsonKeys, options, + resource="alert", + operation="application_alertsForSubscription", ) diff --git a/chargebee/models/alert_status/operations.py b/chargebee/models/alert_status/operations.py index a79a4cfd..9e34e93d 100644 --- a/chargebee/models/alert_status/operations.py +++ b/chargebee/models/alert_status/operations.py @@ -35,6 +35,8 @@ def alert_statuses_for_subscription( False, jsonKeys, options, + resource="alertStatus", + operation="alert_statusesForSubscription", ) def alert_statuses_for_alert( @@ -53,4 +55,6 @@ def alert_statuses_for_alert( False, jsonKeys, options, + resource="alertStatus", + operation="alert_statusesForAlert", ) diff --git a/chargebee/models/usage_charge/operations.py b/chargebee/models/usage_charge/operations.py index 2dfab52c..9bb1298c 100644 --- a/chargebee/models/usage_charge/operations.py +++ b/chargebee/models/usage_charge/operations.py @@ -29,4 +29,6 @@ def retrieve_usage_charges_for_subscription( False, jsonKeys, options, + resource="usageCharge", + operation="retrieveUsageChargesForSubscription", ) diff --git a/chargebee/models/usage_summary/operations.py b/chargebee/models/usage_summary/operations.py index 2fd20386..717766ad 100644 --- a/chargebee/models/usage_summary/operations.py +++ b/chargebee/models/usage_summary/operations.py @@ -32,4 +32,6 @@ def retrieve_usage_summary_for_subscription( False, jsonKeys, options, + resource="usageSummary", + operation="retrieveUsageSummaryForSubscription", ) diff --git a/chargebee/telemetry/telemetry_executor.py b/chargebee/telemetry/telemetry_executor.py index 469de6b5..abf403cf 100644 --- a/chargebee/telemetry/telemetry_executor.py +++ b/chargebee/telemetry/telemetry_executor.py @@ -42,6 +42,7 @@ def build_context( method: str, url: str, subDomain: str | None, + request_headers: dict[str, str] | None = None, ) -> BuildRequestTelemetryContextInput: full_url = env.api_url(url, subDomain) parsed = urlparse(full_url) @@ -57,6 +58,7 @@ def build_context( chargebee_site=env.site, chargebee_api_version=resolve_chargebee_api_version(api_path), # type: ignore[arg-type] sdk_version=VERSION, + request_headers=request_headers, ) @@ -73,7 +75,7 @@ def _start_telemetry( telemetry_headers = dict(headers or {}) try: context = build_request_telemetry_context( - build_context(env, resource, operation, method, url, subDomain) + build_context(env, resource, operation, method, url, subDomain, headers) ) handle = adapter.on_request_start(context, telemetry_headers) return handle, telemetry_headers @@ -86,7 +88,10 @@ def _start_telemetry( def _end_success( - adapter: TelemetryAdapter, handle: object | None, start_ms: float, http_status_code: int + adapter: TelemetryAdapter, + handle: object | None, + start_ms: float, + http_status_code: int, ) -> None: try: adapter.on_request_end( @@ -100,7 +105,10 @@ def _end_success( def _end_failure( - adapter: TelemetryAdapter, handle: object | None, start_ms: float, err: BaseException + adapter: TelemetryAdapter, + handle: object | None, + start_ms: float, + err: BaseException, ) -> None: status = extract_http_status_code(err) http_status_code = status if status is not None else 500 diff --git a/chargebee/telemetry/telemetry_support.py b/chargebee/telemetry/telemetry_support.py index fc0e74b1..361e0bcf 100644 --- a/chargebee/telemetry/telemetry_support.py +++ b/chargebee/telemetry/telemetry_support.py @@ -81,9 +81,35 @@ def build_request_start_span_attributes( TelemetryAttributeKeys.CHARGEBEE_OPERATION: input.operation, TelemetryAttributeKeys.CHARGEBEE_SDK_NAME: CHARGEBEE_SDK_NAME, TelemetryAttributeKeys.CHARGEBEE_SDK_VERSION: input.sdk_version, + **build_request_header_span_attributes(input.request_headers), } +def build_request_header_span_attributes( + request_headers: Mapping[str, str] | None, +) -> dict[str, str]: + # Promotes chargebee-* request headers to http.request.header.* attributes; excludes the chargebee-request-origin-* PII family. + attributes: dict[str, str] = {} + if not request_headers: + return attributes + + for name, value in request_headers.items(): + if name is None or value is None: + continue + lower_name = name.lower() + if not lower_name.startswith( + TelemetryAttributeKeys.CHARGEBEE_TELEMETRY_HEADER_PREFIX + ) or lower_name.startswith( + TelemetryAttributeKeys.CHARGEBEE_TELEMETRY_HEADER_EXCLUDE_PREFIX + ): + continue + attributes[ + TelemetryAttributeKeys.HTTP_REQUEST_HEADER_ATTRIBUTE_PREFIX + lower_name + ] = value + + return attributes + + def build_request_end_span_attributes( http_status_code: int, error: RequestTelemetryError | None, @@ -93,15 +119,17 @@ def build_request_end_span_attributes( } if error is not None: - attributes[TelemetryAttributeKeys.ERROR_TYPE] = str(http_status_code) - if error.chargebee_error_code is not None: - attributes[TelemetryAttributeKeys.CHARGEBEE_ERROR_CODE] = ( - error.chargebee_error_code - ) if error.chargebee_api_error_type is not None: + attributes[TelemetryAttributeKeys.ERROR_TYPE] = ( + error.chargebee_api_error_type + ) attributes[TelemetryAttributeKeys.CHARGEBEE_ERROR_TYPE] = ( error.chargebee_api_error_type ) + if error.chargebee_error_code is not None: + attributes[TelemetryAttributeKeys.CHARGEBEE_ERROR_CODE] = ( + error.chargebee_error_code + ) if error.chargebee_error_param is not None: attributes[TelemetryAttributeKeys.CHARGEBEE_ERROR_PARAM] = ( error.chargebee_error_param @@ -141,7 +169,9 @@ def build_request_telemetry_result( ) -def extract_request_telemetry_error(err: BaseException | None) -> RequestTelemetryError | None: +def extract_request_telemetry_error( + err: BaseException | None, +) -> RequestTelemetryError | None: if err is None: return None diff --git a/chargebee/telemetry/types.py b/chargebee/telemetry/types.py index 1992dcb5..c5142a96 100644 --- a/chargebee/telemetry/types.py +++ b/chargebee/telemetry/types.py @@ -17,6 +17,10 @@ class TelemetryAttributeKeys: """Span attribute keys shared across Chargebee SDKs.""" + HTTP_REQUEST_HEADER_ATTRIBUTE_PREFIX = "http.request.header." + CHARGEBEE_TELEMETRY_HEADER_PREFIX = "chargebee-" + CHARGEBEE_TELEMETRY_HEADER_EXCLUDE_PREFIX = "chargebee-request-origin-" + URL_FULL = "url.full" HTTP_REQUEST_METHOD = "http.request.method" HTTP_RESPONSE_STATUS_CODE = "http.response.status_code" @@ -74,3 +78,4 @@ class BuildRequestTelemetryContextInput: chargebee_site: str chargebee_api_version: Literal["v1", "v2"] sdk_version: str + request_headers: Mapping[str, str] | None = None diff --git a/chargebee/version.py b/chargebee/version.py index 0ac1ed08..dbeb5d70 100644 --- a/chargebee/version.py +++ b/chargebee/version.py @@ -1 +1 @@ -VERSION = "3.23.0" +VERSION = "3.24.0" diff --git a/tests/test_telemetry.py b/tests/test_telemetry.py new file mode 100644 index 00000000..1aa7d0b2 --- /dev/null +++ b/tests/test_telemetry.py @@ -0,0 +1,213 @@ +import unittest +from unittest.mock import Mock, patch + +from chargebee import environment +from chargebee.request import send +from chargebee.telemetry import RequestTelemetryContext, RequestTelemetryResult +from chargebee.telemetry.telemetry_executor import execute_sync + + +class RecordingAdapter: + def __init__(self): + self.events = [] + self.start_context = None + self.end_result = None + + def on_request_start(self, context, request_headers): + self.events.append("start") + self.start_context = context + request_headers["traceparent"] = "00-test-trace" + return "span-1" + + def on_request_end(self, handle, result): + self.events.append("end") + self.end_result = result + + +class MockEnvironment(environment.Environment): + def __init__(self): + super().__init__({"api_key": "test_key", "site": "acme"}) + self.set_api_endpoint() + self.use_async_client = False + self.telemetry_adapter = None + + +class TelemetryExecutorTest(unittest.TestCase): + def test_skips_when_no_adapter(self): + env = MockEnvironment() + + def action(headers): + return ({}, {}, 200) + + result = execute_sync( + env, "customer", "list", "get", "/customers", None, None, action + ) + self.assertEqual(result[2], 200) + + def test_skips_when_no_metadata(self): + env = MockEnvironment() + env.telemetry_adapter = RecordingAdapter() + + def action(headers): + return ({}, {}, 200) + + execute_sync(env, None, None, "get", "/customers", None, None, action) + self.assertEqual(env.telemetry_adapter.events, []) + + def test_calls_adapter_once_per_api_call(self): + env = MockEnvironment() + adapter = RecordingAdapter() + env.telemetry_adapter = adapter + attempts = {"count": 0} + + def action(headers): + attempts["count"] += 1 + if attempts["count"] < 2: + raise RuntimeError("retry") + self.assertEqual(headers.get("traceparent"), "00-test-trace") + return ({}, {}, 200) + + with self.assertRaises(RuntimeError): + execute_sync( + env, "customer", "list", "get", "/customers", None, None, action + ) + + execute_sync(env, "customer", "list", "get", "/customers", None, None, action) + + self.assertEqual(adapter.events.count("start"), 2) + self.assertEqual(adapter.end_result.http_status_code, 200) + self.assertEqual(adapter.start_context.span_name, "chargebee.customer.list") + + def test_captures_chargebee_request_headers(self): + env = MockEnvironment() + adapter = RecordingAdapter() + env.telemetry_adapter = adapter + + def action(headers): + return ({}, {}, 200) + + request_headers = { + "chargebee-foo": "bar", + "Chargebee-Idempotency-Key": "idem-key-1", + "Authorization": "Basic super-secret", + "chargebee-request-origin-ip": "202.170.207.70", + "chargebee-request-origin-user": "amara@acme.com", + } + + execute_sync( + env, + "customer", + "list", + "get", + "/customers", + None, + request_headers, + action, + ) + + attrs = adapter.start_context.start_attributes + self.assertEqual(attrs.get("http.request.header.chargebee-foo"), "bar") + self.assertEqual( + attrs.get("http.request.header.chargebee-idempotency-key"), "idem-key-1" + ) + self.assertNotIn("http.request.header.authorization", attrs) + self.assertNotIn("http.request.header.chargebee-request-origin-ip", attrs) + self.assertNotIn("http.request.header.chargebee-request-origin-user", attrs) + self.assertNotIn("202.170.207.70", str(attrs)) + self.assertNotIn("amara@acme.com", str(attrs)) + + def test_does_not_mutate_caller_headers(self): + env = MockEnvironment() + adapter = RecordingAdapter() + env.telemetry_adapter = adapter + original_headers = {"chargebee-foo": "bar"} + headers = original_headers.copy() + captured_headers = {} + + def action(request_headers): + captured_headers.update(request_headers or {}) + return ({}, {}, 200) + + execute_sync( + env, + "customer", + "list", + "get", + "/customers", + None, + headers, + action, + ) + + self.assertEqual(captured_headers.get("traceparent"), "00-test-trace") + self.assertEqual(headers, original_headers) + self.assertNotIn("traceparent", headers) + + def test_records_chargebee_api_error_attributes(self): + env = MockEnvironment() + adapter = RecordingAdapter() + env.telemetry_adapter = adapter + + from chargebee.api_error import InvalidRequestError + + def action(headers): + raise InvalidRequestError( + 404, + { + "message": "Not found", + "type": "invalid_request", + "api_error_code": "resource_not_found", + "param": "customer_id", + }, + ) + + with self.assertRaises(InvalidRequestError): + execute_sync( + env, + "customer", + "retrieve", + "get", + "/customers/x", + None, + None, + action, + ) + + end_attrs = adapter.end_result.end_attributes + self.assertEqual(end_attrs.get("http.response.status_code"), 404) + self.assertEqual(end_attrs.get("error.type"), "invalid_request") + self.assertEqual(end_attrs.get("chargebee.error.type"), "invalid_request") + + def test_adapter_failure_does_not_break_request(self): + env = MockEnvironment() + + class FailingAdapter: + def on_request_start(self, context, request_headers): + raise RuntimeError("telemetry failed") + + def on_request_end(self, handle, result): + pass + + env.telemetry_adapter = FailingAdapter() + + with patch("chargebee.http_request.request") as mock_request: + mock_request.return_value = ({}, {}, 200) + send( + "get", + "/customers", + env, + None, + None, + dict, + None, + False, + None, + None, + resource="customer", + operation="list", + ) + mock_request.assert_called_once() + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_telemetry_support.py b/tests/test_telemetry_support.py new file mode 100644 index 00000000..95c979f5 --- /dev/null +++ b/tests/test_telemetry_support.py @@ -0,0 +1,40 @@ +import unittest + +from chargebee.telemetry import RequestTelemetryError, TelemetryAttributeKeys +from chargebee.telemetry.telemetry_support import build_request_end_span_attributes + + +class TelemetrySupportTest(unittest.TestCase): + def test_uses_chargebee_error_type_for_error_type(self): + error = RequestTelemetryError( + message="Not found", + chargebee_error_code="resource_not_found", + chargebee_api_error_type="invalid_request", + ) + + attributes = build_request_end_span_attributes(404, error) + + self.assertEqual( + attributes[TelemetryAttributeKeys.HTTP_RESPONSE_STATUS_CODE], 404 + ) + self.assertEqual( + attributes[TelemetryAttributeKeys.ERROR_TYPE], "invalid_request" + ) + self.assertEqual( + attributes[TelemetryAttributeKeys.CHARGEBEE_ERROR_TYPE], "invalid_request" + ) + + def test_omits_error_type_when_classification_unavailable(self): + error = RequestTelemetryError(message="request failed") + + attributes = build_request_end_span_attributes(500, error) + + self.assertEqual( + attributes[TelemetryAttributeKeys.HTTP_RESPONSE_STATUS_CODE], 500 + ) + self.assertNotIn(TelemetryAttributeKeys.ERROR_TYPE, attributes) + self.assertNotIn(TelemetryAttributeKeys.CHARGEBEE_ERROR_TYPE, attributes) + + +if __name__ == "__main__": + unittest.main() From d98807e91e4e7ee3ed4792900f993e1953c7cc2d Mon Sep 17 00:00:00 2001 From: cb-karthikp Date: Wed, 1 Jul 2026 15:22:03 +0530 Subject: [PATCH 4/5] Version bumpup --- VERSION | 2 +- chargebee/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 954e2288..09144431 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.24.0 +3.25.0 diff --git a/chargebee/version.py b/chargebee/version.py index dbeb5d70..e78c67c7 100644 --- a/chargebee/version.py +++ b/chargebee/version.py @@ -1 +1 @@ -VERSION = "3.24.0" +VERSION = "3.25.0" From e6b9338cecefed3791f7b8953233498a51b00db7 Mon Sep 17 00:00:00 2001 From: cb-karthikp Date: Wed, 1 Jul 2026 15:29:19 +0530 Subject: [PATCH 5/5] Update operations.py --- chargebee/models/alert_status/operations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chargebee/models/alert_status/operations.py b/chargebee/models/alert_status/operations.py index 9e34e93d..528f053e 100644 --- a/chargebee/models/alert_status/operations.py +++ b/chargebee/models/alert_status/operations.py @@ -36,7 +36,7 @@ def alert_statuses_for_subscription( jsonKeys, options, resource="alertStatus", - operation="alert_statusesForSubscription", + operation="alertStatusesForSubscription", ) def alert_statuses_for_alert( @@ -56,5 +56,5 @@ def alert_statuses_for_alert( jsonKeys, options, resource="alertStatus", - operation="alert_statusesForAlert", + operation="alertStatusesForAlert", )