{"bomFormat":"CycloneDX","specVersion":"1.5","version":1,"serialNumber":"urn:uuid:8e7ab331-c00f-4ae6-bd88-464e49398b32","metadata":{"timestamp":"2026-10-04T15:30:11Z","tools":[{"vendor":"Ecosystems","name":"Ecosystems SBOM Generator"}],"component":{"type":"application","name":"talkpython/python-for-dotnet-developers-course"}},"components":[{"type":"library","name":"Newtonsoft.Json","version":"13.0.3","purl":"pkg:nuget/Newtonsoft.Json","properties":[{"name":"filePath","value":"apps/net/Ch3_Lang/Ch3_Lang.csproj"}]},{"type":"library","name":"HtmlAgilityPack.NetCore","version":"1.5.0.1","purl":"pkg:nuget/HtmlAgilityPack.NetCore","properties":[{"name":"filePath","value":"apps/net/Ch5_nuget/Ch5_nuget.csproj"}]},{"type":"library","name":"Microsoft.EntityFrameworkCore","version":"8.0.3","purl":"pkg:nuget/Microsoft.EntityFrameworkCore","properties":[{"name":"filePath","value":"apps/net/Ch7_Db/Ch7_Db.csproj"}]},{"type":"library","name":"Microsoft.EntityFrameworkCore.SqlServer","version":"8.0.3","purl":"pkg:nuget/Microsoft.EntityFrameworkCore.SqlServer","properties":[{"name":"filePath","value":"apps/net/Ch7_Db/Ch7_Db.csproj"}]},{"type":"library","name":"Microsoft.NET.Test.Sdk","version":"17.9.0","purl":"pkg:nuget/Microsoft.NET.Test.Sdk","properties":[{"name":"filePath","value":"apps/net/Ch8_Testing/Ch8_Testing.csproj"}]},{"type":"library","name":"MSTest.TestAdapter","version":"3.2.2","purl":"pkg:nuget/MSTest.TestAdapter","properties":[{"name":"filePath","value":"apps/net/Ch8_Testing/Ch8_Testing.csproj"}]},{"type":"library","name":"MSTest.TestFramework","version":"3.2.2","purl":"pkg:nuget/MSTest.TestFramework","properties":[{"name":"filePath","value":"apps/net/Ch8_Testing/Ch8_Testing.csproj"}]},{"type":"library","name":"coverlet.collector","version":"6.0.2","purl":"pkg:nuget/coverlet.collector","properties":[{"name":"filePath","value":"apps/net/Ch8_Testing/Ch8_Testing.csproj"}]},{"type":"library","name":"Moq","version":"4.20.70","purl":"pkg:nuget/Moq","properties":[{"name":"filePath","value":"apps/net/Ch8_Testing/Ch8_Testing.csproj"}]},{"type":"library","name":"HtmlAgilityPack","version":"1.11.60","purl":"pkg:nuget/HtmlAgilityPack","properties":[{"name":"filePath","value":"apps/net/Ch9_Async/Ch9_Async.csproj"}]},{"type":"library","name":"anyio","version":"==4.1.0","purl":"pkg:pypi/anyio","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"beautifulsoup4","version":"==4.12.2","purl":"pkg:pypi/beautifulsoup4","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"blinker","version":"==1.7.0","purl":"pkg:pypi/blinker","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"bs4","version":"==0.0.1","purl":"pkg:pypi/bs4","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"certifi","version":"==2023.11.17","purl":"pkg:pypi/certifi","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"charset-normalizer","version":"==3.3.2","purl":"pkg:pypi/charset-normalizer","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"click","version":"==8.1.7","purl":"pkg:pypi/click","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"colorama","version":"==0.4.6","purl":"pkg:pypi/colorama","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"contourpy","version":"==1.2.0","purl":"pkg:pypi/contourpy","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"cycler","version":"==0.12.1","purl":"pkg:pypi/cycler","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"flask","version":"==3.0.0","purl":"pkg:pypi/flask","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"fonttools","version":"==4.46.0","purl":"pkg:pypi/fonttools","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"h11","version":"==0.14.0","purl":"pkg:pypi/h11","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"httpcore","version":"==1.0.2","purl":"pkg:pypi/httpcore","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"httpx","version":"==0.25.2","purl":"pkg:pypi/httpx","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"idna","version":"==3.6","purl":"pkg:pypi/idna","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"iniconfig","version":"==2.0.0","purl":"pkg:pypi/iniconfig","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"itsdangerous","version":"==2.1.2","purl":"pkg:pypi/itsdangerous","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"jinja2","version":"==3.1.2","purl":"pkg:pypi/jinja2","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"kiwisolver","version":"==1.4.5","purl":"pkg:pypi/kiwisolver","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"markdown-it-py","version":"==3.0.0","purl":"pkg:pypi/markdown-it-py","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"markupsafe","version":"==2.1.3","purl":"pkg:pypi/markupsafe","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"matplotlib","version":"==3.8.2","purl":"pkg:pypi/matplotlib","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"mdurl","version":"==0.1.2","purl":"pkg:pypi/mdurl","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"numpy","version":"==1.26.2","purl":"pkg:pypi/numpy","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"packaging","version":"==23.2","purl":"pkg:pypi/packaging","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"pillow","version":"==10.1.0","purl":"pkg:pypi/pillow","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"pluggy","version":"==1.3.0","purl":"pkg:pypi/pluggy","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"pprintpp","version":"==0.4.0","purl":"pkg:pypi/pprintpp","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"pygments","version":"==2.17.2","purl":"pkg:pypi/pygments","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"pyparsing","version":"==3.1.1","purl":"pkg:pypi/pyparsing","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"pytest","version":"==7.4.3","purl":"pkg:pypi/pytest","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"pytest-clarity","version":"==1.0.1","purl":"pkg:pypi/pytest-clarity","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"pytest-mock","version":"==3.12.0","purl":"pkg:pypi/pytest-mock","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"python-dateutil","version":"==2.8.2","purl":"pkg:pypi/python-dateutil","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"requests","version":"==2.31.0","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"rich","version":"==13.7.0","purl":"pkg:pypi/rich","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"scipy","version":"==1.11.4","purl":"pkg:pypi/scipy","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"six","version":"==1.16.0","purl":"pkg:pypi/six","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"sniffio","version":"==1.3.0","purl":"pkg:pypi/sniffio","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"soupsieve","version":"==2.5","purl":"pkg:pypi/soupsieve","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"sqlalchemy","version":"==2.0.23","purl":"pkg:pypi/sqlalchemy","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"typing-extensions","version":"==4.9.0","purl":"pkg:pypi/typing-extensions","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"unsync","version":"==1.4.0","purl":"pkg:pypi/unsync","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"urllib3","version":"==2.1.0","purl":"pkg:pypi/urllib3","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]},{"type":"library","name":"werkzeug","version":"==3.0.1","purl":"pkg:pypi/werkzeug","properties":[{"name":"filePath","value":"apps/py/requirements.txt"}]}]}