The keygen-py
package allows Python programs to manage licenses using the keygen.sh service.
This is a wrapper around the Rust package keygen-rs to provide Python bindings.
Add this to your pyproject.toml
:
[dependencies]
keygen-py = "0.1.1"
Use KeygenConfig
to configure the SDK globally. Set this before making any API calls.
from keygen_sh.config import set_config, KeygenConfig
set_config(KeygenConfig(
api_url="https://api.keygen.sh",
api_prefix="v1",
api_version="v1.7",
account="YOUR_KEYGEN_ACCOUNT_ID",
product="YOUR_KEYGEN_PRODUCT_ID",
license_key="A_KEYGEN_LICENSE_KEY",
public_key="YOUR_KEYGEN_PUBLIC_KEY"
))
To validate a license, configure KeygenConfig
with your Keygen account details. Then call the validate
function with a device fingerprint.
(You can use py-machineid for this) or keep it empty depending on your policy:
import asyncio
from keygen_sh import validate
async def amain():
data = await validate(["YOUR_DEVICE_FINGERPRINT"], [])
# License
print(data.id, data.name, data.key, data.expiry)
if __name__ == '__main__':
asyncio.run(amain())
To verify a signed license key offline, use the following:
from keygen_sh import verify
from keygen_sh.license import SchemeCode
data = verify(SchemeCode.Ed25519Sign, "A_KEYGEN_LICENSE_KEY")
# data encoded
print(data)
Due to the nature of how errors are propagated from the Rust bindings to Python, currently error handling works like the following:
import asyncio
from keygen_sh import validate
from keygen_sh.errors import KeygenError, Error, LicenseKeyInvalid
async def amain():
try:
await validate(["YOUR_DEVICE_FINGERPRINT"], [])
except KeygenError as ex:
error = Error.from_error(ex)
if isinstance(error, LicenseKeyInvalid):
# handle a license key invalid error
print(f"error code: {error.code}")
if __name__ == '__main__':
asyncio.run(amain())
For more detailed examples, refer to the examples
directory in the repository.
When implementing a testing strategy for your licensing integration, we recommend mocking the Keygen API responses. This is especially important for CI/CD environments to prevent unnecessary load on Keygen's servers and to stay within your account's daily request limits.
This project is licensed under the MIT License.