asana-api-cli 2.1.1__tar.gz → 3.0.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.
Files changed (35) hide show
  1. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/PKG-INFO +77 -33
  2. asana_api_cli-2.1.1/src/asana_api_cli.egg-info/PKG-INFO → asana_api_cli-3.0.0/README.md +65 -49
  3. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/pyproject.toml +17 -3
  4. asana_api_cli-3.0.0/src/asana_api_cli/cli.py +1107 -0
  5. asana_api_cli-3.0.0/src/asana_api_cli/click_ext.py +481 -0
  6. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/src/asana_api_cli/formatter.py +9 -5
  7. asana_api_cli-3.0.0/src/asana_api_cli/redactor.py +216 -0
  8. asana_api_cli-3.0.0/src/asana_api_cli/session.py +363 -0
  9. asana_api_cli-3.0.0/src/asana_api_cli/structured_arg.py +203 -0
  10. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/src/asana_api_cli/version.py +3 -2
  11. asana_api_cli-2.1.1/README.md → asana_api_cli-3.0.0/src/asana_api_cli.egg-info/PKG-INFO +93 -30
  12. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/src/asana_api_cli.egg-info/SOURCES.txt +4 -0
  13. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/src/asana_api_cli.egg-info/requires.txt +1 -1
  14. asana_api_cli-3.0.0/tests/test_cli.py +639 -0
  15. asana_api_cli-3.0.0/tests/test_cli_invocation.py +711 -0
  16. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/tests/test_cli_surface.py +18 -0
  17. asana_api_cli-3.0.0/tests/test_click_ext.py +326 -0
  18. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/tests/test_formatter.py +24 -17
  19. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/tests/test_py310_compat.py +10 -3
  20. asana_api_cli-2.1.1/tests/test_session.py → asana_api_cli-3.0.0/tests/test_redactor.py +35 -157
  21. asana_api_cli-3.0.0/tests/test_session.py +404 -0
  22. asana_api_cli-3.0.0/tests/test_structured_arg.py +217 -0
  23. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/tests/test_version.py +9 -6
  24. asana_api_cli-2.1.1/src/asana_api_cli/cli.py +0 -659
  25. asana_api_cli-2.1.1/src/asana_api_cli/click_ext.py +0 -265
  26. asana_api_cli-2.1.1/src/asana_api_cli/session.py +0 -413
  27. asana_api_cli-2.1.1/tests/test_cli.py +0 -259
  28. asana_api_cli-2.1.1/tests/test_cli_invocation.py +0 -489
  29. asana_api_cli-2.1.1/tests/test_click_ext.py +0 -176
  30. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/LICENSE +0 -0
  31. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/setup.cfg +0 -0
  32. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/src/asana_api_cli/__init__.py +0 -0
  33. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/src/asana_api_cli.egg-info/dependency_links.txt +0 -0
  34. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/src/asana_api_cli.egg-info/entry_points.txt +0 -0
  35. {asana_api_cli-2.1.1 → asana_api_cli-3.0.0}/src/asana_api_cli.egg-info/top_level.txt +0 -0
@@ -1,20 +1,29 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: asana-api-cli
3
- Version: 2.1.1
3
+ Version: 3.0.0
4
4
  Summary: Command-line wrapper around the official Asana Python SDK
5
- Author-email: Masanao Izumo <asana@masanao.site>
5
+ Author: Masanao Izumo
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/izumo-m/asana-api-cli
8
8
  Project-URL: Repository, https://github.com/izumo-m/asana-api-cli
9
9
  Project-URL: Issues, https://github.com/izumo-m/asana-api-cli/issues
10
10
  Project-URL: Changelog, https://github.com/izumo-m/asana-api-cli/blob/main/CHANGELOG.md
11
+ Keywords: asana,cli,python-asana
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Topic :: Office/Business :: Groupware
19
+ Classifier: Topic :: Utilities
11
20
  Requires-Python: >=3.10
12
21
  Description-Content-Type: text/markdown
13
22
  License-File: LICENSE
14
23
  Requires-Dist: click>=8.0
15
24
  Requires-Dist: jq>=1.6
16
25
  Requires-Dist: tabulate>=0.9
17
- Requires-Dist: asana<6,>=5.2
26
+ Requires-Dist: asana<6,>=5.0.2
18
27
  Dynamic: license-file
