From 1b263a041cace593a0ad190750f45d43c8b04910 Mon Sep 17 00:00:00 2001 From: ivis-kuroda Date: Wed, 25 Mar 2026 01:54:55 +0000 Subject: [PATCH 1/3] chore: add task to generate stubs --- pyproject.toml | 3 ++- src/contrib/__init__.py | 6 ++++-- src/contrib/messages.py | 8 ++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 71fa4b9f..63180025 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,8 @@ jairocloud-groups-manager = "server.app:cli" "lint" = "uvx ruff check" "lint:fix" = "uvx ruff check --fix" "format" = "uvx ruff format" -"typecheck" = "pyright" +"generate-stubs" = "python src/contrib/messages.py" +"typecheck" = "task generate-stubs && pyright" "check-updates" = "uvx --from=pip-check-updates pcu pyproject.toml" diff --git a/src/contrib/__init__.py b/src/contrib/__init__.py index 01866aa1..85dbe33a 100644 --- a/src/contrib/__init__.py +++ b/src/contrib/__init__.py @@ -6,7 +6,7 @@ # ruff: noqa: RUF067 -from flask import current_app +from flask import current_app, has_app_context from server.messages import E @@ -14,6 +14,8 @@ from .messages import generate_type_stub -if current_app.config["ENV"] != "development" or not current_app.debug: +if has_app_context() and ( + current_app.config["ENV"] != "development" or not current_app.debug +): error = E.UNNECESSARY_CONTRIB raise RuntimeError(error) diff --git a/src/contrib/messages.py b/src/contrib/messages.py index 879e20a6..8c66bd6b 100644 --- a/src/contrib/messages.py +++ b/src/contrib/messages.py @@ -11,8 +11,8 @@ from datetime import UTC, datetime -from server import messages -from server.messages.base import LogMessage +from src.server import messages +from src.server.messages.base import LogMessage def generate_type_stub() -> None: @@ -77,3 +77,7 @@ def _read_last_hash(stub_path: pathlib.Path) -> str: if second_line.startswith("# source hash:"): return second_line.split(":")[-1].strip() return "" + + +if __name__ == "__main__": + generate_type_stub() From a9abb01f52dc12817473db1bd607fb4e60c4f26b Mon Sep 17 00:00:00 2001 From: ivis-kuroda Date: Wed, 25 Mar 2026 01:59:57 +0000 Subject: [PATCH 2/3] ci: add uv version specify in jobs --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b581ba62..51aab705 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,6 +39,8 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v7 + with: + version: "latest" - name: Set up Python uses: actions/setup-python@v6 From d457433464a09ded59375957beb62514b5934c73 Mon Sep 17 00:00:00 2001 From: ivis-kuroda Date: Wed, 25 Mar 2026 02:07:14 +0000 Subject: [PATCH 3/3] test: fix file lines --- tests/unit/services/test_bulk.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/unit/services/test_bulk.py b/tests/unit/services/test_bulk.py index 3752d48e..352cf9f2 100644 --- a/tests/unit/services/test_bulk.py +++ b/tests/unit/services/test_bulk.py @@ -201,7 +201,7 @@ def test_get_repository_member(app, mocker: MockerFixture): def test_build_user_from_file(app, mocker: MockerFixture): - repo = ["id", "name", "ver"] + metadata = ["created:", "2026-01-01", "version:", "1.0"] header = [ "id", "user_name", @@ -237,7 +237,7 @@ def test_build_user_from_file(app, mocker: MockerFixture): data4 = ["", "User 3", "jc_repo1_gr_test_group1", "Group 1", "general_user", "test@eppn", "user3@example.com", "ja"] data5 = [] data6 = ["", "", "jc_repo1_gr_test_group1", "Group 1", "repository_admin", "test@eppn", "user4@example.com", "ja"] - rows = [iter([repo, header, meta, data1, data2, data3, data4, data5, data6])] + rows = [metadata, header, meta, data1, data2, data3, data4, data5, data6] mock_read_file = mocker.patch("server.services.bulks._read_file", return_value=iter(rows)) expected_data = { "user1": { @@ -294,7 +294,8 @@ def test__read_file(app, mocker: MockerFixture, file_path, expected): mock_wb.active = mock_ws mocker.patch("openpyxl.load_workbook", return_value=mock_wb) result = bulks._read_file(file_path) # noqa: SLF001 - assert list(next(result)) == expected + assert list(next(result)) == expected[0] + assert list(next(result)) == expected[1] def test__read_file_not_ws(app, mocker: MockerFixture):