diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 8d395546..8318f22f 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "4.98.0" + ".": "4.99.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index b0d5eb05..1dc79ab6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 1028 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/telnyx%2Ftelnyx-69dc36f47cc644b1e8545a6bb4710ef7114039fb14979dfe9a99c5c38d077cf9.yml -openapi_spec_hash: 96bb6b6903356ad6d5181a8635cdbe1d -config_hash: 4509ecd06ed7f91d4e57b8e084216074 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/telnyx%2Ftelnyx-832968186670a31afff89bd833c23949b290f9b59b0336e8ea56bb8c9da89ed2.yml +openapi_spec_hash: ba9edee70674bb1eba2b983d06ecdd97 +config_hash: b6ba7e605cce12826014008cad46406c diff --git a/CHANGELOG.md b/CHANGELOG.md index 2745cdde..354151c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## 4.99.0 (2026-04-08) + +Full Changelog: [v4.98.0...v4.99.0](https://github.com/team-telnyx/telnyx-python/compare/v4.98.0...v4.99.0) + +### Features + +* TELAPPS-5707: Add privacy parameter to Call Control dial and transfer ([994a4ae](https://github.com/team-telnyx/telnyx-python/commit/994a4ae45ea23d56e53d9b63c0900ff194579b81)) + + +### Reverts + +* revert stainless.yml changes from pronunciation dictionaries commit ([62f4c82](https://github.com/team-telnyx/telnyx-python/commit/62f4c82b7231098bac5254a4a4ae05ec0c5550a4)) + ## 4.98.0 (2026-04-08) Full Changelog: [v4.97.0...v4.98.0](https://github.com/team-telnyx/telnyx-python/compare/v4.97.0...v4.98.0) diff --git a/api.md b/api.md index 440c7fc2..2687f632 100644 --- a/api.md +++ b/api.md @@ -581,6 +581,8 @@ from telnyx.types.ai import ( InferenceEmbeddingWebhookToolParams, InsightSettings, MessagingSettings, + Observability, + ObservabilityReq, PrivacySettings, RetrievalTool, TelephonySettings, @@ -5520,17 +5522,17 @@ Types: ```python from telnyx.types.enterprises import ( EnterpriseReputationPublic, - ReputationCreateResponse, - ReputationListResponse, + ReputationRetrieveResponse, + ReputationEnableResponse, ReputationUpdateFrequencyResponse, ) ``` Methods: -- client.enterprises.reputation.create(enterprise_id, \*\*params) -> ReputationCreateResponse -- client.enterprises.reputation.list(enterprise_id) -> ReputationListResponse -- client.enterprises.reputation.delete_all(enterprise_id) -> None +- client.enterprises.reputation.retrieve(enterprise_id) -> ReputationRetrieveResponse +- client.enterprises.reputation.disable(enterprise_id) -> None +- client.enterprises.reputation.enable(enterprise_id, \*\*params) -> ReputationEnableResponse - client.enterprises.reputation.update_frequency(enterprise_id, \*\*params) -> ReputationUpdateFrequencyResponse ### Numbers @@ -5538,15 +5540,15 @@ Methods: Types: ```python -from telnyx.types.enterprises.reputation import NumberCreateResponse, NumberRetrieveResponse +from telnyx.types.enterprises.reputation import NumberRetrieveResponse, NumberAssociateResponse ``` Methods: -- client.enterprises.reputation.numbers.create(enterprise_id, \*\*params) -> NumberCreateResponse - client.enterprises.reputation.numbers.retrieve(phone_number, \*, enterprise_id, \*\*params) -> NumberRetrieveResponse - client.enterprises.reputation.numbers.list(enterprise_id, \*\*params) -> SyncDefaultFlatPagination[ReputationPhoneNumberWithReputationData] -- client.enterprises.reputation.numbers.delete(phone_number, \*, enterprise_id) -> None +- client.enterprises.reputation.numbers.associate(enterprise_id, \*\*params) -> NumberAssociateResponse +- client.enterprises.reputation.numbers.disassociate(phone_number, \*, enterprise_id) -> None # Reputation diff --git a/pyproject.toml b/pyproject.toml index 501be16f..1eb87268 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "telnyx" -version = "4.98.0" +version = "4.99.0" description = "The official Python library for the telnyx API" dynamic = ["readme"] license = "MIT" diff --git a/src/telnyx/_version.py b/src/telnyx/_version.py index c388396a..fd9f8eb0 100644 --- a/src/telnyx/_version.py +++ b/src/telnyx/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "telnyx" -__version__ = "4.98.0" # x-release-please-version +__version__ = "4.99.0" # x-release-please-version diff --git a/src/telnyx/resources/ai/assistants/assistants.py b/src/telnyx/resources/ai/assistants/assistants.py index 9c109740..07f49d18 100644 --- a/src/telnyx/resources/ai/assistants/assistants.py +++ b/src/telnyx/resources/ai/assistants/assistants.py @@ -83,6 +83,7 @@ from ....types.ai.insight_settings_param import InsightSettingsParam from ....types.ai.privacy_settings_param import PrivacySettingsParam from ....types.ai.assistant_chat_response import AssistantChatResponse +from ....types.ai.observability_req_param import ObservabilityReqParam from ....types.ai.messaging_settings_param import MessagingSettingsParam from ....types.ai.telephony_settings_param import TelephonySettingsParam from ....types.ai.assistant_delete_response import AssistantDeleteResponse @@ -158,7 +159,7 @@ def create( insight_settings: InsightSettingsParam | Omit = omit, llm_api_key_ref: str | Omit = omit, messaging_settings: MessagingSettingsParam | Omit = omit, - observability_settings: assistant_create_params.ObservabilitySettings | Omit = omit, + observability_settings: ObservabilityReqParam | Omit = omit, privacy_settings: PrivacySettingsParam | Omit = omit, telephony_settings: TelephonySettingsParam | Omit = omit, tool_ids: SequenceNotStr[str] | Omit = omit, @@ -313,7 +314,7 @@ def update( messaging_settings: MessagingSettingsParam | Omit = omit, model: str | Omit = omit, name: str | Omit = omit, - observability_settings: assistant_update_params.ObservabilitySettings | Omit = omit, + observability_settings: ObservabilityReqParam | Omit = omit, privacy_settings: PrivacySettingsParam | Omit = omit, promote_to_main: bool | Omit = omit, telephony_settings: TelephonySettingsParam | Omit = omit, @@ -765,7 +766,7 @@ async def create( insight_settings: InsightSettingsParam | Omit = omit, llm_api_key_ref: str | Omit = omit, messaging_settings: MessagingSettingsParam | Omit = omit, - observability_settings: assistant_create_params.ObservabilitySettings | Omit = omit, + observability_settings: ObservabilityReqParam | Omit = omit, privacy_settings: PrivacySettingsParam | Omit = omit, telephony_settings: TelephonySettingsParam | Omit = omit, tool_ids: SequenceNotStr[str] | Omit = omit, @@ -920,7 +921,7 @@ async def update( messaging_settings: MessagingSettingsParam | Omit = omit, model: str | Omit = omit, name: str | Omit = omit, - observability_settings: assistant_update_params.ObservabilitySettings | Omit = omit, + observability_settings: ObservabilityReqParam | Omit = omit, privacy_settings: PrivacySettingsParam | Omit = omit, promote_to_main: bool | Omit = omit, telephony_settings: TelephonySettingsParam | Omit = omit, diff --git a/src/telnyx/resources/ai/assistants/versions.py b/src/telnyx/resources/ai/assistants/versions.py index f2e092bd..766a1099 100644 --- a/src/telnyx/resources/ai/assistants/versions.py +++ b/src/telnyx/resources/ai/assistants/versions.py @@ -26,6 +26,7 @@ from ....types.ai.widget_settings_param import WidgetSettingsParam from ....types.ai.insight_settings_param import InsightSettingsParam from ....types.ai.privacy_settings_param import PrivacySettingsParam +from ....types.ai.observability_req_param import ObservabilityReqParam from ....types.ai.messaging_settings_param import MessagingSettingsParam from ....types.ai.telephony_settings_param import TelephonySettingsParam from ....types.ai.transcription_settings_param import TranscriptionSettingsParam @@ -116,7 +117,7 @@ def update( messaging_settings: MessagingSettingsParam | Omit = omit, model: str | Omit = omit, name: str | Omit = omit, - observability_settings: version_update_params.ObservabilitySettings | Omit = omit, + observability_settings: ObservabilityReqParam | Omit = omit, privacy_settings: PrivacySettingsParam | Omit = omit, telephony_settings: TelephonySettingsParam | Omit = omit, tool_ids: SequenceNotStr[str] | Omit = omit, @@ -416,7 +417,7 @@ async def update( messaging_settings: MessagingSettingsParam | Omit = omit, model: str | Omit = omit, name: str | Omit = omit, - observability_settings: version_update_params.ObservabilitySettings | Omit = omit, + observability_settings: ObservabilityReqParam | Omit = omit, privacy_settings: PrivacySettingsParam | Omit = omit, telephony_settings: TelephonySettingsParam | Omit = omit, tool_ids: SequenceNotStr[str] | Omit = omit, diff --git a/src/telnyx/resources/calls/actions.py b/src/telnyx/resources/calls/actions.py index d7fc0589..2484f553 100644 --- a/src/telnyx/resources/calls/actions.py +++ b/src/telnyx/resources/calls/actions.py @@ -3443,6 +3443,7 @@ def transfer( mute_dtmf: Literal["none", "both", "self", "opposite"] | Omit = omit, park_after_unbridge: str | Omit = omit, preferred_codecs: str | Omit = omit, + privacy: Literal["id", "none"] | Omit = omit, record: Literal["record-from-answer"] | Omit = omit, record_channels: Literal["single", "dual"] | Omit = omit, record_custom_file_name: str | Omit = omit, @@ -3549,6 +3550,10 @@ def transfer( call. The codecs supported are `G722`, `PCMU`, `PCMA`, `G729`, `OPUS`, `VP8`, `H264`, `AMR-WB`. + privacy: Indicates the privacy level to be used for the call. When set to `id`, caller ID + information (name and number) will be hidden from the called party. When set to + `none` or omitted, caller ID will be shown normally. + record: Start recording automatically after an event. Disabled by default. record_channels: Defines which channel should be recorded ('single' or 'dual') when `record` is @@ -3649,6 +3654,7 @@ def transfer( "mute_dtmf": mute_dtmf, "park_after_unbridge": park_after_unbridge, "preferred_codecs": preferred_codecs, + "privacy": privacy, "record": record, "record_channels": record_channels, "record_custom_file_name": record_custom_file_name, @@ -7043,6 +7049,7 @@ async def transfer( mute_dtmf: Literal["none", "both", "self", "opposite"] | Omit = omit, park_after_unbridge: str | Omit = omit, preferred_codecs: str | Omit = omit, + privacy: Literal["id", "none"] | Omit = omit, record: Literal["record-from-answer"] | Omit = omit, record_channels: Literal["single", "dual"] | Omit = omit, record_custom_file_name: str | Omit = omit, @@ -7149,6 +7156,10 @@ async def transfer( call. The codecs supported are `G722`, `PCMU`, `PCMA`, `G729`, `OPUS`, `VP8`, `H264`, `AMR-WB`. + privacy: Indicates the privacy level to be used for the call. When set to `id`, caller ID + information (name and number) will be hidden from the called party. When set to + `none` or omitted, caller ID will be shown normally. + record: Start recording automatically after an event. Disabled by default. record_channels: Defines which channel should be recorded ('single' or 'dual') when `record` is @@ -7249,6 +7260,7 @@ async def transfer( "mute_dtmf": mute_dtmf, "park_after_unbridge": park_after_unbridge, "preferred_codecs": preferred_codecs, + "privacy": privacy, "record": record, "record_channels": record_channels, "record_custom_file_name": record_custom_file_name, diff --git a/src/telnyx/resources/calls/calls.py b/src/telnyx/resources/calls/calls.py index 1eb5fcc3..a5166b50 100644 --- a/src/telnyx/resources/calls/calls.py +++ b/src/telnyx/resources/calls/calls.py @@ -103,6 +103,7 @@ def dial( park_after_unbridge: str | Omit = omit, preferred_codecs: str | Omit = omit, prevent_double_bridge: bool | Omit = omit, + privacy: Literal["id", "none"] | Omit = omit, record: Literal["record-from-answer"] | Omit = omit, record_channels: Literal["single", "dual"] | Omit = omit, record_custom_file_name: str | Omit = omit, @@ -247,6 +248,10 @@ def dial( prevent_double_bridge: Prevents bridging and hangs up the call if the target is already bridged. Disabled by default. + privacy: Indicates the privacy level to be used for the call. When set to `id`, caller ID + information (name and number) will be hidden from the called party. When set to + `none` or omitted, caller ID will be shown normally. + record: Start recording automatically after an event. Disabled by default. record_channels: Defines which channel should be recorded ('single' or 'dual') when `record` is @@ -373,6 +378,7 @@ def dial( "park_after_unbridge": park_after_unbridge, "preferred_codecs": preferred_codecs, "prevent_double_bridge": prevent_double_bridge, + "privacy": privacy, "record": record, "record_channels": record_channels, "record_custom_file_name": record_custom_file_name, @@ -501,6 +507,7 @@ async def dial( park_after_unbridge: str | Omit = omit, preferred_codecs: str | Omit = omit, prevent_double_bridge: bool | Omit = omit, + privacy: Literal["id", "none"] | Omit = omit, record: Literal["record-from-answer"] | Omit = omit, record_channels: Literal["single", "dual"] | Omit = omit, record_custom_file_name: str | Omit = omit, @@ -645,6 +652,10 @@ async def dial( prevent_double_bridge: Prevents bridging and hangs up the call if the target is already bridged. Disabled by default. + privacy: Indicates the privacy level to be used for the call. When set to `id`, caller ID + information (name and number) will be hidden from the called party. When set to + `none` or omitted, caller ID will be shown normally. + record: Start recording automatically after an event. Disabled by default. record_channels: Defines which channel should be recorded ('single' or 'dual') when `record` is @@ -771,6 +782,7 @@ async def dial( "park_after_unbridge": park_after_unbridge, "preferred_codecs": preferred_codecs, "prevent_double_bridge": prevent_double_bridge, + "privacy": privacy, "record": record, "record_channels": record_channels, "record_custom_file_name": record_custom_file_name, diff --git a/src/telnyx/resources/enterprises/reputation/numbers.py b/src/telnyx/resources/enterprises/reputation/numbers.py index ccb22bfd..242cc668 100644 --- a/src/telnyx/resources/enterprises/reputation/numbers.py +++ b/src/telnyx/resources/enterprises/reputation/numbers.py @@ -16,9 +16,9 @@ ) from ....pagination import SyncDefaultFlatPagination, AsyncDefaultFlatPagination from ...._base_client import AsyncPaginator, make_request_options -from ....types.enterprises.reputation import number_list_params, number_create_params, number_retrieve_params -from ....types.enterprises.reputation.number_create_response import NumberCreateResponse +from ....types.enterprises.reputation import number_list_params, number_retrieve_params, number_associate_params from ....types.enterprises.reputation.number_retrieve_response import NumberRetrieveResponse +from ....types.enterprises.reputation.number_associate_response import NumberAssociateResponse from ....types.shared.reputation_phone_number_with_reputation_data import ReputationPhoneNumberWithReputationData __all__ = ["NumbersResource", "AsyncNumbersResource"] @@ -48,57 +48,6 @@ def with_streaming_response(self) -> NumbersResourceWithStreamingResponse: """ return NumbersResourceWithStreamingResponse(self) - def create( - self, - enterprise_id: str, - *, - phone_numbers: SequenceNotStr[str], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> NumberCreateResponse: - """ - Associate one or more phone numbers with an enterprise for Number Reputation - monitoring. - - **Validations:** - - - Phone numbers must be in E.164 format (e.g., `+16035551234`) - - Phone numbers must be in-service and belong to your account (verified via - Warehouse) - - Phone numbers must be US local numbers - - Phone numbers cannot already be associated with any enterprise - - **Note:** This operation is atomic — if any number fails validation, the entire - request fails. - - **Maximum:** 100 phone numbers per request. - - Args: - phone_numbers: List of phone numbers to associate for reputation monitoring (max 100) - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not enterprise_id: - raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}") - return self._post( - path_template("/enterprises/{enterprise_id}/reputation/numbers", enterprise_id=enterprise_id), - body=maybe_transform({"phone_numbers": phone_numbers}, number_create_params.NumberCreateParams), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=NumberCreateResponse, - ) - def retrieve( self, phone_number: str, @@ -222,7 +171,58 @@ def list( model=ReputationPhoneNumberWithReputationData, ) - def delete( + def associate( + self, + enterprise_id: str, + *, + phone_numbers: SequenceNotStr[str], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> NumberAssociateResponse: + """ + Associate one or more phone numbers with an enterprise for Number Reputation + monitoring. + + **Validations:** + + - Phone numbers must be in E.164 format (e.g., `+16035551234`) + - Phone numbers must be in-service and belong to your account (verified via + Warehouse) + - Phone numbers must be US local numbers + - Phone numbers cannot already be associated with any enterprise + + **Note:** This operation is atomic — if any number fails validation, the entire + request fails. + + **Maximum:** 100 phone numbers per request. + + Args: + phone_numbers: List of phone numbers to associate for reputation monitoring (max 100) + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if not enterprise_id: + raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}") + return self._post( + path_template("/enterprises/{enterprise_id}/reputation/numbers", enterprise_id=enterprise_id), + body=maybe_transform({"phone_numbers": phone_numbers}, number_associate_params.NumberAssociateParams), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=NumberAssociateResponse, + ) + + def disassociate( self, phone_number: str, *, @@ -291,57 +291,6 @@ def with_streaming_response(self) -> AsyncNumbersResourceWithStreamingResponse: """ return AsyncNumbersResourceWithStreamingResponse(self) - async def create( - self, - enterprise_id: str, - *, - phone_numbers: SequenceNotStr[str], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> NumberCreateResponse: - """ - Associate one or more phone numbers with an enterprise for Number Reputation - monitoring. - - **Validations:** - - - Phone numbers must be in E.164 format (e.g., `+16035551234`) - - Phone numbers must be in-service and belong to your account (verified via - Warehouse) - - Phone numbers must be US local numbers - - Phone numbers cannot already be associated with any enterprise - - **Note:** This operation is atomic — if any number fails validation, the entire - request fails. - - **Maximum:** 100 phone numbers per request. - - Args: - phone_numbers: List of phone numbers to associate for reputation monitoring (max 100) - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not enterprise_id: - raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}") - return await self._post( - path_template("/enterprises/{enterprise_id}/reputation/numbers", enterprise_id=enterprise_id), - body=await async_maybe_transform({"phone_numbers": phone_numbers}, number_create_params.NumberCreateParams), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=NumberCreateResponse, - ) - async def retrieve( self, phone_number: str, @@ -467,7 +416,60 @@ def list( model=ReputationPhoneNumberWithReputationData, ) - async def delete( + async def associate( + self, + enterprise_id: str, + *, + phone_numbers: SequenceNotStr[str], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> NumberAssociateResponse: + """ + Associate one or more phone numbers with an enterprise for Number Reputation + monitoring. + + **Validations:** + + - Phone numbers must be in E.164 format (e.g., `+16035551234`) + - Phone numbers must be in-service and belong to your account (verified via + Warehouse) + - Phone numbers must be US local numbers + - Phone numbers cannot already be associated with any enterprise + + **Note:** This operation is atomic — if any number fails validation, the entire + request fails. + + **Maximum:** 100 phone numbers per request. + + Args: + phone_numbers: List of phone numbers to associate for reputation monitoring (max 100) + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if not enterprise_id: + raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}") + return await self._post( + path_template("/enterprises/{enterprise_id}/reputation/numbers", enterprise_id=enterprise_id), + body=await async_maybe_transform( + {"phone_numbers": phone_numbers}, number_associate_params.NumberAssociateParams + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=NumberAssociateResponse, + ) + + async def disassociate( self, phone_number: str, *, @@ -516,17 +518,17 @@ class NumbersResourceWithRawResponse: def __init__(self, numbers: NumbersResource) -> None: self._numbers = numbers - self.create = to_raw_response_wrapper( - numbers.create, - ) self.retrieve = to_raw_response_wrapper( numbers.retrieve, ) self.list = to_raw_response_wrapper( numbers.list, ) - self.delete = to_raw_response_wrapper( - numbers.delete, + self.associate = to_raw_response_wrapper( + numbers.associate, + ) + self.disassociate = to_raw_response_wrapper( + numbers.disassociate, ) @@ -534,17 +536,17 @@ class AsyncNumbersResourceWithRawResponse: def __init__(self, numbers: AsyncNumbersResource) -> None: self._numbers = numbers - self.create = async_to_raw_response_wrapper( - numbers.create, - ) self.retrieve = async_to_raw_response_wrapper( numbers.retrieve, ) self.list = async_to_raw_response_wrapper( numbers.list, ) - self.delete = async_to_raw_response_wrapper( - numbers.delete, + self.associate = async_to_raw_response_wrapper( + numbers.associate, + ) + self.disassociate = async_to_raw_response_wrapper( + numbers.disassociate, ) @@ -552,17 +554,17 @@ class NumbersResourceWithStreamingResponse: def __init__(self, numbers: NumbersResource) -> None: self._numbers = numbers - self.create = to_streamed_response_wrapper( - numbers.create, - ) self.retrieve = to_streamed_response_wrapper( numbers.retrieve, ) self.list = to_streamed_response_wrapper( numbers.list, ) - self.delete = to_streamed_response_wrapper( - numbers.delete, + self.associate = to_streamed_response_wrapper( + numbers.associate, + ) + self.disassociate = to_streamed_response_wrapper( + numbers.disassociate, ) @@ -570,15 +572,15 @@ class AsyncNumbersResourceWithStreamingResponse: def __init__(self, numbers: AsyncNumbersResource) -> None: self._numbers = numbers - self.create = async_to_streamed_response_wrapper( - numbers.create, - ) self.retrieve = async_to_streamed_response_wrapper( numbers.retrieve, ) self.list = async_to_streamed_response_wrapper( numbers.list, ) - self.delete = async_to_streamed_response_wrapper( - numbers.delete, + self.associate = async_to_streamed_response_wrapper( + numbers.associate, + ) + self.disassociate = async_to_streamed_response_wrapper( + numbers.disassociate, ) diff --git a/src/telnyx/resources/enterprises/reputation/reputation.py b/src/telnyx/resources/enterprises/reputation/reputation.py index 1f3772ef..615635e4 100644 --- a/src/telnyx/resources/enterprises/reputation/reputation.py +++ b/src/telnyx/resources/enterprises/reputation/reputation.py @@ -25,9 +25,9 @@ async_to_streamed_response_wrapper, ) from ...._base_client import make_request_options -from ....types.enterprises import reputation_create_params, reputation_update_frequency_params -from ....types.enterprises.reputation_list_response import ReputationListResponse -from ....types.enterprises.reputation_create_response import ReputationCreateResponse +from ....types.enterprises import reputation_enable_params, reputation_update_frequency_params +from ....types.enterprises.reputation_enable_response import ReputationEnableResponse +from ....types.enterprises.reputation_retrieve_response import ReputationRetrieveResponse from ....types.enterprises.reputation_update_frequency_response import ReputationUpdateFrequencyResponse __all__ = ["ReputationResource", "AsyncReputationResource"] @@ -64,52 +64,26 @@ def with_streaming_response(self) -> ReputationResourceWithStreamingResponse: """ return ReputationResourceWithStreamingResponse(self) - def create( + def retrieve( self, enterprise_id: str, *, - loa_document_id: str, - check_frequency: Literal["business_daily", "daily", "weekly", "biweekly", "monthly", "never"] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReputationCreateResponse: + ) -> ReputationRetrieveResponse: """ - Enable Number Reputation service for an enterprise. - - **Requirements:** - - - Signed LOA (Letter of Authorization) document ID - - Reputation check frequency (defaults to `business_daily`) - - Number Reputation Terms of Service must be accepted - - **Flow:** - - 1. Registers the enterprise for reputation monitoring - 2. Creates reputation settings with `pending` status - 3. Awaits admin approval before monitoring begins - - **Resubmission After Rejection:** If a previously rejected record exists, this - endpoint will delete it and create a new `pending` record. + Retrieve the current Number Reputation settings for an enterprise. - **Available Frequencies:** + Returns the enrollment status (`pending`, `approved`, `rejected`, `deleted`), + check frequency, and any rejection reasons. - - `business_daily` — Monday–Friday - - `daily` — Every day - - `weekly` — Once per week - - `biweekly` — Once every two weeks - - `monthly` — Once per month - - `never` — Manual refresh only + Returns `404` if reputation has not been enabled for this enterprise. Args: - loa_document_id: ID of the signed Letter of Authorization (LOA) document uploaded to the document - service - - check_frequency: Frequency for automatically refreshing reputation data - extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -120,22 +94,15 @@ def create( """ if not enterprise_id: raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}") - return self._post( + return self._get( path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id), - body=maybe_transform( - { - "loa_document_id": loa_document_id, - "check_frequency": check_frequency, - }, - reputation_create_params.ReputationCreateParams, - ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=ReputationCreateResponse, + cast_to=ReputationRetrieveResponse, ) - def list( + def disable( self, enterprise_id: str, *, @@ -145,14 +112,17 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReputationListResponse: + ) -> None: """ - Retrieve the current Number Reputation settings for an enterprise. + Disable Number Reputation for an enterprise. - Returns the enrollment status (`pending`, `approved`, `rejected`, `deleted`), - check frequency, and any rejection reasons. + This will: - Returns `404` if reputation has not been enabled for this enterprise. + - Delete the reputation settings record + - Log the deletion for audit purposes + - Stop all future automated reputation checks + + **Note:** Can only be performed on `approved` reputation settings. Args: extra_headers: Send extra headers @@ -165,37 +135,61 @@ def list( """ if not enterprise_id: raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}") - return self._get( + extra_headers = {"Accept": "*/*", **(extra_headers or {})} + return self._delete( path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=ReputationListResponse, + cast_to=NoneType, ) - def delete_all( + def enable( self, enterprise_id: str, *, + loa_document_id: str, + check_frequency: Literal["business_daily", "daily", "weekly", "biweekly", "monthly", "never"] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: + ) -> ReputationEnableResponse: """ - Disable Number Reputation for an enterprise. + Enable Number Reputation service for an enterprise. - This will: + **Requirements:** - - Delete the reputation settings record - - Log the deletion for audit purposes - - Stop all future automated reputation checks + - Signed LOA (Letter of Authorization) document ID + - Reputation check frequency (defaults to `business_daily`) + - Number Reputation Terms of Service must be accepted - **Note:** Can only be performed on `approved` reputation settings. + **Flow:** + + 1. Registers the enterprise for reputation monitoring + 2. Creates reputation settings with `pending` status + 3. Awaits admin approval before monitoring begins + + **Resubmission After Rejection:** If a previously rejected record exists, this + endpoint will delete it and create a new `pending` record. + + **Available Frequencies:** + + - `business_daily` — Monday–Friday + - `daily` — Every day + - `weekly` — Once per week + - `biweekly` — Once every two weeks + - `monthly` — Once per month + - `never` — Manual refresh only Args: + loa_document_id: ID of the signed Letter of Authorization (LOA) document uploaded to the document + service + + check_frequency: Frequency for automatically refreshing reputation data + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -206,13 +200,19 @@ def delete_all( """ if not enterprise_id: raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return self._delete( + return self._post( path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id), + body=maybe_transform( + { + "loa_document_id": loa_document_id, + "check_frequency": check_frequency, + }, + reputation_enable_params.ReputationEnableParams, + ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=NoneType, + cast_to=ReputationEnableResponse, ) def update_frequency( @@ -298,52 +298,26 @@ def with_streaming_response(self) -> AsyncReputationResourceWithStreamingRespons """ return AsyncReputationResourceWithStreamingResponse(self) - async def create( + async def retrieve( self, enterprise_id: str, *, - loa_document_id: str, - check_frequency: Literal["business_daily", "daily", "weekly", "biweekly", "monthly", "never"] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReputationCreateResponse: + ) -> ReputationRetrieveResponse: """ - Enable Number Reputation service for an enterprise. - - **Requirements:** - - - Signed LOA (Letter of Authorization) document ID - - Reputation check frequency (defaults to `business_daily`) - - Number Reputation Terms of Service must be accepted - - **Flow:** - - 1. Registers the enterprise for reputation monitoring - 2. Creates reputation settings with `pending` status - 3. Awaits admin approval before monitoring begins - - **Resubmission After Rejection:** If a previously rejected record exists, this - endpoint will delete it and create a new `pending` record. + Retrieve the current Number Reputation settings for an enterprise. - **Available Frequencies:** + Returns the enrollment status (`pending`, `approved`, `rejected`, `deleted`), + check frequency, and any rejection reasons. - - `business_daily` — Monday–Friday - - `daily` — Every day - - `weekly` — Once per week - - `biweekly` — Once every two weeks - - `monthly` — Once per month - - `never` — Manual refresh only + Returns `404` if reputation has not been enabled for this enterprise. Args: - loa_document_id: ID of the signed Letter of Authorization (LOA) document uploaded to the document - service - - check_frequency: Frequency for automatically refreshing reputation data - extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -354,22 +328,15 @@ async def create( """ if not enterprise_id: raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}") - return await self._post( + return await self._get( path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id), - body=await async_maybe_transform( - { - "loa_document_id": loa_document_id, - "check_frequency": check_frequency, - }, - reputation_create_params.ReputationCreateParams, - ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=ReputationCreateResponse, + cast_to=ReputationRetrieveResponse, ) - async def list( + async def disable( self, enterprise_id: str, *, @@ -379,14 +346,17 @@ async def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ReputationListResponse: + ) -> None: """ - Retrieve the current Number Reputation settings for an enterprise. + Disable Number Reputation for an enterprise. - Returns the enrollment status (`pending`, `approved`, `rejected`, `deleted`), - check frequency, and any rejection reasons. + This will: - Returns `404` if reputation has not been enabled for this enterprise. + - Delete the reputation settings record + - Log the deletion for audit purposes + - Stop all future automated reputation checks + + **Note:** Can only be performed on `approved` reputation settings. Args: extra_headers: Send extra headers @@ -399,37 +369,61 @@ async def list( """ if not enterprise_id: raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}") - return await self._get( + extra_headers = {"Accept": "*/*", **(extra_headers or {})} + return await self._delete( path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=ReputationListResponse, + cast_to=NoneType, ) - async def delete_all( + async def enable( self, enterprise_id: str, *, + loa_document_id: str, + check_frequency: Literal["business_daily", "daily", "weekly", "biweekly", "monthly", "never"] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: + ) -> ReputationEnableResponse: """ - Disable Number Reputation for an enterprise. + Enable Number Reputation service for an enterprise. - This will: + **Requirements:** - - Delete the reputation settings record - - Log the deletion for audit purposes - - Stop all future automated reputation checks + - Signed LOA (Letter of Authorization) document ID + - Reputation check frequency (defaults to `business_daily`) + - Number Reputation Terms of Service must be accepted - **Note:** Can only be performed on `approved` reputation settings. + **Flow:** + + 1. Registers the enterprise for reputation monitoring + 2. Creates reputation settings with `pending` status + 3. Awaits admin approval before monitoring begins + + **Resubmission After Rejection:** If a previously rejected record exists, this + endpoint will delete it and create a new `pending` record. + + **Available Frequencies:** + + - `business_daily` — Monday–Friday + - `daily` — Every day + - `weekly` — Once per week + - `biweekly` — Once every two weeks + - `monthly` — Once per month + - `never` — Manual refresh only Args: + loa_document_id: ID of the signed Letter of Authorization (LOA) document uploaded to the document + service + + check_frequency: Frequency for automatically refreshing reputation data + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -440,13 +434,19 @@ async def delete_all( """ if not enterprise_id: raise ValueError(f"Expected a non-empty value for `enterprise_id` but received {enterprise_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return await self._delete( + return await self._post( path_template("/enterprises/{enterprise_id}/reputation", enterprise_id=enterprise_id), + body=await async_maybe_transform( + { + "loa_document_id": loa_document_id, + "check_frequency": check_frequency, + }, + reputation_enable_params.ReputationEnableParams, + ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), - cast_to=NoneType, + cast_to=ReputationEnableResponse, ) async def update_frequency( @@ -505,14 +505,14 @@ class ReputationResourceWithRawResponse: def __init__(self, reputation: ReputationResource) -> None: self._reputation = reputation - self.create = to_raw_response_wrapper( - reputation.create, + self.retrieve = to_raw_response_wrapper( + reputation.retrieve, ) - self.list = to_raw_response_wrapper( - reputation.list, + self.disable = to_raw_response_wrapper( + reputation.disable, ) - self.delete_all = to_raw_response_wrapper( - reputation.delete_all, + self.enable = to_raw_response_wrapper( + reputation.enable, ) self.update_frequency = to_raw_response_wrapper( reputation.update_frequency, @@ -530,14 +530,14 @@ class AsyncReputationResourceWithRawResponse: def __init__(self, reputation: AsyncReputationResource) -> None: self._reputation = reputation - self.create = async_to_raw_response_wrapper( - reputation.create, + self.retrieve = async_to_raw_response_wrapper( + reputation.retrieve, ) - self.list = async_to_raw_response_wrapper( - reputation.list, + self.disable = async_to_raw_response_wrapper( + reputation.disable, ) - self.delete_all = async_to_raw_response_wrapper( - reputation.delete_all, + self.enable = async_to_raw_response_wrapper( + reputation.enable, ) self.update_frequency = async_to_raw_response_wrapper( reputation.update_frequency, @@ -555,14 +555,14 @@ class ReputationResourceWithStreamingResponse: def __init__(self, reputation: ReputationResource) -> None: self._reputation = reputation - self.create = to_streamed_response_wrapper( - reputation.create, + self.retrieve = to_streamed_response_wrapper( + reputation.retrieve, ) - self.list = to_streamed_response_wrapper( - reputation.list, + self.disable = to_streamed_response_wrapper( + reputation.disable, ) - self.delete_all = to_streamed_response_wrapper( - reputation.delete_all, + self.enable = to_streamed_response_wrapper( + reputation.enable, ) self.update_frequency = to_streamed_response_wrapper( reputation.update_frequency, @@ -580,14 +580,14 @@ class AsyncReputationResourceWithStreamingResponse: def __init__(self, reputation: AsyncReputationResource) -> None: self._reputation = reputation - self.create = async_to_streamed_response_wrapper( - reputation.create, + self.retrieve = async_to_streamed_response_wrapper( + reputation.retrieve, ) - self.list = async_to_streamed_response_wrapper( - reputation.list, + self.disable = async_to_streamed_response_wrapper( + reputation.disable, ) - self.delete_all = async_to_streamed_response_wrapper( - reputation.delete_all, + self.enable = async_to_streamed_response_wrapper( + reputation.enable, ) self.update_frequency = async_to_streamed_response_wrapper( reputation.update_frequency, diff --git a/src/telnyx/types/ai/__init__.py b/src/telnyx/types/ai/__init__.py index 363ee22c..15ded622 100644 --- a/src/telnyx/types/ai/__init__.py +++ b/src/telnyx/types/ai/__init__.py @@ -6,6 +6,7 @@ from .hangup_tool import HangupTool as HangupTool from .conversation import Conversation as Conversation from .mission_data import MissionData as MissionData +from .observability import Observability as Observability from .assistant_tool import AssistantTool as AssistantTool from .retrieval_tool import RetrievalTool as RetrievalTool from .voice_settings import VoiceSettings as VoiceSettings @@ -59,6 +60,7 @@ from .embedding_create_params import EmbeddingCreateParams as EmbeddingCreateParams from .embedding_list_response import EmbeddingListResponse as EmbeddingListResponse from .mission_create_response import MissionCreateResponse as MissionCreateResponse +from .observability_req_param import ObservabilityReqParam as ObservabilityReqParam from .assistant_imports_params import AssistantImportsParams as AssistantImportsParams from .cluster_compute_response import ClusterComputeResponse as ClusterComputeResponse from .conversation_list_params import ConversationListParams as ConversationListParams diff --git a/src/telnyx/types/ai/assistant_create_params.py b/src/telnyx/types/ai/assistant_create_params.py index fc30301f..539acffa 100644 --- a/src/telnyx/types/ai/assistant_create_params.py +++ b/src/telnyx/types/ai/assistant_create_params.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import Dict, List, Iterable -from typing_extensions import Literal, Required, TypedDict +from typing_extensions import Required, TypedDict from ..._types import SequenceNotStr from .enabled_features import EnabledFeatures @@ -12,11 +12,12 @@ from .widget_settings_param import WidgetSettingsParam from .insight_settings_param import InsightSettingsParam from .privacy_settings_param import PrivacySettingsParam +from .observability_req_param import ObservabilityReqParam from .messaging_settings_param import MessagingSettingsParam from .telephony_settings_param import TelephonySettingsParam from .transcription_settings_param import TranscriptionSettingsParam -__all__ = ["AssistantCreateParams", "ObservabilitySettings"] +__all__ = ["AssistantCreateParams"] class AssistantCreateParams(TypedDict, total=False): @@ -75,7 +76,7 @@ class AssistantCreateParams(TypedDict, total=False): messaging_settings: MessagingSettingsParam - observability_settings: ObservabilitySettings + observability_settings: ObservabilityReqParam privacy_settings: PrivacySettingsParam @@ -96,13 +97,3 @@ class AssistantCreateParams(TypedDict, total=False): widget_settings: WidgetSettingsParam """Configuration settings for the assistant's web widget.""" - - -class ObservabilitySettings(TypedDict, total=False): - host: str - - public_key_ref: str - - secret_key_ref: str - - status: Literal["enabled", "disabled"] diff --git a/src/telnyx/types/ai/assistant_update_params.py b/src/telnyx/types/ai/assistant_update_params.py index 69aad9d3..caeecbfc 100644 --- a/src/telnyx/types/ai/assistant_update_params.py +++ b/src/telnyx/types/ai/assistant_update_params.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import Dict, List, Iterable -from typing_extensions import Literal, TypedDict +from typing_extensions import TypedDict from ..._types import SequenceNotStr from .enabled_features import EnabledFeatures @@ -12,11 +12,12 @@ from .widget_settings_param import WidgetSettingsParam from .insight_settings_param import InsightSettingsParam from .privacy_settings_param import PrivacySettingsParam +from .observability_req_param import ObservabilityReqParam from .messaging_settings_param import MessagingSettingsParam from .telephony_settings_param import TelephonySettingsParam from .transcription_settings_param import TranscriptionSettingsParam -__all__ = ["AssistantUpdateParams", "ObservabilitySettings"] +__all__ = ["AssistantUpdateParams"] class AssistantUpdateParams(TypedDict, total=False): @@ -75,7 +76,7 @@ class AssistantUpdateParams(TypedDict, total=False): name: str - observability_settings: ObservabilitySettings + observability_settings: ObservabilityReqParam privacy_settings: PrivacySettingsParam @@ -102,13 +103,3 @@ class AssistantUpdateParams(TypedDict, total=False): widget_settings: WidgetSettingsParam """Configuration settings for the assistant's web widget.""" - - -class ObservabilitySettings(TypedDict, total=False): - host: str - - public_key_ref: str - - secret_key_ref: str - - status: Literal["enabled", "disabled"] diff --git a/src/telnyx/types/ai/assistants/version_update_params.py b/src/telnyx/types/ai/assistants/version_update_params.py index 71c7350c..15d873ca 100644 --- a/src/telnyx/types/ai/assistants/version_update_params.py +++ b/src/telnyx/types/ai/assistants/version_update_params.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import Dict, List, Iterable -from typing_extensions import Literal, Required, TypedDict +from typing_extensions import Required, TypedDict from ...._types import SequenceNotStr from ..enabled_features import EnabledFeatures @@ -12,11 +12,12 @@ from ..widget_settings_param import WidgetSettingsParam from ..insight_settings_param import InsightSettingsParam from ..privacy_settings_param import PrivacySettingsParam +from ..observability_req_param import ObservabilityReqParam from ..messaging_settings_param import MessagingSettingsParam from ..telephony_settings_param import TelephonySettingsParam from ..transcription_settings_param import TranscriptionSettingsParam -__all__ = ["VersionUpdateParams", "ObservabilitySettings"] +__all__ = ["VersionUpdateParams"] class VersionUpdateParams(TypedDict, total=False): @@ -77,7 +78,7 @@ class VersionUpdateParams(TypedDict, total=False): name: str - observability_settings: ObservabilitySettings + observability_settings: ObservabilityReqParam privacy_settings: PrivacySettingsParam @@ -98,13 +99,3 @@ class VersionUpdateParams(TypedDict, total=False): widget_settings: WidgetSettingsParam """Configuration settings for the assistant's web widget.""" - - -class ObservabilitySettings(TypedDict, total=False): - host: str - - public_key_ref: str - - secret_key_ref: str - - status: Literal["enabled", "disabled"] diff --git a/src/telnyx/types/ai/inference_embedding.py b/src/telnyx/types/ai/inference_embedding.py index aa03fc0f..9322c737 100644 --- a/src/telnyx/types/ai/inference_embedding.py +++ b/src/telnyx/types/ai/inference_embedding.py @@ -2,9 +2,9 @@ from typing import Dict, List, Optional from datetime import datetime -from typing_extensions import Literal from ..._models import BaseModel +from .observability import Observability from .assistant_tool import AssistantTool from .voice_settings import VoiceSettings from .import_metadata import ImportMetadata @@ -16,17 +16,7 @@ from .telephony_settings import TelephonySettings from .transcription_settings import TranscriptionSettings -__all__ = ["InferenceEmbedding", "ObservabilitySettings"] - - -class ObservabilitySettings(BaseModel): - host: Optional[str] = None - - public_key_ref: Optional[str] = None - - secret_key_ref: Optional[str] = None - - status: Optional[Literal["enabled", "disabled"]] = None +__all__ = ["InferenceEmbedding"] class InferenceEmbedding(BaseModel): @@ -91,7 +81,7 @@ class InferenceEmbedding(BaseModel): messaging_settings: Optional[MessagingSettings] = None - observability_settings: Optional[ObservabilitySettings] = None + observability_settings: Optional[Observability] = None privacy_settings: Optional[PrivacySettings] = None diff --git a/src/telnyx/types/ai/observability.py b/src/telnyx/types/ai/observability.py new file mode 100644 index 00000000..b9e4a12d --- /dev/null +++ b/src/telnyx/types/ai/observability.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["Observability"] + + +class Observability(BaseModel): + host: Optional[str] = None + + public_key_ref: Optional[str] = None + + secret_key_ref: Optional[str] = None + + status: Optional[Literal["enabled", "disabled"]] = None diff --git a/src/telnyx/types/ai/observability_req_param.py b/src/telnyx/types/ai/observability_req_param.py new file mode 100644 index 00000000..7ff5f38e --- /dev/null +++ b/src/telnyx/types/ai/observability_req_param.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, TypedDict + +__all__ = ["ObservabilityReqParam"] + + +class ObservabilityReqParam(TypedDict, total=False): + host: str + + public_key_ref: str + + secret_key_ref: str + + status: Literal["enabled", "disabled"] diff --git a/src/telnyx/types/call_dial_params.py b/src/telnyx/types/call_dial_params.py index 25f8bffe..8edba96a 100644 --- a/src/telnyx/types/call_dial_params.py +++ b/src/telnyx/types/call_dial_params.py @@ -160,6 +160,14 @@ class CallDialParams(TypedDict, total=False): Disabled by default. """ + privacy: Literal["id", "none"] + """Indicates the privacy level to be used for the call. + + When set to `id`, caller ID information (name and number) will be hidden from + the called party. When set to `none` or omitted, caller ID will be shown + normally. + """ + record: Literal["record-from-answer"] """Start recording automatically after an event. Disabled by default.""" diff --git a/src/telnyx/types/calls/action_transfer_params.py b/src/telnyx/types/calls/action_transfer_params.py index a6a5b29c..c778bcb3 100644 --- a/src/telnyx/types/calls/action_transfer_params.py +++ b/src/telnyx/types/calls/action_transfer_params.py @@ -109,6 +109,14 @@ class ActionTransferParams(TypedDict, total=False): `H264`, `AMR-WB`. """ + privacy: Literal["id", "none"] + """Indicates the privacy level to be used for the call. + + When set to `id`, caller ID information (name and number) will be hidden from + the called party. When set to `none` or omitted, caller ID will be shown + normally. + """ + record: Literal["record-from-answer"] """Start recording automatically after an event. Disabled by default.""" diff --git a/src/telnyx/types/enterprises/__init__.py b/src/telnyx/types/enterprises/__init__.py index f2bd14c4..b0427e0f 100644 --- a/src/telnyx/types/enterprises/__init__.py +++ b/src/telnyx/types/enterprises/__init__.py @@ -2,9 +2,9 @@ from __future__ import annotations -from .reputation_create_params import ReputationCreateParams as ReputationCreateParams -from .reputation_list_response import ReputationListResponse as ReputationListResponse -from .reputation_create_response import ReputationCreateResponse as ReputationCreateResponse +from .reputation_enable_params import ReputationEnableParams as ReputationEnableParams +from .reputation_enable_response import ReputationEnableResponse as ReputationEnableResponse from .enterprise_reputation_public import EnterpriseReputationPublic as EnterpriseReputationPublic +from .reputation_retrieve_response import ReputationRetrieveResponse as ReputationRetrieveResponse from .reputation_update_frequency_params import ReputationUpdateFrequencyParams as ReputationUpdateFrequencyParams from .reputation_update_frequency_response import ReputationUpdateFrequencyResponse as ReputationUpdateFrequencyResponse diff --git a/src/telnyx/types/enterprises/reputation/__init__.py b/src/telnyx/types/enterprises/reputation/__init__.py index d68081b7..e47c43b9 100644 --- a/src/telnyx/types/enterprises/reputation/__init__.py +++ b/src/telnyx/types/enterprises/reputation/__init__.py @@ -3,7 +3,7 @@ from __future__ import annotations from .number_list_params import NumberListParams as NumberListParams -from .number_create_params import NumberCreateParams as NumberCreateParams -from .number_create_response import NumberCreateResponse as NumberCreateResponse from .number_retrieve_params import NumberRetrieveParams as NumberRetrieveParams +from .number_associate_params import NumberAssociateParams as NumberAssociateParams from .number_retrieve_response import NumberRetrieveResponse as NumberRetrieveResponse +from .number_associate_response import NumberAssociateResponse as NumberAssociateResponse diff --git a/src/telnyx/types/enterprises/reputation/number_create_params.py b/src/telnyx/types/enterprises/reputation/number_associate_params.py similarity index 79% rename from src/telnyx/types/enterprises/reputation/number_create_params.py rename to src/telnyx/types/enterprises/reputation/number_associate_params.py index c65ee9fe..56cf75ad 100644 --- a/src/telnyx/types/enterprises/reputation/number_create_params.py +++ b/src/telnyx/types/enterprises/reputation/number_associate_params.py @@ -6,9 +6,9 @@ from ...._types import SequenceNotStr -__all__ = ["NumberCreateParams"] +__all__ = ["NumberAssociateParams"] -class NumberCreateParams(TypedDict, total=False): +class NumberAssociateParams(TypedDict, total=False): phone_numbers: Required[SequenceNotStr[str]] """List of phone numbers to associate for reputation monitoring (max 100)""" diff --git a/src/telnyx/types/enterprises/reputation/number_create_response.py b/src/telnyx/types/enterprises/reputation/number_associate_response.py similarity index 89% rename from src/telnyx/types/enterprises/reputation/number_create_response.py rename to src/telnyx/types/enterprises/reputation/number_associate_response.py index 8b580cb8..e1fd5fb4 100644 --- a/src/telnyx/types/enterprises/reputation/number_create_response.py +++ b/src/telnyx/types/enterprises/reputation/number_associate_response.py @@ -6,7 +6,7 @@ from ...._models import BaseModel from ...shared.meta_info import MetaInfo -__all__ = ["NumberCreateResponse", "Data"] +__all__ = ["NumberAssociateResponse", "Data"] class Data(BaseModel): @@ -26,7 +26,7 @@ class Data(BaseModel): """When the record was last updated""" -class NumberCreateResponse(BaseModel): +class NumberAssociateResponse(BaseModel): data: Optional[List[Data]] = None meta: Optional[MetaInfo] = None diff --git a/src/telnyx/types/enterprises/reputation_create_params.py b/src/telnyx/types/enterprises/reputation_enable_params.py similarity index 84% rename from src/telnyx/types/enterprises/reputation_create_params.py rename to src/telnyx/types/enterprises/reputation_enable_params.py index 12ecf8cf..c0894e37 100644 --- a/src/telnyx/types/enterprises/reputation_create_params.py +++ b/src/telnyx/types/enterprises/reputation_enable_params.py @@ -4,10 +4,10 @@ from typing_extensions import Literal, Required, TypedDict -__all__ = ["ReputationCreateParams"] +__all__ = ["ReputationEnableParams"] -class ReputationCreateParams(TypedDict, total=False): +class ReputationEnableParams(TypedDict, total=False): loa_document_id: Required[str] """ ID of the signed Letter of Authorization (LOA) document uploaded to the document diff --git a/src/telnyx/types/enterprises/reputation_list_response.py b/src/telnyx/types/enterprises/reputation_enable_response.py similarity index 77% rename from src/telnyx/types/enterprises/reputation_list_response.py rename to src/telnyx/types/enterprises/reputation_enable_response.py index 064ce4bd..c22a6292 100644 --- a/src/telnyx/types/enterprises/reputation_list_response.py +++ b/src/telnyx/types/enterprises/reputation_enable_response.py @@ -5,8 +5,8 @@ from ..._models import BaseModel from .enterprise_reputation_public import EnterpriseReputationPublic -__all__ = ["ReputationListResponse"] +__all__ = ["ReputationEnableResponse"] -class ReputationListResponse(BaseModel): +class ReputationEnableResponse(BaseModel): data: Optional[EnterpriseReputationPublic] = None diff --git a/src/telnyx/types/enterprises/reputation_create_response.py b/src/telnyx/types/enterprises/reputation_retrieve_response.py similarity index 76% rename from src/telnyx/types/enterprises/reputation_create_response.py rename to src/telnyx/types/enterprises/reputation_retrieve_response.py index 1c40c3f1..abb44ffb 100644 --- a/src/telnyx/types/enterprises/reputation_create_response.py +++ b/src/telnyx/types/enterprises/reputation_retrieve_response.py @@ -5,8 +5,8 @@ from ..._models import BaseModel from .enterprise_reputation_public import EnterpriseReputationPublic -__all__ = ["ReputationCreateResponse"] +__all__ = ["ReputationRetrieveResponse"] -class ReputationCreateResponse(BaseModel): +class ReputationRetrieveResponse(BaseModel): data: Optional[EnterpriseReputationPublic] = None diff --git a/tests/api_resources/calls/test_actions.py b/tests/api_resources/calls/test_actions.py index 82120ccd..9c28a8d5 100644 --- a/tests/api_resources/calls/test_actions.py +++ b/tests/api_resources/calls/test_actions.py @@ -2422,6 +2422,7 @@ def test_method_transfer_with_all_params(self, client: Telnyx) -> None: mute_dtmf="opposite", park_after_unbridge="self", preferred_codecs="G722,PCMU,PCMA,G729,OPUS,VP8,H264", + privacy="id", record="record-from-answer", record_channels="single", record_custom_file_name="my_recording_file_name", @@ -4915,6 +4916,7 @@ async def test_method_transfer_with_all_params(self, async_client: AsyncTelnyx) mute_dtmf="opposite", park_after_unbridge="self", preferred_codecs="G722,PCMU,PCMA,G729,OPUS,VP8,H264", + privacy="id", record="record-from-answer", record_channels="single", record_custom_file_name="my_recording_file_name", diff --git a/tests/api_resources/enterprises/reputation/test_numbers.py b/tests/api_resources/enterprises/reputation/test_numbers.py index 50957688..584bea8d 100644 --- a/tests/api_resources/enterprises/reputation/test_numbers.py +++ b/tests/api_resources/enterprises/reputation/test_numbers.py @@ -12,8 +12,8 @@ from telnyx.pagination import SyncDefaultFlatPagination, AsyncDefaultFlatPagination from telnyx.types.shared import ReputationPhoneNumberWithReputationData from telnyx.types.enterprises.reputation import ( - NumberCreateResponse, NumberRetrieveResponse, + NumberAssociateResponse, ) base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -22,52 +22,6 @@ class TestNumbers: parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create(self, client: Telnyx) -> None: - number = client.enterprises.reputation.numbers.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - phone_numbers=["+16035551234"], - ) - assert_matches_type(NumberCreateResponse, number, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_raw_response_create(self, client: Telnyx) -> None: - response = client.enterprises.reputation.numbers.with_raw_response.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - phone_numbers=["+16035551234"], - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - number = response.parse() - assert_matches_type(NumberCreateResponse, number, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_streaming_response_create(self, client: Telnyx) -> None: - with client.enterprises.reputation.numbers.with_streaming_response.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - phone_numbers=["+16035551234"], - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - number = response.parse() - assert_matches_type(NumberCreateResponse, number, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_path_params_create(self, client: Telnyx) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): - client.enterprises.reputation.numbers.with_raw_response.create( - enterprise_id="", - phone_numbers=["+16035551234"], - ) - @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize def test_method_retrieve(self, client: Telnyx) -> None: @@ -193,108 +147,108 @@ def test_path_params_list(self, client: Telnyx) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_method_delete(self, client: Telnyx) -> None: - number = client.enterprises.reputation.numbers.delete( - phone_number="+16035551234", + def test_method_associate(self, client: Telnyx) -> None: + number = client.enterprises.reputation.numbers.associate( enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + phone_numbers=["+16035551234"], ) - assert number is None + assert_matches_type(NumberAssociateResponse, number, path=["response"]) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_raw_response_delete(self, client: Telnyx) -> None: - response = client.enterprises.reputation.numbers.with_raw_response.delete( - phone_number="+16035551234", + def test_raw_response_associate(self, client: Telnyx) -> None: + response = client.enterprises.reputation.numbers.with_raw_response.associate( enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + phone_numbers=["+16035551234"], ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" number = response.parse() - assert number is None + assert_matches_type(NumberAssociateResponse, number, path=["response"]) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_streaming_response_delete(self, client: Telnyx) -> None: - with client.enterprises.reputation.numbers.with_streaming_response.delete( - phone_number="+16035551234", + def test_streaming_response_associate(self, client: Telnyx) -> None: + with client.enterprises.reputation.numbers.with_streaming_response.associate( enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + phone_numbers=["+16035551234"], ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" number = response.parse() - assert number is None + assert_matches_type(NumberAssociateResponse, number, path=["response"]) assert cast(Any, response.is_closed) is True @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_path_params_delete(self, client: Telnyx) -> None: + def test_path_params_associate(self, client: Telnyx) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): - client.enterprises.reputation.numbers.with_raw_response.delete( - phone_number="+16035551234", + client.enterprises.reputation.numbers.with_raw_response.associate( enterprise_id="", + phone_numbers=["+16035551234"], ) - with pytest.raises(ValueError, match=r"Expected a non-empty value for `phone_number` but received ''"): - client.enterprises.reputation.numbers.with_raw_response.delete( - phone_number="", - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - ) - - -class TestAsyncNumbers: - parametrize = pytest.mark.parametrize( - "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] - ) - @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_method_create(self, async_client: AsyncTelnyx) -> None: - number = await async_client.enterprises.reputation.numbers.create( + def test_method_disassociate(self, client: Telnyx) -> None: + number = client.enterprises.reputation.numbers.disassociate( + phone_number="+16035551234", enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - phone_numbers=["+16035551234"], ) - assert_matches_type(NumberCreateResponse, number, path=["response"]) + assert number is None @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_raw_response_create(self, async_client: AsyncTelnyx) -> None: - response = await async_client.enterprises.reputation.numbers.with_raw_response.create( + def test_raw_response_disassociate(self, client: Telnyx) -> None: + response = client.enterprises.reputation.numbers.with_raw_response.disassociate( + phone_number="+16035551234", enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - phone_numbers=["+16035551234"], ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" - number = await response.parse() - assert_matches_type(NumberCreateResponse, number, path=["response"]) + number = response.parse() + assert number is None @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_streaming_response_create(self, async_client: AsyncTelnyx) -> None: - async with async_client.enterprises.reputation.numbers.with_streaming_response.create( + def test_streaming_response_disassociate(self, client: Telnyx) -> None: + with client.enterprises.reputation.numbers.with_streaming_response.disassociate( + phone_number="+16035551234", enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - phone_numbers=["+16035551234"], ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" - number = await response.parse() - assert_matches_type(NumberCreateResponse, number, path=["response"]) + number = response.parse() + assert number is None assert cast(Any, response.is_closed) is True @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_path_params_create(self, async_client: AsyncTelnyx) -> None: + def test_path_params_disassociate(self, client: Telnyx) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): - await async_client.enterprises.reputation.numbers.with_raw_response.create( + client.enterprises.reputation.numbers.with_raw_response.disassociate( + phone_number="+16035551234", enterprise_id="", - phone_numbers=["+16035551234"], ) + with pytest.raises(ValueError, match=r"Expected a non-empty value for `phone_number` but received ''"): + client.enterprises.reputation.numbers.with_raw_response.disassociate( + phone_number="", + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + ) + + +class TestAsyncNumbers: + parametrize = pytest.mark.parametrize( + "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] + ) + @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize async def test_method_retrieve(self, async_client: AsyncTelnyx) -> None: @@ -420,8 +374,54 @@ async def test_path_params_list(self, async_client: AsyncTelnyx) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_method_delete(self, async_client: AsyncTelnyx) -> None: - number = await async_client.enterprises.reputation.numbers.delete( + async def test_method_associate(self, async_client: AsyncTelnyx) -> None: + number = await async_client.enterprises.reputation.numbers.associate( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + phone_numbers=["+16035551234"], + ) + assert_matches_type(NumberAssociateResponse, number, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_raw_response_associate(self, async_client: AsyncTelnyx) -> None: + response = await async_client.enterprises.reputation.numbers.with_raw_response.associate( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + phone_numbers=["+16035551234"], + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + number = await response.parse() + assert_matches_type(NumberAssociateResponse, number, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_streaming_response_associate(self, async_client: AsyncTelnyx) -> None: + async with async_client.enterprises.reputation.numbers.with_streaming_response.associate( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + phone_numbers=["+16035551234"], + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + number = await response.parse() + assert_matches_type(NumberAssociateResponse, number, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_path_params_associate(self, async_client: AsyncTelnyx) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): + await async_client.enterprises.reputation.numbers.with_raw_response.associate( + enterprise_id="", + phone_numbers=["+16035551234"], + ) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_method_disassociate(self, async_client: AsyncTelnyx) -> None: + number = await async_client.enterprises.reputation.numbers.disassociate( phone_number="+16035551234", enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) @@ -429,8 +429,8 @@ async def test_method_delete(self, async_client: AsyncTelnyx) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_raw_response_delete(self, async_client: AsyncTelnyx) -> None: - response = await async_client.enterprises.reputation.numbers.with_raw_response.delete( + async def test_raw_response_disassociate(self, async_client: AsyncTelnyx) -> None: + response = await async_client.enterprises.reputation.numbers.with_raw_response.disassociate( phone_number="+16035551234", enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) @@ -442,8 +442,8 @@ async def test_raw_response_delete(self, async_client: AsyncTelnyx) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_streaming_response_delete(self, async_client: AsyncTelnyx) -> None: - async with async_client.enterprises.reputation.numbers.with_streaming_response.delete( + async def test_streaming_response_disassociate(self, async_client: AsyncTelnyx) -> None: + async with async_client.enterprises.reputation.numbers.with_streaming_response.disassociate( phone_number="+16035551234", enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) as response: @@ -457,15 +457,15 @@ async def test_streaming_response_delete(self, async_client: AsyncTelnyx) -> Non @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_path_params_delete(self, async_client: AsyncTelnyx) -> None: + async def test_path_params_disassociate(self, async_client: AsyncTelnyx) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): - await async_client.enterprises.reputation.numbers.with_raw_response.delete( + await async_client.enterprises.reputation.numbers.with_raw_response.disassociate( phone_number="+16035551234", enterprise_id="", ) with pytest.raises(ValueError, match=r"Expected a non-empty value for `phone_number` but received ''"): - await async_client.enterprises.reputation.numbers.with_raw_response.delete( + await async_client.enterprises.reputation.numbers.with_raw_response.disassociate( phone_number="", enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) diff --git a/tests/api_resources/enterprises/test_reputation.py b/tests/api_resources/enterprises/test_reputation.py index 53730e20..50b78d98 100644 --- a/tests/api_resources/enterprises/test_reputation.py +++ b/tests/api_resources/enterprises/test_reputation.py @@ -10,8 +10,8 @@ from telnyx import Telnyx, AsyncTelnyx from tests.utils import assert_matches_type from telnyx.types.enterprises import ( - ReputationListResponse, - ReputationCreateResponse, + ReputationEnableResponse, + ReputationRetrieveResponse, ReputationUpdateFrequencyResponse, ) @@ -23,142 +23,142 @@ class TestReputation: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_method_create(self, client: Telnyx) -> None: - reputation = client.enterprises.reputation.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - loa_document_id="doc_01HXYZ1234ABCDEF", - ) - assert_matches_type(ReputationCreateResponse, reputation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - def test_method_create_with_all_params(self, client: Telnyx) -> None: - reputation = client.enterprises.reputation.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - loa_document_id="doc_01HXYZ1234ABCDEF", - check_frequency="business_daily", + def test_method_retrieve(self, client: Telnyx) -> None: + reputation = client.enterprises.reputation.retrieve( + "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) - assert_matches_type(ReputationCreateResponse, reputation, path=["response"]) + assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"]) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_raw_response_create(self, client: Telnyx) -> None: - response = client.enterprises.reputation.with_raw_response.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - loa_document_id="doc_01HXYZ1234ABCDEF", + def test_raw_response_retrieve(self, client: Telnyx) -> None: + response = client.enterprises.reputation.with_raw_response.retrieve( + "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = response.parse() - assert_matches_type(ReputationCreateResponse, reputation, path=["response"]) + assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"]) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_streaming_response_create(self, client: Telnyx) -> None: - with client.enterprises.reputation.with_streaming_response.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - loa_document_id="doc_01HXYZ1234ABCDEF", + def test_streaming_response_retrieve(self, client: Telnyx) -> None: + with client.enterprises.reputation.with_streaming_response.retrieve( + "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = response.parse() - assert_matches_type(ReputationCreateResponse, reputation, path=["response"]) + assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"]) assert cast(Any, response.is_closed) is True @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_path_params_create(self, client: Telnyx) -> None: + def test_path_params_retrieve(self, client: Telnyx) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): - client.enterprises.reputation.with_raw_response.create( - enterprise_id="", - loa_document_id="doc_01HXYZ1234ABCDEF", + client.enterprises.reputation.with_raw_response.retrieve( + "", ) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_method_list(self, client: Telnyx) -> None: - reputation = client.enterprises.reputation.list( + def test_method_disable(self, client: Telnyx) -> None: + reputation = client.enterprises.reputation.disable( "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) - assert_matches_type(ReputationListResponse, reputation, path=["response"]) + assert reputation is None @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_raw_response_list(self, client: Telnyx) -> None: - response = client.enterprises.reputation.with_raw_response.list( + def test_raw_response_disable(self, client: Telnyx) -> None: + response = client.enterprises.reputation.with_raw_response.disable( "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = response.parse() - assert_matches_type(ReputationListResponse, reputation, path=["response"]) + assert reputation is None @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_streaming_response_list(self, client: Telnyx) -> None: - with client.enterprises.reputation.with_streaming_response.list( + def test_streaming_response_disable(self, client: Telnyx) -> None: + with client.enterprises.reputation.with_streaming_response.disable( "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = response.parse() - assert_matches_type(ReputationListResponse, reputation, path=["response"]) + assert reputation is None assert cast(Any, response.is_closed) is True @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_path_params_list(self, client: Telnyx) -> None: + def test_path_params_disable(self, client: Telnyx) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): - client.enterprises.reputation.with_raw_response.list( + client.enterprises.reputation.with_raw_response.disable( "", ) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_method_delete_all(self, client: Telnyx) -> None: - reputation = client.enterprises.reputation.delete_all( - "6a09cdc3-8948-47f0-aa62-74ac943d6c58", + def test_method_enable(self, client: Telnyx) -> None: + reputation = client.enterprises.reputation.enable( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + loa_document_id="doc_01HXYZ1234ABCDEF", ) - assert reputation is None + assert_matches_type(ReputationEnableResponse, reputation, path=["response"]) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_raw_response_delete_all(self, client: Telnyx) -> None: - response = client.enterprises.reputation.with_raw_response.delete_all( - "6a09cdc3-8948-47f0-aa62-74ac943d6c58", + def test_method_enable_with_all_params(self, client: Telnyx) -> None: + reputation = client.enterprises.reputation.enable( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + loa_document_id="doc_01HXYZ1234ABCDEF", + check_frequency="business_daily", + ) + assert_matches_type(ReputationEnableResponse, reputation, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + def test_raw_response_enable(self, client: Telnyx) -> None: + response = client.enterprises.reputation.with_raw_response.enable( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + loa_document_id="doc_01HXYZ1234ABCDEF", ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = response.parse() - assert reputation is None + assert_matches_type(ReputationEnableResponse, reputation, path=["response"]) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_streaming_response_delete_all(self, client: Telnyx) -> None: - with client.enterprises.reputation.with_streaming_response.delete_all( - "6a09cdc3-8948-47f0-aa62-74ac943d6c58", + def test_streaming_response_enable(self, client: Telnyx) -> None: + with client.enterprises.reputation.with_streaming_response.enable( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + loa_document_id="doc_01HXYZ1234ABCDEF", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = response.parse() - assert reputation is None + assert_matches_type(ReputationEnableResponse, reputation, path=["response"]) assert cast(Any, response.is_closed) is True @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_path_params_delete_all(self, client: Telnyx) -> None: + def test_path_params_enable(self, client: Telnyx) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): - client.enterprises.reputation.with_raw_response.delete_all( - "", + client.enterprises.reputation.with_raw_response.enable( + enterprise_id="", + loa_document_id="doc_01HXYZ1234ABCDEF", ) @pytest.mark.skip(reason="Mock server tests are disabled") @@ -215,142 +215,142 @@ class TestAsyncReputation: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_method_create(self, async_client: AsyncTelnyx) -> None: - reputation = await async_client.enterprises.reputation.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - loa_document_id="doc_01HXYZ1234ABCDEF", - ) - assert_matches_type(ReputationCreateResponse, reputation, path=["response"]) - - @pytest.mark.skip(reason="Mock server tests are disabled") - @parametrize - async def test_method_create_with_all_params(self, async_client: AsyncTelnyx) -> None: - reputation = await async_client.enterprises.reputation.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - loa_document_id="doc_01HXYZ1234ABCDEF", - check_frequency="business_daily", + async def test_method_retrieve(self, async_client: AsyncTelnyx) -> None: + reputation = await async_client.enterprises.reputation.retrieve( + "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) - assert_matches_type(ReputationCreateResponse, reputation, path=["response"]) + assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"]) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_raw_response_create(self, async_client: AsyncTelnyx) -> None: - response = await async_client.enterprises.reputation.with_raw_response.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - loa_document_id="doc_01HXYZ1234ABCDEF", + async def test_raw_response_retrieve(self, async_client: AsyncTelnyx) -> None: + response = await async_client.enterprises.reputation.with_raw_response.retrieve( + "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = await response.parse() - assert_matches_type(ReputationCreateResponse, reputation, path=["response"]) + assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"]) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_streaming_response_create(self, async_client: AsyncTelnyx) -> None: - async with async_client.enterprises.reputation.with_streaming_response.create( - enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", - loa_document_id="doc_01HXYZ1234ABCDEF", + async def test_streaming_response_retrieve(self, async_client: AsyncTelnyx) -> None: + async with async_client.enterprises.reputation.with_streaming_response.retrieve( + "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = await response.parse() - assert_matches_type(ReputationCreateResponse, reputation, path=["response"]) + assert_matches_type(ReputationRetrieveResponse, reputation, path=["response"]) assert cast(Any, response.is_closed) is True @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_path_params_create(self, async_client: AsyncTelnyx) -> None: + async def test_path_params_retrieve(self, async_client: AsyncTelnyx) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): - await async_client.enterprises.reputation.with_raw_response.create( - enterprise_id="", - loa_document_id="doc_01HXYZ1234ABCDEF", + await async_client.enterprises.reputation.with_raw_response.retrieve( + "", ) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_method_list(self, async_client: AsyncTelnyx) -> None: - reputation = await async_client.enterprises.reputation.list( + async def test_method_disable(self, async_client: AsyncTelnyx) -> None: + reputation = await async_client.enterprises.reputation.disable( "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) - assert_matches_type(ReputationListResponse, reputation, path=["response"]) + assert reputation is None @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_raw_response_list(self, async_client: AsyncTelnyx) -> None: - response = await async_client.enterprises.reputation.with_raw_response.list( + async def test_raw_response_disable(self, async_client: AsyncTelnyx) -> None: + response = await async_client.enterprises.reputation.with_raw_response.disable( "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = await response.parse() - assert_matches_type(ReputationListResponse, reputation, path=["response"]) + assert reputation is None @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_streaming_response_list(self, async_client: AsyncTelnyx) -> None: - async with async_client.enterprises.reputation.with_streaming_response.list( + async def test_streaming_response_disable(self, async_client: AsyncTelnyx) -> None: + async with async_client.enterprises.reputation.with_streaming_response.disable( "6a09cdc3-8948-47f0-aa62-74ac943d6c58", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = await response.parse() - assert_matches_type(ReputationListResponse, reputation, path=["response"]) + assert reputation is None assert cast(Any, response.is_closed) is True @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_path_params_list(self, async_client: AsyncTelnyx) -> None: + async def test_path_params_disable(self, async_client: AsyncTelnyx) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): - await async_client.enterprises.reputation.with_raw_response.list( + await async_client.enterprises.reputation.with_raw_response.disable( "", ) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_method_delete_all(self, async_client: AsyncTelnyx) -> None: - reputation = await async_client.enterprises.reputation.delete_all( - "6a09cdc3-8948-47f0-aa62-74ac943d6c58", + async def test_method_enable(self, async_client: AsyncTelnyx) -> None: + reputation = await async_client.enterprises.reputation.enable( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + loa_document_id="doc_01HXYZ1234ABCDEF", ) - assert reputation is None + assert_matches_type(ReputationEnableResponse, reputation, path=["response"]) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_raw_response_delete_all(self, async_client: AsyncTelnyx) -> None: - response = await async_client.enterprises.reputation.with_raw_response.delete_all( - "6a09cdc3-8948-47f0-aa62-74ac943d6c58", + async def test_method_enable_with_all_params(self, async_client: AsyncTelnyx) -> None: + reputation = await async_client.enterprises.reputation.enable( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + loa_document_id="doc_01HXYZ1234ABCDEF", + check_frequency="business_daily", + ) + assert_matches_type(ReputationEnableResponse, reputation, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_raw_response_enable(self, async_client: AsyncTelnyx) -> None: + response = await async_client.enterprises.reputation.with_raw_response.enable( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + loa_document_id="doc_01HXYZ1234ABCDEF", ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = await response.parse() - assert reputation is None + assert_matches_type(ReputationEnableResponse, reputation, path=["response"]) @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_streaming_response_delete_all(self, async_client: AsyncTelnyx) -> None: - async with async_client.enterprises.reputation.with_streaming_response.delete_all( - "6a09cdc3-8948-47f0-aa62-74ac943d6c58", + async def test_streaming_response_enable(self, async_client: AsyncTelnyx) -> None: + async with async_client.enterprises.reputation.with_streaming_response.enable( + enterprise_id="6a09cdc3-8948-47f0-aa62-74ac943d6c58", + loa_document_id="doc_01HXYZ1234ABCDEF", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" reputation = await response.parse() - assert reputation is None + assert_matches_type(ReputationEnableResponse, reputation, path=["response"]) assert cast(Any, response.is_closed) is True @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_path_params_delete_all(self, async_client: AsyncTelnyx) -> None: + async def test_path_params_enable(self, async_client: AsyncTelnyx) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `enterprise_id` but received ''"): - await async_client.enterprises.reputation.with_raw_response.delete_all( - "", + await async_client.enterprises.reputation.with_raw_response.enable( + enterprise_id="", + loa_document_id="doc_01HXYZ1234ABCDEF", ) @pytest.mark.skip(reason="Mock server tests are disabled") diff --git a/tests/api_resources/test_calls.py b/tests/api_resources/test_calls.py index a175da1d..9218818c 100644 --- a/tests/api_resources/test_calls.py +++ b/tests/api_resources/test_calls.py @@ -97,6 +97,7 @@ def test_method_dial_with_all_params(self, client: Telnyx) -> None: park_after_unbridge="self", preferred_codecs="G722,PCMU,PCMA,G729,OPUS,VP8,H264", prevent_double_bridge=True, + privacy="id", record="record-from-answer", record_channels="single", record_custom_file_name="my_recording_file_name", @@ -320,6 +321,7 @@ async def test_method_dial_with_all_params(self, async_client: AsyncTelnyx) -> N park_after_unbridge="self", preferred_codecs="G722,PCMU,PCMA,G729,OPUS,VP8,H264", prevent_double_bridge=True, + privacy="id", record="record-from-answer", record_channels="single", record_custom_file_name="my_recording_file_name",