kanban-python 0.4.1__tar.gz → 0.5.2__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.
Files changed (63) hide show
  1. kanban_python-0.5.2/.github/workflows/ci.yml +101 -0
  2. {kanban_python-0.4.1 → kanban_python-0.5.2}/.gitignore +0 -1
  3. kanban_python-0.5.2/.pre-commit-config.yaml +30 -0
  4. kanban_python-0.5.2/.python-version +1 -0
  5. {kanban_python-0.4.1 → kanban_python-0.5.2}/CHANGELOG.md +15 -0
  6. {kanban_python-0.4.1 → kanban_python-0.5.2}/PKG-INFO +64 -31
  7. kanban_python-0.4.1/src/kanban_python.egg-info/PKG-INFO → kanban_python-0.5.2/README.md +23 -35
  8. kanban_python-0.5.2/pyproject.toml +56 -0
  9. kanban_python-0.5.2/src/kanban_python/app.py +69 -0
  10. kanban_python-0.5.2/src/kanban_python/cli_parser.py +64 -0
  11. {kanban_python-0.4.1 → kanban_python-0.5.2}/src/kanban_python/config.py +3 -1
  12. {kanban_python-0.4.1 → kanban_python-0.5.2}/src/kanban_python/controls.py +35 -27
  13. {kanban_python-0.4.1 → kanban_python-0.5.2}/src/kanban_python/interface.py +2 -1
  14. {kanban_python-0.4.1 → kanban_python-0.5.2}/src/kanban_python/utils.py +10 -7
  15. {kanban_python-0.4.1 → kanban_python-0.5.2}/tests/test_config.py +7 -2
  16. kanban_python-0.5.2/uv.lock +444 -0
  17. kanban_python-0.4.1/.github/workflows/ci.yml +0 -127
  18. kanban_python-0.4.1/.isort.cfg +0 -3
  19. kanban_python-0.4.1/.pre-commit-config.yaml +0 -67
  20. kanban_python-0.4.1/.readthedocs.yml +0 -27
  21. kanban_python-0.4.1/CONTRIBUTING.md +0 -371
  22. kanban_python-0.4.1/README.md +0 -198
  23. kanban_python-0.4.1/docs/Makefile +0 -29
  24. kanban_python-0.4.1/docs/_static/.gitignore +0 -1
  25. kanban_python-0.4.1/docs/authors.md +0 -4
  26. kanban_python-0.4.1/docs/changelog.md +0 -4
  27. kanban_python-0.4.1/docs/conf.py +0 -304
  28. kanban_python-0.4.1/docs/contributing.md +0 -4
  29. kanban_python-0.4.1/docs/index.md +0 -39
  30. kanban_python-0.4.1/docs/license.md +0 -5
  31. kanban_python-0.4.1/docs/readme.md +0 -4
  32. kanban_python-0.4.1/docs/requirements.txt +0 -6
  33. kanban_python-0.4.1/pyproject.toml +0 -9
  34. kanban_python-0.4.1/setup.cfg +0 -81
  35. kanban_python-0.4.1/setup.py +0 -21
  36. kanban_python-0.4.1/src/kanban_python/app.py +0 -133
  37. kanban_python-0.4.1/src/kanban_python/cli_parser.py +0 -62
  38. kanban_python-0.4.1/src/kanban_python.egg-info/SOURCES.txt +0 -55
  39. kanban_python-0.4.1/src/kanban_python.egg-info/dependency_links.txt +0 -1
  40. kanban_python-0.4.1/src/kanban_python.egg-info/entry_points.txt +0 -2
  41. kanban_python-0.4.1/src/kanban_python.egg-info/not-zip-safe +0 -1
  42. kanban_python-0.4.1/src/kanban_python.egg-info/requires.txt +0 -11
  43. kanban_python-0.4.1/src/kanban_python.egg-info/top_level.txt +0 -1
  44. kanban_python-0.4.1/tox.ini +0 -93
  45. {kanban_python-0.4.1 → kanban_python-0.5.2}/.coveragerc +0 -0
  46. {kanban_python-0.4.1 → kanban_python-0.5.2}/AUTHORS.md +0 -0
  47. {kanban_python-0.4.1 → kanban_python-0.5.2}/LICENSE.txt +0 -0
  48. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_config.PNG +0 -0
  49. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_header.PNG +0 -0
  50. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_kanban.PNG +0 -0
  51. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_kanban_change.PNG +0 -0
  52. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_kanban_configure.PNG +0 -0
  53. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_kanban_init.PNG +0 -0
  54. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_kanban_report.PNG +0 -0
  55. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_kanban_report_document.PNG +0 -0
  56. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_scan_table.PNG +0 -0
  57. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_scan_view.PNG +0 -0
  58. {kanban_python-0.4.1 → kanban_python-0.5.2}/images/image_task_example.PNG +0 -0
  59. {kanban_python-0.4.1 → kanban_python-0.5.2}/src/kanban_python/__init__.py +0 -0
  60. {kanban_python-0.4.1 → kanban_python-0.5.2}/src/kanban_python/constants.py +0 -0
  61. {kanban_python-0.4.1 → kanban_python-0.5.2}/tests/conftest.py +0 -0
  62. {kanban_python-0.4.1 → kanban_python-0.5.2}/tests/test_interface.py +0 -0
  63. {kanban_python-0.4.1 → kanban_python-0.5.2}/tests/test_utils.py +0 -0
