From f780c338b894c089b27080e4e589667ecb3fe468 Mon Sep 17 00:00:00 2001 From: Takuma IMAMURA <209989118+hyperfinitism@users.noreply.github.com> Date: Sun, 8 Mar 2026 22:58:24 +0900 Subject: [PATCH 1/2] chore: resolve ruff errors Signed-off-by: Takuma IMAMURA <209989118+hyperfinitism@users.noreply.github.com> --- src/bookmeterjson/config.py | 1 - src/bookmeterjson/scraper.py | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/bookmeterjson/config.py b/src/bookmeterjson/config.py index 2ffecf5..018cd44 100644 --- a/src/bookmeterjson/config.py +++ b/src/bookmeterjson/config.py @@ -3,7 +3,6 @@ import yaml - VALID_CATEGORIES = {"read", "reading", "stacked", "wish"} diff --git a/src/bookmeterjson/scraper.py b/src/bookmeterjson/scraper.py index 494c08e..bc7afc2 100644 --- a/src/bookmeterjson/scraper.py +++ b/src/bookmeterjson/scraper.py @@ -1,5 +1,6 @@ from __future__ import annotations +import contextlib import json import math import time @@ -84,10 +85,8 @@ def parse_book_entry(book_el, category: str) -> BookEntry: # User-overridable page count from detail__page page_el = book_el.select_one(".detail__page") if page_el and page_el.text.strip(): - try: + with contextlib.suppress(ValueError): entry.detail_pages = int(page_el.text.strip()) - except ValueError: - pass # Edit modal with review and bookcases edit_div = book_el.select_one(".detail__edit .js-modal-button") From fb7b2e487d20838a85fc3d4f5e806b9b9d651199 Mon Sep 17 00:00:00 2001 From: Takuma IMAMURA <209989118+hyperfinitism@users.noreply.github.com> Date: Sun, 8 Mar 2026 23:00:02 +0900 Subject: [PATCH 2/2] ci(ruff): add lint and format check workflow Signed-off-by: Takuma IMAMURA <209989118+hyperfinitism@users.noreply.github.com> --- .github/workflows/ruff.yml | 35 +++++++++++++++++++++++++++++++++++ pyproject.toml | 26 ++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 .github/workflows/ruff.yml diff --git a/.github/workflows/ruff.yml b/.github/workflows/ruff.yml new file mode 100644 index 0000000..af543ef --- /dev/null +++ b/.github/workflows/ruff.yml @@ -0,0 +1,35 @@ +name: Lint and Format + +on: + pull_request: + paths: + - "pyproject.toml" + - "src/**" + - ".github/workflows/ruff.yml" + push: + paths: + - "pyproject.toml" + - "src/**" + - ".github/workflows/ruff.yml" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + ruff: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-python@v6 + with: + python-version: "3.14" + - run: pip install ruff + - name: Lint (ruff check) + run: ruff check + - name: Format (ruff format --check) + run: ruff format --check diff --git a/pyproject.toml b/pyproject.toml index f485904..eddf778 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,3 +19,29 @@ build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["src"] + +# Development purposes only +[project.optional-dependencies] +dev = ["ruff >= 0.15.5"] + +[tool.ruff] +target-version = "py311" + +[tool.ruff.lint] +select = [ + "B", # flake8-bugbear + "E", # pycodestyle Error + "F", # Pyflakes + "I", # isort + "PL", # Pylint + "SIM", # flake8-simplify + "TC", # flake8-type-checking + "W" # pycodestyle Warning +] +ignore = [ + "TC001" # typing-only-first-party-import +] + +[tool.ruff.format] +quote-style = "double" +indent-style = "space"