{"bomFormat":"CycloneDX","specVersion":"1.5","version":1,"serialNumber":"urn:uuid:84330bdb-0518-438c-92d3-a7a3b1a4fc2d","metadata":{"timestamp":"2026-06-20T00:05:33Z","tools":[{"vendor":"Ecosystems","name":"Ecosystems SBOM Generator"}],"component":{"type":"application","name":"EuroPython/programapi"}},"components":[{"type":"library","name":"actions/checkout","version":"v4","purl":"pkg:githubactions/actions/checkout","properties":[{"name":"filePath","value":".github/workflows/tests.yaml"}]},{"type":"library","name":"actions/setup-python","version":"v5","purl":"pkg:githubactions/actions/setup-python","properties":[{"name":"filePath","value":".github/workflows/tests.yaml"}]},{"type":"library","name":"python","version":"3.12","purl":"pkg:docker/python","properties":[{"name":"filePath","value":"Dockerfile"}]},{"type":"library","name":"ansible","version":"*","purl":"pkg:pypi/ansible","properties":[{"name":"filePath","value":"deploy/requirements.in"}]},{"type":"library","name":"ansible","version":"==9.5.1","purl":"pkg:pypi/ansible","properties":[{"name":"filePath","value":"deploy/requirements.txt"}]},{"type":"library","name":"ansible-core","version":"==2.16.6","purl":"pkg:pypi/ansible-core","properties":[{"name":"filePath","value":"deploy/requirements.txt"}]},{"type":"library","name":"cffi","version":"==1.16.0","purl":"pkg:pypi/cffi","properties":[{"name":"filePath","value":"deploy/requirements.txt"}]},{"type":"library","name":"cryptography","version":"==42.0.7","purl":"pkg:pypi/cryptography","properties":[{"name":"filePath","value":"deploy/requirements.txt"}]},{"type":"library","name":"jinja2","version":"==3.1.4","purl":"pkg:pypi/jinja2","properties":[{"name":"filePath","value":"deploy/requirements.txt"}]},{"type":"library","name":"markupsafe","version":"==2.1.5","purl":"pkg:pypi/markupsafe","properties":[{"name":"filePath","value":"deploy/requirements.txt"}]},{"type":"library","name":"packaging","version":"==24.0","purl":"pkg:pypi/packaging","properties":[{"name":"filePath","value":"deploy/requirements.txt"}]},{"type":"library","name":"pycparser","version":"==2.22","purl":"pkg:pypi/pycparser","properties":[{"name":"filePath","value":"deploy/requirements.txt"}]},{"type":"library","name":"pyyaml","version":"==6.0.1","purl":"pkg:pypi/pyyaml","properties":[{"name":"filePath","value":"deploy/requirements.txt"}]},{"type":"library","name":"resolvelib","version":"==1.0.1","purl":"pkg:pypi/resolvelib","properties":[{"name":"filePath","value":"deploy/requirements.txt"}]},{"type":"library","name":"pdbpp","version":"*","purl":"pkg:pypi/pdbpp","properties":[{"name":"filePath","value":"requirements.in"}]},{"type":"library","name":"pytest","version":"*","purl":"pkg:pypi/pytest","properties":[{"name":"filePath","value":"requirements.in"}]},{"type":"library","name":"pre-commit","version":"*","purl":"pkg:pypi/pre-commit","properties":[{"name":"filePath","value":"requirements.in"}]},{"type":"library","name":"requests","version":"*","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"requirements.in"}]},{"type":"library","name":"pydantic","version":"*","purl":"pkg:pypi/pydantic","properties":[{"name":"filePath","value":"requirements.in"}]},{"type":"library","name":"python-slugify","version":"*","purl":"pkg:pypi/python-slugify","properties":[{"name":"filePath","value":"requirements.in"}]},{"type":"library","name":"tqdm","version":"*","purl":"pkg:pypi/tqdm","properties":[{"name":"filePath","value":"requirements.in"}]},{"type":"library","name":"annotated-types","version":"==0.6.0","purl":"pkg:pypi/annotated-types","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"attrs","version":"==23.2.0","purl":"pkg:pypi/attrs","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"certifi","version":"==2024.2.2","purl":"pkg:pypi/certifi","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"cfgv","version":"==3.4.0","purl":"pkg:pypi/cfgv","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"charset-normalizer","version":"==3.3.2","purl":"pkg:pypi/charset-normalizer","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"distlib","version":"==0.3.8","purl":"pkg:pypi/distlib","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"fancycompleter","version":"==0.9.1","purl":"pkg:pypi/fancycompleter","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"filelock","version":"==3.14.0","purl":"pkg:pypi/filelock","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"identify","version":"==2.5.36","purl":"pkg:pypi/identify","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"idna","version":"==3.7","purl":"pkg:pypi/idna","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"iniconfig","version":"==2.0.0","purl":"pkg:pypi/iniconfig","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"nodeenv","version":"==1.8.0","purl":"pkg:pypi/nodeenv","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"packaging","version":"==24.0","purl":"pkg:pypi/packaging","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"pdbpp","version":"==0.10.3","purl":"pkg:pypi/pdbpp","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"platformdirs","version":"==4.2.2","purl":"pkg:pypi/platformdirs","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"pluggy","version":"==1.5.0","purl":"pkg:pypi/pluggy","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"pre-commit","version":"==3.7.1","purl":"pkg:pypi/pre-commit","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"pydantic","version":"==2.7.1","purl":"pkg:pypi/pydantic","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"pydantic-core","version":"==2.18.2","purl":"pkg:pypi/pydantic-core","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"pygments","version":"==2.18.0","purl":"pkg:pypi/pygments","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"pyrepl","version":"==0.9.0","purl":"pkg:pypi/pyrepl","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"pytest","version":"==8.2.1","purl":"pkg:pypi/pytest","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"python-slugify","version":"==8.0.4","purl":"pkg:pypi/python-slugify","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"pyyaml","version":"==6.0.1","purl":"pkg:pypi/pyyaml","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"requests","version":"==2.31.0","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"text-unidecode","version":"==1.3","purl":"pkg:pypi/text-unidecode","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"tqdm","version":"==4.66.4","purl":"pkg:pypi/tqdm","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"typing-extensions","version":"==4.11.0","purl":"pkg:pypi/typing-extensions","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"urllib3","version":"==2.2.1","purl":"pkg:pypi/urllib3","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"virtualenv","version":"==20.26.2","purl":"pkg:pypi/virtualenv","properties":[{"name":"filePath","value":"requirements.txt"}]},{"type":"library","name":"wmctrl","version":"==0.5","purl":"pkg:pypi/wmctrl","properties":[{"name":"filePath","value":"requirements.txt"}]}]}