{"bomFormat":"CycloneDX","specVersion":"1.5","version":1,"serialNumber":"urn:uuid:ba8c06b4-f88f-4167-8e54-66f2fe32ee50","metadata":{"timestamp":"2026-04-19T14:13:44Z","tools":[{"vendor":"Ecosystems","name":"Ecosystems SBOM Generator"}],"component":{"type":"application","name":"talkpython/100daysofcode-with-python-course"}},"components":[{"type":"library","name":"pytest","version":"*","purl":"pkg:pypi/pytest","properties":[{"name":"filePath","value":"days/10-12-pytest/requirements.txt"}]},{"type":"library","name":"pytest-cov","version":"*","purl":"pkg:pypi/pytest-cov","properties":[{"name":"filePath","value":"days/10-12-pytest/requirements.txt"}]},{"type":"library","name":"requests","version":"*","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"days/25-27-error-handling/demo/movie_search_error_edition/requirements.txt"}]},{"type":"library","name":"requests","version":"*","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"days/25-27-error-handling/demo/starter_movie_search_error_edition/requirements.txt"}]},{"type":"library","name":"requests","version":"*","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"days/31-33-logging/demo/movie_search_logging_edition/requirements.txt"}]},{"type":"library","name":"logbook","version":"*","purl":"pkg:pypi/logbook","properties":[{"name":"filePath","value":"days/31-33-logging/demo/movie_search_logging_edition/requirements.txt"}]},{"type":"library","name":"requests","version":"*","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"days/31-33-logging/demo/starter_movie_search/requirements.txt"}]},{"type":"library","name":"requests","version":"*","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"days/43-45-search-api/demo/movie_search/requirements.txt"}]},{"type":"library","name":"requests","version":"*","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"days/55-57-uplink/demo/requirements.txt"}]},{"type":"library","name":"uplink","version":"==0.9.4","purl":"pkg:pypi/uplink","properties":[{"name":"filePath","value":"days/55-57-uplink/demo/requirements.txt"}]},{"type":"library","name":"sqlalchemy","version":"*","purl":"pkg:pypi/sqlalchemy","properties":[{"name":"filePath","value":"days/91-93-sqlalchemy/demo/persistent_rps/requirements.txt"}]},{"type":"library","name":"requests","version":"*","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"days/94-96-guis/demos/final_search_app/requirements.txt"}]},{"type":"library","name":"gooey","version":"*","purl":"pkg:pypi/gooey","properties":[{"name":"filePath","value":"days/94-96-guis/demos/final_search_app/requirements.txt"}]},{"type":"library","name":"requests","version":"*","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"days/94-96-guis/demos/starter_search_app/requirements.txt"}]},{"type":"library","name":"uplink","version":"*","purl":"pkg:pypi/uplink","properties":[{"name":"filePath","value":"days/97-99-online-game-api/demo_app/client/requirements.txt"}]},{"type":"library","name":"flask","version":"*","purl":"pkg:pypi/flask","properties":[{"name":"filePath","value":"days/97-99-online-game-api/demo_app/web/requirements.txt"}]},{"type":"library","name":"sqlalchemy","version":"*","purl":"pkg:pypi/sqlalchemy","properties":[{"name":"filePath","value":"days/97-99-online-game-api/demo_app/web/requirements.txt"}]},{"type":"library","name":"jupyter","version":"*","purl":"pkg:pypi/jupyter","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"ipykernel","version":"*","purl":"pkg:pypi/ipykernel","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"requests","version":"*","purl":"pkg:pypi/requests","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"matplotlib","version":"*","purl":"pkg:pypi/matplotlib","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"numpy","version":"*","purl":"pkg:pypi/numpy","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"Pillow","version":"*","purl":"pkg:pypi/Pillow","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"tweepy","version":"*","purl":"pkg:pypi/tweepy","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"wordcloud","version":"*","purl":"pkg:pypi/wordcloud","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"PyGithub","version":"*","purl":"pkg:pypi/PyGithub","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"selenium","version":"*","purl":"pkg:pypi/selenium","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"feedparser","version":"*","purl":"pkg:pypi/feedparser","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"plotly","version":"*","purl":"pkg:pypi/plotly","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"pytest","version":"*","purl":"pkg:pypi/pytest","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]},{"type":"library","name":"pytest-cov","version":"*","purl":"pkg:pypi/pytest-cov","properties":[{"name":"filePath","value":"requirements/bob-requirements.txt"}]}]}