pysdccc
This python packages provides a convenient way to execute the SDCcc test suite.
This wrapper is only compatible with SDCcc versions later than internal-baseline-001.
Installation
Download from pypi using pip install pysdccc. There is also an option to use this via the command line by installing pysdccc[cli].
Development
For this open source project the Contributor License Agreement governs all relevant activities and your contributions. By contributing to the project you agree to be bound by this Agreement and to licence your work accordingly.
- clone the repository
- install dependencies, e.g. with
uv sync --dev
Usage
Quick start
import pysdccc
async def main():
if not await pysdccc.is_downloaded('my-specific-version'):
await pysdccc.download('https://url/to/sdccc.zip')
runner = pysdccc.SdcccRunner('/path/to/sdccc/result/directory')
# https://github.com/Draegerwerk/SDCcc/?tab=readme-ov-file#exit-codes
return_code, direct_result, invariant_result = await runner.run(
config='/path/to/configuration/file.toml',
requirements='/path/to/requirements/file.toml',
)
if direct_result is None or invariant_result is None:
print('No result file available')
return
for test_case in direct_result + invariant_result:
print(f'{test_case.test_identifier}: {test_case.is_passed}')
If you look for a synchronous version. Please note this is deprecated. The async methods are the preferred way.
import pysdccc
def main():
if not pysdccc.is_downloaded_sync('my-specific-version').result():
pysdccc.download_sync('https://url/to/sdccc.zip').result()
runner = pysdccc.SdcccRunnerSync('/path/to/sdccc/result/directory')
# https://github.com/Draegerwerk/SDCcc/?tab=readme-ov-file#exit-codes
return_code, direct_result, invariant_result = runner.run(
config='/path/to/configuration/file.toml',
requirements='/path/to/requirements/file.toml',
).result(timeout=60) # use .result(timeout=...) to wait for the result in a synchronous way
# checkout example from above ...
Create configuration file
Configure the test consumer. Check the test consumer configuration for more information.
import anyio
import toml # has to be installed by the user
import pysdccc
async def main():
config = {
'SDCcc': {
... # add all relevant config parameter
}
}
config_path = anyio.Path('/path/to/configuration/file.toml')
await config_path.write_text(toml.dumps(config))
runner = pysdccc.SdcccRunner('/path/to/sdccc/result/directory')
await runner.run(config=config_path, requirements='/path/to/requirements/file.toml')
# or if you have already downloaded SDCcc
config = await runner.get_config() # load default configuration
config['SDCcc']['Consumer']['DeviceEpr'] = 'urn:uuid:12345678-1234-1234-1234-123456789012' # e.g. change device epr
# save and run as above
Create requirements file
Enable or disable specific requirements. Check the test requirements for more information.
import anyio
import toml # has to be installed by the user
import pysdccc
async def main():
requirements = {
# the standard name is the key, the requirement from the standard is the value
'BICEPS': {
... # add all requirements to be tested
}
}
requirements_path = anyio.Path('/path/to/requirement/file.toml')
await requirements_path.write_text(toml.dumps(requirements))
runner = pysdccc.SdcccRunner('/path/to/sdccc/result/directory')
# optionally, check whether you did not add a requirement that is not available
await runner.check_requirements(requirements_path)
await runner.run('/path/to/configuration/file.toml', requirements=requirements_path)
# or, if you have already downloaded SDCcc
requirements = await runner.get_requirements() # load default configuration
requirements['BICEPS']['R0033'] = False # e.g. disable biceps R0033
# save and run as above
Create test parameter configuration
Some tests require individual parameters. Check the test parameter configuration for more information.
import anyio
import toml # has to be installed by the user
import pysdccc
async def main():
testparameter_config = {'TestParameter': {...}}
testparameter_config_path = anyio.Path('/path/to/test_parameter/file.toml')
await testparameter_config_path.write_text(toml.dumps(testparameter_config))
runner = pysdccc.SdcccRunner('/path/to/sdccc/result/directory')
await runner.run(
config='/path/to/configuration/file.toml',
requirements='/path/to/requirements/file.toml',
testparam=testparameter_config_path,
)
# or, if you have already downloaded SDCcc
testparameter_config = await runner.get_test_parameter() # load default configuration
testparameter_config['TestParameter']['Biceps547TimeInterval'] = 10
# save and run as above
Logging
The SDCcc runner provides a logger called pysdccc.run that can be used to log messages during the execution of the tests. Stdout is mapped to logging level info and stderr to error.
Be aware that no further processing of the SDCcc process output is done. Depending on the format you use you may get duplicated timestamps, etc. Also, it might happen that a java error can stretch over multiple lines, which may result in multiple log messages in python for the same java error.
Execute SDCcc from command-line interface (cli)
There exists a cli wrapper for the SDCcc executable. If pysdccc[cli] is installed, sdccc can be used to execute arbitrary SDCcc commands, e.g. sdccc --version. More information can be found here.
Also, you can manually install and uninstall sdccc versions using the cli, e.g. uv run pysdccc install https://url/to/sdccc.zip or from a local path uv run pysdccc install path/to/sdccc.zip.
Notices
pysdccc is not intended for use in medical products, clinical trials, clinical studies, or in clinical routine.
ISO 9001
pysdccc was not developed according to ISO 9001.
License
Metadata
Release files for pysdccc 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pysdccc-1.2.0.tar.gz | 14.5 kB | With provenance | Details for pysdccc-1.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pysdccc-1.2.0-py3-none-any.whl | Python 3 | none | any | Details for pysdccc-1.2.0-py3-none-any.whl |
Total release size: 32.9 kB
Release files / pysdccc-1.2.0.tar.gz
| Download URL | pysdccc-1.2.0.tar.gz |
|---|---|
| Size | 14.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7d42d74d96d2166f998b94fdce430fd22dfcf2e3103aa34b29141dea1495bad8
|
|
BLAKE2b-256 checksum How to use checksums |
e52930c69508ccd9eea96de4dd156dc64db75ab0971ef24d237434d642aaa4b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency logRelease files / pysdccc-1.2.0-py3-none-any.whl
| Download URL | pysdccc-1.2.0-py3-none-any.whl |
|---|---|
| Size | 18.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bbe9c8d0a9e6610fa08af487e904da0ed819f0be6b3f929e09c696db73b831f1
|
|
BLAKE2b-256 checksum How to use checksums |
22625f0128329a48859997087ad02c69d0b1cc3bfef7ad10be1c781e3b981924
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency logSecurity for pysdccc 1.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for pysdccc-1.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.