datatorch 0.7.1__tar.gz → 0.7.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 (109) hide show
  1. {datatorch-0.7.1 → datatorch-0.7.2}/PKG-INFO +1 -1
  2. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/__init__.py +35 -15
  3. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch.egg-info/PKG-INFO +1 -1
  4. {datatorch-0.7.1 → datatorch-0.7.2}/setup.py +1 -1
  5. {datatorch-0.7.1 → datatorch-0.7.2}/README.md +0 -0
  6. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/__init__.py +0 -0
  7. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/agent.py +0 -0
  8. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/client.py +0 -0
  9. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/directory.py +0 -0
  10. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/log_handler.py +0 -0
  11. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/logging.py +0 -0
  12. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/monitoring.py +0 -0
  13. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/__init__.py +0 -0
  14. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/action/__init__.py +0 -0
  15. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/action/action.py +0 -0
  16. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/action/cache.py +0 -0
  17. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/action/config.py +0 -0
  18. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/job/__init__.py +0 -0
  19. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/job/job.py +0 -0
  20. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/pipeline.py +0 -0
  21. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/resolver.py +0 -0
  22. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/runner/__init__.py +0 -0
  23. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/runner/command.py +0 -0
  24. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/runner/docker.py +0 -0
  25. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/runner/factory.py +0 -0
  26. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/runner/node.py +0 -0
  27. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/runner/python.py +0 -0
  28. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/runner/runner.py +0 -0
  29. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/runner/shell.py +0 -0
  30. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/step/__init__.py +0 -0
  31. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/step/step.py +0 -0
  32. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/pipelines/template.py +0 -0
  33. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/services/__init__.py +0 -0
  34. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/utils/__init__.py +0 -0
  35. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/utils/docker.py +0 -0
  36. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/agent/utils/process.py +0 -0
  37. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/__init__.py +0 -0
  38. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/api.py +0 -0
  39. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/client.py +0 -0
  40. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/__init__.py +0 -0
  41. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/annotation.py +0 -0
  42. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/base.py +0 -0
  43. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/dataset.py +0 -0
  44. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/file.py +0 -0
  45. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/label.py +0 -0
  46. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/project.py +0 -0
  47. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/settings.py +0 -0
  48. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/sources/__init__.py +0 -0
  49. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/sources/image/__init__.py +0 -0
  50. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/sources/image/bounding_box.py +0 -0
  51. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/sources/image/segmentations.py +0 -0
  52. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/sources/image/typings.py +0 -0
  53. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/sources/source.py +0 -0
  54. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/storage_link.py +0 -0
  55. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/entity/user.py +0 -0
  56. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/pull.py +0 -0
  57. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/scripts/__init__.py +0 -0
  58. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/scripts/import_coco.py +0 -0
  59. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/scripts/import_pixmask.py +0 -0
  60. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/scripts/utils/__init__.py +0 -0
  61. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/scripts/utils/simplify.py +0 -0
  62. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/utils.py +0 -0
  63. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/api/where.py +0 -0
  64. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/__init__.py +0 -0
  65. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/action/__init__.py +0 -0
  66. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/action/create.py +0 -0
  67. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/action/pull.py +0 -0
  68. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/action/run.py +0 -0
  69. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/agent/__init__.py +0 -0
  70. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/agent/create.py +0 -0
  71. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/agent/dir.py +0 -0
  72. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/agent/start.py +0 -0
  73. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/groups.py +0 -0
  74. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/import_cmds/__init__.py +0 -0
  75. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/import_cmds/coco.py +0 -0
  76. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/import_cmds/pixmask.py +0 -0
  77. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/main/__init__.py +0 -0
  78. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/main/login.py +0 -0
  79. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/main/logout.py +0 -0
  80. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/main/pull.py +0 -0
  81. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/main/upgrade.py +0 -0
  82. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/main/version.py +0 -0
  83. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/pipeline/__init__.py +0 -0
  84. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/pipeline/generate.py +0 -0
  85. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/pipeline/run.py +0 -0
  86. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/pipeline/upload.py +0 -0
  87. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/spinner.py +0 -0
  88. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/upload/__init__.py +0 -0
  89. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/upload/folder.py +0 -0
  90. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/cli/utils.py +0 -0
  91. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/core/__init__.py +0 -0
  92. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/core/env.py +0 -0
  93. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/core/folder.py +0 -0
  94. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/core/settings.py +0 -0
  95. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/utils/__init__.py +0 -0
  96. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/utils/converters.py +0 -0
  97. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/utils/files.py +0 -0
  98. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/utils/hash_table.py +0 -0
  99. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/utils/objects.py +0 -0
  100. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/utils/package.py +0 -0
  101. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/utils/string_style.py +0 -0
  102. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch/utils/url.py +0 -0
  103. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch.egg-info/SOURCES.txt +0 -0
  104. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch.egg-info/dependency_links.txt +0 -0
  105. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch.egg-info/entry_points.txt +0 -0
  106. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch.egg-info/not-zip-safe +0 -0
  107. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch.egg-info/requires.txt +0 -0
  108. {datatorch-0.7.1 → datatorch-0.7.2}/datatorch.egg-info/top_level.txt +0 -0
  109. {datatorch-0.7.1 → datatorch-0.7.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datatorch
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: A CLI and library for interacting with DataTorch.
5
5
  Home-page: https://github.com/datatorch/python
6
6
  Author: DataTorch
@@ -10,7 +10,7 @@ from .directory import agent_directory
10
10
  from .agent import Agent, tasks
11
11
 
12
12
  from gql import Client as GqlClient
13
- from gql.transport.exceptions import TransportClosed, TransportServerError
13
+ from gql.transport.exceptions import TransportError, TransportQueryError
14
14
  from gql.transport.websockets import WebsocketsTransport
15
15
  from websockets.exceptions import ConnectionClosed, InvalidMessage, InvalidURI
16
16
 
@@ -89,6 +89,22 @@ async def _exit_tasks() -> None:
89
89
  task.cancel()
90
90
 
91
91
 
92
+ async def _restart_after_failure(transport, backoff_wait: float) -> float:
93
+ """Tears down jobs, transport and tasks, then sleeps with backoff.
94
+
95
+ Returns the next backoff wait."""
96
+ await _exit_jobs()
97
+ await _close_transport(transport)
98
+ await _exit_tasks()
99
+
100
+ backoff_wait = min(BACKOFF_MAX, backoff_wait * BACKOFF_FACTOR)
101
+ logger.debug(
102
+ f"Sleeping for {round(backoff_wait)} seconds and then attempting restart."
103
+ )
104
+ await asyncio.sleep(backoff_wait)
105
+ return backoff_wait
106
+
107
+
92
108
  async def start() -> None:
93
109
  """Creates and runs an agent."""
94
110
  setup_logging()
@@ -108,32 +124,36 @@ async def start() -> None:
108
124
  backoff_wait = BACKOFF_INIT_WAIT
109
125
  await Agent.run(session)
110
126
 
127
+ except (asyncio.CancelledError, InvalidURI):
128
+ break
129
+
111
130
  except (
112
131
  # ConnectionClosed covers both the error and the "OK" close
113
132
  # (a server-side restart closes cleanly); OSError covers the
114
133
  # socket-level failures seen right after a laptop wakes
115
134
  # (DNS gaierror, ConnectionReset, ConnectionRefused, timeouts).
135
+ # TransportQueryError is what gql raises when the socket drops
136
+ # while a query is in flight ("Query completed without any
137
+ # answer received from the server"); it is NOT a TransportError
138
+ # subclass in the installed gql, so it is listed on its own.
116
139
  ConnectionClosed,
117
140
  OSError,
118
141
  IncompleteReadError,
119
- TransportServerError,
120
- TransportClosed,
142
+ TransportError,
143
+ TransportQueryError,
121
144
  InvalidMessage,
122
145
  asyncio.TimeoutError,
123
146
  ) as e:
124
- await _exit_jobs()
125
- await _close_transport(transport)
126
- await _exit_tasks()
127
-
128
147
  logger.error(e)
129
- backoff_wait = min(BACKOFF_MAX, backoff_wait * BACKOFF_FACTOR)
130
- logger.debug(
131
- f"Sleeping for {round(backoff_wait)} seconds and then attempting restart."
132
- )
133
- await asyncio.sleep(backoff_wait)
134
-
135
- except (asyncio.CancelledError, InvalidURI):
136
- break
148
+ backoff_wait = await _restart_after_failure(transport, backoff_wait)
149
+
150
+ except Exception:
151
+ # Last resort: the loop must never die. On 2026-09-12 an
152
+ # uncaught exception here left the process alive for weeks
153
+ # with no agent loop, so the runner showed OFFLINE while its
154
+ # window looked fine.
155
+ logger.exception("Unexpected error in the agent loop; restarting.")
156
+ backoff_wait = await _restart_after_failure(transport, backoff_wait)
137
157
 
138
158
  logger.info("Exiting job processing task.")
139
159
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datatorch
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: A CLI and library for interacting with DataTorch.
5
5
  Home-page: https://github.com/datatorch/python
6
6
  Author: DataTorch
@@ -33,7 +33,7 @@ requirements = [
33
33
 
34
34
  setup(
35
35
  name="datatorch",
36
- version="0.7.1",
36
+ version="0.7.2",
37
37
  description="A CLI and library for interacting with DataTorch.",
38
38
  author="DataTorch",
39
39
  author_email="support@datatorch.io",
File without changes
File without changes