taskbadger 1.3.1__tar.gz → 1.3.3__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 (57) hide show
  1. {taskbadger-1.3.1 → taskbadger-1.3.3}/PKG-INFO +6 -5
  2. {taskbadger-1.3.1 → taskbadger-1.3.3}/pyproject.toml +11 -7
  3. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/celery.py +19 -8
  4. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/decorators.py +2 -2
  5. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/safe_sdk.py +4 -4
  6. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/sdk.py +9 -0
  7. {taskbadger-1.3.1 → taskbadger-1.3.3}/LICENSE +0 -0
  8. {taskbadger-1.3.1 → taskbadger-1.3.3}/README.md +0 -0
  9. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/__init__.py +0 -0
  10. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/cli/__init__.py +0 -0
  11. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/cli/basics.py +0 -0
  12. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/cli/list_tasks.py +0 -0
  13. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/cli/utils.py +0 -0
  14. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/cli/wrapper.py +0 -0
  15. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/cli_main.py +0 -0
  16. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/config.py +0 -0
  17. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/exceptions.py +0 -0
  18. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/integrations.py +0 -0
  19. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/__init__.py +0 -0
  20. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/__init__.py +0 -0
  21. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/action_endpoints/__init__.py +0 -0
  22. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/action_endpoints/action_cancel.py +0 -0
  23. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/action_endpoints/action_create.py +0 -0
  24. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/action_endpoints/action_get.py +0 -0
  25. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/action_endpoints/action_list.py +0 -0
  26. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/action_endpoints/action_partial_update.py +0 -0
  27. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/action_endpoints/action_update.py +0 -0
  28. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/task_endpoints/__init__.py +0 -0
  29. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/task_endpoints/task_cancel.py +0 -0
  30. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/task_endpoints/task_create.py +0 -0
  31. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/task_endpoints/task_get.py +0 -0
  32. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/task_endpoints/task_list.py +0 -0
  33. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/task_endpoints/task_partial_update.py +0 -0
  34. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/api/task_endpoints/task_update.py +0 -0
  35. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/client.py +0 -0
  36. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/errors.py +0 -0
  37. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/__init__.py +0 -0
  38. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/action.py +0 -0
  39. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/action_config.py +0 -0
  40. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/action_request.py +0 -0
  41. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/action_request_config.py +0 -0
  42. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/paginated_task_list.py +0 -0
  43. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/patched_action_request.py +0 -0
  44. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/patched_action_request_config.py +0 -0
  45. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/patched_task_request.py +0 -0
  46. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/patched_task_request_data.py +0 -0
  47. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/status_enum.py +0 -0
  48. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/task.py +0 -0
  49. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/task_data.py +0 -0
  50. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/task_request.py +0 -0
  51. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/models/task_request_data.py +0 -0
  52. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/py.typed +0 -0
  53. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/internal/types.py +0 -0
  54. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/mug.py +0 -0
  55. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/process.py +0 -0
  56. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/systems/__init__.py +0 -0
  57. {taskbadger-1.3.1 → taskbadger-1.3.3}/taskbadger/systems/celery.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: taskbadger
3
- Version: 1.3.1
3
+ Version: 1.3.3
4
4
  Summary: The official Python SDK for Task Badger
5
5
  Home-page: https://taskbadger.net/
6
6
  License: Apache-2.0
@@ -23,14 +23,15 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
23
  Provides-Extra: celery
24
24
  Requires-Dist: attrs (>=21.3.0)
25
25
  Requires-Dist: celery (>=4.0.0,<6.0.0) ; extra == "celery"
26
- Requires-Dist: httpx (>=0.20.0,<0.25.0)
26
+ Requires-Dist: httpx (>=0.20.0,<0.28.0)
27
27
  Requires-Dist: importlib-metadata (>=1.0,<2.0) ; python_version < "3.8"
28
28
  Requires-Dist: python-dateutil (>=2.8.0,<3.0.0)
29
- Requires-Dist: tomlkit (>=0.11.6,<0.12.0)
30
- Requires-Dist: typer[all] (>=0.9.0,<0.10.0)
29
+ Requires-Dist: tomlkit (>=0.12.5,<0.13.0)
30
+ Requires-Dist: typer[all] (<0.10.0)
31
31
  Requires-Dist: typing-extensions (>=4.7.1,<5.0.0) ; python_version == "3.9"
