current-data-py 0.1.11__tar.gz → 0.1.13__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 (101) hide show
  1. current_data_py-0.1.13/PKG-INFO +161 -0
  2. current_data_py-0.1.13/README.md +147 -0
  3. current_data_py-0.1.13/current_data_py.egg-info/PKG-INFO +161 -0
  4. {current_data_py-0.1.11 → current_data_py-0.1.13}/current_data_py.egg-info/SOURCES.txt +4 -0
  5. {current_data_py-0.1.11 → current_data_py-0.1.13}/current_data_py.egg-info/requires.txt +1 -2
  6. {current_data_py-0.1.11 → current_data_py-0.1.13}/decoding.py +3 -6
  7. {current_data_py-0.1.11 → current_data_py-0.1.13}/labeling.py +7 -7
  8. {current_data_py-0.1.11 → current_data_py-0.1.13}/management.py +3 -3
  9. current_data_py-0.1.13/proto_gen/python/labeling/service/service_pb2.py +79 -0
  10. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/labeling/service/service_pb2_grpc.py +16 -14
  11. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/labeling/task/task_pb2.py +12 -10
  12. current_data_py-0.1.13/proto_gen/python/management/metadata/metadata_pb2.py +64 -0
  13. current_data_py-0.1.13/proto_gen/python/management/service/service_pb2.py +84 -0
  14. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/management/service/service_pb2_grpc.py +66 -0
  15. current_data_py-0.1.13/proto_gen/python/msg/custom_msgs/subtask_description_pb2.py +25 -0
  16. current_data_py-0.1.13/proto_gen/python/msg/geometry_msgs/pose_array_pb2.py +27 -0
  17. {current_data_py-0.1.11 → current_data_py-0.1.13}/pyproject.toml +4 -4
  18. {current_data_py-0.1.11 → current_data_py-0.1.13}/remote/client.py +53 -12
  19. {current_data_py-0.1.11 → current_data_py-0.1.13}/remote/source.py +2 -1
  20. current_data_py-0.1.13/remote/tos_source.py +84 -0
  21. {current_data_py-0.1.11 → current_data_py-0.1.13}/schema/__init__.py +2 -0
  22. {current_data_py-0.1.11 → current_data_py-0.1.13}/tests/check_labeling.py +9 -9
  23. {current_data_py-0.1.11 → current_data_py-0.1.13}/tests/check_management.py +3 -3
  24. {current_data_py-0.1.11 → current_data_py-0.1.13}/tests/check_package.py +4 -3
  25. {current_data_py-0.1.11 → current_data_py-0.1.13}/tests/check_remote.py +5 -4
  26. current_data_py-0.1.13/tos.py +170 -0
  27. current_data_py-0.1.11/PKG-INFO +0 -412
  28. current_data_py-0.1.11/README.md +0 -398
  29. current_data_py-0.1.11/current_data_py.egg-info/PKG-INFO +0 -412
  30. current_data_py-0.1.11/proto_gen/python/labeling/service/service_pb2.py +0 -82
  31. current_data_py-0.1.11/proto_gen/python/management/metadata/metadata_pb2.py +0 -62
  32. current_data_py-0.1.11/proto_gen/python/management/service/service_pb2.py +0 -83
  33. {current_data_py-0.1.11 → current_data_py-0.1.13}/MANIFEST.in +0 -0
  34. {current_data_py-0.1.11 → current_data_py-0.1.13}/__init__.py +0 -0
  35. {current_data_py-0.1.11 → current_data_py-0.1.13}/current_data_py.egg-info/dependency_links.txt +0 -0
  36. {current_data_py-0.1.11 → current_data_py-0.1.13}/current_data_py.egg-info/top_level.txt +0 -0
  37. {current_data_py-0.1.11 → current_data_py-0.1.13}/examples/__init__.py +0 -0
  38. {current_data_py-0.1.11 → current_data_py-0.1.13}/examples/list_schemas.py +0 -0
  39. {current_data_py-0.1.11 → current_data_py-0.1.13}/examples/read_remote_td.py +0 -0
  40. {current_data_py-0.1.11 → current_data_py-0.1.13}/examples/read_td.py +0 -0
  41. {current_data_py-0.1.11 → current_data_py-0.1.13}/examples/write_td.py +0 -0
  42. {current_data_py-0.1.11 → current_data_py-0.1.13}/oss.py +0 -0
  43. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/labeling/template/template_pb2.py +0 -0
  44. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/management/selection/selection_pb2.py +0 -0
  45. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/builtin_interfaces/duration_pb2.py +0 -0
  46. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/builtin_interfaces/time_pb2.py +0 -0
  47. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/custom_msgs/joint_current_pb2.py +0 -0
  48. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/custom_msgs/pose_rpy_pb2.py +0 -0
  49. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/custom_msgs/slam_quality_pb2.py +0 -0
  50. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/custom_msgs/sonic_frame_pb2.py +0 -0
  51. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/custom_msgs/target_quality_pb2.py +0 -0
  52. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/foxglove/compressed_audio_pb2.py +0 -0
  53. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/foxglove/compressed_video_pb2.py +0 -0
  54. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/point32_pb2.py +0 -0
  55. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/point_pb2.py +0 -0
  56. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/pose_pb2.py +0 -0
  57. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/pose_stamped_pb2.py +0 -0
  58. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/pose_with_covariance_pb2.py +0 -0
  59. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/pose_with_covariance_stamped_pb2.py +0 -0
  60. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/quaternion_pb2.py +0 -0
  61. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/transform_pb2.py +0 -0
  62. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/transform_stamped_pb2.py +0 -0
  63. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/twist_pb2.py +0 -0
  64. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/twist_stamped_pb2.py +0 -0
  65. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/twist_with_covariance_pb2.py +0 -0
  66. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/twist_with_covariance_stamped_pb2.py +0 -0
  67. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/vector3_pb2.py +0 -0
  68. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/wrench_pb2.py +0 -0
  69. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/geometry_msgs/wrench_stamped_pb2.py +0 -0
  70. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/nav_msgs/map_meta_data_pb2.py +0 -0
  71. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/nav_msgs/occupancy_grid_pb2.py +0 -0
  72. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/nav_msgs/odometry_pb2.py +0 -0
  73. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/nav_msgs/path_pb2.py +0 -0
  74. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/battery_state_pb2.py +0 -0
  75. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/camera_info_pb2.py +0 -0
  76. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/compressed_image_pb2.py +0 -0
  77. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/image_pb2.py +0 -0
  78. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/imu_pb2.py +0 -0
  79. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/joint_state_pb2.py +0 -0
  80. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/laser_scan_pb2.py +0 -0
  81. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/nav_sat_fix_pb2.py +0 -0
  82. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/nav_sat_status_pb2.py +0 -0
  83. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/point_cloud2_pb2.py +0 -0
  84. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/point_field_pb2.py +0 -0
  85. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/range_pb2.py +0 -0
  86. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/sensor_msgs/region_of_interest_pb2.py +0 -0
  87. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/std_msgs/bool_pb2.py +0 -0
  88. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/std_msgs/color_rgba_pb2.py +0 -0
  89. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/std_msgs/float32_pb2.py +0 -0
  90. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/std_msgs/float64_pb2.py +0 -0
  91. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/std_msgs/header_pb2.py +0 -0
  92. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/std_msgs/int32_pb2.py +0 -0
  93. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/std_msgs/string_pb2.py +0 -0
  94. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/std_msgs/uint32_pb2.py +0 -0
  95. {current_data_py-0.1.11 → current_data_py-0.1.13}/proto_gen/python/msg/tf2_msgs/tf_message_pb2.py +0 -0
  96. {current_data_py-0.1.11 → current_data_py-0.1.13}/remote/__init__.py +0 -0
  97. {current_data_py-0.1.11 → current_data_py-0.1.13}/schema/message_metadata.py +0 -0
  98. {current_data_py-0.1.11 → current_data_py-0.1.13}/setup.cfg +0 -0
  99. {current_data_py-0.1.11 → current_data_py-0.1.13}/setup.py +0 -0
  100. {current_data_py-0.1.11 → current_data_py-0.1.13}/tests/check_environment.py +0 -0
  101. {current_data_py-0.1.11 → current_data_py-0.1.13}/tests/check_oss.py +0 -0
