kdpika-licensing 1.1.5__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.
- kdpika_licensing-1.1.5/.gitattributes +2 -0
- kdpika_licensing-1.1.5/.github/ISSUE_TEMPLATE/bug_report.md +13 -0
- kdpika_licensing-1.1.5/.github/ISSUE_TEMPLATE/feature_request.md +9 -0
- kdpika_licensing-1.1.5/.github/PULL_REQUEST_TEMPLATE.md +7 -0
- kdpika_licensing-1.1.5/.github/dependabot.yml +10 -0
- kdpika_licensing-1.1.5/.github/workflows/ci.yml +76 -0
- kdpika_licensing-1.1.5/.github/workflows/release.yml +65 -0
- kdpika_licensing-1.1.5/.pre-commit-config.yaml +13 -0
- kdpika_licensing-1.1.5/CHANGELOG.md +108 -0
- kdpika_licensing-1.1.5/CODE_OF_CONDUCT.md +10 -0
- kdpika_licensing-1.1.5/CONTRIBUTING.md +31 -0
- kdpika_licensing-1.1.5/LICENSE +21 -0
- kdpika_licensing-1.1.5/MANIFEST.in +12 -0
- kdpika_licensing-1.1.5/PKG-INFO +502 -0
- kdpika_licensing-1.1.5/README.md +448 -0
- kdpika_licensing-1.1.5/SECURITY.md +21 -0
- kdpika_licensing-1.1.5/docs/api.md +32 -0
- kdpika_licensing-1.1.5/docs/changelog.md +49 -0
- kdpika_licensing-1.1.5/docs/concepts.md +27 -0
- kdpika_licensing-1.1.5/docs/configuration.md +23 -0
- kdpika_licensing-1.1.5/docs/contributing.md +15 -0
- kdpika_licensing-1.1.5/docs/errors.md +33 -0
- kdpika_licensing-1.1.5/docs/faq.md +147 -0
- kdpika_licensing-1.1.5/docs/getting-started.md +37 -0
- kdpika_licensing-1.1.5/docs/guides/async.md +21 -0
- kdpika_licensing-1.1.5/docs/guides/backend.md +16 -0
- kdpika_licensing-1.1.5/docs/guides/cli.md +22 -0
- kdpika_licensing-1.1.5/docs/guides/desktop.md +15 -0
- kdpika_licensing-1.1.5/docs/index.md +15 -0
- kdpika_licensing-1.1.5/docs/license.md +17 -0
- kdpika_licensing-1.1.5/docs/migration-phase1.md +93 -0
- kdpika_licensing-1.1.5/docs/migration.md +23 -0
- kdpika_licensing-1.1.5/docs/offline.md +21 -0
- kdpika_licensing-1.1.5/docs/release.md +196 -0
- kdpika_licensing-1.1.5/docs/security.md +25 -0
- kdpika_licensing-1.1.5/docs/storage.md +26 -0
- kdpika_licensing-1.1.5/docs/upgrading.md +13 -0
- kdpika_licensing-1.1.5/examples/README.md +28 -0
- kdpika_licensing-1.1.5/examples/_common.py +60 -0
- kdpika_licensing-1.1.5/examples/async_usage.py +27 -0
- kdpika_licensing-1.1.5/examples/backend_flask.py +42 -0
- kdpika_licensing-1.1.5/examples/basic.py +12 -0
- kdpika_licensing-1.1.5/examples/errors.py +27 -0
- kdpika_licensing-1.1.5/examples/features.py +24 -0
- kdpika_licensing-1.1.5/examples/members.py +16 -0
- kdpika_licensing-1.1.5/examples/offline.py +20 -0
- kdpika_licensing-1.1.5/examples/pyqt_activation.py +18 -0
- kdpika_licensing-1.1.5/examples/session.py +28 -0
- kdpika_licensing-1.1.5/mkdocs.yml +53 -0
- kdpika_licensing-1.1.5/pyproject.toml +80 -0
- kdpika_licensing-1.1.5/release-config.json +10 -0
- kdpika_licensing-1.1.5/setup.cfg +4 -0
- kdpika_licensing-1.1.5/setup.py +4 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/__init__.py +25 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/_json.py +102 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/_storage.py +303 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/_transport.py +155 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/_verification.py +85 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/_version.py +3 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/async_client.py +110 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/client.py +552 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/errors.py +76 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/models.py +160 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/py.typed +0 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing/ui.py +111 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing.egg-info/PKG-INFO +502 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing.egg-info/SOURCES.txt +126 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing.egg-info/dependency_links.txt +1 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing.egg-info/requires.txt +40 -0
- kdpika_licensing-1.1.5/src/kdpika_licensing.egg-info/top_level.txt +2 -0
- kdpika_licensing-1.1.5/src/license_sdk/__init__.py +28 -0
- kdpika_licensing-1.1.5/src/license_sdk/client.py +5 -0
- kdpika_licensing-1.1.5/src/license_sdk/errors.py +17 -0
- kdpika_licensing-1.1.5/src/license_sdk/models.py +5 -0
- kdpika_licensing-1.1.5/src/license_sdk/storage.py +10 -0
- kdpika_licensing-1.1.5/src/license_sdk/transport.py +5 -0
- kdpika_licensing-1.1.5/src/license_sdk/ui.py +5 -0
- kdpika_licensing-1.1.5/tests/conftest.py +43 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/array-payload.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/conformance.key.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/depth-limit.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/duplicate-property.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/escaped-duplicate.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/expired.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/expired.key.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/index.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/integral-float.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/integral-float.key.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/invalid-unicode.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/key-order.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/missing-payload.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/nested.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/normalization.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/numbers.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/padded-signature.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/positive.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/positive.key.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/replacement-invalid-utf8.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/replacement-surrogate.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/short-signature.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/tampered.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/tampered.key.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/trailing-content.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/unicode.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/wrong-algorithm.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/wrong-key-id.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/wrong-key.envelope.json +1 -0
- kdpika_licensing-1.1.5/tests/fixtures/vectors/wrong-key.key.json +1 -0
- kdpika_licensing-1.1.5/tests/installed_examples_smoke.py +46 -0
- kdpika_licensing-1.1.5/tests/installed_smoke.py +133 -0
- kdpika_licensing-1.1.5/tests/live_acceptance.py +63 -0
- kdpika_licensing-1.1.5/tests/test_boundaries.py +184 -0
- kdpika_licensing-1.1.5/tests/test_conformance.py +103 -0
- kdpika_licensing-1.1.5/tests/test_dependency_audit.py +54 -0
- kdpika_licensing-1.1.5/tests/test_documentation.py +74 -0
- kdpika_licensing-1.1.5/tests/test_examples.py +91 -0
- kdpika_licensing-1.1.5/tests/test_live_sandbox.py +42 -0
- kdpika_licensing-1.1.5/tests/test_network_guard.py +27 -0
- kdpika_licensing-1.1.5/tests/test_optional_ui.py +56 -0
- kdpika_licensing-1.1.5/tests/test_release_tooling.py +144 -0
- kdpika_licensing-1.1.5/tests/test_sdk.py +248 -0
- kdpika_licensing-1.1.5/tests/test_security.py +390 -0
- kdpika_licensing-1.1.5/tests/test_storage.py +256 -0
- kdpika_licensing-1.1.5/tests/test_transport.py +169 -0
- kdpika_licensing-1.1.5/tools/audit_dependencies.py +89 -0
- kdpika_licensing-1.1.5/tools/release_gate.py +68 -0
- kdpika_licensing-1.1.5/tools/verify_artifacts.py +124 -0
- kdpika_licensing-1.1.5/tox.ini +23 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: SDK bug report
|
|
3
|
+
about: Reproduce a Python SDK problem without sensitive data
|
|
4
|
+
---
|
|
5
|
+
## Runtime and SDK version
|
|
6
|
+
Python / OS / SDK version:
|
|
7
|
+
|
|
8
|
+
## Synthetic reproduction
|
|
9
|
+
Expected vs actual behavior; include safe error code/request_id only.
|
|
10
|
+
|
|
11
|
+
## Checklist
|
|
12
|
+
- [ ] No license keys, tokens, customer payloads or private files attached.
|
|
13
|
+
- [ ] Security vulnerabilities reported privately to hi@kdpika.com instead.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
## Change and reason
|
|
2
|
+
## Tests actually run (OS/Python/results)
|
|
3
|
+
## Compatibility and security
|
|
4
|
+
- [ ] API-v1 signing/state semantics preserved or migration documented.
|
|
5
|
+
- [ ] Regression/example tests added where appropriate.
|
|
6
|
+
- [ ] No secrets/customer data.
|
|
7
|
+
- [ ] No unapproved publishing/tag/push or hosted download changes.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
name: Python SDK checks
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: ["main"]
|
|
5
|
+
pull_request:
|
|
6
|
+
workflow_call:
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
jobs:
|
|
10
|
+
tests:
|
|
11
|
+
strategy:
|
|
12
|
+
fail-fast: false
|
|
13
|
+
matrix:
|
|
14
|
+
# Use the independent Intel pool after repeated arm64 acquisition failures.
|
|
15
|
+
os: [ubuntu-latest, macos-15-intel, windows-latest]
|
|
16
|
+
python: ["3.11", "3.12", "3.13", "3.14"]
|
|
17
|
+
runs-on: ${{ matrix.os }}
|
|
18
|
+
timeout-minutes: 15
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
21
|
+
with:
|
|
22
|
+
persist-credentials: false
|
|
23
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
24
|
+
with:
|
|
25
|
+
python-version: ${{ matrix.python }}
|
|
26
|
+
- name: Prepare native macOS cryptography build
|
|
27
|
+
if: runner.os == 'macOS'
|
|
28
|
+
env:
|
|
29
|
+
HOMEBREW_NO_AUTO_UPDATE: "1"
|
|
30
|
+
run: |
|
|
31
|
+
brew install openssl@3
|
|
32
|
+
rustc --version
|
|
33
|
+
echo "OPENSSL_DIR=$(brew --prefix openssl@3)" >> "$GITHUB_ENV"
|
|
34
|
+
- run: python -m pip install --upgrade "pip>=26.2.1,<27"
|
|
35
|
+
- run: python -m pip install ".[test]"
|
|
36
|
+
- run: python -m pytest --cov --cov-report=xml --cov-report=term-missing
|
|
37
|
+
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
38
|
+
with:
|
|
39
|
+
name: coverage-${{ matrix.os }}-${{ matrix.python }}
|
|
40
|
+
path: coverage.xml
|
|
41
|
+
if-no-files-found: error
|
|
42
|
+
quality:
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
timeout-minutes: 15
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
47
|
+
with:
|
|
48
|
+
persist-credentials: false
|
|
49
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
50
|
+
with:
|
|
51
|
+
python-version: "3.13"
|
|
52
|
+
- run: python -m pip install --upgrade "pip>=26.2.1,<27"
|
|
53
|
+
- run: python -m pip install ".[dev,docs,test]"
|
|
54
|
+
- run: ruff check src tests tools examples
|
|
55
|
+
- run: ruff format --check src tests tools examples
|
|
56
|
+
- run: mypy --strict src
|
|
57
|
+
- run: mkdocs build --strict
|
|
58
|
+
- run: python -m build
|
|
59
|
+
- run: python -m twine check dist/*
|
|
60
|
+
- run: python tools/verify_artifacts.py
|
|
61
|
+
- run: python tools/audit_dependencies.py
|
|
62
|
+
- run: python tools/audit_dependencies.py --tooling
|
|
63
|
+
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
64
|
+
with:
|
|
65
|
+
name: python-distributions
|
|
66
|
+
path: dist/*
|
|
67
|
+
if-no-files-found: error
|
|
68
|
+
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
69
|
+
with:
|
|
70
|
+
name: candidate-docs-and-evidence
|
|
71
|
+
path: |
|
|
72
|
+
site/
|
|
73
|
+
docs/internal/artifact-verification-release.json
|
|
74
|
+
docs/internal/dependency-audit-release.json
|
|
75
|
+
docs/internal/dependency-audit-tooling-release.json
|
|
76
|
+
if-no-files-found: error
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Publish owner-approved SDK
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
tags: ["v*"]
|
|
5
|
+
permissions:
|
|
6
|
+
contents: read
|
|
7
|
+
jobs:
|
|
8
|
+
prepare:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
outputs:
|
|
11
|
+
prerelease: ${{ steps.version.outputs.prerelease }}
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
14
|
+
with:
|
|
15
|
+
persist-credentials: false
|
|
16
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.13"
|
|
19
|
+
- run: python -m pip install "packaging>=25,<27"
|
|
20
|
+
- name: Validate owner decisions and exact tag
|
|
21
|
+
env:
|
|
22
|
+
RELEASE_TAG: ${{ github.ref_name }}
|
|
23
|
+
RELEASE_REPOSITORY: ${{ github.repository }}
|
|
24
|
+
run: python tools/release_gate.py --tag "$RELEASE_TAG" --repository "$RELEASE_REPOSITORY"
|
|
25
|
+
- id: version
|
|
26
|
+
run: |
|
|
27
|
+
python -c "from tools.release_gate import version; print('prerelease=' + str(version().is_prerelease).lower())" >> "$GITHUB_OUTPUT"
|
|
28
|
+
verify:
|
|
29
|
+
needs: prepare
|
|
30
|
+
uses: ./.github/workflows/ci.yml
|
|
31
|
+
permissions:
|
|
32
|
+
contents: read
|
|
33
|
+
testpypi:
|
|
34
|
+
needs: [prepare, verify]
|
|
35
|
+
if: needs.prepare.outputs.prerelease == 'true'
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
environment: testpypi
|
|
38
|
+
permissions:
|
|
39
|
+
contents: read
|
|
40
|
+
id-token: write
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
43
|
+
with:
|
|
44
|
+
name: python-distributions
|
|
45
|
+
path: dist/
|
|
46
|
+
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
47
|
+
with:
|
|
48
|
+
repository-url: https://test.pypi.org/legacy/
|
|
49
|
+
packages-dir: dist/
|
|
50
|
+
pypi:
|
|
51
|
+
needs: [prepare, verify]
|
|
52
|
+
if: needs.prepare.outputs.prerelease == 'false'
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
environment: pypi
|
|
55
|
+
permissions:
|
|
56
|
+
contents: read
|
|
57
|
+
id-token: write
|
|
58
|
+
steps:
|
|
59
|
+
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
60
|
+
with:
|
|
61
|
+
name: python-distributions
|
|
62
|
+
path: dist/
|
|
63
|
+
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
64
|
+
with:
|
|
65
|
+
packages-dir: dist/
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Notable changes follow Keep a Changelog categories. API v1 and SDK package
|
|
4
|
+
versions are independent. Registry availability is recorded on PyPI; a source
|
|
5
|
+
changelog entry is not proof of publication.
|
|
6
|
+
|
|
7
|
+
## [1.1.5] — 2026-10-20
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Use GitHub's supported Intel macOS runner pool after arm64 jobs repeatedly
|
|
12
|
+
failed to acquire runners. Build the same cryptography dependency with Rust
|
|
13
|
+
and OpenSSL 3; retain all Python 3.11–3.14 tests, audits and publication gates.
|
|
14
|
+
No SDK runtime logic or dependency-version changes.
|
|
15
|
+
|
|
16
|
+
## [1.1.4] — unpublished release preparation, 2026-10-20
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Audit exact installed third-party distributions (including transitive dependencies)
|
|
21
|
+
without looking up the unpublished SDK candidate on PyPI. Record that scope in
|
|
22
|
+
audit evidence; vulnerabilities, collection failures and service errors still block
|
|
23
|
+
publication. SDK runtime and all protected publication gates are unchanged.
|
|
24
|
+
|
|
25
|
+
## [1.1.3] — unpublished release preparation, 2026-10-20
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- Pin native macOS CI to the supported `macos-15` arm64 image after repeated
|
|
30
|
+
`macos-latest` runner-acquisition failures. All Python 3.11–3.14 checks and
|
|
31
|
+
protected OIDC publication gates remain required; SDK runtime is unchanged.
|
|
32
|
+
- Preserve previous unpublished tags instead of rewriting release history.
|
|
33
|
+
|
|
34
|
+
## [1.1.1] — unpublished release preparation, 2026-10-20
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- Pin Git text checkouts to LF so the approved MIT license retains the same
|
|
39
|
+
SHA-256 on Windows, macOS and Linux. No license bytes or SDK logic changed.
|
|
40
|
+
- Supersedes the blocked, unpublished `v1.1.0` release attempt; that tag is
|
|
41
|
+
preserved rather than rewritten. This source entry is not upload evidence.
|
|
42
|
+
|
|
43
|
+
## [1.1.0] — unpublished release preparation, 2026-10-20
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- Make the test harness portable to Windows: bounded parametrized case names,
|
|
48
|
+
POSIX-only permission assertions and asyncio's private socketpair wake-up path.
|
|
49
|
+
Ordinary test network connections remain blocked. SDK runtime is unchanged.
|
|
50
|
+
- Preserve signed JSON wire number tokens through HTTP/cache round trips and
|
|
51
|
+
escape U+2028/U+2029; strict duplicate/UTF-8/base64url/depth/size checks.
|
|
52
|
+
- Gate feature helpers on a verified valid current result, including expiry,
|
|
53
|
+
signed grace, binding and clock failures; no enabling failure defaults.
|
|
54
|
+
- Bound HTTPS requests and public-key GET retries; refuse redirects and
|
|
55
|
+
never retry uncertain activation/deactivation POSTs.
|
|
56
|
+
- Validate signed timestamps and key-derived IDs; pinned keys never rotate
|
|
57
|
+
silently. Safe upstream messages and repr without payload/credential values.
|
|
58
|
+
- Atomic private version-1 storage, bounded process/thread locks, no new identity
|
|
59
|
+
after corruption, and explicit keyring failure/fallback behavior.
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
|
|
63
|
+
- `kdpika_licensing` public package and an async adapter using the same core.
|
|
64
|
+
- Strict typing, py.typed, shared PHP-signed fixtures, regression/property tests,
|
|
65
|
+
ruff/mypy/pytest/tox tooling and a Phase 1 migration/security audit.
|
|
66
|
+
- Complete candidate README with 35 FAQ entries, source-generated API reference,
|
|
67
|
+
strict-build MkDocs guides, safe runnable Sandbox examples and example/doctest checks.
|
|
68
|
+
- Project security/contribution/conduct policies and version-derived artifact checks.
|
|
69
|
+
- SHA-pinned dedicated-repository CI templates (12 OS/Python combinations) and
|
|
70
|
+
OIDC TestPyPI/PyPI release routing; owner/repository/tag/license gates stay closed.
|
|
71
|
+
- Separate installed-base and dedicated-tooling advisory audits; require pytest
|
|
72
|
+
9.0.3+ after the initial tooling audit found the old temporary-directory advisory.
|
|
73
|
+
|
|
74
|
+
### Changed
|
|
75
|
+
|
|
76
|
+
- Owner-selected MIT License for this Python SDK and its documentation; no
|
|
77
|
+
grant to the separately hosted platform/backend or service access.
|
|
78
|
+
|
|
79
|
+
- Candidate distribution `kdpika-licensing`; `license_sdk` remains a deprecated
|
|
80
|
+
compatibility shim. Storage namespace, filenames and keyring service unchanged.
|
|
81
|
+
- Candidate Python support 3.11–3.14; local loopback HTTP needs explicit opt-in.
|
|
82
|
+
- Inconsistent pinned IDs are now configuration errors before any HTTP call.
|
|
83
|
+
- Require cryptography 50.0.2+ (below 51) after dependency auditing; upstream
|
|
84
|
+
no longer supplies Intel macOS or 32-bit Windows wheels. Native compatibility
|
|
85
|
+
beyond the executed arm64 macOS matrix remains unverified.
|
|
86
|
+
|
|
87
|
+
### Release verification
|
|
88
|
+
|
|
89
|
+
The owner approved publication and configured PyPI Trusted Publishing for
|
|
90
|
+
`kdpika/kdpika-licensing`, `release.yml`, environment `pypi`. Uploads remain
|
|
91
|
+
conditional on successful release checks and the protected environment review.
|
|
92
|
+
Native Qt, OS keyring and packaged-app acceptance are separate from core CI.
|
|
93
|
+
|
|
94
|
+
## 1.0.0 — observed current source, 2026-10-17
|
|
95
|
+
|
|
96
|
+
This is the version recorded in current package/project metadata (PHP uses the
|
|
97
|
+
existing versioned download label). It is not a reconstructed original release
|
|
98
|
+
date, a published registry release or an invented earlier-version history.
|
|
99
|
+
|
|
100
|
+
- Added complete source-install, lifecycle, storage/offline and known-limit
|
|
101
|
+
documentation, license-information notice and runnable example links.
|
|
102
|
+
- Preserved runtime implementation, public APIs, response handling and package
|
|
103
|
+
identity. Documentation changes do not silently fix known signing/cache gaps.
|
|
104
|
+
- PHP includes a new package-local standalone test entry; its legacy repository
|
|
105
|
+
test remains unchanged and still assumes the repository-root autoload layout.
|
|
106
|
+
|
|
107
|
+
Future entries must identify the exact version, verified changes, compatibility
|
|
108
|
+
impact and tests. API v1 and SDK package versions are independent.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Community conduct
|
|
2
|
+
|
|
3
|
+
Treat contributors and users respectfully. No harassment, discriminatory abuse,
|
|
4
|
+
threats, doxxing or publication of private customer/credential information.
|
|
5
|
+
Discuss code and evidence constructively; respect different experience levels.
|
|
6
|
+
|
|
7
|
+
Report conduct concerns privately to hi@kdpika.com. Maintainers may remove
|
|
8
|
+
harmful content or restrict participation proportionately and review context.
|
|
9
|
+
This project does not claim adoption of an external trademarked policy or a
|
|
10
|
+
response-time guarantee. Security vulnerabilities follow SECURITY.md instead.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
The public SDK repository is https://github.com/kdpika/kdpika-licensing.
|
|
4
|
+
It does not contain the separately hosted platform/backend. Contact
|
|
5
|
+
hi@kdpika.com if needed; report security issues privately using SECURITY.md.
|
|
6
|
+
|
|
7
|
+
From the SDK root in a private active virtualenv:
|
|
8
|
+
~~~bash
|
|
9
|
+
python -m pip install -e '.[dev,docs,test]'
|
|
10
|
+
ruff check src tests tools examples
|
|
11
|
+
ruff format --check src tests tools examples
|
|
12
|
+
mypy --strict src
|
|
13
|
+
python -m pytest --cov
|
|
14
|
+
tox -e py311,py312,py313,py314
|
|
15
|
+
mkdocs build --strict
|
|
16
|
+
python -m build
|
|
17
|
+
python -m twine check dist/*
|
|
18
|
+
python tools/verify_artifacts.py
|
|
19
|
+
python tools/audit_dependencies.py
|
|
20
|
+
python tools/audit_dependencies.py --tooling
|
|
21
|
+
~~~
|
|
22
|
+
|
|
23
|
+
Use synthetic fixtures and ephemeral test keys only. Default tests cannot open
|
|
24
|
+
sockets; optional live Sandbox tests need explicit opt-in. Preserve API-v1
|
|
25
|
+
shapes/signing/state semantics, add regressions and document compatibility
|
|
26
|
+
changes. Do not update hosted downloads or publish/tag/push without owner approval.
|
|
27
|
+
|
|
28
|
+
Local pre-commit hooks require Ruff on PATH; running pre-commit install is an
|
|
29
|
+
optional developer action, not performed automatically. Follow CODE_OF_CONDUCT.md.
|
|
30
|
+
Contributions must be compatible with the project's MIT License. Only submit
|
|
31
|
+
code and documentation you have permission to share; no separate CLA is imposed.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 KHALED AL HARAZI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
include LICENSE README.md CHANGELOG.md pyproject.toml setup.py tox.ini .pre-commit-config.yaml
|
|
2
|
+
include SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md mkdocs.yml release-config.json
|
|
3
|
+
include .gitattributes
|
|
4
|
+
recursive-include docs *.md
|
|
5
|
+
prune docs/internal
|
|
6
|
+
recursive-include examples *.py *.md
|
|
7
|
+
recursive-include tools *.py
|
|
8
|
+
recursive-include .github *.yml *.md
|
|
9
|
+
recursive-include src *.py py.typed
|
|
10
|
+
recursive-include tests *.py *.json
|
|
11
|
+
global-exclude .DS_Store *.pyc
|
|
12
|
+
prune tests/__pycache__
|