From ed7c9b51f940307bfbec79e9cc4587e025e657c5 Mon Sep 17 00:00:00 2001 From: Bertrand Awenze <156874668+bertrand-awz@users.noreply.github.com> Date: Wed, 9 Jul 2025 08:25:18 -0400 Subject: [PATCH 1/5] Fix devcontainer build failure (#12837) * add post-installation script * set zsh as default terminal and make post-install execution on postcreate * rename file * rename script * Create devcontainers_ci.yml * Update devcontainer.json * Update devcontainers_ci.yml Never push image built here. It's for build testing purpose only. * postCreateCommand update to reflect that the shell script has been renamed. * update devcontainer readme file * trigger workflow only on devcontainer/** changes * prettier refactor --- .devcontainer/Dockerfile | 5 ++-- .devcontainer/README.md | 43 ++++++++++++++++++++++++++- .devcontainer/devcontainer.json | 7 +++-- .devcontainer/post_install | 29 ++++++++++++++++++ .github/workflows/devcontainer_ci.yml | 19 ++++++++++++ 5 files changed, 97 insertions(+), 6 deletions(-) create mode 100755 .devcontainer/post_install create mode 100644 .github/workflows/devcontainer_ci.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index a0bd05f47ec8..edee3bc4febb 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -3,6 +3,5 @@ ARG VARIANT=3.13-bookworm FROM mcr.microsoft.com/vscode/devcontainers/python:${VARIANT} COPY requirements.txt /tmp/pip-tmp/ RUN python3 -m pip install --upgrade pip \ - && python3 -m pip install --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \ - && pipx install pre-commit ruff \ - && pre-commit install + && python3 -m pip install --no-cache-dir -r /tmp/pip-tmp/requirements.txt \ + && pipx install pre-commit ruff diff --git a/.devcontainer/README.md b/.devcontainer/README.md index ec3cdb61de7a..8056578ad3a8 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -1 +1,42 @@ -https://code.visualstudio.com/docs/devcontainers/tutorial +# Development Container + +This is **Devcontainer** configuration to provide a consistent development environment for all contributors. + +## Features + +- [x] Pre-configured **Python environment** +- [x] Automatic installation of **pre-commit hooks** +- [x] **Ruff** linter ready to check your code +- [x] **Oh My Zsh** with plugins: +- `zsh-autosuggestions` +- `zsh-syntax-highlighting` + +## Usage + +1. Install [**Docker** ](https://www.docker.com/get-started/) and [**Visual Studio Code**](https://code.visualstudio.com/) +2. Install the **Remote - Containers** extension in VS Code + + - Do `CTRL+P`, paste this command and press `Enter` + + ```shell + ext install ms-vscode-remote.remote-containers + ``` +3. Open this repository in VS Code +4. When prompted, click **"Reopen in Container"** +5. Wait for the environment to build and initialize + +After setup: + +- `pre-commit` hooks are installed +- `ruff` and other tools are available +- The shell uses Zsh by default + +## Tips + +To manually run checks on all files: + +```bash +pre-commit run --all-files +``` + +> For further information here's [Microsoft tutorial about devcontainers.](https://code.visualstudio.com/docs/devcontainers/tutorial) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index e23263f5b9de..4951d5eb268d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -7,10 +7,12 @@ // Update 'VARIANT' to pick a Python version: 3, 3.11, 3.10, 3.9, 3.8 // Append -bullseye or -buster to pin to an OS version. // Use -bullseye variants on local on arm64/Apple Silicon. - "VARIANT": "3.13-bookworm", + "VARIANT": "3.13-bookworm" } }, + "postCreateCommand": "zsh .devcontainer/post_install", + // Configure tool-specific properties. "customizations": { // Configure properties specific to VS Code. @@ -20,7 +22,8 @@ "python.defaultInterpreterPath": "/usr/local/bin/python", "python.linting.enabled": true, "python.formatting.blackPath": "/usr/local/py-utils/bin/black", - "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy" + "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy", + "terminal.integrated.defaultProfile.linux": "zsh" }, // Add the IDs of extensions you want installed when the container is created. diff --git a/.devcontainer/post_install b/.devcontainer/post_install new file mode 100755 index 000000000000..589ee361f5cb --- /dev/null +++ b/.devcontainer/post_install @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +echo "Begin post-installation steps..." + +set -e + +echo "Installing pre-commit hooks..." +pre-commit install + +echo "Installing Oh My Zsh plugins..." + +# Install zsh-autosuggestions if not present +if [ ! -d "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions" ]; then + echo "Cloning zsh-autosuggestions..." + git clone https://github.com/zsh-users/zsh-autosuggestions \ + "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions" +fi + +# Install zsh-syntax-highlighting if not present +if [ ! -d "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting" ]; then + echo "Cloning zsh-syntax-highlighting..." + git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \ + "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting" +fi + +echo "Configuring plugins in ~/.zshrc..." +sed -i '/^plugins=/c\plugins=(git zsh-autosuggestions zsh-syntax-highlighting)' ~/.zshrc + +echo "Post-installation steps completed successfully. Enjoy!" diff --git a/.github/workflows/devcontainer_ci.yml b/.github/workflows/devcontainer_ci.yml new file mode 100644 index 000000000000..c0b26bb77da6 --- /dev/null +++ b/.github/workflows/devcontainer_ci.yml @@ -0,0 +1,19 @@ +name: Test DevContainer Build + +on: + push: + paths: + - ".devcontainer/**" + pull_request: + paths: + - ".devcontainer/**" + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: devcontainers/ci@v0.3 + with: + push: never + runCmd: "true" From 5a4a6a5497776c564774fa915792924eee36865d Mon Sep 17 00:00:00 2001 From: Asim Hanif Date: Sat, 12 Jul 2025 01:25:53 +0500 Subject: [PATCH 2/5] =?UTF-8?q?Update=20.pre-commit-config.yaml=20to=20ref?= =?UTF-8?q?lect=20current=20linting=20and=20formatt=E2=80=A6=20(#12841)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update .pre-commit-config.yaml to reflect current linting and formatting setup - Replaced outdated references to `black` with the actual tools used in the repo: `ruff` and `ruff-format`. - Ensured all configured hooks are up to date and relevant to Python development. - This aligns the linting and formatting setup with the project's actual pre-commit pipeline. - Improves consistency for contributors by preventing confusion between formatting tools. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * We use httpx, not requests * response = httpx.get(request_url, timeout=10).raise_for_status() --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss --- .pre-commit-config.yaml | 9 ++++--- web_programming/fetch_well_rx_price.py | 33 +++++++++++--------------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6c1879ab1ac6..969328415be6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.11.11 hooks: - - id: ruff + - id: ruff-check - id: ruff-format - repo: https://github.com/codespell-project/codespell @@ -29,7 +29,7 @@ repos: - tomli - repo: https://github.com/tox-dev/pyproject-fmt - rev: "v2.6.0" + rev: v2.6.0 hooks: - id: pyproject-fmt @@ -53,12 +53,11 @@ repos: args: - --explicit-package-bases - --ignore-missing-imports - - --install-types # See mirrors-mypy README.md + - --install-types - --non-interactive - additional_dependencies: [types-requests] - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v4.0.0-alpha.8" + rev: v4.0.0-alpha.8 hooks: - id: prettier types_or: [toml, yaml] diff --git a/web_programming/fetch_well_rx_price.py b/web_programming/fetch_well_rx_price.py index 93be2a9235d9..e34a89c19cc8 100644 --- a/web_programming/fetch_well_rx_price.py +++ b/web_programming/fetch_well_rx_price.py @@ -5,12 +5,10 @@ """ -from urllib.error import HTTPError - +import httpx from bs4 import BeautifulSoup -from requests import exceptions, get -BASE_URL = "https://www.wellrx.com/prescriptions/{0}/{1}/?freshSearch=true" +BASE_URL = "https://www.wellrx.com/prescriptions/{}/{}/?freshSearch=true" def fetch_pharmacy_and_price_list(drug_name: str, zip_code: str) -> list | None: @@ -18,8 +16,8 @@ def fetch_pharmacy_and_price_list(drug_name: str, zip_code: str) -> list | None: This function will take input of drug name and zipcode, then request to the BASE_URL site. - Get the page data and scrape it to the generate the - list of lowest prices for the prescription drug. + Get the page data and scrape it to generate the + list of the lowest prices for the prescription drug. Args: drug_name (str): [Drug name] @@ -28,12 +26,12 @@ def fetch_pharmacy_and_price_list(drug_name: str, zip_code: str) -> list | None: Returns: list: [List of pharmacy name and price] - >>> fetch_pharmacy_and_price_list(None, None) - - >>> fetch_pharmacy_and_price_list(None, 30303) - - >>> fetch_pharmacy_and_price_list("eliquis", None) - + >>> print(fetch_pharmacy_and_price_list(None, None)) + None + >>> print(fetch_pharmacy_and_price_list(None, 30303)) + None + >>> print(fetch_pharmacy_and_price_list("eliquis", None)) + None """ try: @@ -42,10 +40,7 @@ def fetch_pharmacy_and_price_list(drug_name: str, zip_code: str) -> list | None: return None request_url = BASE_URL.format(drug_name, zip_code) - response = get(request_url, timeout=10) - - # Is the response ok? - response.raise_for_status() + response = httpx.get(request_url, timeout=10).raise_for_status() # Scrape the data using bs4 soup = BeautifulSoup(response.text, "html.parser") @@ -53,14 +48,14 @@ def fetch_pharmacy_and_price_list(drug_name: str, zip_code: str) -> list | None: # This list will store the name and price. pharmacy_price_list = [] - # Fetch all the grids that contains the items. + # Fetch all the grids that contain the items. grid_list = soup.find_all("div", {"class": "grid-x pharmCard"}) if grid_list and len(grid_list) > 0: for grid in grid_list: # Get the pharmacy price. pharmacy_name = grid.find("p", {"class": "list-title"}).text - # Get price of the drug. + # Get the price of the drug. price = grid.find("span", {"p", "price price-large"}).text pharmacy_price_list.append( @@ -72,7 +67,7 @@ def fetch_pharmacy_and_price_list(drug_name: str, zip_code: str) -> list | None: return pharmacy_price_list - except (HTTPError, exceptions.RequestException, ValueError): + except (httpx.HTTPError, ValueError): return None From d1a9486f09f47a14ea6bfdfcfaf61c0297476d84 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 11 Jul 2025 23:06:49 +0200 Subject: [PATCH 3/5] [pre-commit.ci] pre-commit autoupdate (#12781) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/astral-sh/ruff-pre-commit: v0.11.11 → v0.12.2](https://github.com/astral-sh/ruff-pre-commit/compare/v0.11.11...v0.12.2) - [github.com/pre-commit/mirrors-mypy: v1.15.0 → v1.16.1](https://github.com/pre-commit/mirrors-mypy/compare/v1.15.0...v1.16.1) * Update .pre-commit-config.yaml --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 969328415be6..b7865145fce9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,7 +16,7 @@ repos: - id: auto-walrus - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.11.11 + rev: v0.12.3 hooks: - id: ruff-check - id: ruff-format From 6e1a1048774468ab2d7717ceae34b43f005dce2d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 15:29:24 -0400 Subject: [PATCH 4/5] [pre-commit.ci] pre-commit autoupdate (#12846) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/astral-sh/ruff-pre-commit: v0.12.3 → v0.12.4](https://github.com/astral-sh/ruff-pre-commit/compare/v0.12.3...v0.12.4) - [github.com/pre-commit/mirrors-mypy: v1.15.0 → v1.17.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.15.0...v1.17.0) * Apply suggestion from @cclauss --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b7865145fce9..f733908c2987 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,7 +16,7 @@ repos: - id: auto-walrus - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.12.3 + rev: v0.12.4 hooks: - id: ruff-check - id: ruff-format From 7a0fee401d2990bd5904e94cd5d3a62c50a8b682 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 29 Jul 2025 17:27:27 -0400 Subject: [PATCH 5/5] [pre-commit.ci] pre-commit autoupdate (#12864) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/astral-sh/ruff-pre-commit: v0.12.4 → v0.12.5](https://github.com/astral-sh/ruff-pre-commit/compare/v0.12.4...v0.12.5) - [github.com/pre-commit/mirrors-mypy: v1.15.0 → v1.17.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.15.0...v1.17.0) * Apply suggestion from @cclauss * --ignore=web_programming/current_stock_price.py --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss --- .github/workflows/build.yml | 3 ++- .pre-commit-config.yaml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8b83cb41c79a..01b67c6de05b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,7 +16,7 @@ jobs: cache-dependency-glob: uv.lock - uses: actions/setup-python@v5 with: - python-version: 3.13 + python-version: 3.x allow-prereleases: true - run: uv sync --group=test - name: Run tests @@ -30,6 +30,7 @@ jobs: --ignore=project_euler/ --ignore=quantum/q_fourier_transform.py --ignore=scripts/validate_solutions.py + --ignore=web_programming/current_stock_price.py --ignore=web_programming/fetch_anime_and_play.py --cov-report=term-missing:skip-covered --cov=. . diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f733908c2987..d52c31c42592 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,7 +16,7 @@ repos: - id: auto-walrus - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.12.4 + rev: v0.12.5 hooks: - id: ruff-check - id: ruff-format