sensorswave-sdk 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. sensorswave_sdk-0.1.0/.github/workflows/lint.yml +75 -0
  2. sensorswave_sdk-0.1.0/.github/workflows/release.yml +46 -0
  3. sensorswave_sdk-0.1.0/.github/workflows/security.yml +35 -0
  4. sensorswave_sdk-0.1.0/.github/workflows/test.yml +58 -0
  5. sensorswave_sdk-0.1.0/.gitignore +28 -0
  6. sensorswave_sdk-0.1.0/Makefile +22 -0
  7. sensorswave_sdk-0.1.0/PKG-INFO +678 -0
  8. sensorswave_sdk-0.1.0/README.md +651 -0
  9. sensorswave_sdk-0.1.0/README.zh-CN.md +642 -0
  10. sensorswave_sdk-0.1.0/examples/ab_example.py +260 -0
  11. sensorswave_sdk-0.1.0/examples/quickstart.py +157 -0
  12. sensorswave_sdk-0.1.0/pyproject.toml +69 -0
  13. sensorswave_sdk-0.1.0/src/sensorswave/__init__.py +72 -0
  14. sensorswave_sdk-0.1.0/src/sensorswave/__version__.py +1 -0
  15. sensorswave_sdk-0.1.0/src/sensorswave/ab.py +1214 -0
  16. sensorswave_sdk-0.1.0/src/sensorswave/client.py +823 -0
  17. sensorswave_sdk-0.1.0/src/sensorswave/constants.py +39 -0
  18. sensorswave_sdk-0.1.0/src/sensorswave/errors.py +33 -0
  19. sensorswave_sdk-0.1.0/src/sensorswave/models.py +212 -0
  20. sensorswave_sdk-0.1.0/src/sensorswave/signing.py +94 -0
  21. sensorswave_sdk-0.1.0/src/sensorswave/transport.py +152 -0
  22. sensorswave_sdk-0.1.0/tests/conformance/loader.py +79 -0
  23. sensorswave_sdk-0.1.0/tests/conformance/test_ABCoreEvaluation.py +142 -0
  24. sensorswave_sdk-0.1.0/tests/conformance/test_ABMetaSnapshotBootstrap.py +122 -0
  25. sensorswave_sdk-0.1.0/tests/conformance/test_ClientSDKCore.py +66 -0
  26. sensorswave_sdk-0.1.0/tests/conformance/test_RequestSigningACS3.py +33 -0
  27. sensorswave_sdk-0.1.0/tests/conformance/test_TrackingCore.py +93 -0
  28. sensorswave_sdk-0.1.0/tests/conformance/test_UserProfileOps.py +110 -0
  29. sensorswave_sdk-0.1.0/tests/conformance/test_loader.py +77 -0
  30. sensorswave_sdk-0.1.0/tests/fixtures/conformance/fixtures/ab-core-evaluation.json +1997 -0
  31. sensorswave_sdk-0.1.0/tests/fixtures/conformance/fixtures/ab-meta-snapshot-bootstrap.json +38 -0
  32. sensorswave_sdk-0.1.0/tests/fixtures/conformance/fixtures/client-sdk-core.json +46 -0
  33. sensorswave_sdk-0.1.0/tests/fixtures/conformance/fixtures/request-signing-acs3.json +33 -0
  34. sensorswave_sdk-0.1.0/tests/fixtures/conformance/fixtures/tracking-core.json +84 -0
  35. sensorswave_sdk-0.1.0/tests/fixtures/conformance/fixtures/user-profile-ops.json +72 -0
  36. sensorswave_sdk-0.1.0/tests/fixtures/conformance/golden/ab-core-evaluation.json +3332 -0
  37. sensorswave_sdk-0.1.0/tests/fixtures/conformance/golden/ab-meta-snapshot-bootstrap.json +264 -0
  38. sensorswave_sdk-0.1.0/tests/fixtures/conformance/golden/client-sdk-core.json +60 -0
  39. sensorswave_sdk-0.1.0/tests/fixtures/conformance/golden/request-signing-acs3.json +29 -0
  40. sensorswave_sdk-0.1.0/tests/fixtures/conformance/golden/tracking-core.json +103 -0
  41. sensorswave_sdk-0.1.0/tests/fixtures/conformance/golden/user-profile-ops.json +107 -0
  42. sensorswave_sdk-0.1.0/tests/helpers.py +39 -0
  43. sensorswave_sdk-0.1.0/tests/test_ab_core.py +531 -0
  44. sensorswave_sdk-0.1.0/tests/test_ab_meta.py +481 -0
  45. sensorswave_sdk-0.1.0/tests/test_client_core.py +637 -0
  46. sensorswave_sdk-0.1.0/tests/test_public_api.py +133 -0
  47. sensorswave_sdk-0.1.0/tests/test_signing.py +106 -0
  48. sensorswave_sdk-0.1.0/tests/test_tracking.py +137 -0
  49. sensorswave_sdk-0.1.0/tests/test_transport.py +110 -0
  50. sensorswave_sdk-0.1.0/tests/test_user_profile.py +199 -0
  51. sensorswave_sdk-0.1.0/tests/testdata/config/first_match_wins.json +109 -0
  52. sensorswave_sdk-0.1.0/tests/testdata/config/holdout.json +78 -0
  53. sensorswave_sdk-0.1.0/tests/testdata/config/override.json +89 -0
  54. sensorswave_sdk-0.1.0/tests/testdata/config/public.json +70 -0
  55. sensorswave_sdk-0.1.0/tests/testdata/config/qa_complex_running.json +125 -0
  56. sensorswave_sdk-0.1.0/tests/testdata/config/qa_debug_override.json +54 -0
  57. sensorswave_sdk-0.1.0/tests/testdata/config/qa_live_complex_20260520.json +132 -0
  58. sensorswave_sdk-0.1.0/tests/testdata/config/qa_live_multi_20260520.json +75 -0
  59. sensorswave_sdk-0.1.0/tests/testdata/config/qa_live_multi_gate_default_20260521.json +105 -0
  60. sensorswave_sdk-0.1.0/tests/testdata/config/qa_live_multi_gate_variants_20260521.json +145 -0
  61. sensorswave_sdk-0.1.0/tests/testdata/config/qa_multi_user_variants.json +74 -0
  62. sensorswave_sdk-0.1.0/tests/testdata/config/qa_released_variant.json +55 -0
  63. sensorswave_sdk-0.1.0/tests/testdata/config/qa_target_blocked.json +65 -0
  64. sensorswave_sdk-0.1.0/tests/testdata/config/sticky.json +56 -0
  65. sensorswave_sdk-0.1.0/tests/testdata/config/target.json +70 -0
  66. sensorswave_sdk-0.1.0/tests/testdata/config/variant_group_decimal.json +68 -0
  67. sensorswave_sdk-0.1.0/tests/testdata/exp/gate_target_fail.json +106 -0
  68. sensorswave_sdk-0.1.0/tests/testdata/exp/gate_target_pass.json +115 -0
  69. sensorswave_sdk-0.1.0/tests/testdata/exp/holdout.json +81 -0
  70. sensorswave_sdk-0.1.0/tests/testdata/exp/layer.json +83 -0
  71. sensorswave_sdk-0.1.0/tests/testdata/exp/layer_with_holdout.json +90 -0
  72. sensorswave_sdk-0.1.0/tests/testdata/exp/public.json +80 -0
  73. sensorswave_sdk-0.1.0/tests/testdata/exp/release.json +75 -0
  74. sensorswave_sdk-0.1.0/tests/testdata/exp/sticky.json +74 -0
  75. sensorswave_sdk-0.1.0/tests/testdata/exp/target.json +76 -0
  76. sensorswave_sdk-0.1.0/tests/testdata/gate/after.json +45 -0
  77. sensorswave_sdk-0.1.0/tests/testdata/gate/anon_id.json +45 -0
  78. sensorswave_sdk-0.1.0/tests/testdata/gate/anyof_insensitive.json +47 -0
  79. sensorswave_sdk-0.1.0/tests/testdata/gate/anyof_sensitive.json +47 -0
  80. sensorswave_sdk-0.1.0/tests/testdata/gate/before.json +45 -0
  81. sensorswave_sdk-0.1.0/tests/testdata/gate/complicate.json +135 -0
  82. sensorswave_sdk-0.1.0/tests/testdata/gate/complicate_anon_rollout100.json +135 -0
  83. sensorswave_sdk-0.1.0/tests/testdata/gate/custom_field.json +60 -0
  84. sensorswave_sdk-0.1.0/tests/testdata/gate/disable.json +45 -0
  85. sensorswave_sdk-0.1.0/tests/testdata/gate/eq.json +45 -0
  86. sensorswave_sdk-0.1.0/tests/testdata/gate/equal_version.json +45 -0
  87. sensorswave_sdk-0.1.0/tests/testdata/gate/first_match_wins.json +75 -0
  88. sensorswave_sdk-0.1.0/tests/testdata/gate/gate_circular.json +79 -0
  89. sensorswave_sdk-0.1.0/tests/testdata/gate/gate_fail.json +79 -0
  90. sensorswave_sdk-0.1.0/tests/testdata/gate/gate_filter.json +79 -0
  91. sensorswave_sdk-0.1.0/tests/testdata/gate/gate_filter_easy_pass.json +79 -0
  92. sensorswave_sdk-0.1.0/tests/testdata/gate/greater_equal_version.json +45 -0
  93. sensorswave_sdk-0.1.0/tests/testdata/gate/greater_version.json +45 -0
  94. sensorswave_sdk-0.1.0/tests/testdata/gate/gte_number.json +45 -0
  95. sensorswave_sdk-0.1.0/tests/testdata/gate/holdout.json +54 -0
  96. sensorswave_sdk-0.1.0/tests/testdata/gate/invalid_common_field.json +45 -0
  97. sensorswave_sdk-0.1.0/tests/testdata/gate/is_false.json +45 -0
  98. sensorswave_sdk-0.1.0/tests/testdata/gate/is_true.json +45 -0
  99. sensorswave_sdk-0.1.0/tests/testdata/gate/isnotnull.json +45 -0
  100. sensorswave_sdk-0.1.0/tests/testdata/gate/isnull.json +45 -0
  101. sensorswave_sdk-0.1.0/tests/testdata/gate/less_equal_version.json +45 -0
  102. sensorswave_sdk-0.1.0/tests/testdata/gate/less_version.json +45 -0
  103. sensorswave_sdk-0.1.0/tests/testdata/gate/lt_number.json +45 -0
  104. sensorswave_sdk-0.1.0/tests/testdata/gate/lte_number.json +45 -0
  105. sensorswave_sdk-0.1.0/tests/testdata/gate/missing_gate_rules.json +29 -0
  106. sensorswave_sdk-0.1.0/tests/testdata/gate/multi_gates.json +117 -0
  107. sensorswave_sdk-0.1.0/tests/testdata/gate/neq_number.json +45 -0
  108. sensorswave_sdk-0.1.0/tests/testdata/gate/noneof_insentive.json +48 -0
  109. sensorswave_sdk-0.1.0/tests/testdata/gate/noneof_sensitive.json +48 -0
  110. sensorswave_sdk-0.1.0/tests/testdata/gate/not_equal.json +45 -0
  111. sensorswave_sdk-0.1.0/tests/testdata/gate/override_condition.json +85 -0
  112. sensorswave_sdk-0.1.0/tests/testdata/gate/override_id.json +66 -0
  113. sensorswave_sdk-0.1.0/tests/testdata/gate/public.json +45 -0
  114. sensorswave_sdk-0.1.0/tests/testdata/gate/release.json +44 -0
  115. sensorswave_sdk-0.1.0/tests/testdata/gate/sticky.json +45 -0