32
+ Project-URL: Changelog, https://github.com/taskbadger/taskbadger-python/releases
32
33
  Project-URL: Documentation, https://docs.taskbadger.net/
33
- Project-URL: Repository, https://github.com/taskbadger/taskbadger-docs
34
+ Project-URL: Repository, https://github.com/taskbadger/taskbadger-python
34
35
  Description-Content-Type: text/markdown
35
36
 
36
37
  # Task Badger Python Client
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "taskbadger"
3
- version = "1.3.1"
3
+ version = "1.3.3"
4
4
  description = "The official Python SDK for Task Badger"
5
5
  license = "Apache-2.0"
6
6
 
@@ -10,10 +10,10 @@ readme = "README.md"
10
10
  packages = [
11
11
  {include = "taskbadger"},
12
12
  ]
13
- include = ["CHANGELOG.md", "taskbadger/internal/py.typed"]
13
+ include = ["taskbadger/internal/py.typed"]
14
14
 
15
15
  homepage = "https://taskbadger.net/"
16
- repository = "https://github.com/taskbadger/taskbadger-docs"
16
+ repository = "https://github.com/taskbadger/taskbadger-python"
17
17
  documentation = "https://docs.taskbadger.net/"
18
18
  classifiers = [
19
19
  "Development Status :: 4 - Beta",
@@ -30,13 +30,16 @@ classifiers = [
30
30
  "Topic :: Software Development :: Libraries :: Python Modules",
31
31
  ]
32
32
 
33
+ [tool.poetry.urls]
34
+ "Changelog" = "https://github.com/taskbadger/taskbadger-python/releases"
35
+
33
36
  [tool.poetry.dependencies]
34
37
  python = "^3.8"
35
- httpx = ">=0.20.0,<0.25.0"
38
+ httpx = ">=0.20.0,<0.28.0"
36
39
  attrs = ">=21.3.0"
37
40
  python-dateutil = "^2.8.0"
38
- typer = {extras = ["all"], version = "^0.9.0"}
39
- tomlkit = "^0.11.6"
41
+ typer = {extras = ["all"], version = "<0.10.0"}
42
+ tomlkit = "^0.12.5"
40
43
  importlib-metadata = {version = "^1.0", python = "<3.8"}
41
44
  typing-extensions = {version = "^4.7.1", python = "3.9"}
42
45
  celery = {version = ">=4.0.0,<6.0.0", optional = true}
@@ -52,7 +55,8 @@ black = "^23.1.0"
52
55
  pre-commit = "^3.0.2"
53
56
  pytest-httpx = "^0.21.3"
54
57
  invoke = "^2.0.0"
55
- pytest-celery = "^0.0.0"
58
+ pytest-celery = ">0.0.0"
59
+ redis = "^5.0.4"
56
60
 
57
61
  [tool.poetry.scripts]
58
62
  taskbadger = "taskbadger.cli_main:app"
@@ -103,11 +103,13 @@ class Task(celery.Task):
103
103
  def apply_async(self, *args, **kwargs):
104
104
  headers = kwargs.setdefault("headers", {})
105
105
  headers["taskbadger_track"] = True
106
- tb_kwargs = kwargs.pop(TB_KWARGS_ARG, {})
107
- for name in list(kwargs):
108
- if name.startswith(KWARG_PREFIX):
109
- val = kwargs.pop(name)
110
- tb_kwargs[name.removeprefix(KWARG_PREFIX)] = val
106
+ tb_kwargs = self._get_tb_kwargs(kwargs)
107
+ if kwargs.get("kwargs"):
108
+ # extract taskbadger options from task kwargs when supplied as keyword argument
109
+ tb_kwargs.update(self._get_tb_kwargs(kwargs["kwargs"]))
110
+ elif len(args) > 1 and isinstance(args[1], dict):
111
+ # extract taskbadger options from task kwargs when supplied as positional argument
112
+ tb_kwargs.update(self._get_tb_kwargs(args[1]))
111
113
  headers[TB_KWARGS_ARG] = tb_kwargs
112
114
  result = super().apply_async(*args, **kwargs)
113
115
 
@@ -119,6 +121,14 @@ class Task(celery.Task):
119
121
 
120
122
  return result
121
123
 
124
+ def _get_tb_kwargs(self, kwargs):
125
+ tb_kwargs = kwargs.pop(TB_KWARGS_ARG, {})
126
+ for name in list(kwargs):
127
+ if name.startswith(KWARG_PREFIX):
128
+ val = kwargs.pop(name)
129
+ tb_kwargs[name.removeprefix(KWARG_PREFIX)] = val
130
+ return tb_kwargs
131
+
122
132
  @property
123
133
  def taskbadger_task_id(self):
124
134
  return _get_taskbadger_task_id(self.request)
@@ -146,6 +156,7 @@ def task_publish_handler(sender=None, headers=None, body=None, **kwargs):
146
156
  celery_system = Badger.current.settings.get_system_by_id("celery")
147
157
  auto_track = celery_system and celery_system.track_task(sender)
148
158
  manual_track = headers.get("taskbadger_track")
159
+ header_kwargs = headers.pop(TB_KWARGS_ARG, {})
149
160
  if not manual_track and not auto_track:
150
161
  return
151
162
 
@@ -158,7 +169,7 @@ def task_publish_handler(sender=None, headers=None, body=None, **kwargs):
158
169
  kwargs[attr.removeprefix(KWARG_PREFIX)] = getattr(ctask, attr)
159
170
 
160
171
  # get kwargs from the task headers (set via apply_async)
161
- kwargs.update(headers.get(TB_KWARGS_ARG, {}))
172
+ kwargs.update(header_kwargs)
162
173
  kwargs["status"] = StatusEnum.PENDING
163
174
  name = kwargs.pop("name", headers["task"])
164
175
 
@@ -249,8 +260,8 @@ def exit_session(signal_sender):
249
260
  def safe_get_task(task_id: str):
250
261
  try:
251
262
  return get_task(task_id)
252
- except Exception:
253
- log.exception("Error fetching task '%s'", task_id)
263
+ except Exception as e:
264
+ log.warning("Error fetching task '%s': %s", task_id, e)
254
265
 
255
266
 
256
267
  def _get_taskbadger_task_id(request):
@@ -63,5 +63,5 @@ def _update_task(task, **kwargs):
63
63
  def _update_safe(task, **kwargs):
64
64
  try:
65
65
  task.update(**kwargs)
66
- except Exception:
67
- log.exception("Error updating task '%s'", task.id)
66
+ except Exception as e:
67
+ log.warning("Error updating task '%s': %s", task.id, e)
@@ -29,8 +29,8 @@ def create_task_safe(name: str, **kwargs: P.kwargs) -> Optional[Task]:
29
29
 
30
30
  try:
31
31
  return create_task(name, **kwargs)
32
- except Exception:
33
- log.exception("Error creating task '%s'", name)
32
+ except Exception as e:
33
+ log.warning("Error creating task '%s': %s", name, e)
34
34
 
35
35
 
36
36
  def update_task_safe(task_id: str, **kwargs: P.kwargs) -> Optional[Task]:
@@ -48,5 +48,5 @@ def update_task_safe(task_id: str, **kwargs: P.kwargs) -> Optional[Task]:
48
48
 
49
49
  try:
50
50
  return update_task(task_id, **kwargs)
51
- except Exception:
52
- log.exception("Error updating task '%s'", task_id)
51
+ except Exception as e:
52
+ log.warning("Error updating task '%s': %s", task_id, e)
@@ -1,3 +1,4 @@
1
+ import logging
1
2
  import os
2
3
  from typing import Any, List
3
4
 
@@ -15,6 +16,8 @@ from taskbadger.internal.types import UNSET
15
16
  from taskbadger.mug import Badger, Session, Settings
16
17
  from taskbadger.systems import System
17
18
 
19
+ log = logging.getLogger("taskbadger")
20
+
18
21
  _TB_HOST = "https://taskbadger.net"
19
22
 
20
23
 
@@ -338,6 +341,12 @@ class Task:
338
341
  def __getattr__(self, item):
339
342
  return getattr(self._task, item)
340
343
 
344
+ def safe_update(self, **kwargs):
345
+ try:
346
+ self.update(**kwargs)
347
+ except Exception as e:
348
+ log.warning("Error updating task '%s': %s", self._task.id, e)
349
+
341
350
 
342
351
  def _none_to_unset(value):
343
352
  return UNSET if value is None else value
File without changes
File without changes
File without changes