@@ -0,0 +1,101 @@
1
+ name: Continuous Integration
2
+
3
+ on:
4
+ push:
5
+ # Avoid using all the resources/limits available by checking only
6
+ # relevant branches and tags. Other branches can be checked via PRs.
7
+ # branches: [main]
8
+ tags: ['v[0-9]*', '[0-9]+.[0-9]+*'] # Match tags that resemble a version
9
+ pull_request: # Run in every PR
10
+ workflow_dispatch: # Allow manually triggering the workflow
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+
16
+ jobs:
17
+ tests:
18
+ strategy:
19
+ matrix:
20
+ python-version:
21
+ - "3.9"
22
+ - "3.13"
23
+ platform:
24
+ - ubuntu-latest
25
+ - macos-latest
26
+ - windows-latest
27
+ runs-on: ${{matrix.platform}}
28
+
29
+ steps:
30
+ - uses: actions/checkout@v4
31
+
32
+ - name: Install uv
33
+ uses: astral-sh/setup-uv@v3
34
+ with:
35
+ enable-cache: true
36
+
37
+ - name: "Set up Python"
38
+ uses: actions/setup-python@v5
39
+ with:
40
+ python-version: ${{matrix.python-version}}
41
+ - name: Install the project
42
+ run: uv sync --all-extras --dev
43
+
44
+ - name: Run tests
45
+ # For example, using `pytest`
46
+ run: uv run -p ${{matrix.python-version}} pytest tests
47
+
48
+ # Generate Coverage
49
+ - name: Generate coverage report
50
+ run: uv run coverage lcov -o coverage.lcov
51
+ - name: Upload partial coverage report
52
+ uses: coverallsapp/github-action@v2
53
+ with:
54
+ path-to-lcov: coverage.lcov
55
+ github-token: ${{ secrets.GITHUB_TOKEN }}
56
+ flag-name: ${{ matrix.platform }} - py${{ matrix.python }}
57
+ parallel: true
58
+
59
+ finalize_coverage:
60
+ needs: tests
61
+ runs-on: ubuntu-latest
62
+ steps:
63
+ - name: Finalize coverage report
64
+ uses: coverallsapp/github-action@v2
65
+ with:
66
+ github-token: ${{ secrets.GITHUB_TOKEN }}
67
+ parallel-finished: true
68
+
69
+ publish:
70
+ needs: finalize_coverage
71
+ if: ${{ github.event_name == 'push' && contains(github.ref, 'refs/tags/') }}
72
+ runs-on: ubuntu-latest
73
+ environment: 'deploy'
74
+ permissions:
75
+ # IMPORTANT: this permission is mandatory for trusted publishing
76
+ # id-token: write
77
+ contents: write
78
+ steps:
79
+ - uses: actions/checkout@v4
80
+
81
+ - name: Install uv
82
+ uses: astral-sh/setup-uv@v3
83
+ with:
84
+ enable-cache: true
85
+
86
+ - name: "Set up Python"
87
+ uses: actions/setup-python@v5
88
+ with:
89
+ python-version-file: ".python-version"
90
+
91
+ - name: "Build Package"
92
+ run: uv build
93
+
94
+ - name: "Publish Package to PyPi"
95
+ env:
96
+ # UV_PUBLISH_USERNAME: __token__
97
+ UV_PUBLISH_TOKEN: ${{secrets.PYPI_TOKEN}}
98
+
99
+ run: uv publish
100
+ # - name: Publish package distributions to PyPI
101
+ # uses: pypa/gh-action-pypi-publish@release/v1
@@ -52,4 +52,3 @@ MANIFEST
52
52
  # Per-project virtualenvs
