devboard 0.1.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- devboard-0.3.0/AI_POLICY.md +15 -0
- devboard-0.3.0/CHANGELOG.md +64 -0
- {devboard-0.1.0 → devboard-0.3.0}/CONTRIBUTING.md +7 -16
- {devboard-0.1.0 → devboard-0.3.0}/LICENSE +1 -1
- {devboard-0.1.0 → devboard-0.3.0}/PKG-INFO +5 -6
- {devboard-0.1.0 → devboard-0.3.0}/README.md +2 -3
- {devboard-0.1.0 → devboard-0.3.0}/config/git-changelog.toml +1 -1
- {devboard-0.1.0 → devboard-0.3.0}/config/pytest.ini +2 -0
- {devboard-0.1.0 → devboard-0.3.0}/config/ruff.toml +8 -23
- devboard-0.3.0/config/ty.toml +6 -0
- {devboard-0.1.0 → devboard-0.3.0}/config/vscode/launch.json +1 -2
- {devboard-0.1.0 → devboard-0.3.0}/config/vscode/settings.json +1 -3
- devboard-0.3.0/config/zed/debug.json +44 -0
- devboard-0.3.0/config/zed/settings.json +43 -0
- devboard-0.3.0/config/zed/tasks.json +72 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/.overrides/main.html +5 -1
- {devboard-0.1.0 → devboard-0.3.0}/docs/.overrides/partials/comments.html +1 -1
- devboard-0.3.0/docs/css/apidocs.css +21 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/examples/columns/commit.py +5 -4
- {devboard-0.1.0 → devboard-0.3.0}/docs/examples/columns/commit_pull.py +7 -6
- {devboard-0.1.0 → devboard-0.3.0}/docs/examples/columns/commit_pull_push.py +9 -8
- devboard-0.3.0/docs/examples/columns/commit_pull_push_release.py +49 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/examples/columns/notify.py +25 -14
- {devboard-0.1.0 → devboard-0.3.0}/docs/examples/columns/pull.py +5 -4
- {devboard-0.1.0 → devboard-0.3.0}/docs/examples/columns/push.py +5 -4
- {devboard-0.1.0 → devboard-0.3.0}/docs/examples/columns/release.py +5 -4
- devboard-0.3.0/docs/examples/screenshot.py +75 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/index.md +7 -4
- {devboard-0.1.0 → devboard-0.3.0}/docs/tutorial.md +232 -130
- {devboard-0.1.0 → devboard-0.3.0}/duties.py +72 -44
- {devboard-0.1.0 → devboard-0.3.0}/pyproject.toml +12 -16
- {devboard-0.1.0 → devboard-0.3.0}/scripts/gen_credits.py +33 -16
- {devboard-0.1.0 → devboard-0.3.0}/scripts/get_version.py +18 -0
- {devboard-0.1.0 → devboard-0.3.0}/scripts/make.py +34 -8
- devboard-0.3.0/src/devboard/__init__.py +55 -0
- devboard-0.3.0/src/devboard/__main__.py +32 -0
- devboard-0.3.0/src/devboard/_internal/__init__.py +17 -0
- devboard-0.3.0/src/devboard/_internal/app.py +431 -0
- devboard-0.3.0/src/devboard/_internal/board.py +441 -0
- devboard-0.3.0/src/devboard/_internal/cache.py +148 -0
- {devboard-0.1.0 → devboard-0.3.0}/src/devboard/_internal/cli.py +24 -1
- {devboard-0.1.0 → devboard-0.3.0}/src/devboard/_internal/datatable.py +124 -20
- {devboard-0.1.0 → devboard-0.3.0}/src/devboard/_internal/debug.py +19 -1
- devboard-0.3.0/src/devboard/_internal/default_board.py +242 -0
- {devboard-0.1.0 → devboard-0.3.0}/src/devboard/_internal/devboard.tcss +13 -1
- devboard-0.3.0/src/devboard/_internal/loader.py +140 -0
- devboard-0.3.0/src/devboard/_internal/modal.py +69 -0
- {devboard-0.1.0 → devboard-0.3.0}/src/devboard/_internal/notifications.py +18 -0
- devboard-0.3.0/src/devboard/_internal/projects.py +301 -0
- devboard-0.3.0/tests/__init__.py +25 -0
- devboard-0.3.0/tests/__snapshots__/test_snapshots/test_collapsed_column_layout.svg +156 -0
- devboard-0.3.0/tests/__snapshots__/test_snapshots/test_populated_board_layout.svg +157 -0
- devboard-0.3.0/tests/conftest.py +19 -0
- devboard-0.3.0/tests/snapshot_app.py +88 -0
- devboard-0.3.0/tests/test_actions.py +128 -0
- {devboard-0.1.0 → devboard-0.3.0}/tests/test_api.py +23 -5
- devboard-0.3.0/tests/test_app_bindings.py +70 -0
- devboard-0.3.0/tests/test_cache.py +461 -0
- devboard-0.3.0/tests/test_cli.py +87 -0
- devboard-0.3.0/tests/test_column.py +176 -0
- devboard-0.3.0/tests/test_items.py +252 -0
- devboard-0.3.0/tests/test_loader.py +126 -0
- devboard-0.3.0/tests/test_modal.py +111 -0
- devboard-0.3.0/tests/test_progress.py +291 -0
- devboard-0.3.0/tests/test_projects.py +83 -0
- devboard-0.3.0/tests/test_scan.py +142 -0
- devboard-0.3.0/tests/test_snapshots.py +73 -0
- devboard-0.3.0/zensical.toml +194 -0
- devboard-0.1.0/CHANGELOG.md +0 -20
- devboard-0.1.0/config/mypy.ini +0 -5
- devboard-0.1.0/docs/.overrides/partials/path-item.html +0 -22
- devboard-0.1.0/docs/css/material.css +0 -4
- devboard-0.1.0/docs/css/mkdocstrings.css +0 -72
- devboard-0.1.0/docs/examples/columns/commit_pull_push_release.py +0 -40
- devboard-0.1.0/docs/examples/screenshot.py +0 -51
- devboard-0.1.0/mkdocs.yml +0 -177
- devboard-0.1.0/src/devboard/__init__.py +0 -31
- devboard-0.1.0/src/devboard/__main__.py +0 -14
- devboard-0.1.0/src/devboard/_internal/__init__.py +0 -0
- devboard-0.1.0/src/devboard/_internal/app.py +0 -152
- devboard-0.1.0/src/devboard/_internal/board.py +0 -141
- devboard-0.1.0/src/devboard/_internal/default_board.py +0 -207
- devboard-0.1.0/src/devboard/_internal/modal.py +0 -45
- devboard-0.1.0/src/devboard/_internal/projects.py +0 -203
- devboard-0.1.0/tests/__init__.py +0 -7
- devboard-0.1.0/tests/conftest.py +0 -1
- devboard-0.1.0/tests/test_cli.py +0 -52
- {devboard-0.1.0 → devboard-0.3.0}/CODE_OF_CONDUCT.md +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/config/coverage.ini +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/config/vscode/tasks.json +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/changelog.md +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/code_of_conduct.md +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/contributing.md +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/credits.md +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/examples/repositories.py +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/js/feedback.js +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/license.md +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/docs/reference/api.md +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/scripts/make +0 -0
- {devboard-0.1.0 → devboard-0.3.0}/src/devboard/py.typed +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# AI Contribution Policy
|
|
2
|
+
|
|
3
|
+
We accept AI-*assisted* contributions, both for code and documentation, with the following expectations:
|
|
4
|
+
|
|
5
|
+
- AI-assisted contributions must disclaim their use of AI.
|
|
6
|
+
- Contributors must fully understand the proposed changes and be able to explain why they are the correct approach.
|
|
7
|
+
- Issues must be created before creating pull requests (unless there is already a relevant issue).
|
|
8
|
+
- Issue and pull request templates must be followed.
|
|
9
|
+
- Comments (including bodies) in issues and pull requests must be written by humans. If you use LLMs to translate from one language to another, please include your original comment and the translated one.
|
|
10
|
+
- Git commits must be authored by humans, not AI/bot accounts or identities.
|
|
11
|
+
- Git commit messages must be written by humans, in English. If you cannot write English, please state so in the pull request body and we will write the commit messages ourselves.
|
|
12
|
+
|
|
13
|
+
Failure to comply with any of these requirements will result in issues or pull requests being closed immediately without comment. Repeated violations of this policy will result in a ban of the offending accounts/identities from contributing to this project and any related project from the same author/organization.
|
|
14
|
+
|
|
15
|
+
We do not accept AI-generated content in community spaces we maintain or moderate, such as GitHub discussions or Matrix rooms.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
6
|
+
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
<!-- insertion marker -->
|
|
9
|
+
## [0.3.0](https://github.com/pawamoy/devboard/releases/tag/0.3.0) - 2026-09-23
|
|
10
|
+
|
|
11
|
+
<small>[Compare with 0.2.0](https://github.com/pawamoy/devboard/compare/0.2.0...0.3.0)</small>
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- Render Rich content in modals ([fb2393e](https://github.com/pawamoy/devboard/commit/fb2393e75edc21b71e4684b82394f4516785499c) by Timothée Mazzucotelli).
|
|
16
|
+
- Let columns report status bar progress ([08a6943](https://github.com/pawamoy/devboard/commit/08a6943c6ab66bde2699c116e22a1ab025c11f7a) by Timothée Mazzucotelli).
|
|
17
|
+
- Add maximize/unmaximize keybinding to all columns ([8fd99d4](https://github.com/pawamoy/devboard/commit/8fd99d48d715189c5679cb97edb07806964738d5) by Timothée Mazzucotelli). [Issue-2](https://github.com/pawamoy/devboard/issues/2)
|
|
18
|
+
- Allow collapsing/expanding column with keybinding ([51160e1](https://github.com/pawamoy/devboard/commit/51160e152a9bcbcc3a77ede5ee2878252b7a6946) by Timothée Mazzucotelli).
|
|
19
|
+
- Add progress bar (scanning/fetching) ([34290ea](https://github.com/pawamoy/devboard/commit/34290ea4b1bfb04ac9560b47d5fbd0244034e5a6) by Timothée Mazzucotelli).
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
- Update cache after each (batch) row operation ([25b1370](https://github.com/pawamoy/devboard/commit/25b13703240c94107146d1de2fcff7a20f16d6c3) by Timothée Mazzucotelli).
|
|
24
|
+
- Emptied columns are collapsed ([6e49906](https://github.com/pawamoy/devboard/commit/6e49906ba1dcdb3cedc04d92909c838c4b9e1627) by Timothée Mazzucotelli).
|
|
25
|
+
- Always encode in UTF8 ([fe0f17f](https://github.com/pawamoy/devboard/commit/fe0f17f8016b55c8edff96dbcba2d12975987511) by Timothée Mazzucotelli).
|
|
26
|
+
- Support restoring cache with moved columns ([a014e82](https://github.com/pawamoy/devboard/commit/a014e82f49b4d3f3d47a0f5bf4d5edda1eacb5b0) by Timothée Mazzucotelli).
|
|
27
|
+
- Identify projects by their paths, to avoid redundant work ([2708a80](https://github.com/pawamoy/devboard/commit/2708a80282ef5a37b9a1b62efa081542bd1ef39f) by Timothée Mazzucotelli).
|
|
28
|
+
- Save to cache after each reload ([091a229](https://github.com/pawamoy/devboard/commit/091a2296ac968ba92ef562b50eb4b67db4165114) by Timothée Mazzucotelli).
|
|
29
|
+
|
|
30
|
+
### Code Refactoring
|
|
31
|
+
|
|
32
|
+
- Let each board declare its own bindings ([cf7a6a9](https://github.com/pawamoy/devboard/commit/cf7a6a928a6fb50bc50d4caa5d010117305e8eae) by Timothée Mazzucotelli).
|
|
33
|
+
- Declare keybindings with Textual actions ([5b1ec54](https://github.com/pawamoy/devboard/commit/5b1ec548daf2fc3c5db6171f35a1c680fa91b429) by Timothée Mazzucotelli).
|
|
34
|
+
- Generalize refresh/force-refresh ([342ef55](https://github.com/pawamoy/devboard/commit/342ef552ccbf3e151750ef44800fe68d0f6f8e20) by Timothée Mazzucotelli).
|
|
35
|
+
- Make columns generic ([6532042](https://github.com/pawamoy/devboard/commit/6532042da615c7f9c54ffa1cd9f713db552c77c3) by Timothée Mazzucotelli).
|
|
36
|
+
- Restructure app to separate concerns ([c11b897](https://github.com/pawamoy/devboard/commit/c11b897a3a5e45aad0e78b9c7a6749e0bbed7e91) by Timothée Mazzucotelli).
|
|
37
|
+
|
|
38
|
+
## [0.2.0](https://github.com/pawamoy/devboard/releases/tag/0.2.0) - 2026-09-10
|
|
39
|
+
|
|
40
|
+
<small>[Compare with 0.1.0](https://github.com/pawamoy/devboard/compare/0.1.0...0.2.0)</small>
|
|
41
|
+
|
|
42
|
+
The project is update to support latest version of Textual.
|
|
43
|
+
|
|
44
|
+
### Bug Fixes
|
|
45
|
+
|
|
46
|
+
- Prevent event propagation from modal ([e61eadd](https://github.com/pawamoy/devboard/commit/e61eaddaca58f91c02150c2f11465fcb82d576d1) by Timothée Mazzucotelli).
|
|
47
|
+
- Fix script entrypoint ([acb054d](https://github.com/pawamoy/devboard/commit/acb054d11395861c34a60e2a60711379a3b48019) by Timothée Mazzucotelli).
|
|
48
|
+
|
|
49
|
+
### Performance Improvements
|
|
50
|
+
|
|
51
|
+
- Start faster (cache), scan faster ([9a740e5](https://github.com/pawamoy/devboard/commit/9a740e55aff8add3016b438d1b0912376a5552aa) by Timothée Mazzucotelli).
|
|
52
|
+
|
|
53
|
+
## [0.1.0](https://github.com/pawamoy/devboard/releases/tag/0.1.0) - 2025-11-08
|
|
54
|
+
|
|
55
|
+
<small>[Compare with first commit](https://github.com/pawamoy/devboard/compare/286120e957168a9162d5a8dc19c7dd72fb0a6d65...0.1.0)</small>
|
|
56
|
+
|
|
57
|
+
### Features
|
|
58
|
+
|
|
59
|
+
- Release Insiders project to the public ([ce7aad4](https://github.com/pawamoy/devboard/commit/ce7aad4c6c2da3924aebcf143f3a0d1068573297) by Timothée Mazzucotelli).
|
|
60
|
+
|
|
61
|
+
### Code Refactoring
|
|
62
|
+
|
|
63
|
+
- Update imports ([976e578](https://github.com/pawamoy/devboard/commit/976e57897d92431c60f510efbe6d8be5516747cd) by Timothée Mazzucotelli).
|
|
64
|
+
- Move submodules under internal folder ([9ec90e1](https://github.com/pawamoy/devboard/commit/9ec90e11392d86022213e7dc4cfcfd520fa7783c) by Timothée Mazzucotelli).
|
|
@@ -1,28 +1,19 @@
|
|
|
1
1
|
# Contributing
|
|
2
2
|
|
|
3
|
-
Contributions are welcome, and they are greatly appreciated
|
|
3
|
+
Contributions are welcome, and they are greatly appreciated. Every little bit helps, and credit will always be given.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Please always create an issue before working on a new feature or a bug fix, so that we can discuss the implementation and make sure that your work will be merged.**
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Environment setup
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Install [uv](https://github.com/astral-sh/uv) and [direnv](https://direnv.net/), fork and clone the repository, then:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
cd devboard
|
|
13
|
+
direnv allow
|
|
13
14
|
make setup
|
|
14
15
|
```
|
|
15
16
|
|
|
16
|
-
> NOTE: If it fails for some reason, you'll need to install [uv](https://github.com/astral-sh/uv) manually.
|
|
17
|
-
>
|
|
18
|
-
> You can install it with:
|
|
19
|
-
>
|
|
20
|
-
> ```bash
|
|
21
|
-
> curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
22
|
-
> ```
|
|
23
|
-
>
|
|
24
|
-
> Now you can try running `make setup` again, or simply `uv sync`.
|
|
25
|
-
|
|
26
17
|
You now have the dependencies installed.
|
|
27
18
|
|
|
28
19
|
You can run the application with `make run devboard [ARGS...]`.
|
|
@@ -31,8 +22,7 @@ Run `make help` to see all the available actions!
|
|
|
31
22
|
|
|
32
23
|
## Tasks
|
|
33
24
|
|
|
34
|
-
The entry-point to run commands and tasks is the `make` Python script, located in the `scripts` directory. Try running `make` to show the available commands and tasks. The *commands* do not need the Python dependencies to be installed,
|
|
35
|
-
while the *tasks* do. The cross-platform tasks are written in Python, thanks to [duty](https://github.com/pawamoy/duty).
|
|
25
|
+
The entry-point to run commands and tasks is the `make` Python script, located in the `scripts` directory. Try running `make` to show the available commands and tasks. The *commands* do not need the Python dependencies to be installed, while the *tasks* do. The cross-platform tasks are written in Python, thanks to [duty](https://github.com/pawamoy/duty).
|
|
36
26
|
|
|
37
27
|
If you work in VSCode, we provide [an action to configure VSCode](https://pawamoy.github.io/copier-uv/work/#vscode-setup) for the project.
|
|
38
28
|
|
|
@@ -48,6 +38,7 @@ As usual:
|
|
|
48
38
|
1. run `make format` to auto-format the code
|
|
49
39
|
1. run `make check` to check everything (fix any warning)
|
|
50
40
|
1. run `make test` to run the tests (fix any issue)
|
|
41
|
+
1. if you changed the terminal layout, run `.venv/bin/pytest tests/test_snapshots.py -c config/pytest.ini --snapshot-update` and review the updated SVG files
|
|
51
42
|
1. if you updated the documentation or the project dependencies:
|
|
52
43
|
1. run `make docs`
|
|
53
44
|
1. go to http://localhost:8000 and check that everything looks good
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
ISC License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2023, Timothée Mazzucotelli
|
|
3
|
+
Copyright (c) 2023, Timothée Mazzucotelli and contributors
|
|
4
4
|
|
|
5
5
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
6
|
purpose with or without fee is hereby granted, provided that the above
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devboard
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: A development dashboard for
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: A development dashboard for projects, issues, pull requests, and other work.
|
|
5
5
|
Author-Email: =?utf-8?q?Timoth=C3=A9e_Mazzucotelli?= <dev@pawamoy.fr>
|
|
6
6
|
License-Expression: ISC
|
|
7
7
|
License-File: LICENSE
|
|
@@ -28,7 +28,7 @@ Project-URL: Discussions, https://github.com/pawamoy/devboard/discussions
|
|
|
28
28
|
Project-URL: Gitter, https://gitter.im/devboard/community
|
|
29
29
|
Project-URL: Funding, https://github.com/sponsors/pawamoy
|
|
30
30
|
Requires-Python: >=3.10
|
|
31
|
-
Requires-Dist: textual>=
|
|
31
|
+
Requires-Dist: textual>=8.2
|
|
32
32
|
Requires-Dist: gitpython>=3.1
|
|
33
33
|
Requires-Dist: appdirs>=1.4.4
|
|
34
34
|
Requires-Dist: tomli>=2.0; python_version < "3.11"
|
|
@@ -37,11 +37,11 @@ Description-Content-Type: text/markdown
|
|
|
37
37
|
# Devboard
|
|
38
38
|
|
|
39
39
|
[](https://github.com/pawamoy/devboard/actions?query=workflow%3Aci)
|
|
40
|
-
[](https://pawamoy.github.io/devboard/)
|
|
41
41
|
[](https://pypi.org/project/devboard/)
|
|
42
42
|
[](https://app.gitter.im/#/room/#devboard:gitter.im)
|
|
43
43
|
|
|
44
|
-
A development dashboard for
|
|
44
|
+
A development dashboard for projects, issues, pull requests, and other work.
|
|
45
45
|
|
|
46
46
|
## Installation
|
|
47
47
|
|
|
@@ -59,4 +59,3 @@ uv tool install devboard
|
|
|
59
59
|
|
|
60
60
|
<!-- sponsors-start -->
|
|
61
61
|
<!-- sponsors-end -->
|
|
62
|
-
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Devboard
|
|
2
2
|
|
|
3
3
|
[](https://github.com/pawamoy/devboard/actions?query=workflow%3Aci)
|
|
4
|
-
[](https://pawamoy.github.io/devboard/)
|
|
5
5
|
[](https://pypi.org/project/devboard/)
|
|
6
6
|
[](https://app.gitter.im/#/room/#devboard:gitter.im)
|
|
7
7
|
|
|
8
|
-
A development dashboard for
|
|
8
|
+
A development dashboard for projects, issues, pull requests, and other work.
|
|
9
9
|
|
|
10
10
|
## Installation
|
|
11
11
|
|
|
@@ -23,4 +23,3 @@ uv tool install devboard
|
|
|
23
23
|
|
|
24
24
|
<!-- sponsors-start -->
|
|
25
25
|
<!-- sponsors-end -->
|
|
26
|
-
|
|
@@ -12,5 +12,7 @@ filterwarnings =
|
|
|
12
12
|
error
|
|
13
13
|
default::EncodingWarning
|
|
14
14
|
error::EncodingWarning:devboard
|
|
15
|
+
# pytest-textual-snapshot 1.1 uses datetime.utcnow while building a failure report.
|
|
16
|
+
ignore:datetime.datetime.utcnow\(\) is deprecated.*:DeprecationWarning:pytest_textual_snapshot
|
|
15
17
|
# TODO: remove once pytest-xdist 4 is released
|
|
16
18
|
ignore:.*rsyncdir:DeprecationWarning:xdist
|
|
@@ -1,34 +1,14 @@
|
|
|
1
|
-
target-version = "
|
|
1
|
+
target-version = "py310"
|
|
2
2
|
line-length = 120
|
|
3
|
+
output-format = "concise"
|
|
3
4
|
|
|
4
5
|
[lint]
|
|
5
6
|
exclude = [
|
|
6
7
|
"tests/fixtures/*.py",
|
|
7
8
|
]
|
|
8
|
-
select = [
|
|
9
|
-
"A", "ANN", "ARG",
|
|
10
|
-
"B", "BLE",
|
|
11
|
-
"C", "C4",
|
|
12
|
-
"COM",
|
|
13
|
-
"D", "DTZ",
|
|
14
|
-
"E", "ERA", "EXE",
|
|
15
|
-
"F", "FBT",
|
|
16
|
-
"G",
|
|
17
|
-
"I", "ICN", "INP", "ISC",
|
|
18
|
-
"N",
|
|
19
|
-
"PGH", "PIE", "PL", "PLC", "PLE", "PLR", "PLW", "PT", "PYI",
|
|
20
|
-
"Q",
|
|
21
|
-
"RUF", "RSE", "RET",
|
|
22
|
-
"S", "SIM", "SLF",
|
|
23
|
-
"T", "T10", "T20", "TCH", "TID", "TRY",
|
|
24
|
-
"UP",
|
|
25
|
-
"W",
|
|
26
|
-
"YTT",
|
|
27
|
-
]
|
|
9
|
+
select = ["ALL"]
|
|
28
10
|
ignore = [
|
|
29
11
|
"A001", # Variable is shadowing a Python builtin
|
|
30
|
-
"ANN101", # Missing type annotation for self
|
|
31
|
-
"ANN102", # Missing type annotation for cls
|
|
32
12
|
"ANN204", # Missing return type annotation for special method __str__
|
|
33
13
|
"ANN401", # Dynamically typed expressions (typing.Any) are disallowed
|
|
34
14
|
"ARG005", # Unused lambda argument
|
|
@@ -36,13 +16,18 @@ ignore = [
|
|
|
36
16
|
"D105", # Missing docstring in magic method
|
|
37
17
|
"D417", # Missing argument description in the docstring
|
|
38
18
|
"E501", # Line too long
|
|
19
|
+
"EM101", # String literal when raising exception
|
|
20
|
+
"EM102", # f-string when raising exception
|
|
39
21
|
"ERA001", # Commented out code
|
|
22
|
+
"FIX", # TODO, FIXME, etc.
|
|
40
23
|
"G004", # Logging statement uses f-string
|
|
41
24
|
"PLR0911", # Too many return statements
|
|
42
25
|
"PLR0912", # Too many branches
|
|
43
26
|
"PLR0913", # Too many arguments to function call
|
|
44
27
|
"PLR0915", # Too many statements
|
|
45
28
|
"SLF001", # Private member accessed
|
|
29
|
+
"TD002", # Missing author in TODO
|
|
30
|
+
"TD003", # Missing issue link for TODO
|
|
46
31
|
"TRY003", # Avoid specifying long messages outside the exception class
|
|
47
32
|
]
|
|
48
33
|
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
"**/.venvs*/**": true,
|
|
5
5
|
"**/venv*/**": true
|
|
6
6
|
},
|
|
7
|
-
"mypy-type-checker.args": [
|
|
8
|
-
"--config-file=config/mypy.ini"
|
|
9
|
-
],
|
|
10
7
|
"python.testing.unittestEnabled": false,
|
|
11
8
|
"python.testing.pytestEnabled": true,
|
|
12
9
|
"python.testing.pytestArgs": [
|
|
@@ -19,6 +16,7 @@
|
|
|
19
16
|
"ruff.lint.args": [
|
|
20
17
|
"--config=config/ruff.toml"
|
|
21
18
|
],
|
|
19
|
+
"ty.configurationFile": "config/ty.toml",
|
|
22
20
|
"yaml.schemas": {
|
|
23
21
|
"https://squidfunk.github.io/mkdocs-material/schema.json": "mkdocs.yml"
|
|
24
22
|
},
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Project-local debug tasks
|
|
2
|
+
//
|
|
3
|
+
// For more documentation on how to configure debug tasks,
|
|
4
|
+
// see: https://zed.dev/docs/debugger
|
|
5
|
+
[
|
|
6
|
+
{
|
|
7
|
+
"label": "python (current file)",
|
|
8
|
+
"adapter": "Debugpy",
|
|
9
|
+
"request": "launch",
|
|
10
|
+
"program": "$ZED_FILE",
|
|
11
|
+
"justMyCode": false
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"label": "run",
|
|
15
|
+
"adapter": "Debugpy",
|
|
16
|
+
"request": "launch",
|
|
17
|
+
"module": "devboard",
|
|
18
|
+
"justMyCode": false
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"label": "docs",
|
|
22
|
+
"adapter": "Debugpy",
|
|
23
|
+
"request": "launch",
|
|
24
|
+
"module": "zensical",
|
|
25
|
+
"args": [
|
|
26
|
+
"serve"
|
|
27
|
+
],
|
|
28
|
+
"justMyCode": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"label": "test",
|
|
32
|
+
"adapter": "Debugpy",
|
|
33
|
+
"request": "launch",
|
|
34
|
+
"module": "pytest",
|
|
35
|
+
"args": [
|
|
36
|
+
"-c=config/pytest.ini",
|
|
37
|
+
"-vvv",
|
|
38
|
+
"--no-cov",
|
|
39
|
+
"--dist=no",
|
|
40
|
+
"tests"
|
|
41
|
+
],
|
|
42
|
+
"justMyCode": false
|
|
43
|
+
}
|
|
44
|
+
]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Zed settings
|
|
2
|
+
//
|
|
3
|
+
// For information on how to configure Zed, see the Zed
|
|
4
|
+
// documentation: https://zed.dev/docs/configuring-zed
|
|
5
|
+
//
|
|
6
|
+
// To see all of Zed's default settings without changing your
|
|
7
|
+
// custom settings, run `zed: open default settings` from the
|
|
8
|
+
// command palette (cmd-shift-p / ctrl-shift-p)
|
|
9
|
+
{
|
|
10
|
+
"languages": {
|
|
11
|
+
"YAML": {
|
|
12
|
+
"auto_indent_on_paste": false,
|
|
13
|
+
"auto_indent": "preserve_indent",
|
|
14
|
+
"format_on_save": "off"
|
|
15
|
+
},
|
|
16
|
+
"Python": {
|
|
17
|
+
"language_servers": ["ty", "ruff"],
|
|
18
|
+
"code_actions_on_format": {
|
|
19
|
+
"source.organizeImports.ruff": true
|
|
20
|
+
},
|
|
21
|
+
"formatter": {
|
|
22
|
+
"language_server": {
|
|
23
|
+
"name": "ruff"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"lsp": {
|
|
29
|
+
"ty": {
|
|
30
|
+
"settings": {
|
|
31
|
+
"configurationFile": "config/ty.toml"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"ruff": {
|
|
35
|
+
"initialization_options": {
|
|
36
|
+
"settings": {
|
|
37
|
+
"configurationPreference": "filesystemFirst",
|
|
38
|
+
"configuration": "config/ruff.toml"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"label": "changelog",
|
|
4
|
+
"command": "scripts/make",
|
|
5
|
+
"args": ["changelog"]
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"label": "check",
|
|
9
|
+
"command": "scripts/make",
|
|
10
|
+
"args": ["check"]
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"label": "check-quality",
|
|
14
|
+
"command": "scripts/make",
|
|
15
|
+
"args": ["check-quality"]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"label": "check-types",
|
|
19
|
+
"command": "scripts/make",
|
|
20
|
+
"args": ["check-types"]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"label": "check-docs",
|
|
24
|
+
"command": "scripts/make",
|
|
25
|
+
"args": ["check-docs"]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"label": "check-api",
|
|
29
|
+
"command": "scripts/make",
|
|
30
|
+
"args": ["check-api"]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"label": "clean",
|
|
34
|
+
"command": "scripts/make",
|
|
35
|
+
"args": ["clean"]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"label": "docs",
|
|
39
|
+
"command": "scripts/make",
|
|
40
|
+
"args": ["docs"]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"label": "docs-deploy",
|
|
44
|
+
"command": "scripts/make",
|
|
45
|
+
"args": ["docs-deploy"]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"label": "format",
|
|
49
|
+
"command": "scripts/make",
|
|
50
|
+
"args": ["format"]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"label": "release",
|
|
54
|
+
"command": "scripts/make",
|
|
55
|
+
"args": ["release"]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"label": "setup",
|
|
59
|
+
"command": "scripts/make",
|
|
60
|
+
"args": ["setup"]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"label": "test",
|
|
64
|
+
"command": "scripts/make",
|
|
65
|
+
"args": ["test", "coverage"]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"label": "vscode",
|
|
69
|
+
"command": "scripts/make",
|
|
70
|
+
"args": ["vscode"]
|
|
71
|
+
}
|
|
72
|
+
]
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
{% extends "base.html" %}
|
|
2
2
|
|
|
3
3
|
{% block announce %}
|
|
4
|
-
|
|
4
|
+
<strong>Fund this project</strong> through
|
|
5
|
+
<a href="https://github.com/sponsors/pawamoy"><strong>sponsorship</strong></a>
|
|
6
|
+
<span class="twemoji heart pulse">
|
|
7
|
+
{% include ".icons/octicons/heart-fill-16.svg" %}
|
|
8
|
+
</span> —
|
|
5
9
|
Follow
|
|
6
10
|
<strong>@pawamoy</strong> on
|
|
7
11
|
<a rel="me" href="https://fosstodon.org/@pawamoy">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- Giscus -->
|
|
2
|
-
<!-- https://
|
|
2
|
+
<!-- https://zensical.org/docs/setup/comment-system/#giscus-integration -->
|
|
3
3
|
<div id="feedback" style="display: none;">
|
|
4
4
|
<h2 id="__comments">Feedback</h2>
|
|
5
5
|
<script src="https://giscus.app/client.js"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* Mark external links as such. */
|
|
2
|
+
a.external::after,
|
|
3
|
+
a.autorefs-external::after {
|
|
4
|
+
/* https://primer.style/octicons/arrow-up-right-24 */
|
|
5
|
+
mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.25 15.5a.75.75 0 00.75-.75v-9a.75.75 0 00-.75-.75h-9a.75.75 0 000 1.5h7.19L6.22 16.72a.75.75 0 101.06 1.06L17.5 7.56v7.19c0 .414.336.75.75.75z"></path></svg>');
|
|
6
|
+
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.25 15.5a.75.75 0 00.75-.75v-9a.75.75 0 00-.75-.75h-9a.75.75 0 000 1.5h7.19L6.22 16.72a.75.75 0 101.06 1.06L17.5 7.56v7.19c0 .414.336.75.75.75z"></path></svg>');
|
|
7
|
+
content: ' ';
|
|
8
|
+
|
|
9
|
+
display: inline-block;
|
|
10
|
+
vertical-align: middle;
|
|
11
|
+
position: relative;
|
|
12
|
+
|
|
13
|
+
height: 1em;
|
|
14
|
+
width: 1em;
|
|
15
|
+
background-color: currentColor;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
a.external:hover::after,
|
|
19
|
+
a.autorefs-external:hover::after {
|
|
20
|
+
background-color: var(--md-accent-fg-color);
|
|
21
|
+
}
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import os
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
|
+
from devboard import Board
|
|
6
7
|
from devboard._internal.default_board import ToCommit
|
|
7
8
|
from devboard._internal.projects import Project as BaseProject
|
|
8
9
|
|
|
@@ -11,15 +12,15 @@ BASE_DIR = Path(os.environ["PROJECTS_DIR"])
|
|
|
11
12
|
|
|
12
13
|
class Project(BaseProject):
|
|
13
14
|
@classmethod
|
|
14
|
-
def
|
|
15
|
+
def list_items(cls):
|
|
15
16
|
for filedir in BASE_DIR.iterdir():
|
|
16
17
|
if filedir.is_dir() and filedir.joinpath(".git").is_dir():
|
|
17
18
|
yield cls(filedir)
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
class ToCommit(ToCommit):
|
|
21
|
-
def
|
|
22
|
-
yield from Project.
|
|
22
|
+
def list_items(self):
|
|
23
|
+
yield from Project.list_items()
|
|
23
24
|
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
board = Board([ToCommit])
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import os
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
|
+
from devboard import Board
|
|
6
7
|
from devboard._internal.default_board import ToCommit, ToPull
|
|
7
8
|
from devboard._internal.projects import Project as BaseProject
|
|
8
9
|
|
|
@@ -11,20 +12,20 @@ BASE_DIR = Path(os.environ["PROJECTS_DIR"])
|
|
|
11
12
|
|
|
12
13
|
class Project(BaseProject):
|
|
13
14
|
@classmethod
|
|
14
|
-
def
|
|
15
|
+
def list_items(cls):
|
|
15
16
|
for filedir in BASE_DIR.iterdir():
|
|
16
17
|
if filedir.is_dir() and filedir.joinpath(".git").is_dir():
|
|
17
18
|
yield cls(filedir)
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
class ToCommit(ToCommit):
|
|
21
|
-
def
|
|
22
|
-
yield from Project.
|
|
22
|
+
def list_items(self):
|
|
23
|
+
yield from Project.list_items()
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
class ToPull(ToPull):
|
|
26
|
-
def
|
|
27
|
-
yield from Project.
|
|
27
|
+
def list_items(self):
|
|
28
|
+
yield from Project.list_items()
|
|
28
29
|
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
board = Board([ToCommit, ToPull])
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import os
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
|
+
from devboard import Board
|
|
6
7
|
from devboard._internal.default_board import ToCommit, ToPull, ToPush
|
|
7
8
|
from devboard._internal.projects import Project as BaseProject
|
|
8
9
|
|
|
@@ -11,25 +12,25 @@ BASE_DIR = Path(os.environ["PROJECTS_DIR"])
|
|
|
11
12
|
|
|
12
13
|
class Project(BaseProject):
|
|
13
14
|
@classmethod
|
|
14
|
-
def
|
|
15
|
+
def list_items(cls):
|
|
15
16
|
for filedir in BASE_DIR.iterdir():
|
|
16
17
|
if filedir.is_dir() and filedir.joinpath(".git").is_dir():
|
|
17
18
|
yield cls(filedir)
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
class ToCommit(ToCommit):
|
|
21
|
-
def
|
|
22
|
-
yield from Project.
|
|
22
|
+
def list_items(self):
|
|
23
|
+
yield from Project.list_items()
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
class ToPull(ToPull):
|
|
26
|
-
def
|
|
27
|
-
yield from Project.
|
|
27
|
+
def list_items(self):
|
|
28
|
+
yield from Project.list_items()
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
class ToPush(ToPush):
|
|
31
|
-
def
|
|
32
|
-
yield from Project.
|
|
32
|
+
def list_items(self):
|
|
33
|
+
yield from Project.list_items()
|
|
33
34
|
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
board = Board([ToCommit, ToPull, ToPush])
|