Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
5e561a8
DEVEXP-710: Implement Models and Apis for "Available Numbers"
matsk-sinch Jan 30, 2025
d3a515c
chore: refactor models
matsk-sinch Feb 3, 2025
05ace15
chore: remove code redundancy
matsk-sinch Feb 3, 2025
5b3d225
feat: include None values in response, omit in requests
matsk-sinch Feb 4, 2025
c616641
chore: refactor unit tests
matsk-sinch Feb 4, 2025
8281d46
chore: refactor numbers endpoint
matsk-sinch Feb 4, 2025
1c681ed
feat: address legacy requests
matsk-sinch Feb 5, 2025
57bcc50
feat: address legacy requests for rentAnyNumber
matsk-sinch Feb 5, 2025
04945ed
Merge pull request #44 from sinch/DEVEXP-710_Available_Numbers
matsk-sinch Feb 6, 2025
f535801
DEVEXP-729: E2E Tests - Available Numbers (#45)
asein-sinch Feb 7, 2025
210f58e
DEVEXP-733: [Python SDK] Auto pagination of elements
matsk-sinch Feb 13, 2025
40521ae
refactor: refactored models, updated unit test, and added parameter i…
matsk-sinch Feb 17, 2025
b20c3ab
refactor: improve pagination logic
matsk-sinch Feb 20, 2025
9aad89a
refactor: preserve subclass type
matsk-sinch Feb 20, 2025
482b1f8
refactor: improve async/sync pagination and rename pagination methods
matsk-sinch Feb 21, 2025
f597eca
rename method - e2e test
matsk-sinch Feb 21, 2025
5048bc8
refactor: simplify pagination logic
matsk-sinch Feb 24, 2025
2bb078e
Merge pull request #46 from sinch/DEVEXP-733_Auto-Pagination
matsk-sinch Feb 25, 2025
bd0c5af
DEVEXP 757: [Python E2E] Run tests with Sync and Async clients
matsk-sinch Mar 4, 2025
8cc9299
Merge pull request #48 from sinch/DEVEXP_757-Run_sync_async_tests
matsk-sinch Mar 4, 2025
23cfc25
DEVEXP-758: SinchClient Configuration
matsk-sinch Mar 6, 2025
b02b46a
chore: unify and clean up unit tests
matsk-sinch Mar 7, 2025
a9519c5
Merge pull request #49 from sinch/DEVEXP_758-SinchClient_Config
matsk-sinch Mar 7, 2025
ad9773f
chore: remove pydantic model
matsk-sinch Mar 7, 2025
403236b
chore: remove Pydantic model
matsk-sinch Mar 7, 2025
cf221a6
DEVEXP-766: Refactor Numbers domain as expected generated structure
matsk-sinch Mar 11, 2025
6a46de2
refactor: model imports
matsk-sinch Mar 13, 2025
85c686d
refactor: endpoint imports
matsk-sinch Mar 13, 2025
26747af
chore(lint): fix lint error
matsk-sinch Mar 13, 2025
580b252
fix(numbers): circular dependency
matsk-sinch Mar 14, 2025
22a95ca
refactor(models): reorganize response-related classes
matsk-sinch Mar 16, 2025
c694f63
refactor(models): group response-related classes
matsk-sinch Mar 17, 2025
435d264
chore: standardize import order
matsk-sinch Mar 17, 2025
7de7636
refactor(models): flatten models hierarchy
matsk-sinch Mar 18, 2025
bedd600
refactor(models): reorganize response-related classes
matsk-sinch Mar 19, 2025
97dd25f
chore: remove unused imports
matsk-sinch Mar 19, 2025
f1feb15
chore: standardize import paths
matsk-sinch Mar 19, 2025
5e2f512
Merge pull request #51 from sinch/DEVEXP_766-Refactor_Numbers
matsk-sinch Mar 19, 2025
47c2220
DEVEXP-782: Numbers API - Active Numbers (#53)
matsk-sinch Mar 25, 2025
93e2c39
DEVEXP-839: Use Paginator interface for ListAvailableNumbers (#54)
matsk-sinch Mar 27, 2025
c81b6e7
DEVEXP-837: Remove async support inherited from v1 (#55)
matsk-sinch Mar 27, 2025
5eb33b9
DEVEXP-783: Numbers API - Available Regions (#56)
matsk-sinch Mar 31, 2025
c7b5eb7
DEVEXP-784: Numbers API - Callbacks (#57)
matsk-sinch Apr 3, 2025
1d7e7e8
DEVEXP-858: Numbers API - Refactor Available and Active endpoints (#58)
matsk-sinch Apr 7, 2025
39834b3
DEVEXP-809: Numbers API - Webhooks (#59)
matsk-sinch Apr 9, 2025
4f58090
chore: rename Numbers class (#60)
matsk-sinch Apr 14, 2025
d28d5a7
DEVEXP-868: Validate secret for validate_signature_header() method (#61)
asein-sinch Apr 18, 2025
f36cda5
DEVEXP-854: Shared model for rent/rentAny endpoints (#62)
matsk-sinch May 6, 2025
1a40545
Numbers Events - Remove pre-processing of event body (#63)
asein-sinch May 12, 2025
7d0c651
chore: update docstring to reST format (#64)
matsk-sinch May 13, 2025
768b2ed
Revert "chore: update docstring to reST format (#64)" (#65)
matsk-sinch May 14, 2025
f06acfc
chore: update e2e tests (#66)
matsk-sinch May 16, 2025
f94a745
chore: update docstring (#67)
matsk-sinch May 19, 2025
a614bdc
DEVEXP-903: (Numbers) Sync OAS - Week 20 (#68)
matsk-sinch May 21, 2025
f515ccf
chore: rename error model (#70)
matsk-sinch May 27, 2025
3985ab5
refactor(Numbers): Match expected generated structure (#71)
matsk-sinch Jun 2, 2025
7ee8b98
refactor(Numbers): Match expected generated model (#73)
matsk-sinch Jun 13, 2025
1b32534
DEVEXP-1006: (Numbers) Sync OAS - Week 25 (#75)
matsk-sinch Jun 23, 2025
b1dbb7c
refactor(Numbers): Match expected generated model (#76)
matsk-sinch Jun 25, 2025
f99142d
DEVEXP-928: Match Generated Code V (#77)
matsk-sinch Jul 17, 2025
a936915
DEVEXP-928: Match Generated Code VI (#78)
matsk-sinch Aug 8, 2025
124ff02
DEVEXP-928: Match generated code (#81)
matsk-sinch Sep 30, 2025
502b4cf
chore: rename types (#82)
matsk-sinch Oct 7, 2025
85de974
chore: add ruff (#84)
matsk-sinch Oct 15, 2025
48d38be
DEVEXP-1117: Add sms delivery reports models and pagination (#87)
matsk-sinch Oct 23, 2025
7cb66e2
DEVEXP-1118: Refactor SMS auth (#90)
matsk-sinch Oct 29, 2025
679df01
DEVEXP-786: SMS Batches - E2E tests (#91)
matsk-sinch Nov 12, 2025
25c49ff
DEVEXP-786: Endpoint Unit Tests (#93)
matsk-sinch Nov 18, 2025
223e23f
DEVEXP-786: Batches - Models and APIs Unit Tests (#94)
matsk-sinch Nov 20, 2025
6a18081
feat: add snippets (#95)
matsk-sinch Nov 20, 2025
974af1f
chore: add batches docstrings (#96)
matsk-sinch Nov 21, 2025
59d5907
chore(sms): update docstrings (#97)
matsk-sinch Nov 21, 2025
aa18ebc
DEVEXP-788: SMS Batches Snippets (#98)
matsk-sinch Nov 22, 2025
a85bfb0
DEVEXP-1145: Number Lookup (#99)
matsk-sinch Nov 26, 2025
c658038
DEVEXP-1145: Number Lookup - E2E tests (#101)
matsk-sinch Nov 27, 2025
b3b979e
chore(e2e): refactor tests (#102)
matsk-sinch Nov 27, 2025
cf62fff
feat: sms webhooks (#103)
matsk-sinch Nov 29, 2025
7810a6c
DEVEXP-1145: Number Lookup Snippet (#104)
matsk-sinch Dec 2, 2025
f41f1d7
chore: uodate snippets (#105)
matsk-sinch Dec 9, 2025
e2e23ed
chore: rename to examples (#106)
matsk-sinch Dec 10, 2025
3b1a4a3
DEVEXP-1160: Migration guide - SMS (#107)
matsk-sinch Dec 12, 2025
ea470e4
DEVEXP-788: SMS API - Webhooks Quickstart (#108)
matsk-sinch Dec 18, 2025
eb2f8a8
DEVEXP-794: Conversation API - Messages (E2E - delete/get/update) (#109)
matsk-sinch Jan 5, 2026
ff5d25e
DEVEXP-794: Add Conversation Region (#110)
matsk-sinch Jan 12, 2026
2adcabc
DEVEXP-794: Update Channel specific directory structure (#111)
matsk-sinch Jan 15, 2026
794d4c8
DEVEXP-794: Conversation - Messages (Endpoint Unit Tests) (#112)
matsk-sinch Jan 19, 2026
99744de
DEVEXP-794: Conversation Messages - Unit Tests I (#113)
matsk-sinch Jan 20, 2026
1a8143e
DEVEXP-794: Conversation Messages - Snippets (#115)
matsk-sinch Jan 22, 2026
3b63783
DEVEXP-794: Conversation Messages - Unit Tests II (#114)
matsk-sinch Jan 22, 2026
f84bb18
DEVEXP-794: Conversation Messages - Send (E2E tests) (#116)
matsk-sinch Jan 29, 2026
8da74b9
DEVEXP-794: Conversation Messages - Send Unit Tests (#117)
matsk-sinch Jan 30, 2026
70a1247
DEVEXP-794: Conversation Messages Send - Snippets (#118)
matsk-sinch Jan 30, 2026
70417d3
DEVEXP-1241: Conversation Messages - List (E2E) (#119)
matsk-sinch Feb 4, 2026
1c6114c
DEVEXP-1241: Conversation Messages - List (Unit Tests & Snippet) (#120)
matsk-sinch Feb 5, 2026
afdcd17
DEVEXP-1266: Update CI (#121)
matsk-sinch Feb 16, 2026
73be4c4
DEVEXP-795: Conversation Webhooks (#122)
matsk-sinch Feb 23, 2026
4c02ad8
DEVEXP-1277: OAS Synch - Conversation (#123)
matsk-sinch Feb 26, 2026
b975b33
DEVEXP-1243: Remove Voice and Verification V1 (#124)
matsk-sinch Feb 27, 2026
feb3817
DEVEXP-1228: Conversation Getting Started (SMS) (#125)
matsk-sinch Mar 4, 2026
183aa15
Remove Webhooks validation from Getting started (#127)
matsk-sinch Mar 6, 2026
6a0c407
DEVEXP-1303: OAS-Synchro - Conversation (#129)
matsk-sinch Mar 10, 2026
990b413
DEVEXP-1303: OAS-Synchro Numbers (#128)
matsk-sinch Mar 12, 2026
9fb22d6
chore/merge main into v2.0 (#130)
matsk-sinch Mar 16, 2026
c812821
DEVEXP-1310: Redesign webhooks (#131)
matsk-sinch Mar 18, 2026
b153152
DEVEXP-1310: Redesign Webhooks - SMS (#132)
matsk-sinch Mar 20, 2026
a2d286f
DEVEXP-1310: Redesign Webhooks - Conversation (#133)
matsk-sinch Mar 25, 2026
528ffb0
DEVEXP-1306: OAS Synchro Numbers (#134)
matsk-sinch Mar 25, 2026
7a68c33
chore: update webhooks tests (#136)
matsk-sinch Mar 25, 2026
f56daa5
chore: update CI
matsk-sinch Mar 25, 2026
1d1a781
update documentation
matsk-sinch Mar 25, 2026
2982fc1
update examples
matsk-sinch Mar 25, 2026
f9b394f
Merge remote-tracking branch 'origin/main' into v2.0
matsk-sinch Mar 25, 2026
95cd7de
Merge v2.0 (main sync) into chore/prepare-release-v2
matsk-sinch Mar 25, 2026
cca4428
update error messages
matsk-sinch Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
28 changes: 28 additions & 0 deletions .github/scripts/wait-for-mockserver.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/bin/bash

wait_for_server() {
local url=$1
echo "Waiting for $url to be ready..."

MAX_RETRIES="${MAX_RETRIES:-30}"
SLEEP_SECONDS="${SLEEP_SECONDS:-2}"

for ((i = 1; i <= MAX_RETRIES; i++)); do
if curl -sSf "$url" > /dev/null; then
echo "$url is ready!"
return 0
fi
echo "Attempt $i/$MAX_RETRIES: Still waiting for $url..."
sleep "$SLEEP_SECONDS"
done

echo "Error: $url was not available after $((MAX_RETRIES * SLEEP_SECONDS)) seconds"
exit 1
}

# Wait for auth mock servers
wait_for_server "http://localhost:3011/health"
# Wait for numbers mock servers
wait_for_server "http://localhost:3013/health"

echo "All mock servers are ready!"
105 changes: 105 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Test Python SDK
on: [ push ]

env:
AUTH_ORIGIN: ${{ secrets.AUTH_ORIGIN }}
CONVERSATION_ORIGIN: ${{ secrets.CONVERSATION_ORIGIN }}
DISABLE_SSL: ${{ secrets.DISABLE_SSL }}
KEY_ID: ${{ secrets.KEY_ID }}
KEY_SECRET: ${{ secrets.KEY_SECRET }}
NUMBERS_ORIGIN: ${{ secrets.NUMBERS_ORIGIN }}
PROJECT_ID: ${{ secrets.PROJECT_ID }}
SERVICE_PLAN_ID: ${{ secrets.SERVICE_PLAN_ID }}
SMS_ORIGIN: ${{ secrets.SMS_ORIGIN }}
TEMPLATES_ORIGIN: ${{ secrets.TEMPLATES_ORIGIN }}

jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]

steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e .
pip install -r requirements-dev.txt

- name: Compile all examples
run: |
for file in $(find examples -name "*.py"); do
echo "Compiling $file..."
python -m py_compile "$file" || exit 1
done
echo "All examples compiled successfully."

- name: Check snippet coverage
run: |
pip install python-dotenv
python scripts/check_snippet_coverage.py

- name: Lint and format check with Ruff
run: |
ruff check sinch/domains/numbers --statistics
ruff format sinch/domains/numbers --check --diff
ruff check sinch/domains/sms --statistics
ruff format sinch/domains/sms --check --diff
ruff check sinch/domains/number_lookup --statistics
ruff format sinch/domains/number_lookup --check --diff
ruff check sinch/domains/conversation --statistics
ruff format sinch/domains/conversation --check --diff

- name: Test with Pytest
run: |
coverage run --source=. -m pytest

- name: Coverage Test Report
run: |
python -m coverage report --skip-empty

- name: Checkout sinch-sdk-mockserver repository
uses: actions/checkout@v4
with:
repository: sinch/sinch-sdk-mockserver
token: ${{ secrets.PAT_CI }}
fetch-depth: 0
path: sinch-sdk-mockserver

- name: Start mock servers with Docker Compose
run: |
cd sinch-sdk-mockserver
docker compose up -d

- name: Copy feature files
run: |
cp sinch-sdk-mockserver/features/numbers/available-regions.feature ./tests/e2e/numbers/features/
cp sinch-sdk-mockserver/features/numbers/callback-configuration.feature ./tests/e2e/numbers/features/
cp sinch-sdk-mockserver/features/numbers/numbers.feature ./tests/e2e/numbers/features/
cp sinch-sdk-mockserver/features/numbers/webhooks.feature ./tests/e2e/numbers/features/
cp sinch-sdk-mockserver/features/sms/delivery-reports.feature ./tests/e2e/sms/features/
cp sinch-sdk-mockserver/features/sms/delivery-reports_servicePlanId.feature ./tests/e2e/sms/features/
cp sinch-sdk-mockserver/features/sms/batches.feature ./tests/e2e/sms/features/
cp sinch-sdk-mockserver/features/sms/batches_servicePlanId.feature ./tests/e2e/sms/features/
cp sinch-sdk-mockserver/features/sms/webhooks.feature ./tests/e2e/sms/features/
cp sinch-sdk-mockserver/features/number-lookup/lookups.feature ./tests/e2e/number-lookup/features/
cp sinch-sdk-mockserver/features/conversation/messages.feature ./tests/e2e/conversation/features/
cp sinch-sdk-mockserver/features/conversation/webhooks-events.feature ./tests/e2e/conversation/features/

- name: Wait for mock server
run: .github/scripts/wait-for-mockserver.sh
shell: bash

- name: Run e2e tests sync
run: |
python -m behave tests/e2e/numbers/features
python -m behave tests/e2e/sms/features
python -m behave tests/e2e/conversation/features
python -m behave tests/e2e/number-lookup/features
47 changes: 0 additions & 47 deletions .github/workflows/run-tests.yml

This file was deleted.

14 changes: 13 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
tox.ini
.nox/
.coverage
.coverage.*
Expand All @@ -51,6 +52,9 @@ coverage.xml
.pytest_cache/
cover/

# E2E features
*.feature

# Translations
*.mo
*.pot
Expand Down Expand Up @@ -129,4 +133,12 @@ cython_debug/
.idea/

# Poetry
poetry.lock
poetry.lock

# .DS_Store files
.DS_Store

qodana.yaml

# AI stuff
.claude
Loading
Loading