Skip to content

Commit aed15e9

Browse files
authored
DEVEXP-1306: OAS Synchro Numbers (#134)
1 parent 2d52f61 commit aed15e9

7 files changed

Lines changed: 28 additions & 23 deletions

File tree

sinch/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33

44
from sinch.core.clients.sinch_client_sync import SinchClient
55

6-
__all__ = SinchClient
6+
__all__ = ["SinchClient"]

sinch/domains/numbers/api/v1/active_numbers_apis.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
class ActiveNumbers(BaseNumbers):
2828
def list(
2929
self,
30-
region_code: str,
31-
number_type: NumberType,
30+
region_code: Optional[str] = None,
31+
number_type: Optional[NumberType] = None,
3232
number_pattern: Optional[str] = None,
3333
number_search_pattern: Optional[NumberSearchPatternType] = None,
3434
capabilities: Optional[List[CapabilityType]] = None,

sinch/domains/numbers/models/v1/internal/list_active_numbers_request.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@
1212

1313

1414
class ListActiveNumbersRequest(BaseModelConfigurationRequest):
15-
region_code: StrictStr = Field(
15+
region_code: Optional[StrictStr] = Field(
16+
default=None,
1617
alias="regionCode",
1718
description="ISO 3166-1 alpha-2 country code. Example: US, GB or SE.",
1819
)
19-
number_type: NumberType = Field(alias="type")
20+
number_type: Optional[NumberType] = Field(default=None, alias="type")
2021
page_size: Optional[StrictInt] = Field(default=None, alias="pageSize")
2122
capabilities: Optional[conlist(CapabilityType)] = Field(default=None)
2223
number_search_pattern: Optional[NumberSearchPatternType] = Field(

sinch/domains/numbers/virtual_numbers.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ def sinch_events(self, callback_secret: str) -> SinchEvents:
5656

5757
def list(
5858
self,
59-
region_code: str,
60-
number_type: NumberType,
59+
region_code: Optional[str] = None,
60+
number_type: Optional[NumberType] = None,
6161
number_pattern: Optional[str] = None,
6262
number_search_pattern: Optional[NumberSearchPatternType] = None,
6363
capabilities: Optional[List[CapabilityType]] = None,
@@ -69,11 +69,11 @@ def list(
6969
"""
7070
Search for all active virtual numbers associated with a certain project.
7171
72-
:param region_code: ISO 3166-1 alpha-2 country code. Example: US, GB or SE.
73-
:type region_code: str
72+
:param region_code: Optional. ISO 3166-1 alpha-2 country code. Example: US, GB or SE.
73+
:type region_code: Optional[str]
7474
75-
:param number_type: Type of number (e.g., "MOBILE", "LOCAL", "TOLL_FREE").
76-
:type number_type: NumberType
75+
:param number_type: Optional. Type of number (e.g., "MOBILE", "LOCAL", "TOLL_FREE").
76+
:type number_type: Optional[NumberType]
7777
7878
:param number_pattern: Specific sequence of digits to search for.
7979
:type number_pattern: Optional[str]

tests/unit/domains/numbers/v1/endpoints/active/test_list_active_numbers_endpoint.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,21 @@ def test_build_query_params_expects_correct_mapping(endpoint):
7474
assert endpoint.build_query_params() == expected_params
7575

7676

77+
def test_build_query_params_omits_none_region_and_type():
78+
"""
79+
Optional query params must not be sent when unset.
80+
"""
81+
request_data = ListActiveNumbersRequest(
82+
page_size=10,
83+
capabilities=["SMS"],
84+
)
85+
endpoint = ListActiveNumbersEndpoint("test_project_id", request_data)
86+
assert endpoint.build_query_params() == {
87+
"pageSize": 10,
88+
"capabilities": ["SMS"],
89+
}
90+
91+
7792
def test_handle_response_expects_correct_mapping(endpoint, mock_response):
7893
"""
7994
Check if response is handled and mapped to the appropriate fields correctly.

tests/unit/domains/numbers/v1/models/internal/test_list_active_numbers_request_model.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import pytest
2-
from pydantic import ValidationError
32
from sinch.domains.numbers.models.v1.internal import ListActiveNumbersRequest
43

54

@@ -70,12 +69,3 @@ def test_list_available_numbers_request_expects_camel_case_input():
7069
request = ListActiveNumbersRequest(**data)
7170
assert request.region_code == "US"
7271
assert request.number_type == "MOBILE"
73-
74-
75-
def test_list_active_numbers_request_expects_validation_error_for_missing_field():
76-
"""
77-
Test that missing required fields raise a ValidationError.
78-
"""
79-
data = {}
80-
with pytest.raises(ValidationError):
81-
ListActiveNumbersRequest(**data)

tests/unit/domains/numbers/v1/models/internal/test_list_available_numbers_request_model.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,12 @@ def test_list_available_numbers_request_expects_validation_error_for_missing_req
8585
data = {
8686
"number_type": "MOBILE",
8787
"size": 10,
88-
"capabilities": ["SMS", "VOICE"]
88+
"capabilities": ["SMS", "VOICE"],
8989
}
9090

9191
with pytest.raises(ValidationError) as exc_info:
9292
ListAvailableNumbersRequest(**data)
9393

94-
# Assert the error mentions the missing region_code field
9594
assert "region_code" in str(exc_info.value) or "regionCode" in str(exc_info.value)
9695

9796

0 commit comments

Comments
 (0)