53
53
  .venv*/
54
54
  .conda*/
55
- .python-version
@@ -0,0 +1,30 @@
1
+ # See https://pre-commit.com for more information
2
+ # See https://pre-commit.com/hooks.html for more hooks
3
+ repos:
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v5.0.0
6
+ hooks:
7
+ - id: trailing-whitespace
8
+ - id: end-of-file-fixer
9
+ - id: check-yaml
10
+ - id: check-added-large-files
11
+ args: ["--maxkb=600"]
12
+
13
+
14
+ - repo: https://github.com/astral-sh/ruff-pre-commit
15
+ # Ruff version.
16
+ rev: v0.9.1
17
+ hooks:
18
+ # Run the linter.
19
+ - id: ruff
20
+ # Run the formatter.
21
+ - id: ruff-format
22
+
23
+ #- repo: local
24
+ # hooks:
25
+ # - id: run tests
26
+ # name: Run Tests
27
+ # language: system
28
+ # entry: pytest
29
+ # pass_filenames: false
30
+ # always_run: true
@@ -0,0 +1 @@
1
+ 3.13
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 0.5.2
4
+ - Fix `kanban report` path error if no `-P`-flag provided, with default path
5
+ - Fix `kanban scan` path error if no `-P`-flag provided, with default path
6
+
7
+ ## Version 0.5.1
8
+ - Fix deploymet issue caused by missing version file
9
+
10
+ ## Version 0.5.0
11
+ - Move Project to uv structure and cleanup repository gh-17
12
+ - improve argparser to support new funtionality and give better command overview
13
+ - add `-l`/`--local` flag to `kanban init` command as a shortcut to create a board named `local`, which creates a local board.
14
+ Local boards are stored in the current working directory and not under `user_data_dir`.
15
+ - add `path` argument to `kanban scan` command to declare which path to scan for tasks
16
+ - add `path` argument to `kanban report` command to declare path where the report should be created
17
+
3
18
  ## Version 0.4.1
4
19
  - Update minimum python version in ci test
5
20
 
@@ -1,26 +1,47 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: kanban-python
3
- Version: 0.4.1
3
+ Version: 0.5.2
4
4
  Summary: Terminal Kanban App written in Python
5
- Home-page: https://github.com/Zaloog/kanban-python
6
- Author: Zaloog
7
- Author-email: gramslars@gmail.com
8
- License: MIT
9
- Project-URL: Source, https://github.com/Zaloog/kanban-python
10
- Project-URL: Tracker, https://github.com/Zaloog/kanban-python/issues
11
- Platform: any
12
- Classifier: Development Status :: 4 - Beta
13
- Classifier: Programming Language :: Python
14
- Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
5
+ Project-URL: Repository, https://github.com/Zaloog/kanban-python
6
+ Project-URL: Changelog, https://github.com/Zaloog/kanban-python/blob/main/CHANGELOG.md
7
+ Author-email: Zaloog <gramslars@gmail.com>
8
+ License: The MIT License (MIT)
9
+
10
+ Copyright (c) 2023 Zaloog
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ License-File: AUTHORS.md
15
30
  License-File: LICENSE.txt
16
- Requires-Dist: importlib-metadata; python_version < "3.8"
17
- Requires-Dist: rich>=13.7.0
18
- Requires-Dist: platformdirs<4,>=3
19
- Provides-Extra: testing
20
- Requires-Dist: setuptools; extra == "testing"
21
- Requires-Dist: pytest; extra == "testing"
22
- Requires-Dist: freezegun; extra == "testing"
23
- Requires-Dist: pytest-cov; extra == "testing"
31
+ Classifier: Development Status :: 3 - Alpha
32
+ Classifier: License :: OSI Approved :: MIT License
33
+ Classifier: Operating System :: OS Independent
34
+ Classifier: Programming Language :: Python
35
+ Classifier: Programming Language :: Python :: 3 :: Only
36
+ Classifier: Programming Language :: Python :: 3.9
37
+ Classifier: Programming Language :: Python :: 3.10
38
+ Classifier: Programming Language :: Python :: 3.11
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Classifier: Programming Language :: Python :: 3.13
41
+ Requires-Python: >=3.9
42
+ Requires-Dist: platformdirs>=4.3.6
43
+ Requires-Dist: rich>=13.9.4
44
+ Description-Content-Type: text/markdown
24
45
 