19
28
 
20
29
  # asana-api-cli
@@ -159,14 +168,14 @@ asana-api workspaces get-workspaces
159
168
  asana-api projects get-projects-for-workspace
160
169
  asana-api projects get-projects --workspace <WORKSPACE_GID>
161
170
 
162
- # List tasks (first page only by default)
171
+ # List every task in a project (walks every page by default)
163
172
  asana-api tasks get-tasks --project <PROJECT_GID>
164
173
 
165
174
  # Preview the first few items
166
- asana-api tasks get-tasks --project <PROJECT_GID> --max-items 5
175
+ asana-api tasks get-tasks --project <PROJECT_GID> --item-limit 5
167
176
 
168
- # Fetch every item across pages
169
- asana-api tasks get-tasks --project <PROJECT_GID> --all-items
177
+ # One HTTP call: return the first page + the next_page cursor
178
+ asana-api tasks get-tasks --project <PROJECT_GID> --limit 100 --full-payload
170
179
 
171
180
  # Single task
172
181
  asana-api tasks get-task --task <TASK_GID>
@@ -203,33 +212,50 @@ the Asana API accepts in place of workspace.
203
212
 
204
213
  ## Pagination
205
214
 
206
- List commands (e.g. `tasks get-tasks`) return paginated results. The CLI
207
- provides four ways to control how much is fetched:
208
-
209
- | Option | Behavior |
210
- |--------|----------|
211
- | (none) | Fetch a single page (Asana default: 100 items) |
212
- | `--max-items N` | Fetch up to N items, auto-paginating across pages. The last request is automatically capped to the remaining count. |
213
- | `--all-items` | Fetch every page until the server reports no more |
214
- | `--offset <TOKEN>` | Manual pagination: pass the `next_page.offset` token from the previous response |
215
-
216
- `--max-items` and `--all-items` are mutually exclusive.
217
-
218
- `--page-size N` tunes the per-page request size (Asana API requires 1-100,
219
- default 100). Rarely needed combine with `--all-items` or `--max-items` only
220
- when the default doesn't suit (e.g. very large response items).
215
+ Paginatable commands like `tasks get-tasks` expose every pagination input
216
+ of the `python-asana` SDK as a CLI flag. Each flag maps 1:1 to an SDK
217
+ `Configuration` property, `opts` key, or method kwarg, so you can probe
218
+ SDK behavior from the shell before writing any Python.
219
+
220
+ | CLI flag | SDK input | Effect |
221
+ |----------|-----------|--------|
222
+ | (none) | | SDK default: walks every page automatically and outputs a flat JSON list of items |
223
+ | `--limit N` | `opts["limit"]` | Per-page size sent to the server (Asana API requires 1-100) |
224
+ | `--offset <TOKEN>` | `opts["offset"]` | Pagination cursor (the `next_page.offset` from a previous response) |
225
+ | `--page-limit N` | `Configuration.page_limit` | Same as `--limit` via Configuration (default: 100). Silently ignored when `--no-return-page-iterator` or `--full-payload` is set |
226
+ | `--item-limit N` | kwarg `item_limit=N` | Stop after N items have been collected. Silently ignored when `--no-return-page-iterator` or `--full-payload` is set |
227
+ | `--return-page-iterator` / `--no-return-page-iterator` | `Configuration.return_page_iterator` | Toggle the SDK page iterator (default: enabled). `--no-return-page-iterator` disables auto-pagination — the command runs one HTTP request and outputs the raw `{data, next_page}` dict |
228
+ | `--full-payload` | kwarg `full_payload=True` | Same effect as `--no-return-page-iterator` (per-call kwarg form) |
221
229
 
222
230
  ```bash
223
- # Auto-paginate up to 250 items
224
- asana-api tasks get-tasks --project <PID> --max-items 250
231
+ # Default: walk every page, return a flat list of items
232
+ asana-api tasks get-tasks --project <PID>
225
233
 
226
- # Fetch everything
227
- asana-api tasks get-tasks --project <PID> --all-items
234
+ # Cap the result to the first 250 items
235
+ asana-api tasks get-tasks --project <PID> --item-limit 250
228
236
 
229
- # Manual pagination using the offset token
237
+ # Single HTTP call: one page + next_page cursor
238
+ asana-api tasks get-tasks --project <PID> --limit 100 --no-return-page-iterator
239
+
240
+ # Resume from a cursor
230
241
  asana-api tasks get-tasks --project <PID> --offset <TOKEN>
231
242
  ```