@@ -0,0 +1,75 @@
1
+ name: Lint
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ ruff:
11
+ name: Ruff Lint + Format
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - name: Checkout code
16
+ uses: actions/checkout@v4
17
+
18
+ - name: Set up Python
19
+ uses: actions/setup-python@v5
20
+ with:
21
+ python-version: '3.13'
22
+ cache: pip
23
+ cache-dependency-path: pyproject.toml
24
+
25
+ - name: Install ruff
26
+ run: pip install ruff
27
+
28
+ - name: Check lint
29
+ run: ruff check src/
30
+
31
+ - name: Check formatting
32
+ run: ruff format --check src/
33
+
34
+ mypy:
35
+ name: Mypy Type Check
36
+ runs-on: ubuntu-latest
37
+
38
+ steps:
39
+ - name: Checkout code
40
+ uses: actions/checkout@v4
41
+
42
+ - name: Set up Python
43
+ uses: actions/setup-python@v5
44
+ with:
45
+ python-version: '3.13'
46
+ cache: pip
47
+ cache-dependency-path: pyproject.toml
48
+
49
+ - name: Install dependencies
50
+ run: |
51
+ pip install -e ".[dev]"
52
+
53
+ - name: Run mypy
54
+ run: python3 -m mypy
55
+
56
+ compile:
57
+ name: Compile Check
58
+ runs-on: ubuntu-latest
59
+
60
+ steps:
61
+ - name: Checkout code
62
+ uses: actions/checkout@v4
63
+
64
+ - name: Set up Python
65
+ uses: actions/setup-python@v5
66
+ with:
67
+ python-version: '3.13'
68
+ cache: pip
69
+ cache-dependency-path: pyproject.toml
70
+
71
+ - name: Install dependencies
72
+ run: pip install -e "."
73
+
74
+ - name: Compile check
75
+ run: python3 -m compileall -q src/
@@ -0,0 +1,46 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*' # Trigger on tags like v0.1.0, v1.2.3
7
+
8
+ permissions:
9
+ contents: write # Required for creating releases
10
+ id-token: write # Required for PyPI trusted publishing
11
+
12
+ jobs:
13
+ release:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Checkout code
18
+ uses: actions/checkout@v4
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: '3.13'
23
+ cache: pip
24
+ cache-dependency-path: pyproject.toml
25
+
26
+ - name: Install dependencies
27
+ run: |
28
+ pip install build
29
+ pip install -e ".[dev]"
30
+
31
+ - name: Run tests
32
+ run: python3 -m pytest -v -n auto
33
+
34
+ - name: Build wheel + source dist
35
+ run: python3 -m build
36
+
37
+ - name: Create GitHub Release
38
+ uses: softprops/action-gh-release@v2
39
+ with:
40
+ generate_release_notes: true
41
+ files: dist/*
42
+ env:
43
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
44
+
45
+ - name: Publish to PyPI
46
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,35 @@
1
+ name: Security
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+ schedule:
9
+ - cron: '0 2 * * 2'
10
+
11
+ jobs:
12
+ dependency-check:
13
+ name: Dependency Vulnerability Check
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Checkout code
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: '3.13'
24
+ cache: pip
25
+ cache-dependency-path: pyproject.toml
26
+
27
+ - name: Install dependencies
28
+ run: |
29
+ pip install pip-audit
30
+ pip install -e "."
31
+
32
+ - name: Audit dependencies
33
+ # Ignore CVEs in pip itself — pip is a CI build tool, not a runtime
34
+ # dependency of this SDK (which has zero runtime dependencies).
35
+ run: pip-audit --ignore-vuln CVE-2026-3219 --ignore-vuln CVE-2026-6357
@@ -0,0 +1,58 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+ name: Test (Python ${{ matrix.python-version }} on ${{ matrix.os }})
12
+ runs-on: ${{ matrix.os }}
13
+
14
+ strategy:
15
+ fail-fast: false
16
+ matrix:
17
+ python-version: ['3.10', '3.11', '3.12', '3.13']
18
+ os: [ubuntu-latest, macos-latest, windows-latest]
19
+
20
+ steps:
21
+ - name: Checkout code
22
+ uses: actions/checkout@v4
23
+
24
+ - name: Set up Python ${{ matrix.python-version }}
25
+ uses: actions/setup-python@v5
26
+ with:
27
+ python-version: ${{ matrix.python-version }}
28
+ cache: pip
29
+ cache-dependency-path: pyproject.toml
30
+
31
+ - name: Install dependencies
32
+ run: |
33
+ python3 -m pip install --upgrade pip
34
+ pip install -e ".[dev]"
35
+
36
+ - name: Run tests
37
+ run: python3 -m pytest -v -n auto
38
+
39
+ build:
40
+ name: Build
41
+ runs-on: ubuntu-latest
42
+
43
+ steps:
44
+ - name: Checkout code
45
+ uses: actions/checkout@v4
46
+
47
+ - name: Set up Python
48
+ uses: actions/setup-python@v5
49
+ with:
50
+ python-version: '3.13'
51
+ cache: pip
52
+ cache-dependency-path: pyproject.toml
53
+
54
+ - name: Install build tools
55
+ run: pip install build
56
+
57
+ - name: Build wheel + source dist
58
+ run: python3 -m build
@@ -0,0 +1,28 @@
1
+ # Python bytecode caches
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # Virtual environments
7
+ .venv/
8
+ venv/
9
+ env/
10
+
11
+ # Build / dist artifacts
12
+ build/
13
+ dist/
14
+ *.egg-info/
15
+
16
+ # Test / coverage caches
17
+ .pytest_cache/
18
+ .mypy_cache/
19
+ .coverage
20
+ htmlcov/
21
+
22
+ # Agent/tool caches
23
+ .serena/
24
+
25
+ # Editor / OS files
26
+ .idea/
27
+ .vscode/
28
+ .DS_Store
@@ -0,0 +1,22 @@
1
+ .PHONY: build publish release
2
+
3
+ # Build wheel and source distribution
4
+ build:
5
+ python3 -m build
6
+
7
+ # Publish to PyPI
8
+ # Requires PyPI credentials via ~/.pypirc or trusted publishing.
9
+ publish: build
10
+ python3 -m twine upload dist/*
11
+
12
+ # Release: bump version, commit, tag.
13
+ # Usage: make release VERSION=0.2.0
14
+ release:
15
+ @test -n "$(VERSION)" || (echo "Usage: make release VERSION=x.y.z"; exit 1)
16
+ @echo "Setting version to $(VERSION)..."
17
+ @echo '__version__ = "$(VERSION)"' > src/sensorswave/__version__.py
18
+ git add src/sensorswave/__version__.py
19
+ git commit -m "chore: bump version to $(VERSION)"
20
+ git tag v$(VERSION)
21
+ @echo "Committed and tagged v$(VERSION). Push with:"
22
+ @echo " git push && git push --tags"