@@ -0,0 +1,161 @@
1
+ Metadata-Version: 2.4
2
+ Name: current-data-py
3
+ Version: 0.1.13
4
+ Summary: Current Data protobuf messages and schema metadata
5
+ Requires-Python: >=3.9
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: protobuf>=3.20
8
+ Requires-Dist: turbodata==0.1.0
9
+ Requires-Dist: grpcio>=1.51.1
10
+ Requires-Dist: alibabacloud-oss-v2<2,>=1.4.0
11
+ Requires-Dist: tos<3,>=2.9
12
+ Requires-Dist: av>=12
13
+ Requires-Dist: pillow>=9
14
+
15
+ # current-data-py
16
+
17
+ Python SDK for robotics Protobuf messages, TD files, and platform service clients.
18
+ Run shell commands from the repository root in the shared development environment.
19
+
20
+ ## Use locally
21
+
22
+ Run the bundled examples to write and read a local TD file using the installed SDK:
23
+
24
+ ```sh
25
+ python -I -m current_data_py.examples.write_td /tmp/current-data-example.td
26
+ python -I -m current_data_py.examples.read_td /tmp/current-data-example.td
27
+ ```
28
+
29
+ `-I` avoids importing the unbuilt source directory in place of the installed package.
30
+ See [examples](examples) for other entry points.
31
+
32
+ For a minimal read-only service call, run this snippet with `python -I` so it uses
33
+ the installed SDK:
34
+
35
+ ```python
36
+ from contextlib import closing
37
+ import os
38
+ os.environ["ENV"] = "test"
39
+
40
+ from current_data_py.management import ManagementClient, MetadataFilter
41
+
42
+ with ManagementClient() as client:
43
+ with closing(client.stream_data_references(MetadataFilter(), timeout=30)) as records:
44
+ record = next(records, None)
45
+ print(record.id if record is not None else "No matching data")
46
+ ```
47
+
48
+ Set `ENV=test` before the first SDK import to select the test service; an unset or
49
+ empty value defaults to production. An explicit client `address=` overrides the
50
+ default. Remote examples require service connectivity and accessible data.
51
+
52
+ ## Test changes
53
+
54
+ The package bundles generated Protobuf modules during its build. After protocol
55
+ changes, [regenerate the bindings](../README.md#protobuf) first.
56
+ Build into a fresh temporary directory, validate the artifacts, and install this
57
+ checkout's wheel before running its checks. Only the local package is installed;
58
+ shared dependencies are left unchanged:
59
+
60
+ ```sh
61
+ (
62
+ set -e
63
+ sdk_dist=$(mktemp -d)
64
+ trap 'rm -rf "$sdk_dist"' EXIT
65
+ (cd current_data_py && python -m build --no-isolation --outdir "$sdk_dist")
66
+ python current_data_py/tests/check_distribution.py --dist-dir "$sdk_dist"
67
+ python -m pip install --no-deps --force-reinstall "$sdk_dist"/*.whl
68
+ for check in package environment management labeling remote oss tos decoding; do
69
+ python -I "current_data_py/tests/check_${check}.py"
70
+ done
71
+ )
72
+ ```
73
+
74
+ These checks cover packaging, environment selection, clients, and media decoding
75
+ using local fixtures and mocked services. They do not require production credentials
76
+ or prove connectivity to a deployed service.
77
+
78
+ ## Publish to PyPI
79
+
80
+ CI checks this SDK but does not publish it. Releases are manual and must use the
81
+ latest successfully fetched `origin/main`, including the version bump. Development
82
+ branches, uncommitted changes, and older main commits are not release sources. Follow the
83
+ [repository Git workflow](../.agents/rules/git-workflow.md).
84
+ Prepare the version update in `pyproject.toml` on a development branch and merge it
85
+ through review together with the intended SDK changes before building a release.
86
+ Use a version that has not already been published.
87
+
88
+ ### Build and validate
89
+
90
+ Run from the repository root. Fetch the latest `origin/main`, record its commit,
91
+ and build from a clean exported copy so local edits and old artifacts cannot enter
92
+ the release:
93
+
94
+ ```bash
95
+ sdk_release_dir=$(mktemp -d /tmp/current-data-release.XXXXXX)
96
+ (
97
+ set -euo pipefail
98
+ git fetch origin
99
+ sdk_release_sha=$(git rev-parse origin/main)
100
+ printf '%s\n' "$sdk_release_sha" > "$sdk_release_dir/source-commit.txt"
101
+ mkdir "$sdk_release_dir/source"
102
+ git archive "$sdk_release_sha" | tar -x -C "$sdk_release_dir/source"
103
+ (cd "$sdk_release_dir/source/current_data_py" && python -m build --no-isolation --outdir "$sdk_release_dir/dist")
104
+ python "$sdk_release_dir/source/current_data_py/tests/check_distribution.py" --dist-dir "$sdk_release_dir/dist"
105
+ python -m twine check "$sdk_release_dir/dist/"*
106
+ python -m pip install --no-deps --force-reinstall "$sdk_release_dir/dist/"*.whl
107
+ (
108
+ cd "$sdk_release_dir"
109
+ unset PYTHONPATH PYTHONHOME
110
+ for check in package environment management labeling remote oss tos decoding; do
111
+ python -I "$sdk_release_dir/source/current_data_py/tests/check_${check}.py"
112
+ done
113
+ )
114
+ (cd "$sdk_release_dir/dist" && sha256sum *) > "$sdk_release_dir/SHA256SUMS"
115
+ )
116
+ ```
117
+
118
+ Release checks run outside both source trees so child Python processes also use
119
+ the installed wheel. They come from the recorded `origin/main` commit; unmerged
120
+ local test fixes are not included in the export.
121
+
122
+ Continue only after every check succeeds. Confirm `source-commit.txt` contains the
123
+ intended main commit and inspect the wheel for the intended release features.
124
+ Review the built package's README metadata for public display; exclude private
125
+ deployment addresses, bucket names, and credentials. Keep the release directory
126
+ and use these exact validated artifacts for uploading.
127
+
128
+ ### Upload
129
+
130
+ Use your configured PyPI credentials or Twine's interactive token prompt; do not
131
+ put tokens in the README or shell commands. Run from the repository root in the
132
+ same shell that defines `sdk_release_dir`.
133
+
134
+ Fetch main again immediately before uploading. If its commit has changed, rebuild
135
+ and rerun all checks from the new latest main. The command also checks that the
136
+ artifacts still match the hashes recorded after validation:
137
+
138
+ ```sh
139
+ (
140
+ set -e
141
+ sdk_repository=pypi
142
+ git fetch origin
143
+ if [ "$(git rev-parse origin/main)" != "$(cat "$sdk_release_dir/source-commit.txt")" ]; then
144
+ echo "origin/main changed; rebuild and validate the latest main before uploading." >&2
145
+ exit 1
146
+ fi
147
+ (cd "$sdk_release_dir/dist" && sha256sum -c ../SHA256SUMS)
148
+ python -m twine upload --repository "$sdk_repository" "$sdk_release_dir/dist/"*
149
+ )
150
+ ```
151
+
152
+ For an optional TestPyPI trial, change `sdk_repository=pypi` to
153
+ `sdk_repository=testpypi` in the same block and use TestPyPI credentials. Both
154
+ registries require the latest-main and artifact checks.
155
+
156
+ ### Verify the release
157
+
158
+ After upload, verify that PyPI shows the expected version and rendered description.
159
+ Compare the SHA-256 digests of both published files with `SHA256SUMS`, and retain
160
+ that file with `source-commit.txt` as the release record. An optional TestPyPI trial
161
+ does not replace verification of the production PyPI release.
@@ -0,0 +1,147 @@
1
+ # current-data-py
2
+
3
+ Python SDK for robotics Protobuf messages, TD files, and platform service clients.
4
+ Run shell commands from the repository root in the shared development environment.
5
+
6
+ ## Use locally
7
+
8
+ Run the bundled examples to write and read a local TD file using the installed SDK:
9
+
10
+ ```sh
11
+ python -I -m current_data_py.examples.write_td /tmp/current-data-example.td
12
+ python -I -m current_data_py.examples.read_td /tmp/current-data-example.td
13
+ ```
14
+
15
+ `-I` avoids importing the unbuilt source directory in place of the installed package.
16
+ See [examples](examples) for other entry points.
17
+
18
+ For a minimal read-only service call, run this snippet with `python -I` so it uses
19
+ the installed SDK:
20
+
21
+ ```python
22
+ from contextlib import closing
23
+ import os
24
+ os.environ["ENV"] = "test"
25
+
26
+ from current_data_py.management import ManagementClient, MetadataFilter
27
+
28
+ with ManagementClient() as client:
29
+ with closing(client.stream_data_references(MetadataFilter(), timeout=30)) as records:
30
+ record = next(records, None)
31
+ print(record.id if record is not None else "No matching data")
32
+ ```
33
+
34
+ Set `ENV=test` before the first SDK import to select the test service; an unset or
35
+ empty value defaults to production. An explicit client `address=` overrides the
36
+ default. Remote examples require service connectivity and accessible data.
37
+
38
+ ## Test changes
39
+
40
+ The package bundles generated Protobuf modules during its build. After protocol
41
+ changes, [regenerate the bindings](../README.md#protobuf) first.
42
+ Build into a fresh temporary directory, validate the artifacts, and install this
43
+ checkout's wheel before running its checks. Only the local package is installed;
44
+ shared dependencies are left unchanged:
45
+
46
+ ```sh
47
+ (
48
+ set -e
49
+ sdk_dist=$(mktemp -d)
50
+ trap 'rm -rf "$sdk_dist"' EXIT
51
+ (cd current_data_py && python -m build --no-isolation --outdir "$sdk_dist")
52
+ python current_data_py/tests/check_distribution.py --dist-dir "$sdk_dist"
53
+ python -m pip install --no-deps --force-reinstall "$sdk_dist"/*.whl
54
+ for check in package environment management labeling remote oss tos decoding; do
55
+ python -I "current_data_py/tests/check_${check}.py"
56
+ done
57
+ )
58
+ ```
59
+
60
+ These checks cover packaging, environment selection, clients, and media decoding
61
+ using local fixtures and mocked services. They do not require production credentials
62
+ or prove connectivity to a deployed service.
63
+
64
+ ## Publish to PyPI
65
+
66
+ CI checks this SDK but does not publish it. Releases are manual and must use the
67
+ latest successfully fetched `origin/main`, including the version bump. Development
68
+ branches, uncommitted changes, and older main commits are not release sources. Follow the
69
+ [repository Git workflow](../.agents/rules/git-workflow.md).
70
+ Prepare the version update in `pyproject.toml` on a development branch and merge it
71
+ through review together with the intended SDK changes before building a release.
72
+ Use a version that has not already been published.
73
+
74
+ ### Build and validate
75
+
76
+ Run from the repository root. Fetch the latest `origin/main`, record its commit,
77
+ and build from a clean exported copy so local edits and old artifacts cannot enter
78
+ the release:
79
+
80
+ ```bash
81
+ sdk_release_dir=$(mktemp -d /tmp/current-data-release.XXXXXX)
82
+ (
83
+ set -euo pipefail
84
+ git fetch origin
85
+ sdk_release_sha=$(git rev-parse origin/main)
86
+ printf '%s\n' "$sdk_release_sha" > "$sdk_release_dir/source-commit.txt"
87
+ mkdir "$sdk_release_dir/source"
88
+ git archive "$sdk_release_sha" | tar -x -C "$sdk_release_dir/source"
89
+ (cd "$sdk_release_dir/source/current_data_py" && python -m build --no-isolation --outdir "$sdk_release_dir/dist")
90
+ python "$sdk_release_dir/source/current_data_py/tests/check_distribution.py" --dist-dir "$sdk_release_dir/dist"
91
+ python -m twine check "$sdk_release_dir/dist/"*
92
+ python -m pip install --no-deps --force-reinstall "$sdk_release_dir/dist/"*.whl
93
+ (
94
+ cd "$sdk_release_dir"
95
+ unset PYTHONPATH PYTHONHOME
96
+ for check in package environment management labeling remote oss tos decoding; do
97
+ python -I "$sdk_release_dir/source/current_data_py/tests/check_${check}.py"
98
+ done
99
+ )
100
+ (cd "$sdk_release_dir/dist" && sha256sum *) > "$sdk_release_dir/SHA256SUMS"
101
+ )
102
+ ```
103
+
104
+ Release checks run outside both source trees so child Python processes also use
105
+ the installed wheel. They come from the recorded `origin/main` commit; unmerged
106
+ local test fixes are not included in the export.
107
+
108
+ Continue only after every check succeeds. Confirm `source-commit.txt` contains the
109
+ intended main commit and inspect the wheel for the intended release features.
110
+ Review the built package's README metadata for public display; exclude private
111
+ deployment addresses, bucket names, and credentials. Keep the release directory
112
+ and use these exact validated artifacts for uploading.
113
+
114
+ ### Upload
115
+
116
+ Use your configured PyPI credentials or Twine's interactive token prompt; do not
117
+ put tokens in the README or shell commands. Run from the repository root in the
118
+ same shell that defines `sdk_release_dir`.
119
+
120
+ Fetch main again immediately before uploading. If its commit has changed, rebuild
121
+ and rerun all checks from the new latest main. The command also checks that the
122
+ artifacts still match the hashes recorded after validation:
123
+
124
+ ```sh
125
+ (
126
+ set -e
127
+ sdk_repository=pypi
128
+ git fetch origin
129
+ if [ "$(git rev-parse origin/main)" != "$(cat "$sdk_release_dir/source-commit.txt")" ]; then
130
+ echo "origin/main changed; rebuild and validate the latest main before uploading." >&2
131
+ exit 1
132
+ fi
133
+ (cd "$sdk_release_dir/dist" && sha256sum -c ../SHA256SUMS)
134
+ python -m twine upload --repository "$sdk_repository" "$sdk_release_dir/dist/"*
135
+ )
136
+ ```
137
+
138
+ For an optional TestPyPI trial, change `sdk_repository=pypi` to
139
+ `sdk_repository=testpypi` in the same block and use TestPyPI credentials. Both
140
+ registries require the latest-main and artifact checks.
141
+
142
+ ### Verify the release
143
+
144
+ After upload, verify that PyPI shows the expected version and rendered description.
145
+ Compare the SHA-256 digests of both published files with `SHA256SUMS`, and retain
146
+ that file with `source-commit.txt` as the release record. An optional TestPyPI trial
147
+ does not replace verification of the production PyPI release.
@@ -0,0 +1,161 @@
1
+ Metadata-Version: 2.4
2
+ Name: current-data-py
3
+ Version: 0.1.13
4
+ Summary: Current Data protobuf messages and schema metadata
5
+ Requires-Python: >=3.9
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: protobuf>=3.20
8
+ Requires-Dist: turbodata==0.1.0
9
+ Requires-Dist: grpcio>=1.51.1
10
+ Requires-Dist: alibabacloud-oss-v2<2,>=1.4.0
11
+ Requires-Dist: tos<3,>=2.9
12
+ Requires-Dist: av>=12
13
+ Requires-Dist: pillow>=9
14
+
15
+ # current-data-py
16
+
17
+ Python SDK for robotics Protobuf messages, TD files, and platform service clients.
18
+ Run shell commands from the repository root in the shared development environment.
19
+
20
+ ## Use locally
21
+
22
+ Run the bundled examples to write and read a local TD file using the installed SDK:
23
+
24
+ ```sh
25
+ python -I -m current_data_py.examples.write_td /tmp/current-data-example.td
26
+ python -I -m current_data_py.examples.read_td /tmp/current-data-example.td
27
+ ```
28
+
29
+ `-I` avoids importing the unbuilt source directory in place of the installed package.
30
+ See [examples](examples) for other entry points.
31
+
32
+ For a minimal read-only service call, run this snippet with `python -I` so it uses
33
+ the installed SDK:
34
+
35
+ ```python
36
+ from contextlib import closing
37
+ import os
38
+ os.environ["ENV"] = "test"
39
+
40
+ from current_data_py.management import ManagementClient, MetadataFilter
41
+
42
+ with ManagementClient() as client:
43
+ with closing(client.stream_data_references(MetadataFilter(), timeout=30)) as records:
44
+ record = next(records, None)
45
+ print(record.id if record is not None else "No matching data")
46
+ ```
47
+
48
+ Set `ENV=test` before the first SDK import to select the test service; an unset or
49
+ empty value defaults to production. An explicit client `address=` overrides the
50
+ default. Remote examples require service connectivity and accessible data.
51
+
52
+ ## Test changes
53
+
54
+ The package bundles generated Protobuf modules during its build. After protocol
55
+ changes, [regenerate the bindings](../README.md#protobuf) first.
56
+ Build into a fresh temporary directory, validate the artifacts, and install this
57
+ checkout's wheel before running its checks. Only the local package is installed;
58
+ shared dependencies are left unchanged:
59
+
60
+ ```sh
61
+ (
62
+ set -e
63
+ sdk_dist=$(mktemp -d)
64
+ trap 'rm -rf "$sdk_dist"' EXIT
65
+ (cd current_data_py && python -m build --no-isolation --outdir "$sdk_dist")
66
+ python current_data_py/tests/check_distribution.py --dist-dir "$sdk_dist"
67
+ python -m pip install --no-deps --force-reinstall "$sdk_dist"/*.whl
68
+ for check in package environment management labeling remote oss tos decoding; do
69
+ python -I "current_data_py/tests/check_${check}.py"
70
+ done
71
+ )
72
+ ```
73
+
74
+ These checks cover packaging, environment selection, clients, and media decoding
75
+ using local fixtures and mocked services. They do not require production credentials
76
+ or prove connectivity to a deployed service.
77
+
78
+ ## Publish to PyPI
79
+
80
+ CI checks this SDK but does not publish it. Releases are manual and must use the
81
+ latest successfully fetched `origin/main`, including the version bump. Development
82
+ branches, uncommitted changes, and older main commits are not release sources. Follow the
83
+ [repository Git workflow](../.agents/rules/git-workflow.md).
84
+ Prepare the version update in `pyproject.toml` on a development branch and merge it
85
+ through review together with the intended SDK changes before building a release.
86
+ Use a version that has not already been published.
87
+
88
+ ### Build and validate
89
+
90
+ Run from the repository root. Fetch the latest `origin/main`, record its commit,
91
+ and build from a clean exported copy so local edits and old artifacts cannot enter
92
+ the release:
93
+
94
+ ```bash
95
+ sdk_release_dir=$(mktemp -d /tmp/current-data-release.XXXXXX)
96
+ (
97
+ set -euo pipefail
98
+ git fetch origin
99
+ sdk_release_sha=$(git rev-parse origin/main)
100
+ printf '%s\n' "$sdk_release_sha" > "$sdk_release_dir/source-commit.txt"
101
+ mkdir "$sdk_release_dir/source"
102
+ git archive "$sdk_release_sha" | tar -x -C "$sdk_release_dir/source"
103
+ (cd "$sdk_release_dir/source/current_data_py" && python -m build --no-isolation --outdir "$sdk_release_dir/dist")
104
+ python "$sdk_release_dir/source/current_data_py/tests/check_distribution.py" --dist-dir "$sdk_release_dir/dist"
105
+ python -m twine check "$sdk_release_dir/dist/"*
106
+ python -m pip install --no-deps --force-reinstall "$sdk_release_dir/dist/"*.whl
107
+ (
108
+ cd "$sdk_release_dir"
109
+ unset PYTHONPATH PYTHONHOME
110
+ for check in package environment management labeling remote oss tos decoding; do
111
+ python -I "$sdk_release_dir/source/current_data_py/tests/check_${check}.py"
112
+ done
113
+ )
114
+ (cd "$sdk_release_dir/dist" && sha256sum *) > "$sdk_release_dir/SHA256SUMS"
115
+ )
116
+ ```
117
+
118
+ Release checks run outside both source trees so child Python processes also use
119
+ the installed wheel. They come from the recorded `origin/main` commit; unmerged
120
+ local test fixes are not included in the export.
121
+
122
+ Continue only after every check succeeds. Confirm `source-commit.txt` contains the
123
+ intended main commit and inspect the wheel for the intended release features.
124
+ Review the built package's README metadata for public display; exclude private
125
+ deployment addresses, bucket names, and credentials. Keep the release directory
126
+ and use these exact validated artifacts for uploading.
127
+
128
+ ### Upload
129
+
130
+ Use your configured PyPI credentials or Twine's interactive token prompt; do not
131
+ put tokens in the README or shell commands. Run from the repository root in the
132
+ same shell that defines `sdk_release_dir`.
133
+
134
+ Fetch main again immediately before uploading. If its commit has changed, rebuild
135
+ and rerun all checks from the new latest main. The command also checks that the
136
+ artifacts still match the hashes recorded after validation:
137
+
138
+ ```sh
139
+ (
140
+ set -e
141
+ sdk_repository=pypi
142
+ git fetch origin
143
+ if [ "$(git rev-parse origin/main)" != "$(cat "$sdk_release_dir/source-commit.txt")" ]; then
144
+ echo "origin/main changed; rebuild and validate the latest main before uploading." >&2
145
+ exit 1
146
+ fi
147
+ (cd "$sdk_release_dir/dist" && sha256sum -c ../SHA256SUMS)
148
+ python -m twine upload --repository "$sdk_repository" "$sdk_release_dir/dist/"*
149
+ )
150
+ ```
151
+
152
+ For an optional TestPyPI trial, change `sdk_repository=pypi` to
153
+ `sdk_repository=testpypi` in the same block and use TestPyPI credentials. Both
154
+ registries require the latest-main and artifact checks.
155
+
156
+ ### Verify the release
157
+
158
+ After upload, verify that PyPI shows the expected version and rendered description.
159
+ Compare the SHA-256 digests of both published files with `SHA256SUMS`, and retain
160
+ that file with `source-commit.txt` as the release record. An optional TestPyPI trial
161
+ does not replace verification of the production PyPI release.
@@ -7,11 +7,13 @@ management.py
7
7
  oss.py
8
8
  pyproject.toml
9
9
  setup.py
10
+ tos.py
10
11
  ./__init__.py
11
12
  ./decoding.py
12
13
  ./labeling.py
13
14
  ./management.py
14
15
  ./oss.py
16
+ ./tos.py
15
17
  ./examples/__init__.py
16
18
  ./examples/list_schemas.py
17
19
  ./examples/read_remote_td.py
@@ -20,6 +22,7 @@ setup.py
20
22
  ./remote/__init__.py
21
23
  ./remote/client.py
22
24
  ./remote/source.py
25
+ ./remote/tos_source.py
23
26
  ./schema/__init__.py
24
27
  ./schema/message_metadata.py
25
28
  current_data_py.egg-info/PKG-INFO
@@ -35,6 +38,7 @@ examples/write_td.py
35
38
  remote/__init__.py
36
39
  remote/client.py
37
40
  remote/source.py
41
+ remote/tos_source.py
38
42
  schema/__init__.py
39
43
  schema/message_metadata.py
40
44
  tests/check_environment.py
@@ -2,7 +2,6 @@ protobuf>=3.20
2
2
  turbodata==0.1.0
3
3
  grpcio>=1.51.1
4
4
  alibabacloud-oss-v2<2,>=1.4.0
5
-
6
- [decode]
5
+ tos<3,>=2.9
7
6
  av>=12
8
7
  pillow>=9
@@ -67,12 +67,9 @@ class DecodedMessage:
67
67
  class _VideoStream:
68
68
  """Hold one topic's H.264 decoder for the lifetime of a forward iterator."""
69
69
  def __init__(self, *, keep_timestamp=None):
70
- """Load optional video dependencies and create a fresh decoder."""
71
- try:
72
- import av
73
- from PIL import Image # noqa: F401
74
- except ImportError as exc:
75
- raise ImportError("Video decoding requires pip install 'current-data-py[decode]'") from exc
70
+ """Load video dependencies and create a fresh decoder."""
71
+ import av
72
+ from PIL import Image # noqa: F401
76
73
  self.av = av
77
74
  self.codec = av.CodecContext.create("h264", "r")
78
75
  self.codec.thread_count = 1
@@ -50,13 +50,13 @@ class LabelingClient:
50
50
  def create_task(
51
51
  self, template_id: str, *, input_sources: Optional[Sequence[task_pb2.InputSource]] = None,
52
52
  data_selection: Optional[DataSelection] = None, name: str = "",
53
- start_pre_annotation: bool = False,
53
+ mode: int = task_pb2.TASK_MODE_MANUAL,
54
54
  timeout: Optional[float] = 30, metadata: _CallMetadata = None,
55
55
  ) -> service_pb2.CreateTaskResponse:
56
56
  return self.stub.CreateTask(
57
57
  service_pb2.CreateTaskRequest(
58
58
  template_id=template_id, input_sources=input_sources,
59
- data_selection=data_selection, name=name, start_pre_annotation=start_pre_annotation,
59
+ data_selection=data_selection, name=name, mode=mode,
60
60
  ),
61
61
  timeout=timeout, metadata=metadata,
62
62
  )
@@ -92,11 +92,11 @@ class LabelingClient:
92
92
  timeout=timeout, metadata=metadata,
93
93
  )
94
94
 
95
- def update_pre_annotation(
96
- self, task_id: str, action: int, *,
95
+ def finish_auto_labeling(
96
+ self, task_id: str, *,
97
97
  timeout: Optional[float] = 30, metadata: _CallMetadata = None,
98
- ) -> service_pb2.UpdatePreAnnotationResponse:
99
- return self.stub.UpdatePreAnnotation(
100
- service_pb2.UpdatePreAnnotationRequest(task_id=task_id, action=action),
98
+ ) -> None:
99
+ self.stub.FinishAutoLabeling(
100
+ service_pb2.FinishAutoLabelingRequest(task_id=task_id),
101
101
  timeout=timeout, metadata=metadata,
102
102
  )
@@ -8,14 +8,13 @@ import current_data_py as _package
8
8
  from . import DEFAULT_ADDRESS # Compatibility export; configure current_data_py.DEFAULT_ADDRESS.
9
9
 
10
10
  from ._proto.management.metadata import metadata_pb2
11
- from ._proto.management.metadata.metadata_pb2 import Metadata, MetadataFilter
11
+ from ._proto.management.metadata.metadata_pb2 import Metadata, MetadataFilter, StorageProvider
12
12
  from ._proto.management.service import service_pb2, service_pb2_grpc
13
13
  from ._proto.management.service.service_pb2 import (
14
14
  DataKind,
15
15
  GetReadCredentialsResponse,
16
16
  GetUploadCredentialsResponse,
17
17
  StorageCredentials,
18
- StorageProvider,
19
18
  )
20
19
 
21
20
 
@@ -30,9 +29,10 @@ __all__ = [
30
29
 
31
30
  def _storage_provider(value: Union[int, str]) -> int:
32
31
  if isinstance(value, str):
32
+ value = value.upper()
33
33
  name = value if value.startswith("STORAGE_PROVIDER_") else "STORAGE_PROVIDER_" + value
34
34
  value = StorageProvider.Value(name)
35
- if isinstance(value, bool) or value not in (service_pb2.STORAGE_PROVIDER_OSS, service_pb2.STORAGE_PROVIDER_TOS):
35
+ if isinstance(value, bool) or value not in (metadata_pb2.STORAGE_PROVIDER_OSS, metadata_pb2.STORAGE_PROVIDER_TOS):
36
36
  raise ValueError("provider must explicitly select OSS or TOS")
37
37
  return value
38
38
 
@@ -0,0 +1,79 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: labeling/service/service.proto
4
+ """Generated protocol buffer code."""
5
+ from google.protobuf.internal import builder as _builder
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ # @@protoc_insertion_point(imports)
10
+
11
+ _sym_db = _symbol_database.Default()
12
+
13
+
14
+ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
15
+ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
16
+ from labeling.template import template_pb2 as labeling_dot_template_dot_template__pb2
17
+ from labeling.task import task_pb2 as labeling_dot_task_dot_task__pb2
18
+ from management.selection import selection_pb2 as management_dot_selection_dot_selection__pb2
19
+
20
+
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1elabeling/service/service.proto\x12\x13labeling.service.v1\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a labeling/template/template.proto\x1a\x18labeling/task/task.proto\x1a$management/selection/selection.proto\"U\n\x15\x43reateTemplateRequest\x12<\n\ndefinition\x18\x01 \x01(\x0b\x32(.labeling.template.v1.TemplateDefinition\"J\n\x16\x43reateTemplateResponse\x12\x30\n\x08template\x18\x01 \x01(\x0b\x32\x1e.labeling.template.v1.Template\"\x16\n\x14ListTemplatesRequest\"J\n\x15ListTemplatesResponse\x12\x31\n\ttemplates\x18\x01 \x03(\x0b\x32\x1e.labeling.template.v1.Template\"\xd6\x01\n\x11\x43reateTaskRequest\x12\x13\n\x0btemplate_id\x18\x01 \x01(\t\x12\x34\n\rinput_sources\x18\x02 \x03(\x0b\x32\x1d.labeling.task.v1.InputSource\x12>\n\x0e\x64\x61ta_selection\x18\x03 \x01(\x0b\x32&.management.selection.v1.DataSelection\x12\x0c\n\x04name\x18\x04 \x01(\t\x12(\n\x04mode\x18\x05 \x01(\x0e\x32\x1a.labeling.task.v1.TaskMode\"9\n\x12\x43reateTaskResponse\x12\x12\n\nitem_count\x18\x01 \x01(\x05\x12\x0f\n\x07task_id\x18\x02 \x01(\t\"\x12\n\x10ListTasksRequest\"A\n\x11ListTasksResponse\x12,\n\x05tasks\x18\x01 \x03(\x0b\x32\x1d.labeling.task.v1.TaskSummary\"8\n\x10ListItemsRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x13\n\x0b\x63laim_token\x18\x02 \x01(\t\":\n\x11ListItemsResponse\x12%\n\x05items\x18\x01 \x03(\x0b\x32\x16.labeling.task.v1.Item\"%\n\x12ListResultsRequest\x12\x0f\n\x07\x64\x61ta_id\x18\x01 \x01(\t\"a\n\x13LabelingResultEntry\x12$\n\x04task\x18\x01 \x01(\x0b\x32\x16.labeling.task.v1.Task\x12$\n\x04item\x18\x02 \x01(\x0b\x32\x16.labeling.task.v1.Item\"P\n\x13ListResultsResponse\x12\x39\n\x07results\x18\x01 \x03(\x0b\x32(.labeling.service.v1.LabelingResultEntry\"\x82\x01\n\x12WriteResultRequest\x12\x0f\n\x07item_id\x18\x01 \x01(\t\x12(\n\x06result\x18\x02 \x01(\x0b\x32\x18.labeling.task.v1.Result\x12\x13\n\x0b\x63laim_token\x18\x03 \x01(\t\x12\x1c\n\x14pre_annotation_error\x18\x04 \x01(\t\"\x15\n\x13WriteResultResponse\"&\n\x13\x43ompleteTaskRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\"4\n\x14\x43ompleteTaskResponse\x12\x1c\n\x14\x63ompleted_item_count\x18\x01 \x01(\x05\"8\n\x10\x43laimItemRequest\x12\x0f\n\x07item_id\x18\x01 \x01(\t\x12\x13\n\x0b\x63laim_token\x18\x02 \x01(\t\"9\n\x11\x43laimItemResponse\x12$\n\x04item\x18\x01 \x01(\x0b\x32\x16.labeling.task.v1.Item\"9\n\x11RenewClaimRequest\x12\x0f\n\x07item_id\x18\x01 \x01(\t\x12\x13\n\x0b\x63laim_token\x18\x02 \x01(\t\"J\n\x12RenewClaimResponse\x12\x34\n\x10\x63laim_expires_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\";\n\x13ReleaseClaimRequest\x12\x0f\n\x07item_id\x18\x01 \x01(\t\x12\x13\n\x0b\x63laim_token\x18\x02 \x01(\t\"\x16\n\x14ReleaseClaimResponse\",\n\x19\x46inishAutoLabelingRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t2\xa2\t\n\x0fLabelingService\x12i\n\x0e\x43reateTemplate\x12*.labeling.service.v1.CreateTemplateRequest\x1a+.labeling.service.v1.CreateTemplateResponse\x12\x66\n\rListTemplates\x12).labeling.service.v1.ListTemplatesRequest\x1a*.labeling.service.v1.ListTemplatesResponse\x12]\n\nCreateTask\x12&.labeling.service.v1.CreateTaskRequest\x1a\'.labeling.service.v1.CreateTaskResponse\x12Z\n\tListTasks\x12%.labeling.service.v1.ListTasksRequest\x1a&.labeling.service.v1.ListTasksResponse\x12Z\n\tListItems\x12%.labeling.service.v1.ListItemsRequest\x1a&.labeling.service.v1.ListItemsResponse\x12`\n\x0bListResults\x12\'.labeling.service.v1.ListResultsRequest\x1a(.labeling.service.v1.ListResultsResponse\x12`\n\x0bWriteResult\x12\'.labeling.service.v1.WriteResultRequest\x1a(.labeling.service.v1.WriteResultResponse\x12\x63\n\x0c\x43ompleteTask\x12(.labeling.service.v1.CompleteTaskRequest\x1a).labeling.service.v1.CompleteTaskResponse\x12Z\n\tClaimItem\x12%.labeling.service.v1.ClaimItemRequest\x1a&.labeling.service.v1.ClaimItemResponse\x12]\n\nRenewClaim\x12&.labeling.service.v1.RenewClaimRequest\x1a\'.labeling.service.v1.RenewClaimResponse\x12\x63\n\x0cReleaseClaim\x12(.labeling.service.v1.ReleaseClaimRequest\x1a).labeling.service.v1.ReleaseClaimResponse\x12\\\n\x12\x46inishAutoLabeling\x12..labeling.service.v1.FinishAutoLabelingRequest\x1a\x16.google.protobuf.EmptyB&Z$proto_gen/labeling/service;servicepbb\x06proto3')
22
+
23
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
24
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'labeling.service.service_pb2', globals())
25
+ if _descriptor._USE_C_DESCRIPTORS == False:
26
+
27
+ DESCRIPTOR._options = None
28
+ DESCRIPTOR._serialized_options = b'Z$proto_gen/labeling/service;servicepb'
29
+ _CREATETEMPLATEREQUEST._serialized_start=215
30
+ _CREATETEMPLATEREQUEST._serialized_end=300
31
+ _CREATETEMPLATERESPONSE._serialized_start=302
32
+ _CREATETEMPLATERESPONSE._serialized_end=376
33
+ _LISTTEMPLATESREQUEST._serialized_start=378
34
+ _LISTTEMPLATESREQUEST._serialized_end=400
35
+ _LISTTEMPLATESRESPONSE._serialized_start=402
36
+ _LISTTEMPLATESRESPONSE._serialized_end=476
37
+ _CREATETASKREQUEST._serialized_start=479
38
+ _CREATETASKREQUEST._serialized_end=693
39
+ _CREATETASKRESPONSE._serialized_start=695
40
+ _CREATETASKRESPONSE._serialized_end=752
41
+ _LISTTASKSREQUEST._serialized_start=754
42
+ _LISTTASKSREQUEST._serialized_end=772
43
+ _LISTTASKSRESPONSE._serialized_start=774
44
+ _LISTTASKSRESPONSE._serialized_end=839
45
+ _LISTITEMSREQUEST._serialized_start=841
46
+ _LISTITEMSREQUEST._serialized_end=897
47
+ _LISTITEMSRESPONSE._serialized_start=899
48
+ _LISTITEMSRESPONSE._serialized_end=957
49
+ _LISTRESULTSREQUEST._serialized_start=959
50
+ _LISTRESULTSREQUEST._serialized_end=996
51
+ _LABELINGRESULTENTRY._serialized_start=998
52
+ _LABELINGRESULTENTRY._serialized_end=1095
53
+ _LISTRESULTSRESPONSE._serialized_start=1097
54
+ _LISTRESULTSRESPONSE._serialized_end=1177
55
+ _WRITERESULTREQUEST._serialized_start=1180
56
+ _WRITERESULTREQUEST._serialized_end=1310
57
+ _WRITERESULTRESPONSE._serialized_start=1312
58
+ _WRITERESULTRESPONSE._serialized_end=1333
59
+ _COMPLETETASKREQUEST._serialized_start=1335
60
+ _COMPLETETASKREQUEST._serialized_end=1373
61
+ _COMPLETETASKRESPONSE._serialized_start=1375
62
+ _COMPLETETASKRESPONSE._serialized_end=1427
63
+ _CLAIMITEMREQUEST._serialized_start=1429
64
+ _CLAIMITEMREQUEST._serialized_end=1485
65
+ _CLAIMITEMRESPONSE._serialized_start=1487
66
+ _CLAIMITEMRESPONSE._serialized_end=1544
67
+ _RENEWCLAIMREQUEST._serialized_start=1546
68
+ _RENEWCLAIMREQUEST._serialized_end=1603
69
+ _RENEWCLAIMRESPONSE._serialized_start=1605
70
+ _RENEWCLAIMRESPONSE._serialized_end=1679
71
+ _RELEASECLAIMREQUEST._serialized_start=1681
72
+ _RELEASECLAIMREQUEST._serialized_end=1740
73
+ _RELEASECLAIMRESPONSE._serialized_start=1742
74
+ _RELEASECLAIMRESPONSE._serialized_end=1764
75
+ _FINISHAUTOLABELINGREQUEST._serialized_start=1766
76
+ _FINISHAUTOLABELINGREQUEST._serialized_end=1810
77
+ _LABELINGSERVICE._serialized_start=1813
78
+ _LABELINGSERVICE._serialized_end=2999
79
+ # @@protoc_insertion_point(module_scope)