232
243
 
244
+ ### Deprecated flags (v2.x → v3.0)
245
+
246
+ The following v2 flags are retained as deprecation aliases. Each emits a
247
+ stderr warning and forwards to the corresponding v3 flag; they will be
248
+ removed in a future release.
249
+
250
+ | Deprecated | Replacement |
251
+ |------------|-------------|
252
+ | `--all-items` | (no-op; walking every page is now the default) |
253
+ | `--page-size N` | `--limit N` |
254
+ | `--max-items N` | `--item-limit N` |
255
+
256
+ Combining a deprecated alias with its v3 counterpart (e.g. `--page-size`
257
+ together with `--limit`) is rejected with a usage error.
258
+
233
259
  ## Global options
234
260
 
235
261
  These options work at any level of the command tree, so the following are
@@ -242,17 +268,35 @@ asana-api tasks get-tasks --project <PID> --debug
242
268
 
243
269
  When the same option is given at multiple levels, the later one wins.
244
270
 
271
+ Every non-extension flag below maps 1:1 to a property of
272
+ `asana.Configuration` (or a per-call SDK kwarg) — see
273
+ [`docs/cli-sdk-mapping.md`](https://github.com/izumo-m/asana-api-cli/blob/main/docs/cli-sdk-mapping.md)
274
+ for the exact destination of each.
275
+
245
276
  | Option | Description |
246
277
  |--------|-------------|
247
278
  | `--access-token TOKEN` | Asana personal access token (default: `$ASANA_ACCESS_TOKEN`) |
248
279
  | `--host URL` | Override API base URL (default: `https://app.asana.com/api/1.0`) |
249
280
  | `--proxy URL` | HTTP/HTTPS proxy URL |
250
- | `--no-verify-ssl` | Disable TLS certificate verification (insecure) |
251
- | `--ca-cert PATH` | Path to a PEM bundle of trusted CA certificates |
252
- | `--retries N` | Number of retries on 429/5xx responses (default: 5) |
253
- | `--timeout SECONDS` | Per-request timeout in seconds |
254
- | `--temp-dir PATH` | Directory for temporary downloads |
255
- | `--debug` | Print HTTP request/response traces for troubleshooting (Authorization values are masked). |
281
+ | `--verify-ssl / --no-verify-ssl` | Toggle TLS certificate verification (default: True) |
282
+ | `--ssl-ca-cert PATH` | Path to a PEM bundle of trusted CA certificates |
283
+ | `--cert-file PATH` | Client TLS certificate for mTLS |
284
+ | `--key-file PATH` | Client TLS private key for mTLS |
285
+ | `--assert-hostname / --no-assert-hostname` | Toggle urllib3 hostname assertion (tri-state: unspecified → urllib3 default) |
286
+ | `--retry-strategy VALUE` | Override `Configuration.retry_strategy` fields. `VALUE` accepts shorthand (`total=5,backoff_factor=1.5,raise_on_status=false`), a JSON object (`'{"total":5,"status_forcelist":[429,500]}'`), or `@path` to a JSON file. List-typed fields require the JSON form. See [`docs/cli-sdk-mapping.md`](https://github.com/izumo-m/asana-api-cli/blob/main/docs/cli-sdk-mapping.md#structured-value-format-api-key-api-key-prefix-retry-strategy) for the field list |
287
+ | `--request-timeout SECONDS` | Per-request timeout in seconds |
288
+ | `--connection-pool-maxsize N` | Max urllib3 connections cached per host (default: cpu_count × 5) |
289
+ | `--temp-folder-path PATH` | Directory for temporary downloads |
290
+ | `--safe-chars-for-path-param S` | Extra characters treated as safe when percent-encoding path parameters |
291
+ | `--logger-format FMT` | Python logging format string for the SDK loggers |
292
+ | `--logger-file PATH` | Path the SDK loggers write to when set |
293
+ | `--multibyte-filenames` | Emit RFC 5987 `filename*=UTF-8''<percent-encoded>` on multipart uploads so Asana decodes non-ASCII attachment filenames correctly |
294
+ | `--debug` | Print HTTP request/response traces to stderr for troubleshooting (`Authorization` values are masked) |
295
+
296
+ Asana only accepts Bearer-token authentication, so `--username`,
297
+ `--password`, `--api-key`, and `--api-key-prefix` are also exposed for
298
+ 1:1 parity with `Configuration` but are inert as of python-asana 5.2.4
299
+ — see the disclosure in [`docs/cli-sdk-mapping.md`](https://github.com/izumo-m/asana-api-cli/blob/main/docs/cli-sdk-mapping.md#no-op-auth-properties).
256
300
 
257
301
  ## Development
258
302
 
@@ -1,22 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: asana-api-cli
3
- Version: 2.1.1
4
- Summary: Command-line wrapper around the official Asana Python SDK
5
- Author-email: Masanao Izumo <asana@masanao.site>
6
- License-Expression: MIT
7
- Project-URL: Homepage, https://github.com/izumo-m/asana-api-cli
8
- Project-URL: Repository, https://github.com/izumo-m/asana-api-cli
9
- Project-URL: Issues, https://github.com/izumo-m/asana-api-cli/issues
10
- Project-URL: Changelog, https://github.com/izumo-m/asana-api-cli/blob/main/CHANGELOG.md
11
- Requires-Python: >=3.10
12
- Description-Content-Type: text/markdown
13
- License-File: LICENSE
14
- Requires-Dist: click>=8.0
15
- Requires-Dist: jq>=1.6
16
- Requires-Dist: tabulate>=0.9
17
- Requires-Dist: asana<6,>=5.2
18
- Dynamic: license-file
19
-
20
1
  # asana-api-cli
21
2
 
22
3
  A CLI that exposes **every method of the official
@@ -159,14 +140,14 @@ asana-api workspaces get-workspaces
159
140
  asana-api projects get-projects-for-workspace
160
141
  asana-api projects get-projects --workspace <WORKSPACE_GID>
161
142
 
162
- # List tasks (first page only by default)
143
+ # List every task in a project (walks every page by default)
163
144
  asana-api tasks get-tasks --project <PROJECT_GID>
164
145
 
165
146
  # Preview the first few items
166
- asana-api tasks get-tasks --project <PROJECT_GID> --max-items 5
147
+ asana-api tasks get-tasks --project <PROJECT_GID> --item-limit 5
167
148
 
168
- # Fetch every item across pages
169
- asana-api tasks get-tasks --project <PROJECT_GID> --all-items
149
+ # One HTTP call: return the first page + the next_page cursor
150
+ asana-api tasks get-tasks --project <PROJECT_GID> --limit 100 --full-payload
170
151
 
171
152
  # Single task
172
153
  asana-api tasks get-task --task <TASK_GID>
@@ -203,33 +184,50 @@ the Asana API accepts in place of workspace.
203
184
 
204
185
  ## Pagination
205
186
 
206
- List commands (e.g. `tasks get-tasks`) return paginated results. The CLI
207
- provides four ways to control how much is fetched:
208
-
209
- | Option | Behavior |
210
- |--------|----------|
211
- | (none) | Fetch a single page (Asana default: 100 items) |
212
- | `--max-items N` | Fetch up to N items, auto-paginating across pages. The last request is automatically capped to the remaining count. |
213
- | `--all-items` | Fetch every page until the server reports no more |
214
- | `--offset <TOKEN>` | Manual pagination: pass the `next_page.offset` token from the previous response |
215
-
216
- `--max-items` and `--all-items` are mutually exclusive.
217
-
218
- `--page-size N` tunes the per-page request size (Asana API requires 1-100,
219
- default 100). Rarely needed combine with `--all-items` or `--max-items` only
220
- when the default doesn't suit (e.g. very large response items).
187
+ Paginatable commands like `tasks get-tasks` expose every pagination input
188
+ of the `python-asana` SDK as a CLI flag. Each flag maps 1:1 to an SDK
189
+ `Configuration` property, `opts` key, or method kwarg, so you can probe
190
+ SDK behavior from the shell before writing any Python.
191
+
192
+ | CLI flag | SDK input | Effect |
193
+ |----------|-----------|--------|
194
+ | (none) | | SDK default: walks every page automatically and outputs a flat JSON list of items |
195
+ | `--limit N` | `opts["limit"]` | Per-page size sent to the server (Asana API requires 1-100) |
196
+ | `--offset <TOKEN>` | `opts["offset"]` | Pagination cursor (the `next_page.offset` from a previous response) |
197
+ | `--page-limit N` | `Configuration.page_limit` | Same as `--limit` via Configuration (default: 100). Silently ignored when `--no-return-page-iterator` or `--full-payload` is set |
198
+ | `--item-limit N` | kwarg `item_limit=N` | Stop after N items have been collected. Silently ignored when `--no-return-page-iterator` or `--full-payload` is set |
199
+ | `--return-page-iterator` / `--no-return-page-iterator` | `Configuration.return_page_iterator` | Toggle the SDK page iterator (default: enabled). `--no-return-page-iterator` disables auto-pagination — the command runs one HTTP request and outputs the raw `{data, next_page}` dict |
200
+ | `--full-payload` | kwarg `full_payload=True` | Same effect as `--no-return-page-iterator` (per-call kwarg form) |
221
201
 
222
202
  ```bash
223
- # Auto-paginate up to 250 items
224
- asana-api tasks get-tasks --project <PID> --max-items 250
203
+ # Default: walk every page, return a flat list of items
204
+ asana-api tasks get-tasks --project <PID>
205
+
206
+ # Cap the result to the first 250 items
207
+ asana-api tasks get-tasks --project <PID> --item-limit 250
225
208
 
226
- # Fetch everything
227
- asana-api tasks get-tasks --project <PID> --all-items
209
+ # Single HTTP call: one page + next_page cursor
210
+ asana-api tasks get-tasks --project <PID> --limit 100 --no-return-page-iterator
228
211
 
229
- # Manual pagination using the offset token
212
+ # Resume from a cursor
230
213
  asana-api tasks get-tasks --project <PID> --offset <TOKEN>
231
214
  ```
232
215
 
216
+ ### Deprecated flags (v2.x → v3.0)
217
+
218
+ The following v2 flags are retained as deprecation aliases. Each emits a
219
+ stderr warning and forwards to the corresponding v3 flag; they will be
220
+ removed in a future release.
221
+
222
+ | Deprecated | Replacement |
223
+ |------------|-------------|
224
+ | `--all-items` | (no-op; walking every page is now the default) |
225
+ | `--page-size N` | `--limit N` |
226
+ | `--max-items N` | `--item-limit N` |
227
+
228
+ Combining a deprecated alias with its v3 counterpart (e.g. `--page-size`
229
+ together with `--limit`) is rejected with a usage error.
230
+
233
231
  ## Global options
234
232
 
235
233
  These options work at any level of the command tree, so the following are
@@ -242,17 +240,35 @@ asana-api tasks get-tasks --project <PID> --debug
242
240
 
243
241
  When the same option is given at multiple levels, the later one wins.
244
242
 
243
+ Every non-extension flag below maps 1:1 to a property of
244
+ `asana.Configuration` (or a per-call SDK kwarg) — see
245
+ [`docs/cli-sdk-mapping.md`](https://github.com/izumo-m/asana-api-cli/blob/main/docs/cli-sdk-mapping.md)
246
+ for the exact destination of each.
247
+
245
248
  | Option | Description |
246
249
  |--------|-------------|
247
250
  | `--access-token TOKEN` | Asana personal access token (default: `$ASANA_ACCESS_TOKEN`) |
248
251
  | `--host URL` | Override API base URL (default: `https://app.asana.com/api/1.0`) |
249
252
  | `--proxy URL` | HTTP/HTTPS proxy URL |
250
- | `--no-verify-ssl` | Disable TLS certificate verification (insecure) |
251
- | `--ca-cert PATH` | Path to a PEM bundle of trusted CA certificates |
252
- | `--retries N` | Number of retries on 429/5xx responses (default: 5) |
253
- | `--timeout SECONDS` | Per-request timeout in seconds |
254
- | `--temp-dir PATH` | Directory for temporary downloads |
255
- | `--debug` | Print HTTP request/response traces for troubleshooting (Authorization values are masked). |
253
+ | `--verify-ssl / --no-verify-ssl` | Toggle TLS certificate verification (default: True) |
254
+ | `--ssl-ca-cert PATH` | Path to a PEM bundle of trusted CA certificates |
255
+ | `--cert-file PATH` | Client TLS certificate for mTLS |
256
+ | `--key-file PATH` | Client TLS private key for mTLS |
257
+ | `--assert-hostname / --no-assert-hostname` | Toggle urllib3 hostname assertion (tri-state: unspecified → urllib3 default) |
258
+ | `--retry-strategy VALUE` | Override `Configuration.retry_strategy` fields. `VALUE` accepts shorthand (`total=5,backoff_factor=1.5,raise_on_status=false`), a JSON object (`'{"total":5,"status_forcelist":[429,500]}'`), or `@path` to a JSON file. List-typed fields require the JSON form. See [`docs/cli-sdk-mapping.md`](https://github.com/izumo-m/asana-api-cli/blob/main/docs/cli-sdk-mapping.md#structured-value-format-api-key-api-key-prefix-retry-strategy) for the field list |
259
+ | `--request-timeout SECONDS` | Per-request timeout in seconds |
260
+ | `--connection-pool-maxsize N` | Max urllib3 connections cached per host (default: cpu_count × 5) |
261
+ | `--temp-folder-path PATH` | Directory for temporary downloads |
262
+ | `--safe-chars-for-path-param S` | Extra characters treated as safe when percent-encoding path parameters |
263
+ | `--logger-format FMT` | Python logging format string for the SDK loggers |
264
+ | `--logger-file PATH` | Path the SDK loggers write to when set |
265
+ | `--multibyte-filenames` | Emit RFC 5987 `filename*=UTF-8''<percent-encoded>` on multipart uploads so Asana decodes non-ASCII attachment filenames correctly |
266
+ | `--debug` | Print HTTP request/response traces to stderr for troubleshooting (`Authorization` values are masked) |
267
+
268
+ Asana only accepts Bearer-token authentication, so `--username`,
269
+ `--password`, `--api-key`, and `--api-key-prefix` are also exposed for
270
+ 1:1 parity with `Configuration` but are inert as of python-asana 5.2.4
271
+ — see the disclosure in [`docs/cli-sdk-mapping.md`](https://github.com/izumo-m/asana-api-cli/blob/main/docs/cli-sdk-mapping.md#no-op-auth-properties).
256
272
 
257
273
  ## Development
258
274
 
@@ -1,16 +1,27 @@
1
1
  [project]
2
2
  name = "asana-api-cli"
3
- version = "2.1.1"
3
+ version = "3.0.0"
4
4
  description = "Command-line wrapper around the official Asana Python SDK"
5
- authors = [{name = "Masanao Izumo", email = "asana@masanao.site"}]
5
+ authors = [{name = "Masanao Izumo"}]
6
6
  readme = "README.md"
7
7
  license = "MIT"
8
8
  requires-python = ">=3.10"
9
+ keywords = ["asana", "cli", "python-asana"]
10
+ classifiers = [
11
+ "Development Status :: 5 - Production/Stable",
12
+ "Environment :: Console",
13
+ "Intended Audience :: Developers",
14
+ "Operating System :: OS Independent",
15
+ "Programming Language :: Python :: 3",
16
+ "Programming Language :: Python :: 3 :: Only",
17
+ "Topic :: Office/Business :: Groupware",
18
+ "Topic :: Utilities",
19
+ ]
9
20
  dependencies = [
10
21
  "click>=8.0",
11
22
  "jq>=1.6",
12
23
  "tabulate>=0.9",
13
- "asana>=5.2,<6",
24
+ "asana>=5.0.2,<6",
14
25
  ]
15
26
 
16
27
  [project.urls]
@@ -30,6 +41,8 @@ dev = [
30
41
  "build>=1,<2",
31
42
  "twine>=6,<7",
32
43
  "vermin>=1.6,<2",
44
+ "vcrpy>=6",
45
+ "pytest-recording>=0.13",
33
46
  ]
34
47
 
35
48
  [build-system]
@@ -80,5 +93,6 @@ no_parse_comments = true
80
93
 
81
94
  [tool.pytest.ini_options]
82
95
  testpaths = ["tests"]
96
+ pythonpath = ["tests"]
83
97
  addopts = ""
84
98
  disable_test_id_escaping_and_forfeit_all_rights_to_community_support = true