clockify-unofficial-cli 0.2.0__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.
- clockify_unofficial_cli/__init__.py +3 -0
- clockify_unofficial_cli/__main__.py +3 -0
- clockify_unofficial_cli/_version.py +3 -0
- clockify_unofficial_cli/auth/__init__.py +0 -0
- clockify_unofficial_cli/auth/credentials.py +70 -0
- clockify_unofficial_cli/auth/env_store.py +26 -0
- clockify_unofficial_cli/auth/file_store.py +49 -0
- clockify_unofficial_cli/auth/keyring_store.py +62 -0
- clockify_unofficial_cli/auth/resolver.py +34 -0
- clockify_unofficial_cli/commands/__init__.py +0 -0
- clockify_unofficial_cli/commands/auth.py +153 -0
- clockify_unofficial_cli/commands/client.py +116 -0
- clockify_unofficial_cli/commands/config.py +50 -0
- clockify_unofficial_cli/commands/custom_field.py +130 -0
- clockify_unofficial_cli/commands/entry.py +275 -0
- clockify_unofficial_cli/commands/group.py +89 -0
- clockify_unofficial_cli/commands/project.py +174 -0
- clockify_unofficial_cli/commands/tag.py +107 -0
- clockify_unofficial_cli/commands/task.py +194 -0
- clockify_unofficial_cli/commands/timer_shortcuts.py +130 -0
- clockify_unofficial_cli/commands/user.py +45 -0
- clockify_unofficial_cli/commands/workspace.py +68 -0
- clockify_unofficial_cli/config/__init__.py +0 -0
- clockify_unofficial_cli/config/paths.py +25 -0
- clockify_unofficial_cli/config/settings.py +75 -0
- clockify_unofficial_cli/config/store.py +56 -0
- clockify_unofficial_cli/main.py +131 -0
- clockify_unofficial_cli/output/__init__.py +0 -0
- clockify_unofficial_cli/output/columns.py +88 -0
- clockify_unofficial_cli/output/formats.py +82 -0
- clockify_unofficial_cli/output/registry.py +29 -0
- clockify_unofficial_cli/output/renderer.py +68 -0
- clockify_unofficial_cli/runtime/__init__.py +0 -0
- clockify_unofficial_cli/runtime/client_factory.py +42 -0
- clockify_unofficial_cli/runtime/context.py +99 -0
- clockify_unofficial_cli/runtime/errors.py +89 -0
- clockify_unofficial_cli/runtime/exit_codes.py +15 -0
- clockify_unofficial_cli/runtime/params.py +39 -0
- clockify_unofficial_cli/runtime/prompts.py +24 -0
- clockify_unofficial_cli/services/__init__.py +0 -0
- clockify_unofficial_cli/services/listing.py +58 -0
- clockify_unofficial_cli/services/parsing.py +118 -0
- clockify_unofficial_cli/services/resolve.py +128 -0
- clockify_unofficial_cli/services/timer.py +126 -0
- clockify_unofficial_cli-0.2.0.dist-info/METADATA +278 -0
- clockify_unofficial_cli-0.2.0.dist-info/RECORD +49 -0
- clockify_unofficial_cli-0.2.0.dist-info/WHEEL +4 -0
- clockify_unofficial_cli-0.2.0.dist-info/entry_points.txt +2 -0
- clockify_unofficial_cli-0.2.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: clockify-unofficial-cli
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Unofficial command-line interface for Clockify, built on clockify-unofficial-sdk.
|
|
5
|
+
Author-email: "G.A.JAGUAR" <dev@gajaguar.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Keywords: cli,clockify,time-tracking
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
13
|
+
Classifier: Typing :: Typed
|
|
14
|
+
Requires-Python: >=3.14
|
|
15
|
+
Requires-Dist: clockify-unofficial-sdk<2,>=1.0
|
|
16
|
+
Requires-Dist: keyring>=25.0
|
|
17
|
+
Requires-Dist: platformdirs>=4.0
|
|
18
|
+
Requires-Dist: pydantic>=2.9
|
|
19
|
+
Requires-Dist: rich>=14.0
|
|
20
|
+
Requires-Dist: tomli-w>=1.0
|
|
21
|
+
Requires-Dist: typer>=0.16
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
# Clockify Unofficial CLI
|
|
25
|
+
|
|
26
|
+
[](https://github.com/gajaguar/clockify-cli/actions/workflows/ci.yml)
|
|
27
|
+
[](LICENSE)
|
|
28
|
+
[](pyproject.toml)
|
|
29
|
+
[](https://github.com/gajaguar/clockify-cli)
|
|
30
|
+
|
|
31
|
+
> **Unofficial.** This project is not affiliated with, endorsed by, or
|
|
32
|
+
> supported by CAKE.com d.o.o. "Clockify" is a trademark of CAKE.com d.o.o.
|
|
33
|
+
|
|
34
|
+
Unofficial command-line interface for Clockify, built on
|
|
35
|
+
[`clockify-unofficial-sdk`](https://github.com/gajaguar/clockify-sdk).
|
|
36
|
+
|
|
37
|
+
## Table of contents
|
|
38
|
+
|
|
39
|
+
- [About](#about)
|
|
40
|
+
- [Key features](#key-features)
|
|
41
|
+
- [Architecture](#architecture)
|
|
42
|
+
- [Getting started](#getting-started)
|
|
43
|
+
- [Prerequisites](#prerequisites)
|
|
44
|
+
- [Installation](#installation)
|
|
45
|
+
- [Usage](#usage)
|
|
46
|
+
- [Commands](#commands)
|
|
47
|
+
- [Global options](#global-options)
|
|
48
|
+
- [Exit codes](#exit-codes)
|
|
49
|
+
- [Configuration](#configuration)
|
|
50
|
+
- [Development](#development)
|
|
51
|
+
- [Platform notes](#platform-notes)
|
|
52
|
+
- [Roadmap](#roadmap)
|
|
53
|
+
- [Open items](#open-items)
|
|
54
|
+
- [Contributing](#contributing)
|
|
55
|
+
- [Security](#security)
|
|
56
|
+
- [License](#license)
|
|
57
|
+
|
|
58
|
+
## About
|
|
59
|
+
|
|
60
|
+
`clockify` provides a terminal and scripting interface to Clockify. The CLI
|
|
61
|
+
handles profiles, credential storage, name-to-ID resolution, output formatting,
|
|
62
|
+
and stable exit codes. The SDK owns HTTP, retries, pagination, typed models,
|
|
63
|
+
and API error mapping.
|
|
64
|
+
|
|
65
|
+
The CLI is being delivered in phases. The authoritative endpoint mapping is in
|
|
66
|
+
[`docs/coverage.md`](docs/coverage.md), and the delivery plan is in
|
|
67
|
+
[`docs/ROADMAP.md`](docs/ROADMAP.md).
|
|
68
|
+
|
|
69
|
+
## Key features
|
|
70
|
+
|
|
71
|
+
- **Profile-based configuration** - Store region, workspace, and user metadata
|
|
72
|
+
per profile.
|
|
73
|
+
- **Safe authentication** - Validate keys before storage and use the OS
|
|
74
|
+
keyring by default.
|
|
75
|
+
- **Script-friendly output** - Render data as `table`, `json`, `jsonl`, `csv`,
|
|
76
|
+
or one identifier per line with `id`.
|
|
77
|
+
- **Stable automation contract** - Keep data on stdout, diagnostics on stderr,
|
|
78
|
+
and use documented exit codes.
|
|
79
|
+
- **CI support** - Use `CLOCKIFY_API_KEY` without writing a credential to disk.
|
|
80
|
+
- **Typed API foundation** - Build on the SDK's typed models, retries, and
|
|
81
|
+
pagination instead of making HTTP requests in the CLI.
|
|
82
|
+
|
|
83
|
+
## Architecture
|
|
84
|
+
|
|
85
|
+
The CLI is a thin product layer over the SDK. Commands use services and
|
|
86
|
+
runtime components for application context, credentials, configuration, output,
|
|
87
|
+
and error handling.
|
|
88
|
+
|
|
89
|
+
```mermaid
|
|
90
|
+
flowchart TD
|
|
91
|
+
Main["main.py - root app"] --> Commands["commands/ - Typer apps"]
|
|
92
|
+
Commands --> Services["services/ - product logic"]
|
|
93
|
+
Commands --> Runtime["runtime/ - context and errors"]
|
|
94
|
+
Runtime --> Auth["auth/ - credential stores"]
|
|
95
|
+
Runtime --> Config["config/ - settings"]
|
|
96
|
+
Runtime --> Output["output/ - renderers"]
|
|
97
|
+
Services --> SDK["clockify-unofficial-sdk"]
|
|
98
|
+
Runtime --> SDK
|
|
99
|
+
SDK --> API["Clockify API"]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Read [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) for the full design,
|
|
103
|
+
security model, command conventions, and extension checklist.
|
|
104
|
+
|
|
105
|
+
## Getting started
|
|
106
|
+
|
|
107
|
+
### Prerequisites
|
|
108
|
+
|
|
109
|
+
- Python 3.14 or later
|
|
110
|
+
- A Clockify personal API key from **Profile settings -> API**
|
|
111
|
+
- [mise](https://mise.jdx.dev) for development from a repository checkout
|
|
112
|
+
|
|
113
|
+
Clockify does not provide OAuth2 for personal API access. The CLI uses a
|
|
114
|
+
personal API key and supports regional profiles.
|
|
115
|
+
|
|
116
|
+
### Installation
|
|
117
|
+
|
|
118
|
+
Install the published package with [uv](https://docs.astral.sh/uv/) or
|
|
119
|
+
[pipx](https://pipx.pypa.io/); it needs Python 3.14 or newer:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
uv tool install clockify-unofficial-cli
|
|
123
|
+
# or
|
|
124
|
+
pipx install clockify-unofficial-cli
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
To work on the CLI, install it from a checkout instead:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
git clone https://github.com/gajaguar/clockify-cli.git
|
|
131
|
+
cd clockify-cli
|
|
132
|
+
make install
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
`make install` installs the pinned toolchain, Python dependencies, Node-based
|
|
136
|
+
documentation tools, and the pre-commit hook.
|
|
137
|
+
|
|
138
|
+
## Usage
|
|
139
|
+
|
|
140
|
+
Log in interactively. The key is read from a hidden prompt, validated with
|
|
141
|
+
Clockify, and stored in the OS keyring:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
clockify auth login
|
|
145
|
+
clockify auth status
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Use standard input for CI or other non-interactive environments. Global
|
|
149
|
+
options must come before the command:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
export CLOCKIFY_API_KEY=...
|
|
153
|
+
clockify -o json auth status | jq .email
|
|
154
|
+
printf '%s' "$KEY" | clockify -p work auth login --with-token --region EU_CENTRAL_1
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Commands
|
|
158
|
+
|
|
159
|
+
- `auth login [--region] [--with-token] [--insecure-storage]` validates and
|
|
160
|
+
stores an API key.
|
|
161
|
+
- `auth status` shows the user, workspace, and credential source.
|
|
162
|
+
- `auth logout` removes the stored key and profile.
|
|
163
|
+
- `auth token` prints the raw key when explicitly requested.
|
|
164
|
+
- `config path` prints the settings file location.
|
|
165
|
+
- `config list` lists configured profiles.
|
|
166
|
+
- `config use NAME` sets the default profile.
|
|
167
|
+
|
|
168
|
+
Resource commands arrive in phases. See the
|
|
169
|
+
[roadmap](docs/ROADMAP.md) and [coverage matrix](docs/coverage.md) for their
|
|
170
|
+
status.
|
|
171
|
+
|
|
172
|
+
### Global options
|
|
173
|
+
|
|
174
|
+
- `-p, --profile`: select a stored profile. Environment variable:
|
|
175
|
+
`CLOCKIFY_PROFILE`.
|
|
176
|
+
- `-w, --workspace`: override the profile's workspace. Environment variable:
|
|
177
|
+
`CLOCKIFY_WORKSPACE`.
|
|
178
|
+
- `-o, --output`: select `table`, `json`, `jsonl`, `csv`, or `id`. Environment
|
|
179
|
+
variable: `CLOCKIFY_OUTPUT`.
|
|
180
|
+
- `--version`: print the installed version.
|
|
181
|
+
|
|
182
|
+
### Exit codes
|
|
183
|
+
|
|
184
|
+
Exit codes are stable for shell scripts:
|
|
185
|
+
|
|
186
|
+
- `0`: success.
|
|
187
|
+
- `1`: unexpected failure.
|
|
188
|
+
- `2`: invalid usage.
|
|
189
|
+
- `3`: configuration error.
|
|
190
|
+
- `4`: authentication failure.
|
|
191
|
+
- `5`: forbidden.
|
|
192
|
+
- `6`: resource not found.
|
|
193
|
+
- `7`: validation failure.
|
|
194
|
+
- `8`: rate limited.
|
|
195
|
+
- `9`: service unavailable.
|
|
196
|
+
|
|
197
|
+
## Configuration
|
|
198
|
+
|
|
199
|
+
The settings file is stored in the platform-specific configuration directory.
|
|
200
|
+
Run `clockify config path` to locate it. On Linux, the default is usually
|
|
201
|
+
`~/.config/clockify-cli/config.toml`.
|
|
202
|
+
|
|
203
|
+
- `CLOCKIFY_API_KEY`: read-only credential source for automation.
|
|
204
|
+
- `CLOCKIFY_PROFILE`: select the active profile.
|
|
205
|
+
- `CLOCKIFY_WORKSPACE`: override the profile's workspace.
|
|
206
|
+
- `CLOCKIFY_OUTPUT`: select the default output format.
|
|
207
|
+
- `CLOCKIFY_CLI_CONFIG_DIR`: override the configuration directory.
|
|
208
|
+
- `CLOCKIFY_TEST_API_KEY`: enable live test authentication.
|
|
209
|
+
|
|
210
|
+
Credential resolution uses environment, then the OS keyring, then the
|
|
211
|
+
opt-in plaintext fallback. The fallback requires
|
|
212
|
+
`auth login --insecure-storage` and writes a file with `0600` permissions.
|
|
213
|
+
|
|
214
|
+
## Development
|
|
215
|
+
|
|
216
|
+
Run these commands from the repository root:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
make install # toolchain, dependencies, and git hooks
|
|
220
|
+
make check # read-only quality gate
|
|
221
|
+
make fix # apply safe automated fixes
|
|
222
|
+
make test # pytest with a 90% coverage floor
|
|
223
|
+
make openapi-fetch # download Clockify's OpenAPI document
|
|
224
|
+
make coverage-report # compare coverage.md with the OpenAPI document
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Use `make help` for every target. Most targets accept `FILES="..."` to limit
|
|
228
|
+
their scope, for example:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
make md-lint FILES="README.md"
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Live tests are excluded from `make test`. They require
|
|
235
|
+
`CLOCKIFY_TEST_API_KEY` and a test workspace.
|
|
236
|
+
|
|
237
|
+
## Platform notes
|
|
238
|
+
|
|
239
|
+
- Headless Linux hosts may not provide a Secret Service keyring backend. Use
|
|
240
|
+
`CLOCKIFY_API_KEY` or the explicit `--insecure-storage` fallback.
|
|
241
|
+
- The SDK is a `uv` git dependency pinned to a tag, so installation requires
|
|
242
|
+
access to GitHub.
|
|
243
|
+
- Python 3.14 is the minimum version required by the CLI and SDK.
|
|
244
|
+
|
|
245
|
+
## Roadmap
|
|
246
|
+
|
|
247
|
+
- [x] Phase 0: foundation, authentication, profiles, renderers, and exit codes
|
|
248
|
+
- [x] Phase 1: workspace, user, project, task, tag, group, and entry commands
|
|
249
|
+
- [ ] Phase 2: core API completion
|
|
250
|
+
- [ ] Phase 3: reports
|
|
251
|
+
- [ ] Phase 4: time off, holidays, and approvals
|
|
252
|
+
- [ ] Phase 5: expenses and invoices
|
|
253
|
+
- [ ] Phase 6: scheduling, webhooks, and entity changes
|
|
254
|
+
- [ ] Phase 7: release hardening for `1.0.0`
|
|
255
|
+
|
|
256
|
+
See [`docs/ROADMAP.md`](docs/ROADMAP.md) for operation counts, dependencies,
|
|
257
|
+
and completion criteria.
|
|
258
|
+
|
|
259
|
+
## Open items
|
|
260
|
+
|
|
261
|
+
- Only the `GLOBAL` region host is verified against a live account.
|
|
262
|
+
- Plan-gated endpoints need a paid workspace for live verification.
|
|
263
|
+
- Clockify's per-plan rate limits are not fully documented upstream.
|
|
264
|
+
|
|
265
|
+
## Contributing
|
|
266
|
+
|
|
267
|
+
Bug reports, ideas and pull requests are welcome; see
|
|
268
|
+
[`CONTRIBUTING.md`](CONTRIBUTING.md) for the workflow.
|
|
269
|
+
|
|
270
|
+
## Security
|
|
271
|
+
|
|
272
|
+
Report suspected vulnerabilities to <dev@gajaguar.com> instead of opening a
|
|
273
|
+
public issue. A Clockify API key grants access to a workspace. Never commit a
|
|
274
|
+
key, and rotate it immediately if it is exposed.
|
|
275
|
+
|
|
276
|
+
## License
|
|
277
|
+
|
|
278
|
+
Distributed under the MIT License. See [`LICENSE`](LICENSE) for details.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
clockify_unofficial_cli/__init__.py,sha256=yJLWGpnUNp7fx-JPaj7UUcwqLduST3KrGtFsE17uBTw,84
|
|
2
|
+
clockify_unofficial_cli/__main__.py,sha256=5rtGYz41aKZjC-wZ8R6j2glSYd92KlmO59jOXVz3YGw,52
|
|
3
|
+
clockify_unofficial_cli/_version.py,sha256=oG_VizVo0Tpcm6c8z4J2w3dtAf0VYfOV6qDmjuwhPx8,89
|
|
4
|
+
clockify_unofficial_cli/main.py,sha256=4KS9NnaPWcJsso_pf230hGEz9B0rGQ0XSVMkUyNU-rw,5485
|
|
5
|
+
clockify_unofficial_cli/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
clockify_unofficial_cli/auth/credentials.py,sha256=YaXAvy_mgjHaoGBXiSq-hcFX-xNwjgJ1btZY5Eu2DlM,1859
|
|
7
|
+
clockify_unofficial_cli/auth/env_store.py,sha256=lCvJF4Tpthlu7Q5lXsNHfYMGCgA5woy2WyADGfo4Kcc,833
|
|
8
|
+
clockify_unofficial_cli/auth/file_store.py,sha256=hzbwOk3yd8VpOoyW7SNrL71TJlPnpzDvAfLbH7Nk9gQ,1640
|
|
9
|
+
clockify_unofficial_cli/auth/keyring_store.py,sha256=yKu07fGhvBrS9lthorU_BKeSpCNczbWKEGE5WlVbdRI,2048
|
|
10
|
+
clockify_unofficial_cli/auth/resolver.py,sha256=_wYvcrEck_YcV4KV-cq9cb1xyQhWLCzpOqaAlU4SSCU,1336
|
|
11
|
+
clockify_unofficial_cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
clockify_unofficial_cli/commands/auth.py,sha256=A_HRxU6XsNN6JOOHPjB5jQk1oR4HqVRRNLJHwjqIHeg,6159
|
|
13
|
+
clockify_unofficial_cli/commands/client.py,sha256=fhvqfRWtJPE-M6yx8S-wtPX7lcc-d225AAq52cAQbkQ,4639
|
|
14
|
+
clockify_unofficial_cli/commands/config.py,sha256=lpYaetBwQGJOOLTalnZ3xM-ylQtNk0HuetgpM6V8-TM,1913
|
|
15
|
+
clockify_unofficial_cli/commands/custom_field.py,sha256=E-Yh0Dvu69D3zH-_c2cl5E_bPC6gDhGkCfJgk2Y4Ki8,5623
|
|
16
|
+
clockify_unofficial_cli/commands/entry.py,sha256=p3_FSBknb-zT_13EqQw9RpBctPIceZRB3Tq4pheFY6w,10608
|
|
17
|
+
clockify_unofficial_cli/commands/group.py,sha256=3eajCqay1ubZ3PB9flYmfdjJb7Pk3x197MSVds1fJSM,3173
|
|
18
|
+
clockify_unofficial_cli/commands/project.py,sha256=hMURbxm_xT7M83D2iYjqXfcxd-yxThh8sCTFFKtrtiA,6612
|
|
19
|
+
clockify_unofficial_cli/commands/tag.py,sha256=Wcwi6Fqx5YAmJ43PYV62vVpibuTI7hRPzpxyumpLnWQ,3669
|
|
20
|
+
clockify_unofficial_cli/commands/task.py,sha256=JRLJYdlsbT2hhXTnQF5Rj9Bp3CmfzzSF_yvJnC3pSxw,7091
|
|
21
|
+
clockify_unofficial_cli/commands/timer_shortcuts.py,sha256=Kofuyn51G6uSp05xJtjTyqKcy6Z5V0dtDyb_NOyyU2E,6649
|
|
22
|
+
clockify_unofficial_cli/commands/user.py,sha256=bVzzHqlq3Ecfa2pDJD3a7tKYPjLHF6ZCfIcDAO8vbKE,1602
|
|
23
|
+
clockify_unofficial_cli/commands/workspace.py,sha256=KNLde_V1k1hIM0hfY8pdvlqkxCy4PN8AanXctH03J30,3084
|
|
24
|
+
clockify_unofficial_cli/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
clockify_unofficial_cli/config/paths.py,sha256=S-pOEqu37uxpEWEeLiYRSdN4Z1UAr3XSfRnGHfuDurQ,550
|
|
26
|
+
clockify_unofficial_cli/config/settings.py,sha256=ATR5iHVLxRS3sST8DbAsjN5bqEjJ4SwztwpGzKhBq8M,2267
|
|
27
|
+
clockify_unofficial_cli/config/store.py,sha256=dr61u2csyPHC2HRgvMrdVs3dnbSnGMAyxXkNx2WCyXU,1993
|
|
28
|
+
clockify_unofficial_cli/output/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
+
clockify_unofficial_cli/output/columns.py,sha256=om8bShsirGSDdkEmkA3J5ZTRBoAeCuzp4PWcZ0CK0i4,2006
|
|
30
|
+
clockify_unofficial_cli/output/formats.py,sha256=cyNvtQwHCpSN1dnmDg7ryfupYSVlP28eDb_UFNqKeE4,2741
|
|
31
|
+
clockify_unofficial_cli/output/registry.py,sha256=CYEszlz6527sIxrqoFuEFbEa3lt6xtVZ59lGcL5D48s,1063
|
|
32
|
+
clockify_unofficial_cli/output/renderer.py,sha256=MMHypFIbg4nl_lDv7A8pUb6yE0WFTZlh0XXo1xNpfHU,1971
|
|
33
|
+
clockify_unofficial_cli/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
+
clockify_unofficial_cli/runtime/client_factory.py,sha256=mnlBQPvpp4R3gKIxuzqyX8qojF1PfIsdBDX-ncVKB0Y,1429
|
|
35
|
+
clockify_unofficial_cli/runtime/context.py,sha256=7Ydx0ht261l5Ucnf_1dZ31GvRlS6tym1DIQm0tXQ4Lk,3641
|
|
36
|
+
clockify_unofficial_cli/runtime/errors.py,sha256=4cRM3nJ4wQVMELOmVP5S3nzLokKRmkOWa24GR4kMZkU,3071
|
|
37
|
+
clockify_unofficial_cli/runtime/exit_codes.py,sha256=y0DqVZyc2Lj6bdkMozgY5Gr3TkvlCWdqcTpfJf05vxQ,305
|
|
38
|
+
clockify_unofficial_cli/runtime/params.py,sha256=zxXphoRjqxn-CnauIyd4_LuVpi8d-g4AKsXGsZWkn1M,1720
|
|
39
|
+
clockify_unofficial_cli/runtime/prompts.py,sha256=sRv1ILXvmAJK2ZKoqwkV9uOu7C7fG7mQoMGCeWlrcGE,754
|
|
40
|
+
clockify_unofficial_cli/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
+
clockify_unofficial_cli/services/listing.py,sha256=zO7LPYgkkSvPZzfQVF793XAdGp8QnSrGFZwg3Tqi0lQ,1715
|
|
42
|
+
clockify_unofficial_cli/services/parsing.py,sha256=X1nYxLcJSBtSsVsYoFLH2OzECgpFb3kQyLJ3t0lRevE,4300
|
|
43
|
+
clockify_unofficial_cli/services/resolve.py,sha256=i9p2KGftA-bnCHc-LoSPNcI0gstpSSjb_Hxq9DAGvj8,4309
|
|
44
|
+
clockify_unofficial_cli/services/timer.py,sha256=qrlA2PZMFqrsuRnayao0VN5l4NYz2d_Sk4OQOhz6LDI,4231
|
|
45
|
+
clockify_unofficial_cli-0.2.0.dist-info/METADATA,sha256=jWLAuF8SXp8LFIBkvc61UeOqyKcchwVVvKRvgRCHsro,9480
|
|
46
|
+
clockify_unofficial_cli-0.2.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
47
|
+
clockify_unofficial_cli-0.2.0.dist-info/entry_points.txt,sha256=IWdqckOWVaZtCHzLKGkzubMhkURrAyFobCnBP5D8veg,62
|
|
48
|
+
clockify_unofficial_cli-0.2.0.dist-info/licenses/LICENSE,sha256=AIJIXGHfD5sOG6LME47OMGdplzyYxbE4vaSXLcWOj-c,1113
|
|
49
|
+
clockify_unofficial_cli-0.2.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Gerardo Antonio Gerónimo Vasconcelos <dev@gajaguar.com>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|