25
46
  <!-- These are examples of badges you might want to add to your README:
26
47
  please update the URLs accordingly
@@ -34,9 +55,12 @@ Requires-Dist: pytest-cov; extra == "testing"
34
55
  -->
35
56
 
36
57
  [![Project generated with PyScaffold](https://img.shields.io/badge/-PyScaffold-005CA0?logo=pyscaffold)](https://pyscaffold.org/)
58
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
37
59
  [![PyPI-Server](https://img.shields.io/pypi/v/kanban-python.svg)](https://pypi.org/project/kanban-python/)
60
+ [![Pyversions](https://img.shields.io/pypi/pyversions/kanban-python.svg)](https://pypi.python.org/pypi/kanban-python)
61
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
38
62
  [![Downloads](https://static.pepy.tech/badge/kanban-python)](https://pepy.tech/project/kanban-python)
39
- [![Coverage Status](https://coveralls.io/repos/github/Zaloog/kanban-python/badge.svg?branch=refs/tags/v0.3.10)](https://coveralls.io/github/Zaloog/kanban-python?branch=refs/tags/v0.3.10)
63
+ [![Coverage Status](https://coveralls.io/repos/github/Zaloog/kanban-python/badge.svg?branch=main)](https://coveralls.io/github/Zaloog/kanban-python?branch=main)
40
64
  # kanban-python
41
65
 
42
66
  > A Terminal Kanban Application written in Python to boost your productivity :rocket:
@@ -51,9 +75,10 @@ my own Terminal Kanban Application since I preferred a more simple and guided wo
51
75
  **kanban-python** also comes with more features, like custom column creation,
52
76
  automatic scanning and customizable config file to support you being productive.
53
77
 
54
- This package was developed with [pyscaffold], which provides awesome project templates
78
+ This package was initially developed with [pyscaffold], which provides awesome project templates
55
79
  and takes over much of the boilerplate for python packaging.
56
80
  It was a great help for developing my first package and I can highly recommend it.
81
+ With version `0.5.X` the repository structure was changed to use [uv].
57
82
 
58
83
  ## Features
59
84
  <details><summary>Colorful and Interactive</summary>
@@ -142,10 +167,13 @@ You can install kanban-python with:
142
167
  python -m pip install kanban-python
143
168
  ```
144
169
 
145
- or using [pipx]:
170
+ or using [pipx] / [uv] / [rye]:
146
171
  ```bash
147
- pipx install kanban-python
172
+ pipx install kanban-python # using pipx
173
+ uv tool install kanban-python # using uv
174
+ rye install kanban-python # using rye
148
175
  ```
176
+ I recommend using pipx, rye or uv to install CLI Tools into an isolated environment.
149
177
 
150
178
  ## Usage
151
179
  After Installation of kanban-python, there are 5 commands available:
@@ -158,6 +186,10 @@ Is used to create a new kanban board i.e. it asks for a name and then creates a
158
186
  On first use of any command, the `pykanban.ini` configfile and the `kanban-python` folder will be created automatically.
159
187
  ![init_file](https://raw.githubusercontent.com/Zaloog/kanban-python/main/images/image_kanban_init.PNG)
160
188
 
189
+ You can create local boards in the current working directory by using the name `local` or the flags `-l` or `--local` when
190
+ using `kanban init`. kanban-python checks for local boards and updates the config file accordingly.
191
+ Local boards can only be accessed when using `kanban` in the same folder.
192
+
161
193
  ### Interact with Tasks/Boards
162
194
  ```bash
163
195
  kanban
@@ -173,7 +205,7 @@ or changing settings, your progress wont be saved.
173
205
  ```bash
174
206
  kanban scan
175
207
  ```
176
- After executing this command, kanban-python scans your current Directory recursively for the defined filetypes and searches for lines
208
+ After executing this command, kanban-python scans your current directory recursively for the defined filetypes and searches for lines
177
209
  that start with the pattern provided.
178
210
  ![scan_view](https://raw.githubusercontent.com/Zaloog/kanban-python/main/images/image_scan_view.PNG)
179
211
 
@@ -181,6 +213,8 @@ After confirmation to add the found tasks to table they will be added to the boa
181
213
  The filepath were the task was found will be added as description of the task.
182
214
  ![scan_table](https://raw.githubusercontent.com/Zaloog/kanban-python/main/images/image_scan_table.PNG)
183
215
 
216
+ You can also define a different path to scan with the `-p` or `--path` argument.
217
+
184
218
  ### Create Report
185
219
  ```bash
186
220
  kanban report
@@ -189,13 +223,15 @@ Goes over all your Boards and creates a single markdown file by checking the `Co
189
223
  Also shows a nice github-like contribution table for the current year.
190
224
  ![report](https://raw.githubusercontent.com/Zaloog/kanban-python/main/images/image_kanban_report.PNG)
191
225
 
226
+ You can define a different output path of the `pykanban.md` report file with the `-p` or `--path` argument.
227
+
192
228
  ### Change Settings
193
229
  ```bash
194
230
  kanban configure
195
231
  ```
196
232
  ![settings](https://raw.githubusercontent.com/Zaloog/kanban-python/main/images/image_kanban_configure.PNG)
197
233
 
198
- To create a new custom Columns, you have to edit the `pykanban.ini` manually and add a new column name + visibility status
234
+ To create a new custom Column, you have to edit the `pykanban.ini` manually and add a new column name + visibility status
199
235
  under the `settings.columns.visible` section. The other options are all customizable now via the new settings menu.
200
236
 
201
237
 
@@ -207,12 +243,7 @@ Also check the [Changelog](https://github.com/Zaloog/kanban-python/blob/main/CHA
207
243
  With release v0.3.0 kanban-python switched to the [XDG] Basedir Spec. So some file migrations and config edits might be
208
244
  needed to continue working with your already created boards if you update from `v0.2.X` to `v0.3.X`
209
245
 
210
- <!-- pyscaffold-notes -->
211
-
212
- ## Note
213
246
 
214
- This project has been set up using PyScaffold 4.5. For details and usage
215
- information on PyScaffold see https://pyscaffold.org/.
216
247
 
217
248
  [XDG]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
218
249
  [platformdirs]: https://platformdirs.readthedocs.io/en/latest/
@@ -220,3 +251,5 @@ information on PyScaffold see https://pyscaffold.org/.
220
251
  [pyscaffold]: https://pyscaffold.org/
221
252
  [rich]: https://github.com/Textualize/rich
222
253
  [pipx]: https://github.com/pypa/pipx
254
+ [uv]: https://docs.astral.sh/uv/
255
+ [rye]: https://rye.astral.sh
@@ -1,27 +1,3 @@
1
- Metadata-Version: 2.1
2
- Name: kanban-python
3
- Version: 0.4.1
4
- Summary: Terminal Kanban App written in Python
5
- Home-page: https://github.com/Zaloog/kanban-python
6
- Author: Zaloog
7
- Author-email: gramslars@gmail.com
8
- License: MIT
9
- Project-URL: Source, https://github.com/Zaloog/kanban-python
10
- Project-URL: Tracker, https://github.com/Zaloog/kanban-python/issues
11
- Platform: any
12
- Classifier: Development Status :: 4 - Beta
13
- Classifier: Programming Language :: Python
14
- Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
15
- License-File: LICENSE.txt
16
- Requires-Dist: importlib-metadata; python_version < "3.8"
17
- Requires-Dist: rich>=13.7.0
18
- Requires-Dist: platformdirs<4,>=3
19
- Provides-Extra: testing
20
- Requires-Dist: setuptools; extra == "testing"
21
- Requires-Dist: pytest; extra == "testing"
22
- Requires-Dist: freezegun; extra == "testing"
23
- Requires-Dist: pytest-cov; extra == "testing"
24
-
25
1
  <!-- These are examples of badges you might want to add to your README:
26
2
  please update the URLs accordingly
27
3
 
@@ -34,9 +10,12 @@ Requires-Dist: pytest-cov; extra == "testing"
34
10
  -->
35
11
 
36
12
  [![Project generated with PyScaffold](https://img.shields.io/badge/-PyScaffold-005CA0?logo=pyscaffold)](https://pyscaffold.org/)
13
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
37
14
  [![PyPI-Server](https://img.shields.io/pypi/v/kanban-python.svg)](https://pypi.org/project/kanban-python/)
15
+ [![Pyversions](https://img.shields.io/pypi/pyversions/kanban-python.svg)](https://pypi.python.org/pypi/kanban-python)
16
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
38
17
  [![Downloads](https://static.pepy.tech/badge/kanban-python)](https://pepy.tech/project/kanban-python)
39
- [![Coverage Status](https://coveralls.io/repos/github/Zaloog/kanban-python/badge.svg?branch=refs/tags/v0.3.10)](https://coveralls.io/github/Zaloog/kanban-python?branch=refs/tags/v0.3.10)
18
+ [![Coverage Status](https://coveralls.io/repos/github/Zaloog/kanban-python/badge.svg?branch=main)](https://coveralls.io/github/Zaloog/kanban-python?branch=main)
40
19
  # kanban-python
41
20
 
42
21
  > A Terminal Kanban Application written in Python to boost your productivity :rocket:
@@ -51,9 +30,10 @@ my own Terminal Kanban Application since I preferred a more simple and guided wo
51
30
  **kanban-python** also comes with more features, like custom column creation,
52
31
  automatic scanning and customizable config file to support you being productive.
53
32
 
54
- This package was developed with [pyscaffold], which provides awesome project templates
33
+ This package was initially developed with [pyscaffold], which provides awesome project templates
55
34
  and takes over much of the boilerplate for python packaging.
56
35
  It was a great help for developing my first package and I can highly recommend it.
36
+ With version `0.5.X` the repository structure was changed to use [uv].
57
37
 
58
38
  ## Features
59
39
  <details><summary>Colorful and Interactive</summary>
@@ -142,10 +122,13 @@ You can install kanban-python with:
142
122
  python -m pip install kanban-python
143
123
  ```
144
124
 
145
- or using [pipx]:
125
+ or using [pipx] / [uv] / [rye]:
146
126
  ```bash
147
- pipx install kanban-python
127
+ pipx install kanban-python # using pipx
128
+ uv tool install kanban-python # using uv
129
+ rye install kanban-python # using rye
148
130
  ```
131
+ I recommend using pipx, rye or uv to install CLI Tools into an isolated environment.
149
132
 
150
133
  ## Usage
151
134
  After Installation of kanban-python, there are 5 commands available:
@@ -158,6 +141,10 @@ Is used to create a new kanban board i.e. it asks for a name and then creates a
158
141
  On first use of any command, the `pykanban.ini` configfile and the `kanban-python` folder will be created automatically.
159
142
  ![init_file](https://raw.githubusercontent.com/Zaloog/kanban-python/main/images/image_kanban_init.PNG)
160
143
 
144
+ You can create local boards in the current working directory by using the name `local` or the flags `-l` or `--local` when
145
+ using `kanban init`. kanban-python checks for local boards and updates the config file accordingly.
146
+ Local boards can only be accessed when using `kanban` in the same folder.
147
+
161
148
  ### Interact with Tasks/Boards
162
149
  ```bash
163
150
  kanban
@@ -173,7 +160,7 @@ or changing settings, your progress wont be saved.
173
160
  ```bash
174
161
  kanban scan
175
162
  ```
176
- After executing this command, kanban-python scans your current Directory recursively for the defined filetypes and searches for lines
163
+ After executing this command, kanban-python scans your current directory recursively for the defined filetypes and searches for lines
177
164
  that start with the pattern provided.
178
165
  ![scan_view](https://raw.githubusercontent.com/Zaloog/kanban-python/main/images/image_scan_view.PNG)
179
166
 
@@ -181,6 +168,8 @@ After confirmation to add the found tasks to table they will be added to the boa
181
168
  The filepath were the task was found will be added as description of the task.
182
169
  ![scan_table](https://raw.githubusercontent.com/Zaloog/kanban-python/main/images/image_scan_table.PNG)
183
170
 
171
+ You can also define a different path to scan with the `-p` or `--path` argument.
172
+
184
173
  ### Create Report
185
174
  ```bash
186
175
  kanban report
@@ -189,13 +178,15 @@ Goes over all your Boards and creates a single markdown file by checking the `Co
189
178
  Also shows a nice github-like contribution table for the current year.
190
179
  ![report](https://raw.githubusercontent.com/Zaloog/kanban-python/main/images/image_kanban_report.PNG)
191
180
 
181
+ You can define a different output path of the `pykanban.md` report file with the `-p` or `--path` argument.
182
+
192
183
  ### Change Settings
193
184
  ```bash
194
185
  kanban configure
195
186
  ```
196
187
  ![settings](https://raw.githubusercontent.com/Zaloog/kanban-python/main/images/image_kanban_configure.PNG)
197
188
 
198
- To create a new custom Columns, you have to edit the `pykanban.ini` manually and add a new column name + visibility status
189
+ To create a new custom Column, you have to edit the `pykanban.ini` manually and add a new column name + visibility status
199
190
  under the `settings.columns.visible` section. The other options are all customizable now via the new settings menu.
200
191
 
201
192
 
@@ -207,12 +198,7 @@ Also check the [Changelog](https://github.com/Zaloog/kanban-python/blob/main/CHA
207
198
  With release v0.3.0 kanban-python switched to the [XDG] Basedir Spec. So some file migrations and config edits might be
208
199
  needed to continue working with your already created boards if you update from `v0.2.X` to `v0.3.X`
209
200
 
210
- <!-- pyscaffold-notes -->
211
-
212
- ## Note
213
201
 
214
- This project has been set up using PyScaffold 4.5. For details and usage
215
- information on PyScaffold see https://pyscaffold.org/.
216
202
 
217
203
  [XDG]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
218
204
  [platformdirs]: https://platformdirs.readthedocs.io/en/latest/
@@ -220,3 +206,5 @@ information on PyScaffold see https://pyscaffold.org/.
220
206
  [pyscaffold]: https://pyscaffold.org/
221
207
  [rich]: https://github.com/Textualize/rich
222
208
  [pipx]: https://github.com/pypa/pipx
209
+ [uv]: https://docs.astral.sh/uv/
210
+ [rye]: https://rye.astral.sh
@@ -0,0 +1,56 @@
1
+ [project]
2
+ name = "kanban-python"
3
+ version = "0.5.2"
4
+ description = "Terminal Kanban App written in Python"
5
+ readme = "README.md"
6
+ authors = [
7
+ { name = "Zaloog", email = "gramslars@gmail.com" }
8
+ ]
9
+ requires-python = ">=3.9"
10
+ license = { file = "LICENSE.txt" }
11
+ dependencies = [
12
+ "platformdirs>=4.3.6",
13
+ "rich>=13.9.4",
14
+ ]
15
+
16
+ classifiers = [
17
+ "Development Status :: 3 - Alpha",
18
+ "License :: OSI Approved :: MIT License",
19
+ "Operating System :: OS Independent",
20
+ "Programming Language :: Python",
21
+ "Programming Language :: Python :: 3.9",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Programming Language :: Python :: 3 :: Only",
27
+ ]
28
+
29
+ [project.urls]
30
+ Repository = "https://github.com/Zaloog/kanban-python"
31
+ Changelog = "https://github.com/Zaloog/kanban-python/blob/main/CHANGELOG.md"
32
+
33
+ [project.scripts]
34
+ kanban = "kanban_python.app:run"
35
+
36
+ [build-system]
37
+ requires = ["hatchling"]
38
+ build-backend = "hatchling.build"
39
+
40
+ [tool.pytest.ini_options]
41
+ addopts = "--cov src/kanban_python --cov-report term-missing --verbose --color=yes"
42
+ testpaths = ["tests"]
43
+
44
+ [tool.uv]
45
+ dev-dependencies = [
46
+ "freezegun>=1.5.1",
47
+ "pre-commit>=4.0.1",
48
+ "pytest>=8.3.3",
49
+ "pytest-cov>=6.0.0",
50
+ ]
51
+
52
+ [tool.hatch.metadata]
53
+ allow-direct-references = true
54
+
55
+ [tool.hatch.build.targets.wheel]
56
+ packages = ["src/kanban_python"]
@@ -0,0 +1,69 @@
1
+ import sys
2
+ from pathlib import Path
3
+
4
+ from kanban_python import cli_parser, config, controls, utils, constants
5
+
6
+ __author__ = "Zaloog"
7
+ __copyright__ = "Zaloog"
8
+ __license__ = "MIT"
9
+
10
+
11
+ def main(args):
12
+ args = cli_parser.parse_args(args)
13
+
14
+ if not config.check_config_exists():
15
+ config.create_init_config()
16
+ return
17
+
18
+ # Delete Local Entry if no local file present
19
+ if (not Path("pykanban.json").exists()) and ("local" in config.cfg.kanban_boards):
20
+ config.delete_board_from_config(board_name="local")
21
+
22
+ # New database creation
23
+ if args.command == "init":
24
+ utils.console.print("Starting new [blue]Kanban Board[/]:mechanical_arm:")
25
+ controls.create_new_db(local=args.local)
26
+
27
+ if args.command == "configure":
28
+ controls.change_settings()
29
+
30
+ if args.command == "scan":
31
+ controls.add_todos_to_board(path=Path(args.path) or Path.cwd())
32
+
33
+ if args.command == "report":
34
+ controls.create_report(
35
+ output_path=Path(args.path) or constants.REPORT_FILE_PATH
36
+ )
37
+ return
38
+
39
+ while True:
40
+ controls.show()
41
+ user_input = controls.get_user_action()
42
+
43
+ if user_input == 1:
44
+ controls.add_new_task_to_db()
45
+ elif user_input == 2:
46
+ controls.update_task_from_db()
47
+ elif user_input == 3:
48
+ controls.change_kanban_board()
49
+ elif user_input == 4:
50
+ controls.show_tasks()
51
+ elif user_input == 5:
52
+ controls.delete_kanban_board()
53
+ elif user_input == 6:
54
+ controls.change_settings()
55
+
56
+
57
+ def run():
58
+ """Calls :func:`main` passing the CLI arguments extracted from :obj:`sys.argv`
59
+
60
+ This function can be used as entry point to create console scripts with setuptools.
61
+ """
62
+ try:
63
+ main(sys.argv[1:])
64
+ except (KeyboardInterrupt, EOFError):
65
+ utils.console.print(utils.get_motivational_quote())
66
+
67
+
68
+ if __name__ == "__main__":
69
+ run()
@@ -0,0 +1,64 @@
1
+ import argparse
2
+
3
+ from kanban_python import __version__
4
+ from kanban_python.constants import REPORT_FILE_PATH
5
+
6
+
7
+ def parse_args(args):
8
+ """Parse command line parameters
9
+
10
+ Args:
11
+ args (List[str]): command line parameters as list of strings
12
+ (for example ``["--help"]``).
13
+
14
+ Returns:
15
+ :obj:`argparse.Namespace`: command line parameters namespace
16
+ """
17
+ parser = argparse.ArgumentParser(description="Usage Options")
18
+ parser.add_argument(
19
+ "-v",
20
+ "--version",
21
+ action="version",
22
+ version=f"kanban-python {__version__}",
23
+ )
24
+
25
+ command_parser = parser.add_subparsers(
26
+ title="commands", dest="command", description="available commands"
27
+ )
28
+
29
+ # Init
30
+ init_parser = command_parser.add_parser(
31
+ "init",
32
+ help="initialize a new board, use `--local`-flag to create in current working directory",
33
+ )
34
+ init_parser.add_argument(
35
+ "-l",
36
+ "--local",
37
+ help="create a local board in the current working directory, default:False",
38
+ action="store_true",
39
+ )
40
+
41
+ # Configure
42
+ command_parser.add_parser("configure", help="configure settings")
43
+
44
+ # Scan
45
+ scan_parser = command_parser.add_parser(
46
+ "scan", help="scan path for TODOs in files (default: `.`)"
47
+ )
48
+ scan_parser.add_argument(
49
+ "-p", "--path", required=False, help="path to scan (default: `.`)", default="."
50
+ )
51
+
52
+ # Report
53
+ report_parser = command_parser.add_parser(
54
+ "report", help=f"create report in output path (default: {REPORT_FILE_PATH})"
55
+ )
56
+ report_parser.add_argument(
57
+ "-p",
58
+ "--path",
59
+ required=False,
60
+ help=f"path to save output to (default: {REPORT_FILE_PATH})",
61
+ default=REPORT_FILE_PATH,
62
+ )
63
+
64
+ return parser.parse_args(args)
@@ -189,4 +189,6 @@ def check_config_exists(path=CONFIG_FILE_PATH) -> bool:
189
189
 
190
190
 
191
191
  def get_json_path(boardname: str):
192
- return str(KANBAN_BOARDS_PATH / boardname / TASK_FILE_NAME)
192
+ if boardname == "local":
193
+ return (Path().cwd() / TASK_FILE_NAME).as_posix()
194
+ return (KANBAN_BOARDS_PATH / boardname / TASK_FILE_NAME).as_posix()