vikunja-python 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl
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.
- vikunja_python-0.1.2.dist-info/METADATA +144 -0
- {vikunja_python-0.1.0.dist-info → vikunja_python-0.1.2.dist-info}/RECORD +5 -5
- vikunja_python-0.1.0.dist-info/METADATA +0 -16
- {vikunja_python-0.1.0.dist-info → vikunja_python-0.1.2.dist-info}/WHEEL +0 -0
- {vikunja_python-0.1.0.dist-info → vikunja_python-0.1.2.dist-info}/entry_points.txt +0 -0
- {vikunja_python-0.1.0.dist-info → vikunja_python-0.1.2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: vikunja-python
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: API wrapper, CLI tool, and MCP server for Vikunja
|
|
5
|
+
Author-email: Your Name <your.email@example.com>
|
|
6
|
+
License-Expression: WTFPL
|
|
7
|
+
Project-URL: Homepage, https://github.com/oedo808/vikunja-python
|
|
8
|
+
Project-URL: Repository, https://github.com/oedo808/vikunja-python
|
|
9
|
+
Project-URL: Documentation, https://github.com/oedo808/vikunja-python
|
|
10
|
+
Requires-Python: >=3.11
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
Requires-Dist: httpx>=0.27.0
|
|
13
|
+
Requires-Dist: pydantic>=2.0.0
|
|
14
|
+
Requires-Dist: dateparser>=1.2.0
|
|
15
|
+
Requires-Dist: typer>=0.12.0
|
|
16
|
+
Requires-Dist: fastmcp>=0.1.0
|
|
17
|
+
Provides-Extra: test
|
|
18
|
+
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
19
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
|
|
20
|
+
Requires-Dist: testcontainers[mysql]>=4.0.0; extra == "test"
|
|
21
|
+
|
|
22
|
+
# Vikunja Python
|
|
23
|
+
|
|
24
|
+
Python API wrapper, CLI tool, MCP server, and Home Assistant integration for the [Vikunja](https://vikunja.io/) task management system.
|
|
25
|
+
|
|
26
|
+
Built for Python 3.13 with httpx, pydantic v2, fastmcp, and typer.
|
|
27
|
+
|
|
28
|
+
## Architecture
|
|
29
|
+
|
|
30
|
+
The project is structured into layers:
|
|
31
|
+
|
|
32
|
+
- **core/** -- Pydantic models, async HTTP client (httpx), error handling, API token and JWT authentication
|
|
33
|
+
- **cli/** -- Rich CLI built with typer and rich (task CRUD, project views, saved filter queries, dashboard summary)
|
|
34
|
+
- **mcp/** -- MCP server for agentic AI workflows (13 tools including list_tasks, get_task, create_task, list_saved_filter, task_summary)
|
|
35
|
+
- **custom_components/vikunja/** -- Home Assistant HACS integration (config flow, 3 sensors for saved filters)
|
|
36
|
+
|
|
37
|
+
## Getting Started
|
|
38
|
+
|
|
39
|
+
### Installation
|
|
40
|
+
|
|
41
|
+
From PyPI:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pip install vikunja-python
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Or with uv:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
uv sync --all-extras
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Environment Variables
|
|
54
|
+
|
|
55
|
+
Configure your Vikunja instance in a `.env` file or your shell:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
VIKUNJA_URL="https://your-vikunja-instance.com/api/v1"
|
|
59
|
+
VIKUNJA_API_TOKEN="your_api_token_here"
|
|
60
|
+
VIKUNJA_DEBUG="true" # Enable verbose stderr logging
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Features
|
|
64
|
+
|
|
65
|
+
### CLI (vikunja)
|
|
66
|
+
|
|
67
|
+
The CLI provides a human-friendly interface for managing tasks:
|
|
68
|
+
|
|
69
|
+
- list-tasks -- List tasks with rich table output (supports saved filters via negative project IDs)
|
|
70
|
+
- list-saved-filter -- Query saved filters (e.g., -2 for Due in 3 Days, -3 for Overdue, -4 for Due Today)
|
|
71
|
+
- summary -- Quick dashboard summary across all saved filters (parallel queries, optimized for ePaper dashboards)
|
|
72
|
+
- get-project -- Project details and views
|
|
73
|
+
- list-view-tasks -- List tasks from a specific project view
|
|
74
|
+
- get-task -- Full task details with description
|
|
75
|
+
- create-task -- Create a new task
|
|
76
|
+
- create-label -- Create a new label
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
uv run vikunja list-tasks
|
|
80
|
+
uv run vikunja list-saved-filter --filter-id -2
|
|
81
|
+
uv run vikunja summary --top 5
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### MCP Server (vikunja-mcp)
|
|
85
|
+
|
|
86
|
+
MCP server for agentic workflows. 13 tools including:
|
|
87
|
+
|
|
88
|
+
- list_tasks, get_task, create_task, update_task, complete_task, delete_task
|
|
89
|
+
- list_saved_filter -- Query saved filters (e.g., -2 for Due in 3 Days)
|
|
90
|
+
- task_summary -- Dashboard summary across all filters in one parallel call
|
|
91
|
+
- list_projects, get_project, list_project_view_tasks
|
|
92
|
+
- list_labels, create_label
|
|
93
|
+
- add_subtask, add_task_link
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
uv run vikunja-mcp
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Home Assistant Integration
|
|
100
|
+
|
|
101
|
+
The package includes a HACS-ready custom component for Home Assistant:
|
|
102
|
+
|
|
103
|
+
- Config flow: URL + API token via the HA UI
|
|
104
|
+
- 3 sensors: Overdue, Due Today, Due in 3 Days (from Vikunja saved filters)
|
|
105
|
+
- Each sensor: state = task count, attributes = task list with IDs, titles, due dates
|
|
106
|
+
- Coordinator polls all filters in parallel every 5 minutes
|
|
107
|
+
|
|
108
|
+
Copy `custom_components/vikunja/` to your HA config's `custom_components/` directory, restart HA, and add via Settings -> Devices & Services.
|
|
109
|
+
|
|
110
|
+
## Saved Filter Support
|
|
111
|
+
|
|
112
|
+
Vikunja saved filters are accessed via negative project IDs:
|
|
113
|
+
|
|
114
|
+
| ID | Filter |
|
|
115
|
+
|----|--------|
|
|
116
|
+
| -2 | Due in 3 Days |
|
|
117
|
+
| -3 | Overdue |
|
|
118
|
+
| -4 | Due Today |
|
|
119
|
+
|
|
120
|
+
The API route is `GET /tasks?project_id=-2` (NOT `/projects/-2/tasks`).
|
|
121
|
+
|
|
122
|
+
## Testing
|
|
123
|
+
|
|
124
|
+
Unit tests run without Docker:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
uv run pytest tests/test_task_models_unit.py tests/test_label_model_validation.py -v
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Integration tests require Docker (spins up a real Vikunja instance via testcontainers):
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
uv run pytest
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Security & Auth
|
|
137
|
+
|
|
138
|
+
- API Key auth is the primary authentication method for both CLI and MCP server
|
|
139
|
+
- JWT tokens are used for UI-specific features (kanban buckets, reactions) in the CLI only
|
|
140
|
+
- The MCP server only supports API key authentication
|
|
141
|
+
|
|
142
|
+
## License
|
|
143
|
+
|
|
144
|
+
WTFPL - Do What the Fuck You Want to Public License.
|
|
@@ -21,8 +21,8 @@ vikunja_python/core/models/user.py,sha256=ETOV31K9rjIXeMhjSEu2xzroFh8PouVY2fcMi6
|
|
|
21
21
|
vikunja_python/core/models/webhook.py,sha256=debhzsM4Y_wKrMvS64LLdj2WlLN8G5jll9WBhPIj1Tg,9338
|
|
22
22
|
vikunja_python/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
23
|
vikunja_python/mcp/server.py,sha256=0JSVpoT-JlyNtu3k8-0hI03k7tYb3YLlWxCrEgd8THw,31680
|
|
24
|
-
vikunja_python-0.1.
|
|
25
|
-
vikunja_python-0.1.
|
|
26
|
-
vikunja_python-0.1.
|
|
27
|
-
vikunja_python-0.1.
|
|
28
|
-
vikunja_python-0.1.
|
|
24
|
+
vikunja_python-0.1.2.dist-info/METADATA,sha256=n5j1PzRDKLsyIy427uEL7_iQc6qo2xDY2mG4zhyO3ew,4492
|
|
25
|
+
vikunja_python-0.1.2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
26
|
+
vikunja_python-0.1.2.dist-info/entry_points.txt,sha256=pXGwoqxBR9cEnBo9t31b-0mPxz0ztVu79p_YvHBkVT0,101
|
|
27
|
+
vikunja_python-0.1.2.dist-info/top_level.txt,sha256=sWuGn_X83F5Q5auXGSc8Pm0aJbp61_7yMCa2EImJtK4,15
|
|
28
|
+
vikunja_python-0.1.2.dist-info/RECORD,,
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: vikunja-python
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: API wrapper, CLI tool, and MCP server for Vikunja
|
|
5
|
-
Author-email: Your Name <your.email@example.com>
|
|
6
|
-
License-Expression: WTFPL
|
|
7
|
-
Requires-Python: >=3.13.12
|
|
8
|
-
Requires-Dist: httpx>=0.27.0
|
|
9
|
-
Requires-Dist: pydantic>=2.0.0
|
|
10
|
-
Requires-Dist: dateparser>=1.2.0
|
|
11
|
-
Requires-Dist: typer>=0.12.0
|
|
12
|
-
Requires-Dist: fastmcp>=0.1.0
|
|
13
|
-
Provides-Extra: test
|
|
14
|
-
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
15
|
-
Requires-Dist: pytest-asyncio>=0.23.0; extra == "test"
|
|
16
|
-
Requires-Dist: testcontainers[mysql]>=4.0.0; extra == "test"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|