Skip to main content

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.

  1. clone the repository
  2. 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

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pysdccc-1.2.0.tar.gz (14.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pysdccc-1.2.0-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file pysdccc-1.2.0.tar.gz.

File metadata

  • Download URL: pysdccc-1.2.0.tar.gz
  • Upload date:
  • Size: 14.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pysdccc-1.2.0.tar.gz
Algorithm Hash digest
SHA256 7d42d74d96d2166f998b94fdce430fd22dfcf2e3103aa34b29141dea1495bad8
MD5 61af10afd551afa111e12403b3d51b1e
BLAKE2b-256 e52930c69508ccd9eea96de4dd156dc64db75ab0971ef24d237434d642aaa4b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pysdccc-1.2.0.tar.gz:

Publisher: publish.yml on Draegerwerk/pysdccc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pysdccc-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: pysdccc-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pysdccc-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bbe9c8d0a9e6610fa08af487e904da0ed819f0be6b3f929e09c696db73b831f1
MD5 3ed2f85f7a1d29391cdfcec73df8dd3c
BLAKE2b-256 22625f0128329a48859997087ad02c69d0b1cc3bfef7ad10be1c781e3b981924

See more details on using hashes here.

Provenance

The following attestation bundles were made for pysdccc-1.2.0-py3-none-any.whl:

Publisher: publish.yml on Draegerwerk/pysdccc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 files

1.1.0

2 files

1.0.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page