From 0a6baac8ae894b17c011dfcf34fbe0a45099e3ec Mon Sep 17 00:00:00 2001 From: Michael Kennedy Date: Tue, 21 Oct 2025 07:56:35 -0700 Subject: [PATCH 1/2] Updated all of the dependencies so the app runs successfully on Python 3.14+. --- .../requirements.piptools | 1 + .../requirements.txt | 20 +++++++++------- .../requirements.piptools | 1 + .../requirements.txt | 20 +++++++++------- .../requirements.piptools | 1 + .../requirements.txt | 22 ++++++++++------- .../requirements.piptools | 1 + .../requirements.txt | 20 +++++++++------- .../requirements.piptools | 1 + .../requirements.txt | 22 ++++++++++------- .../requirements.piptools | 1 + .../requirements.txt | 22 ++++++++++------- .../requirements.piptools | 1 + .../requirements.txt | 22 ++++++++++------- .../requirements.piptools | 1 + .../requirements.txt | 22 ++++++++++------- .../requirements.piptools | 1 + code/starter_video_collector/requirements.txt | 20 +++++++++------- requirements.piptools | 1 + requirements.txt | 24 ++++++++++++------- 20 files changed, 138 insertions(+), 86 deletions(-) diff --git a/code/ch4_app/ch4_final_video_collector/requirements.piptools b/code/ch4_app/ch4_final_video_collector/requirements.piptools index f2e5eba..4c255cb 100644 --- a/code/ch4_app/ch4_final_video_collector/requirements.piptools +++ b/code/ch4_app/ch4_final_video_collector/requirements.piptools @@ -4,3 +4,4 @@ pydantic more_itertools MarkupSafe Jinja2 +uvloop # Use only for production, comment out on Windows, consider winloop if needed. diff --git a/code/ch4_app/ch4_final_video_collector/requirements.txt b/code/ch4_app/ch4_final_video_collector/requirements.txt index 556ab29..83d3eb2 100644 --- a/code/ch4_app/ch4_final_video_collector/requirements.txt +++ b/code/ch4_app/ch4_final_video_collector/requirements.txt @@ -4,31 +4,35 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.1.7 +click==8.3.0 # via flask -flask==3.1.0 +flask==3.1.2 # via -r requirements.piptools itsdangerous==2.2.0 # via flask -jinja2==3.1.4 +jinja2==3.1.6 # via # -r requirements.piptools # flask -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements.piptools + # flask # jinja2 # werkzeug -more-itertools==10.5.0 +more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.10.2 +pydantic==2.12.3 # via -r requirements.piptools -pydantic-core==2.27.1 +pydantic-core==2.41.4 # via pydantic -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic werkzeug==3.1.3 # via # -r requirements.piptools diff --git a/code/ch4_app/ch4_starter_video_collector/requirements.piptools b/code/ch4_app/ch4_starter_video_collector/requirements.piptools index f2e5eba..4c255cb 100644 --- a/code/ch4_app/ch4_starter_video_collector/requirements.piptools +++ b/code/ch4_app/ch4_starter_video_collector/requirements.piptools @@ -4,3 +4,4 @@ pydantic more_itertools MarkupSafe Jinja2 +uvloop # Use only for production, comment out on Windows, consider winloop if needed. diff --git a/code/ch4_app/ch4_starter_video_collector/requirements.txt b/code/ch4_app/ch4_starter_video_collector/requirements.txt index 556ab29..83d3eb2 100644 --- a/code/ch4_app/ch4_starter_video_collector/requirements.txt +++ b/code/ch4_app/ch4_starter_video_collector/requirements.txt @@ -4,31 +4,35 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.1.7 +click==8.3.0 # via flask -flask==3.1.0 +flask==3.1.2 # via -r requirements.piptools itsdangerous==2.2.0 # via flask -jinja2==3.1.4 +jinja2==3.1.6 # via # -r requirements.piptools # flask -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements.piptools + # flask # jinja2 # werkzeug -more-itertools==10.5.0 +more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.10.2 +pydantic==2.12.3 # via -r requirements.piptools -pydantic-core==2.27.1 +pydantic-core==2.41.4 # via pydantic -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic werkzeug==3.1.3 # via # -r requirements.piptools diff --git a/code/ch5_partials/ch5_final_video_collector/requirements.piptools b/code/ch5_partials/ch5_final_video_collector/requirements.piptools index 6ec68a8..051aabe 100644 --- a/code/ch5_partials/ch5_final_video_collector/requirements.piptools +++ b/code/ch5_partials/ch5_final_video_collector/requirements.piptools @@ -5,3 +5,4 @@ more_itertools MarkupSafe Jinja2 jinja-partials +uvloop # Use only for production, comment out on Windows, consider winloop if needed. diff --git a/code/ch5_partials/ch5_final_video_collector/requirements.txt b/code/ch5_partials/ch5_final_video_collector/requirements.txt index 0995500..1053782 100644 --- a/code/ch5_partials/ch5_final_video_collector/requirements.txt +++ b/code/ch5_partials/ch5_final_video_collector/requirements.txt @@ -4,34 +4,38 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.1.7 +click==8.3.0 # via flask -flask==3.1.0 +flask==3.1.2 # via -r requirements.piptools itsdangerous==2.2.0 # via flask -jinja-partials==0.2.1 +jinja-partials==0.3.0 # via -r requirements.piptools -jinja2==3.1.4 +jinja2==3.1.6 # via # -r requirements.piptools # flask # jinja-partials -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements.piptools + # flask # jinja2 # werkzeug -more-itertools==10.5.0 +more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.10.2 +pydantic==2.12.3 # via -r requirements.piptools -pydantic-core==2.27.1 +pydantic-core==2.41.4 # via pydantic -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic werkzeug==3.1.3 # via # -r requirements.piptools diff --git a/code/ch5_partials/ch5_starter_video_collector/requirements.piptools b/code/ch5_partials/ch5_starter_video_collector/requirements.piptools index f2e5eba..4c255cb 100644 --- a/code/ch5_partials/ch5_starter_video_collector/requirements.piptools +++ b/code/ch5_partials/ch5_starter_video_collector/requirements.piptools @@ -4,3 +4,4 @@ pydantic more_itertools MarkupSafe Jinja2 +uvloop # Use only for production, comment out on Windows, consider winloop if needed. diff --git a/code/ch5_partials/ch5_starter_video_collector/requirements.txt b/code/ch5_partials/ch5_starter_video_collector/requirements.txt index 556ab29..83d3eb2 100644 --- a/code/ch5_partials/ch5_starter_video_collector/requirements.txt +++ b/code/ch5_partials/ch5_starter_video_collector/requirements.txt @@ -4,31 +4,35 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.1.7 +click==8.3.0 # via flask -flask==3.1.0 +flask==3.1.2 # via -r requirements.piptools itsdangerous==2.2.0 # via flask -jinja2==3.1.4 +jinja2==3.1.6 # via # -r requirements.piptools # flask -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements.piptools + # flask # jinja2 # werkzeug -more-itertools==10.5.0 +more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.10.2 +pydantic==2.12.3 # via -r requirements.piptools -pydantic-core==2.27.1 +pydantic-core==2.41.4 # via pydantic -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic werkzeug==3.1.3 # via # -r requirements.piptools diff --git a/code/ch6_active_search/ch6_final_video_collector/requirements.piptools b/code/ch6_active_search/ch6_final_video_collector/requirements.piptools index 6ec68a8..051aabe 100644 --- a/code/ch6_active_search/ch6_final_video_collector/requirements.piptools +++ b/code/ch6_active_search/ch6_final_video_collector/requirements.piptools @@ -5,3 +5,4 @@ more_itertools MarkupSafe Jinja2 jinja-partials +uvloop # Use only for production, comment out on Windows, consider winloop if needed. diff --git a/code/ch6_active_search/ch6_final_video_collector/requirements.txt b/code/ch6_active_search/ch6_final_video_collector/requirements.txt index 0995500..1053782 100644 --- a/code/ch6_active_search/ch6_final_video_collector/requirements.txt +++ b/code/ch6_active_search/ch6_final_video_collector/requirements.txt @@ -4,34 +4,38 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.1.7 +click==8.3.0 # via flask -flask==3.1.0 +flask==3.1.2 # via -r requirements.piptools itsdangerous==2.2.0 # via flask -jinja-partials==0.2.1 +jinja-partials==0.3.0 # via -r requirements.piptools -jinja2==3.1.4 +jinja2==3.1.6 # via # -r requirements.piptools # flask # jinja-partials -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements.piptools + # flask # jinja2 # werkzeug -more-itertools==10.5.0 +more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.10.2 +pydantic==2.12.3 # via -r requirements.piptools -pydantic-core==2.27.1 +pydantic-core==2.41.4 # via pydantic -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic werkzeug==3.1.3 # via # -r requirements.piptools diff --git a/code/ch6_active_search/ch6_starter_video_collector/requirements.piptools b/code/ch6_active_search/ch6_starter_video_collector/requirements.piptools index 6ec68a8..051aabe 100644 --- a/code/ch6_active_search/ch6_starter_video_collector/requirements.piptools +++ b/code/ch6_active_search/ch6_starter_video_collector/requirements.piptools @@ -5,3 +5,4 @@ more_itertools MarkupSafe Jinja2 jinja-partials +uvloop # Use only for production, comment out on Windows, consider winloop if needed. diff --git a/code/ch6_active_search/ch6_starter_video_collector/requirements.txt b/code/ch6_active_search/ch6_starter_video_collector/requirements.txt index 0995500..1053782 100644 --- a/code/ch6_active_search/ch6_starter_video_collector/requirements.txt +++ b/code/ch6_active_search/ch6_starter_video_collector/requirements.txt @@ -4,34 +4,38 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.1.7 +click==8.3.0 # via flask -flask==3.1.0 +flask==3.1.2 # via -r requirements.piptools itsdangerous==2.2.0 # via flask -jinja-partials==0.2.1 +jinja-partials==0.3.0 # via -r requirements.piptools -jinja2==3.1.4 +jinja2==3.1.6 # via # -r requirements.piptools # flask # jinja-partials -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements.piptools + # flask # jinja2 # werkzeug -more-itertools==10.5.0 +more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.10.2 +pydantic==2.12.3 # via -r requirements.piptools -pydantic-core==2.27.1 +pydantic-core==2.41.4 # via pydantic -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic werkzeug==3.1.3 # via # -r requirements.piptools diff --git a/code/ch7_infinite_scroll/ch7_final_video_collector/requirements.piptools b/code/ch7_infinite_scroll/ch7_final_video_collector/requirements.piptools index 6ec68a8..051aabe 100644 --- a/code/ch7_infinite_scroll/ch7_final_video_collector/requirements.piptools +++ b/code/ch7_infinite_scroll/ch7_final_video_collector/requirements.piptools @@ -5,3 +5,4 @@ more_itertools MarkupSafe Jinja2 jinja-partials +uvloop # Use only for production, comment out on Windows, consider winloop if needed. diff --git a/code/ch7_infinite_scroll/ch7_final_video_collector/requirements.txt b/code/ch7_infinite_scroll/ch7_final_video_collector/requirements.txt index 0995500..1053782 100644 --- a/code/ch7_infinite_scroll/ch7_final_video_collector/requirements.txt +++ b/code/ch7_infinite_scroll/ch7_final_video_collector/requirements.txt @@ -4,34 +4,38 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.1.7 +click==8.3.0 # via flask -flask==3.1.0 +flask==3.1.2 # via -r requirements.piptools itsdangerous==2.2.0 # via flask -jinja-partials==0.2.1 +jinja-partials==0.3.0 # via -r requirements.piptools -jinja2==3.1.4 +jinja2==3.1.6 # via # -r requirements.piptools # flask # jinja-partials -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements.piptools + # flask # jinja2 # werkzeug -more-itertools==10.5.0 +more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.10.2 +pydantic==2.12.3 # via -r requirements.piptools -pydantic-core==2.27.1 +pydantic-core==2.41.4 # via pydantic -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic werkzeug==3.1.3 # via # -r requirements.piptools diff --git a/code/ch7_infinite_scroll/ch7_starter_video_collector/requirements.piptools b/code/ch7_infinite_scroll/ch7_starter_video_collector/requirements.piptools index 6ec68a8..051aabe 100644 --- a/code/ch7_infinite_scroll/ch7_starter_video_collector/requirements.piptools +++ b/code/ch7_infinite_scroll/ch7_starter_video_collector/requirements.piptools @@ -5,3 +5,4 @@ more_itertools MarkupSafe Jinja2 jinja-partials +uvloop # Use only for production, comment out on Windows, consider winloop if needed. diff --git a/code/ch7_infinite_scroll/ch7_starter_video_collector/requirements.txt b/code/ch7_infinite_scroll/ch7_starter_video_collector/requirements.txt index 0995500..1053782 100644 --- a/code/ch7_infinite_scroll/ch7_starter_video_collector/requirements.txt +++ b/code/ch7_infinite_scroll/ch7_starter_video_collector/requirements.txt @@ -4,34 +4,38 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.1.7 +click==8.3.0 # via flask -flask==3.1.0 +flask==3.1.2 # via -r requirements.piptools itsdangerous==2.2.0 # via flask -jinja-partials==0.2.1 +jinja-partials==0.3.0 # via -r requirements.piptools -jinja2==3.1.4 +jinja2==3.1.6 # via # -r requirements.piptools # flask # jinja-partials -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements.piptools + # flask # jinja2 # werkzeug -more-itertools==10.5.0 +more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.10.2 +pydantic==2.12.3 # via -r requirements.piptools -pydantic-core==2.27.1 +pydantic-core==2.41.4 # via pydantic -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic werkzeug==3.1.3 # via # -r requirements.piptools diff --git a/code/starter_video_collector/requirements.piptools b/code/starter_video_collector/requirements.piptools index f2e5eba..4c255cb 100644 --- a/code/starter_video_collector/requirements.piptools +++ b/code/starter_video_collector/requirements.piptools @@ -4,3 +4,4 @@ pydantic more_itertools MarkupSafe Jinja2 +uvloop # Use only for production, comment out on Windows, consider winloop if needed. diff --git a/code/starter_video_collector/requirements.txt b/code/starter_video_collector/requirements.txt index 556ab29..83d3eb2 100644 --- a/code/starter_video_collector/requirements.txt +++ b/code/starter_video_collector/requirements.txt @@ -4,31 +4,35 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.1.7 +click==8.3.0 # via flask -flask==3.1.0 +flask==3.1.2 # via -r requirements.piptools itsdangerous==2.2.0 # via flask -jinja2==3.1.4 +jinja2==3.1.6 # via # -r requirements.piptools # flask -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements.piptools + # flask # jinja2 # werkzeug -more-itertools==10.5.0 +more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.10.2 +pydantic==2.12.3 # via -r requirements.piptools -pydantic-core==2.27.1 +pydantic-core==2.41.4 # via pydantic -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic werkzeug==3.1.3 # via # -r requirements.piptools diff --git a/requirements.piptools b/requirements.piptools index 6ec68a8..051aabe 100644 --- a/requirements.piptools +++ b/requirements.piptools @@ -5,3 +5,4 @@ more_itertools MarkupSafe Jinja2 jinja-partials +uvloop # Use only for production, comment out on Windows, consider winloop if needed. diff --git a/requirements.txt b/requirements.txt index 672ed8b..87b2e1b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,34 +4,40 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.1.7 +click==8.3.0 # via flask -flask==3.1.0 +flask==3.1.2 # via -r requirements.piptools itsdangerous==2.2.0 # via flask -jinja-partials==0.2.1 +jinja-partials==0.3.0 # via -r requirements.piptools -jinja2==3.1.4 +jinja2==3.1.6 # via # -r requirements.piptools # flask # jinja-partials -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements.piptools + # flask # jinja2 # werkzeug -more-itertools==10.5.0 +more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.10.3 +pydantic==2.12.3 # via -r requirements.piptools -pydantic-core==2.27.1 +pydantic-core==2.41.4 # via pydantic -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic +uvloop==0.22.1 + # via -r requirements.piptools werkzeug==3.1.3 # via # -r requirements.piptools From cd0dc74b5915de207e15b0bfe715fc06f70f8da1 Mon Sep 17 00:00:00 2001 From: Michael Kennedy Date: Tue, 9 Dec 2025 15:49:53 -0800 Subject: [PATCH 2/2] Update dependencies and add a ruff config. --- requirements.txt | 8 ++++---- ruff.toml | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 ruff.toml diff --git a/requirements.txt b/requirements.txt index 87b2e1b..cc056d7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ annotated-types==0.7.0 # via pydantic blinker==1.9.0 # via flask -click==8.3.0 +click==8.3.1 # via flask flask==3.1.2 # via -r requirements.piptools @@ -25,9 +25,9 @@ markupsafe==3.0.3 # werkzeug more-itertools==10.8.0 # via -r requirements.piptools -pydantic==2.12.3 +pydantic==2.12.5 # via -r requirements.piptools -pydantic-core==2.41.4 +pydantic-core==2.41.5 # via pydantic typing-extensions==4.15.0 # via @@ -38,7 +38,7 @@ typing-inspection==0.4.2 # via pydantic uvloop==0.22.1 # via -r requirements.piptools -werkzeug==3.1.3 +werkzeug==3.1.4 # via # -r requirements.piptools # flask diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 0000000..8c1e8a7 --- /dev/null +++ b/ruff.toml @@ -0,0 +1,43 @@ +# [ruff] +line-length = 120 +format.quote-style = "single" + +# Enable Pyflakes `E` and `F` codes by default. +lint.select = ["E", "F", "I"] +lint.ignore = [] + +# Exclude a variety of commonly ignored directories. +exclude = [ + ".bzr", + ".direnv", + ".eggs", + ".git", + ".hg", + ".mypy_cache", + ".nox", + ".pants.d", + ".ruff_cache", + ".svn", + ".tox", + "__pypackages__", + "_build", + "buck-out", + "build", + "dist", + "node_modules", + ".env", + ".venv", + "venv", + "typings/**/*.pyi", +] +lint.per-file-ignores = { } + +# Allow unused variables when underscore-prefixed. +# dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + +# Assume Python 3.13. +target-version = "py313" + +#[tool.ruff.mccabe] +## Unlike Flake8, default to a complexity level of 10. +lint.mccabe.max-complexity = 10