plexus-python-pulse-demeter 1.1.131__tar.gz → 1.1.133__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.
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/PKG-INFO +6 -3
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/README.md +1 -1
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/alembic/env.py +1 -3
- plexus_python_pulse_demeter-1.1.133/k8s/argo/plexus-pulse-demeter-pipeline-templates.yaml +171 -0
- plexus_python_pulse_demeter-1.1.133/k8s/local/README.md +177 -0
- plexus_python_pulse_demeter-1.1.133/k8s/local/example-business-seeder.dockerfile +121 -0
- plexus_python_pulse_demeter-1.1.133/k8s/local/example-business-seeder.yaml +32 -0
- plexus_python_pulse_demeter-1.1.133/k8s/local/example-business.dockerfile +87 -0
- plexus_python_pulse_demeter-1.1.133/k8s/local/example-business.yaml +120 -0
- plexus_python_pulse_demeter-1.1.133/k8s/local/plexus-pulse-demeter-app.yaml +64 -0
- plexus_python_pulse_demeter-1.1.133/k8s/local/plexus-pulse-demeter-postgres.yaml +125 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/pyproject.toml +13 -4
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/api/__init__.py +4 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/api/catalog_endpoints.py +224 -198
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/api/catalog_internal_endpoints.py +104 -90
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/api/inventory_endpoints.py +22 -26
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/api/inventory_internal_endpoints.py +56 -42
- plexus_python_pulse_demeter-1.1.133/src/plexus/pulse/demeter/app/api/pipeline_endpoints.py +809 -0
- plexus_python_pulse_demeter-1.1.133/src/plexus/pulse/demeter/app/api/pipeline_internal_endpoints.py +365 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/api/tagging_endpoints.py +24 -11
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/api/user_endpoints.py +24 -10
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/api/workflow_endpoints.py +221 -169
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/api/workflow_internal_endpoints.py +64 -50
- plexus_python_pulse_demeter-1.1.133/src/plexus/pulse/demeter/app/core/pipeline.py +102 -0
- plexus_python_pulse_demeter-1.1.133/src/plexus/pulse/demeter/app/models/pipeline.py +647 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/tools/main.py +105 -22
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/utils/datautils.py +9 -9
- plexus_python_pulse_demeter-1.1.133/src/plexus/pulse/demeter/utils/flowutils.py +534 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus_python_pulse_demeter.egg-info/PKG-INFO +6 -3
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus_python_pulse_demeter.egg-info/SOURCES.txt +18 -2
- plexus_python_pulse_demeter-1.1.133/src/plexus_python_pulse_demeter.egg-info/entry_points.txt +2 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus_python_pulse_demeter.egg-info/requires.txt +6 -2
- plexus_python_pulse_demeter-1.1.133/test/plexus_tests/pulse/demeter/app/api/pipeline_endpoints_test.py +3551 -0
- plexus_python_pulse_demeter-1.1.133/test/plexus_tests/pulse/demeter/app/api/pipeline_internal_endpoints_test.py +1281 -0
- plexus_python_pulse_demeter-1.1.133/test/plexus_tests/pulse/demeter/app/utils/flowutils_test.py +1192 -0
- plexus_python_pulse_demeter-1.1.131/src/plexus_python_pulse_demeter.egg-info/entry_points.txt +0 -2
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/.dockerignore +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/.editorconfig +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/.github/workflows/pr.yml +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/.github/workflows/push.yml +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/.gitignore +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/MANIFEST.in +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/README.demeter.md +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/VERSION +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/alembic/alembic.ini +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/alembic/script.py.mako +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/alembic/versions/.gitkeep +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/docker/plexus-pulse-demeter-app.dockerfile +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/docker/plexus-pulse-demeter-tools.dockerfile +0 -0
- /plexus_python_pulse_demeter-1.1.131/k8s/deployment/plexus-pulse-demeter-app.deployment.yaml → /plexus_python_pulse_demeter-1.1.133/k8s/deployment/plexus-pulse-demeter-app.yaml +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/schemas/benchmark-nuscenes_detection.schema.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/schemas/benchmark-nuscenes_tracking.schema.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/schemas/dataset-metafile.schema.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/schemas/layout-spec.schema.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/schemas/sample-metafile.schema.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/schemas/taxonomy-hierarchy.schema.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_another_name-0-missing_file/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/extra_file +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/extra_file +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/extra_file +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/extra_file +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-0-extra_file/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/20200101T000000-brand_name-1-pattern_mismatch/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset/pulse-demeter-dataset.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000000.000000/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000000.999999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/20200101T000001.499999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_another_name-0-missing_file/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/extra_file +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.000001/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/extra_file +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.500001/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/extra_file +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/20200101T000001.999999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/extra_file +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-0-extra_file/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-1-pattern_mismatch/bad_directory_name/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/20200101T000000-brand_name-1-pattern_mismatch/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/bad_dataset_intermixed/pulse-demeter-dataset.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.000000/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.000000/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.000000/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.000000/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.000000/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.000000/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.000000/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.000000/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.999999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.999999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.999999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.999999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.999999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.999999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.999999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000000.999999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000001.499999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000001.499999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000001.499999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000001.499999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000001.499999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000001.499999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000001.499999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/20200101T000001.499999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_another_name-0/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.000001/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.000001/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.000001/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.000001/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.000001/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.000001/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.000001/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.000001/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.500001/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.500001/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.500001/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.500001/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.500001/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.500001/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.500001/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.500001/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.999999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.999999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.999999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.999999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.999999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.999999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.999999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/20200101T000001.999999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-0/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.000999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.000999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.000999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.000999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.000999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.000999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.000999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.000999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.999000/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.999000/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.999000/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.999000/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.999000/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.999000/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.999000/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/20200101T000001.999000/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/20200101T000000-brand_name-1/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset/pulse-demeter-dataset.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.000000/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.000000/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.000000/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.000000/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.000000/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.000000/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.000000/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.999999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.999999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.999999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.999999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.999999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.999999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000000.999999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000001.499999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000001.499999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000001.499999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000001.499999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000001.499999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000001.499999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/20200101T000001.499999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_another_name-0/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.000001/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.000001/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.000001/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.000001/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.000001/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.000001/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.000001/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.500001/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.500001/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.500001/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.500001/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.500001/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.500001/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.500001/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.999999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.999999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.999999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.999999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.999999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.999999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/20200101T000001.999999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-0/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.000999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.000999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.000999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.000999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.000999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.000999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.000999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.999000/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.999000/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.999000/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.999000/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.999000/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.999000/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/20200101T000001.999000/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/20200101T000000-brand_name-1/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_intermixed/pulse-demeter-dataset.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.000000/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.000000/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.000000/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.000000/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.000000/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.000000/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.000000/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.000000/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.999999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.999999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.999999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.999999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.999999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.999999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.999999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000000.999999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000001.499999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000001.499999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000001.499999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000001.499999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000001.499999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000001.499999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000001.499999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/20200101T000001.499999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_another_name-0/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.000001/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.000001/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.000001/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.000001/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.000001/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.000001/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.000001/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.000001/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.500001/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.500001/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.500001/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.500001/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.500001/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.500001/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.500001/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.500001/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.999999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.999999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.999999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.999999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.999999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.999999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.999999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/20200101T000001.999999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-0/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.000999/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.000999/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.000999/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.000999/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.000999/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.000999/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.000999/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.000999/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.999000/front_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.999000/front_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.999000/lidar_points.pcd +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.999000/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.999000/rear_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.999000/rear_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.999000/side_left_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/20200101T000001.999000/side_right_camera.png +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/20200101T000000-brand_name-1/pulse-demeter-sample.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/resources/unittest/dataset_name_ref/pulse-demeter-dataset.json +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/setup.cfg +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/setup.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/core/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/core/database.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/core/vault.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/main.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/models/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/models/catalog.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/models/inventory.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/models/tagging.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/models/user.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/app/models/workflow.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/tools/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/utils/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus/pulse/demeter/utils/config.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus_python_pulse_demeter.egg-info/dependency_links.txt +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus_python_pulse_demeter.egg-info/not-zip-safe +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/src/plexus_python_pulse_demeter.egg-info/top_level.txt +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/api/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/api/catalog_endpoints_1_test.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/api/catalog_endpoints_2_test.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/api/catalog_internal_endpoints_test.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/api/inventory_endpoints_test.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/api/inventory_internal_endpoints_test.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/api/tagging_endpoints_test.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/api/user_endpoints_test.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/api/workflow_endpoints_test.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/api/workflow_internal_endpoints_test.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/utils/__init__.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/plexus_tests/pulse/demeter/app/utils/datautils_test.py +0 -0
- {plexus_python_pulse_demeter-1.1.131 → plexus_python_pulse_demeter-1.1.133}/test/testenv.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plexus-python-pulse-demeter
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.133
|
|
4
4
|
Classifier: Programming Language :: Python :: 3
|
|
5
5
|
Classifier: Programming Language :: Python :: 3.12
|
|
6
6
|
Classifier: Programming Language :: Python :: 3.13
|
|
@@ -15,7 +15,7 @@ Requires-Dist: textcase
|
|
|
15
15
|
Requires-Dist: plexus-python-common[all]>=1.1
|
|
16
16
|
Requires-Dist: plexus-python-pulse-common[all]>=1.1
|
|
17
17
|
Provides-Extra: all
|
|
18
|
-
Requires-Dist: plexus-python-pulse-demeter[api,cli]; extra == "all"
|
|
18
|
+
Requires-Dist: plexus-python-pulse-demeter[api,cli,workflow]; extra == "all"
|
|
19
19
|
Provides-Extra: api
|
|
20
20
|
Requires-Dist: alembic; extra == "api"
|
|
21
21
|
Requires-Dist: fastapi; extra == "api"
|
|
@@ -26,6 +26,9 @@ Requires-Dist: ujson; extra == "api"
|
|
|
26
26
|
Requires-Dist: uvicorn; extra == "api"
|
|
27
27
|
Provides-Extra: cli
|
|
28
28
|
Requires-Dist: argcomplete; extra == "cli"
|
|
29
|
+
Provides-Extra: workflow
|
|
30
|
+
Requires-Dist: requests>=2.32; extra == "workflow"
|
|
31
|
+
Requires-Dist: pydantic>=2.11; extra == "workflow"
|
|
29
32
|
Provides-Extra: test
|
|
30
33
|
Requires-Dist: ddt>=1.7; extra == "test"
|
|
31
34
|
Requires-Dist: moto[s3,server]>=5.1; extra == "test"
|
|
@@ -33,4 +36,4 @@ Requires-Dist: pytest-cov>=5.0; extra == "test"
|
|
|
33
36
|
Requires-Dist: pytest-httpx2>=1.0; extra == "test"
|
|
34
37
|
Requires-Dist: pytest-order>=1.3; extra == "test"
|
|
35
38
|
Requires-Dist: pytest-postgresql>=6.1; extra == "test"
|
|
36
|
-
Requires-Dist: pytest>=
|
|
39
|
+
Requires-Dist: pytest>=9.2; extra == "test"
|
|
@@ -80,5 +80,5 @@ kubectl create secret generic plexus-pulse-demeter-secrets \
|
|
|
80
80
|
-n plexus-pulse
|
|
81
81
|
|
|
82
82
|
# Apply Kubernetes manifests for Plexus Pulse components
|
|
83
|
-
kubectl apply -f k8s/deployment/plexus-pulse-demeter-app.
|
|
83
|
+
kubectl apply -f k8s/deployment/plexus-pulse-demeter-app.yaml -n plexus-pulse
|
|
84
84
|
```
|
|
@@ -6,7 +6,7 @@ import sqlalchemy as sa
|
|
|
6
6
|
from plexus.pulse.common.utils.ormutils import collect_model_tables
|
|
7
7
|
|
|
8
8
|
from plexus.pulse.demeter.app.models import BaseModel
|
|
9
|
-
from plexus.pulse.demeter.app.models import catalog, inventory, tagging, user, workflow
|
|
9
|
+
from plexus.pulse.demeter.app.models import catalog, inventory, pipeline, tagging, user, workflow # noqa: F401
|
|
10
10
|
|
|
11
11
|
database_host = os.getenv("PULSE_DEMETER_DATABASE_HOST", "localhost")
|
|
12
12
|
database_port = os.getenv("PULSE_DEMETER_DATABASE_PORT", "5432")
|
|
@@ -14,8 +14,6 @@ database_username = os.getenv("PULSE_DEMETER_DATABASE_USERNAME", "pulse")
|
|
|
14
14
|
database_password = os.getenv("PULSE_DEMETER_DATABASE_PASSWORD", "pulse")
|
|
15
15
|
database_database = os.getenv("PULSE_DEMETER_DATABASE_DATABASE", "pulse-demeter")
|
|
16
16
|
|
|
17
|
-
print(inventory.__all__ + tagging.__all__ + catalog.__all__ + user.__all__ + workflow.__all__)
|
|
18
|
-
|
|
19
17
|
url = sa.URL.create(
|
|
20
18
|
drivername="postgresql+psycopg",
|
|
21
19
|
host=database_host,
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
apiVersion: argoproj.io/v1alpha1
|
|
2
|
+
kind: WorkflowTemplate
|
|
3
|
+
metadata:
|
|
4
|
+
name: plexus-pulse-demeter-pipeline-operations
|
|
5
|
+
spec:
|
|
6
|
+
templates:
|
|
7
|
+
- name: initialize
|
|
8
|
+
inputs:
|
|
9
|
+
parameters:
|
|
10
|
+
- name: api-url
|
|
11
|
+
- name: pipeline-name
|
|
12
|
+
- name: stage
|
|
13
|
+
- name: workflow-uid
|
|
14
|
+
- name: argo-name
|
|
15
|
+
- name: argo-namespace
|
|
16
|
+
- name: claim-limit
|
|
17
|
+
container:
|
|
18
|
+
image: ruyangshou/plexus-pulse-demeter-tools:latest
|
|
19
|
+
imagePullPolicy: IfNotPresent
|
|
20
|
+
command: [ /app/venv/bin/pulse-demeter-tools ]
|
|
21
|
+
args: [ flow-ops, initialize ]
|
|
22
|
+
env:
|
|
23
|
+
- name: API_URL
|
|
24
|
+
value: "{{inputs.parameters.api-url}}"
|
|
25
|
+
- name: PIPELINE_NAME
|
|
26
|
+
value: "{{inputs.parameters.pipeline-name}}"
|
|
27
|
+
- name: STAGE
|
|
28
|
+
value: "{{inputs.parameters.stage}}"
|
|
29
|
+
- name: WORKFLOW_UID
|
|
30
|
+
value: "{{inputs.parameters.workflow-uid}}"
|
|
31
|
+
- name: ARGO_NAME
|
|
32
|
+
value: "{{inputs.parameters.argo-name}}"
|
|
33
|
+
- name: ARGO_NAMESPACE
|
|
34
|
+
value: "{{inputs.parameters.argo-namespace}}"
|
|
35
|
+
- name: CLAIM_LIMIT
|
|
36
|
+
value: "{{inputs.parameters.claim-limit}}"
|
|
37
|
+
|
|
38
|
+
- name: heartbeat
|
|
39
|
+
daemon: true
|
|
40
|
+
inputs:
|
|
41
|
+
parameters:
|
|
42
|
+
- name: api-url
|
|
43
|
+
- name: workflow-uid
|
|
44
|
+
container:
|
|
45
|
+
image: ruyangshou/plexus-pulse-demeter-tools:latest
|
|
46
|
+
imagePullPolicy: IfNotPresent
|
|
47
|
+
command: [ /app/venv/bin/pulse-demeter-tools ]
|
|
48
|
+
args: [ flow-ops, heartbeat ]
|
|
49
|
+
env:
|
|
50
|
+
- name: API_URL
|
|
51
|
+
value: "{{inputs.parameters.api-url}}"
|
|
52
|
+
- name: WORKFLOW_UID
|
|
53
|
+
value: "{{inputs.parameters.workflow-uid}}"
|
|
54
|
+
|
|
55
|
+
- name: finalize
|
|
56
|
+
inputs:
|
|
57
|
+
parameters:
|
|
58
|
+
- name: api-url
|
|
59
|
+
- name: workflow-uid
|
|
60
|
+
- name: workflow-status
|
|
61
|
+
container:
|
|
62
|
+
image: ruyangshou/plexus-pulse-demeter-tools:latest
|
|
63
|
+
imagePullPolicy: IfNotPresent
|
|
64
|
+
command: [ /app/venv/bin/pulse-demeter-tools ]
|
|
65
|
+
args: [ flow-ops, finalize ]
|
|
66
|
+
env:
|
|
67
|
+
- name: API_URL
|
|
68
|
+
value: "{{inputs.parameters.api-url}}"
|
|
69
|
+
- name: WORKFLOW_UID
|
|
70
|
+
value: "{{inputs.parameters.workflow-uid}}"
|
|
71
|
+
- name: WORKFLOW_STATUS
|
|
72
|
+
value: "{{inputs.parameters.workflow-status}}"
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
apiVersion: argoproj.io/v1alpha1
|
|
77
|
+
kind: WorkflowTemplate
|
|
78
|
+
metadata:
|
|
79
|
+
name: plexus-pulse-demeter-pipeline-dispatcher
|
|
80
|
+
spec:
|
|
81
|
+
entrypoint: main
|
|
82
|
+
onExit: finalize
|
|
83
|
+
templateDefaults:
|
|
84
|
+
container:
|
|
85
|
+
volumeMounts:
|
|
86
|
+
- name: workdir
|
|
87
|
+
mountPath: "{{workflow.parameters.workspace-dir}}"
|
|
88
|
+
env:
|
|
89
|
+
- name: WORKSPACE_DIR
|
|
90
|
+
value: "{{workflow.parameters.workspace-dir}}"
|
|
91
|
+
volumeClaimTemplates:
|
|
92
|
+
- metadata:
|
|
93
|
+
name: workdir
|
|
94
|
+
spec:
|
|
95
|
+
accessModes: [ ReadWriteMany ]
|
|
96
|
+
resources:
|
|
97
|
+
requests:
|
|
98
|
+
storage: 1Gi
|
|
99
|
+
arguments:
|
|
100
|
+
parameters:
|
|
101
|
+
- name: workspace-dir
|
|
102
|
+
value: /workspace
|
|
103
|
+
- name: api-url
|
|
104
|
+
value: http://plexus-pulse-demeter-app.plexus-pulse.svc.cluster.local
|
|
105
|
+
- name: pipeline-name
|
|
106
|
+
value: pipeline_name@1.0.0
|
|
107
|
+
- name: stage
|
|
108
|
+
value: stage_name
|
|
109
|
+
- name: business-template
|
|
110
|
+
value: business-template
|
|
111
|
+
- name: claim-limit
|
|
112
|
+
value: "1000"
|
|
113
|
+
templates:
|
|
114
|
+
- name: main
|
|
115
|
+
steps:
|
|
116
|
+
- - name: initialize
|
|
117
|
+
templateRef:
|
|
118
|
+
name: plexus-pulse-demeter-pipeline-operations
|
|
119
|
+
template: initialize
|
|
120
|
+
arguments:
|
|
121
|
+
parameters:
|
|
122
|
+
- name: api-url
|
|
123
|
+
value: "{{workflow.parameters.api-url}}"
|
|
124
|
+
- name: pipeline-name
|
|
125
|
+
value: "{{workflow.parameters.pipeline-name}}"
|
|
126
|
+
- name: stage
|
|
127
|
+
value: "{{workflow.parameters.stage}}"
|
|
128
|
+
- name: workflow-uid
|
|
129
|
+
value: "{{workflow.uid}}"
|
|
130
|
+
- name: argo-name
|
|
131
|
+
value: "{{workflow.name}}"
|
|
132
|
+
- name: argo-namespace
|
|
133
|
+
value: "{{workflow.namespace}}"
|
|
134
|
+
- name: claim-limit
|
|
135
|
+
value: "{{workflow.parameters.claim-limit}}"
|
|
136
|
+
- - name: batch
|
|
137
|
+
template: batch
|
|
138
|
+
- name: batch
|
|
139
|
+
steps:
|
|
140
|
+
- - name: heartbeat
|
|
141
|
+
templateRef:
|
|
142
|
+
name: plexus-pulse-demeter-pipeline-operations
|
|
143
|
+
template: heartbeat
|
|
144
|
+
arguments:
|
|
145
|
+
parameters:
|
|
146
|
+
- name: api-url
|
|
147
|
+
value: "{{workflow.parameters.api-url}}"
|
|
148
|
+
- name: workflow-uid
|
|
149
|
+
value: "{{workflow.uid}}"
|
|
150
|
+
- - name: process
|
|
151
|
+
templateRef:
|
|
152
|
+
name: "{{workflow.parameters.business-template}}"
|
|
153
|
+
template: run
|
|
154
|
+
arguments:
|
|
155
|
+
parameters:
|
|
156
|
+
- name: workflow-uid
|
|
157
|
+
value: "{{workflow.uid}}"
|
|
158
|
+
- name: finalize
|
|
159
|
+
steps:
|
|
160
|
+
- - name: complete-stage-run
|
|
161
|
+
templateRef:
|
|
162
|
+
name: plexus-pulse-demeter-pipeline-operations
|
|
163
|
+
template: finalize
|
|
164
|
+
arguments:
|
|
165
|
+
parameters:
|
|
166
|
+
- name: api-url
|
|
167
|
+
value: "{{workflow.parameters.api-url}}"
|
|
168
|
+
- name: workflow-uid
|
|
169
|
+
value: "{{workflow.uid}}"
|
|
170
|
+
- name: workflow-status
|
|
171
|
+
value: "{{workflow.status}}"
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Run and validate the local example
|
|
2
|
+
|
|
3
|
+
This guide runs the example pipeline on a local `argo-local` kind cluster with PostgreSQL, the Demeter API, and Argo
|
|
4
|
+
Workflows. Run the commands from the repository root.
|
|
5
|
+
|
|
6
|
+
## Prerequisites
|
|
7
|
+
|
|
8
|
+
- A running kind cluster named `argo-local`
|
|
9
|
+
- `kubectl`, `docker`, and `kind`
|
|
10
|
+
- An Argo Workflows installation with its namespace named `argo`
|
|
11
|
+
|
|
12
|
+
## Start Demeter
|
|
13
|
+
|
|
14
|
+
Create the application namespace and database credentials:
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
kubectl create namespace plexus-pulse
|
|
18
|
+
kubectl create secret generic plexus-pulse-demeter-db -n plexus-pulse \
|
|
19
|
+
--from-literal=username=pulse \
|
|
20
|
+
--from-literal=password='<local password>' \
|
|
21
|
+
--from-literal=database=pulse_demeter
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Build and load the required images into kind:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
docker build -f docker/plexus-pulse-demeter-app.dockerfile \
|
|
28
|
+
-t ruyangshou/plexus-pulse-demeter-app:latest .
|
|
29
|
+
kind load docker-image ruyangshou/plexus-pulse-demeter-app:latest --name argo-local
|
|
30
|
+
|
|
31
|
+
docker build -f docker/plexus-pulse-demeter-tools.dockerfile \
|
|
32
|
+
-t ruyangshou/plexus-pulse-demeter-tools:latest .
|
|
33
|
+
kind load docker-image ruyangshou/plexus-pulse-demeter-tools:latest --name argo-local
|
|
34
|
+
|
|
35
|
+
docker build -f k8s/local/example-business-seeder.dockerfile \
|
|
36
|
+
-t plexus-pulse-demeter-example-seeder:local .
|
|
37
|
+
kind load docker-image plexus-pulse-demeter-example-seeder:local --name argo-local
|
|
38
|
+
|
|
39
|
+
docker build -f k8s/local/example-business.dockerfile \
|
|
40
|
+
-t plexus-pulse-demeter-example:local .
|
|
41
|
+
kind load docker-image plexus-pulse-demeter-example:local --name argo-local
|
|
42
|
+
|
|
43
|
+
docker pull postgres:16-alpine
|
|
44
|
+
kind load docker-image postgres:16-alpine --name argo-local
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Start PostgreSQL, initialize the schema, and deploy the API:
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
kubectl apply -f k8s/local/plexus-pulse-demeter-postgres.yaml
|
|
51
|
+
kubectl rollout status statefulset/plexus-pulse-demeter-postgres -n plexus-pulse --timeout=180s
|
|
52
|
+
kubectl wait --for=condition=complete job/plexus-pulse-demeter-postgres-init -n plexus-pulse --timeout=180s
|
|
53
|
+
|
|
54
|
+
kubectl apply -f k8s/local/plexus-pulse-demeter-app.yaml
|
|
55
|
+
kubectl rollout status deployment/plexus-pulse-demeter-app -n plexus-pulse --timeout=180s
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The initialization Job creates tables from the SQLModel definitions for a fresh installation. The repository does not
|
|
59
|
+
provide a migration for existing databases; apply an appropriate migration before reusing an older database.
|
|
60
|
+
|
|
61
|
+
## Run the example
|
|
62
|
+
|
|
63
|
+
Install the Argo pipeline templates, apply the example resources, and start the seeder:
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
kubectl apply -n argo -f k8s/argo/plexus-pulse-demeter-pipeline-templates.yaml
|
|
67
|
+
kubectl apply -n argo -f k8s/local/example-business.yaml
|
|
68
|
+
kubectl create -f k8s/local/example-business-seeder.yaml
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Validate the results
|
|
72
|
+
|
|
73
|
+
Wait for the seeder to finish, then allow the `transform`, `concat`, and `repeat` schedules to process the message. Each
|
|
74
|
+
schedule runs once per minute, so completion can take several minutes. A successful run can have an empty batch; check
|
|
75
|
+
the persisted work items as well as the workflow status. List workflows and inspect a completed workflow's logs:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
kubectl get workflows -n argo
|
|
79
|
+
kubectl logs -n argo -l workflows.argoproj.io/workflow=<workflow-name> -c main --prefix
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Forward the API service in a separate terminal:
|
|
83
|
+
|
|
84
|
+
```sh
|
|
85
|
+
kubectl port-forward -n plexus-pulse service/plexus-pulse-demeter-app 8000:80
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Query the persisted work items from another terminal:
|
|
89
|
+
|
|
90
|
+
```sh
|
|
91
|
+
curl -fsS 'http://localhost:8000/pulse_demeter/pipeline/work_items/?pipeline_name=example_business%401'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
For a fresh database with the default `hello world` input, the response's `work_items` list should contain four work
|
|
95
|
+
items, all with `pipeline_name: "example_business@1"` and `status: "SUCCEEDED"`:
|
|
96
|
+
|
|
97
|
+
| Producer → Consumer | `stage_output` | Expected `work_item_result` |
|
|
98
|
+
|------------------------|----------------|---------------------------------------------------------------|
|
|
99
|
+
| `source` → `transform` | `message` | `{"lowered": "hello world", "reversed": "dlrow olleh"}` |
|
|
100
|
+
| `transform` → `concat` | `lowered` | `{"message": "hello worlddlrow olleh"}` |
|
|
101
|
+
| `transform` → `concat` | `reversed` | `{"message": "hello worlddlrow olleh"}` |
|
|
102
|
+
| `concat` → `repeat` | `result` | `{"message": "hello worlddlrow ollehhello worlddlrow olleh"}` |
|
|
103
|
+
|
|
104
|
+
Each work item's `outcome` should name its consumer stage, and all four work items should share the source message's
|
|
105
|
+
SHA-256 `dedup_key`. The final value is stored in the `concat` → `repeat` work item's `result`; no further work item
|
|
106
|
+
is created for the terminal stage's output.
|
|
107
|
+
|
|
108
|
+
The business workspace is under `$WORKSPACE_DIR/$WORKFLOW_UID` on the workflow's shared volume. The heartbeat process
|
|
109
|
+
may exit with code 143 when its workflow finishes.
|
|
110
|
+
|
|
111
|
+
## How the example pipeline works
|
|
112
|
+
|
|
113
|
+
### Stages and data flow
|
|
114
|
+
|
|
115
|
+
The [seeder](example-business-seeder.dockerfile) registers `example_business@1` if it does not exist, verifies the
|
|
116
|
+
topology if it does, and submits a source work item for each input message. The message's SHA-256 digest is used as the
|
|
117
|
+
deduplication key. The [business code](example-business.dockerfile) processes three stages:
|
|
118
|
+
|
|
119
|
+
1. `transform` consumes a source message and submits two outputs: the lowercase message (`lowered`) and the original
|
|
120
|
+
message reversed (`reversed`).
|
|
121
|
+
2. `concat` joins those outputs by deduplication key within the claimed batch, concatenates the lowercase and reversed
|
|
122
|
+
messages, and submits a `result` output. If only one branch is in the batch, it skips that work item so it can be
|
|
123
|
+
claimed again later. The join does not fetch missing inputs or retain them outside the batch.
|
|
124
|
+
3. `repeat` consumes the concatenated message, doubles it, and records the result on its input work item. It also
|
|
125
|
+
submits a `result` output, but the API creates downstream work items only for declared consumers. No stage consumes
|
|
126
|
+
this output.
|
|
127
|
+
|
|
128
|
+
The [example resources](example-business.yaml) define one CronWorkflow per business stage, each with a claim limit of
|
|
129
|
+
1,000 work items per incoming `(producer_stage, stage_output)` pair. A `concat` batch can therefore contain up to 1,000
|
|
130
|
+
`lowered` work items and 1,000 `reversed` work items, for a total of 2,000. The limit does not guarantee matching
|
|
131
|
+
deduplication keys across inputs; unmatched work items still need to be skipped. `concurrencyPolicy: Forbid` prevents
|
|
132
|
+
overlapping runs of the same CronWorkflow; different stages can run concurrently. Their data dependencies are enforced
|
|
133
|
+
by the availability of work items in PostgreSQL.
|
|
134
|
+
|
|
135
|
+
### Batch execution and the flow capsule
|
|
136
|
+
|
|
137
|
+
The [dispatcher](../argo/plexus-pulse-demeter-pipeline-templates.yaml) runs each scheduled batch in three steps:
|
|
138
|
+
|
|
139
|
+
1. **Initialize.** Unless a matching local capsule already exists, the worker recovers expired stage run attempts for
|
|
140
|
+
the pipeline and stage, then checks out a batch. Checkout creates a stage run, stage run attempt, and work item
|
|
141
|
+
attempts and claims up to the configured limit of eligible queued work items per incoming `(producer_stage,
|
|
142
|
+
stage_output)` pair in one PostgreSQL transaction. Each input is ordered by priority, availability time, and sequence
|
|
143
|
+
number. The Argo workflow UID determines the stage run's deduplication key, so repeated checkout requests reuse the
|
|
144
|
+
same claim rather than claim more work items. The worker saves the returned SQLite file as
|
|
145
|
+
`pulse-demeter-flow-capsule.db` in the shared workspace.
|
|
146
|
+
2. **Process.** A daemon sends a heartbeat every 60 seconds while the business container processes the capsule's fixed
|
|
147
|
+
batch. Business code records work item results with `FlowCapsule.commit`, `fail`, or `skip`, and records downstream
|
|
148
|
+
outputs with `submit`. These calls write to the local capsule; they do not update PostgreSQL directly.
|
|
149
|
+
3. **Finalize.** The exit handler uses the Argo workflow status to decide whether to upload the capsule or report a
|
|
150
|
+
stage run failure, as described below.
|
|
151
|
+
|
|
152
|
+
### Completion, retries, and recovery
|
|
153
|
+
|
|
154
|
+
When Argo reports `Succeeded`, the worker freezes a SQLite snapshot and uploads it as the multipart `file` field to the
|
|
155
|
+
stage-run-attempt `commit/` endpoint. The API applies work item results and creates downstream work items in one
|
|
156
|
+
transaction, then marks the stage run and stage run attempt as succeeded. Stage run success does not imply every work
|
|
157
|
+
item succeeded: explicitly failed work items and claimed work items without a result follow the work item failure rules.
|
|
158
|
+
Business code should record a result for every work item.
|
|
159
|
+
|
|
160
|
+
A skipped attempt remains in history and its work item is queued without consuming retry allowance. Failed work items
|
|
161
|
+
are queued while their retry limit permits it, otherwise they become failed. Work items requeued by a capsule commit
|
|
162
|
+
become eligible again after 60 seconds. Work item attempt numbers continue increasing even when skips do not consume
|
|
163
|
+
retry allowance.
|
|
164
|
+
|
|
165
|
+
For any Argo status other than `Succeeded`, the worker calls `fail/` without uploading the capsule. Running work item
|
|
166
|
+
attempts become failed, and their work items are immediately eligible for another run if their retry limit permits it.
|
|
167
|
+
The separate `cancel/` API operation instead marks running attempts as cancelled and immediately requeues their work
|
|
168
|
+
items without consuming retry allowance. The exit handler does not call `cancel/` automatically.
|
|
169
|
+
|
|
170
|
+
Recovery expires running stage run attempts whose last heartbeat is at least 30 minutes old, marks their stage runs
|
|
171
|
+
failed, and immediately requeues eligible work items under the same retry-limit rules as failure. Recovery runs during a
|
|
172
|
+
new initialization, rather than on an independent timer. Heartbeats and commits for expired or recovered attempts
|
|
173
|
+
receive HTTP 409.
|
|
174
|
+
|
|
175
|
+
The lifecycle endpoints are under `/pulse_demeter/pipeline`: `POST /stage_runs/recover/`, `POST /stage_runs/checkout/`,
|
|
176
|
+
and `POST /stage_runs/{stage_run_uuid}/attempts/{stage_run_attempt_uuid}/` followed by `commit/`, `fail/`, `cancel/`, or
|
|
177
|
+
`heartbeat/`.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
FROM ruyangshou/plexus-pulse-demeter-tools:latest
|
|
2
|
+
|
|
3
|
+
# language=python
|
|
4
|
+
COPY <<'EOF' /app/example_business_seeder.py
|
|
5
|
+
import argparse
|
|
6
|
+
import datetime
|
|
7
|
+
import hashlib
|
|
8
|
+
import itertools
|
|
9
|
+
import json
|
|
10
|
+
import urllib.error
|
|
11
|
+
import urllib.request
|
|
12
|
+
|
|
13
|
+
from plexus.pulse.demeter.app.models.pipeline import WorkItem, Pipeline
|
|
14
|
+
from plexus.pulse.demeter.app.core.pipeline import validate_topology
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
pipeline = Pipeline(
|
|
18
|
+
name="example_business@1",
|
|
19
|
+
topology={
|
|
20
|
+
"stages": [
|
|
21
|
+
{
|
|
22
|
+
"name": "source",
|
|
23
|
+
"executor": "manual",
|
|
24
|
+
"outputs": ["message"],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "transform",
|
|
28
|
+
"executor": "argo",
|
|
29
|
+
"props": {"normalization": "lowercase"},
|
|
30
|
+
"consume": [
|
|
31
|
+
{"producer": "source", "output": "message", "max_retrials": 2},
|
|
32
|
+
],
|
|
33
|
+
"outputs": ["lowered", "reversed"],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "concat",
|
|
37
|
+
"executor": "argo",
|
|
38
|
+
"consume": [
|
|
39
|
+
{"producer": "transform", "output": "lowered", "max_retrials": 2},
|
|
40
|
+
{"producer": "transform", "output": "reversed", "max_retrials": 2, "props": {"branch": "reversed"}},
|
|
41
|
+
],
|
|
42
|
+
"outputs": ["result"],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "repeat",
|
|
46
|
+
"executor": "argo",
|
|
47
|
+
"consume": [
|
|
48
|
+
{"producer": "concat", "output": "result", "max_retrials": 2},
|
|
49
|
+
],
|
|
50
|
+
"outputs": ["result"],
|
|
51
|
+
},
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def main() -> None:
|
|
58
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
59
|
+
parser.add_argument("--api-url", default="http://localhost:8000")
|
|
60
|
+
parser.add_argument("--count", type=int, default=1, help="Number of distinct inputs per message")
|
|
61
|
+
parser.add_argument("--batch-size", type=int, default=1000, help="Work items per API request")
|
|
62
|
+
parser.add_argument("messages", nargs="+", help="Messages to process")
|
|
63
|
+
|
|
64
|
+
args = parser.parse_args()
|
|
65
|
+
if args.count < 1 or args.batch_size < 1:
|
|
66
|
+
parser.error("--count and --batch-size must be positive")
|
|
67
|
+
|
|
68
|
+
base = args.api_url.rstrip("/") + "/pulse_demeter/internal/pipeline"
|
|
69
|
+
|
|
70
|
+
def post(path: str, body: dict | list[dict]) -> dict | list[dict]:
|
|
71
|
+
request = urllib.request.Request(base + path,
|
|
72
|
+
json.dumps(body).encode(),
|
|
73
|
+
{"Content-Type": "application/json"},
|
|
74
|
+
method="POST")
|
|
75
|
+
try:
|
|
76
|
+
with urllib.request.urlopen(request, timeout=30) as response:
|
|
77
|
+
return json.load(response)
|
|
78
|
+
except urllib.error.HTTPError as exc:
|
|
79
|
+
raise RuntimeError(f"{path}: HTTP {exc.code}: {exc.read().decode()}") from exc
|
|
80
|
+
|
|
81
|
+
with urllib.request.urlopen(base + "/pipelines/", timeout=30) as response:
|
|
82
|
+
existing_pipelines = [Pipeline.model_validate(item) for item in json.load(response)]
|
|
83
|
+
existing_pipeline = next((item for item in existing_pipelines if item.name == pipeline.name), None)
|
|
84
|
+
if existing_pipeline is None:
|
|
85
|
+
post("/pipeline/", pipeline.model_dump(mode="json"))
|
|
86
|
+
elif validate_topology(existing_pipeline.topology) != validate_topology(pipeline.topology):
|
|
87
|
+
raise RuntimeError(f"existing pipeline {pipeline.name} has a different topology")
|
|
88
|
+
|
|
89
|
+
messages = (
|
|
90
|
+
message if args.count == 1 else f"{message} {index:05d}"
|
|
91
|
+
for message in args.messages
|
|
92
|
+
for index in range(args.count)
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
work_items = []
|
|
96
|
+
for message in messages:
|
|
97
|
+
digest = hashlib.sha256(message.encode()).hexdigest()
|
|
98
|
+
db_work_item = WorkItem(
|
|
99
|
+
pipeline_name=pipeline.name,
|
|
100
|
+
producer_stage="source",
|
|
101
|
+
consumer_stage="transform",
|
|
102
|
+
stage_output="message",
|
|
103
|
+
work_item_name="input-" + digest[:16],
|
|
104
|
+
dedup_key=digest,
|
|
105
|
+
data={"message": message},
|
|
106
|
+
available_at=datetime.datetime.now(datetime.UTC),
|
|
107
|
+
)
|
|
108
|
+
work_items.append(db_work_item.model_dump(mode="json"))
|
|
109
|
+
|
|
110
|
+
submitted = 0
|
|
111
|
+
for batch in itertools.batched(work_items, args.batch_size):
|
|
112
|
+
created_work_items = post("/work_items/", list(batch))
|
|
113
|
+
submitted += len(created_work_items)
|
|
114
|
+
print(f"Submitted {submitted}/{len(work_items)} work items", flush=True)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
if __name__ == "__main__":
|
|
118
|
+
main()
|
|
119
|
+
EOF
|
|
120
|
+
|
|
121
|
+
ENTRYPOINT ["/app/venv/bin/python", "/app/example_business_seeder.py"]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
apiVersion: argoproj.io/v1alpha1
|
|
2
|
+
kind: Workflow
|
|
3
|
+
metadata:
|
|
4
|
+
generateName: demeter-example-seeder-
|
|
5
|
+
namespace: argo
|
|
6
|
+
spec:
|
|
7
|
+
entrypoint: seed
|
|
8
|
+
arguments:
|
|
9
|
+
parameters:
|
|
10
|
+
- name: api-url
|
|
11
|
+
value: http://plexus-pulse-demeter-app.plexus-pulse.svc.cluster.local
|
|
12
|
+
- name: messages
|
|
13
|
+
value: "hello world"
|
|
14
|
+
- name: count
|
|
15
|
+
value: "1"
|
|
16
|
+
templates:
|
|
17
|
+
- name: seed
|
|
18
|
+
inputs:
|
|
19
|
+
parameters:
|
|
20
|
+
- name: api-url
|
|
21
|
+
- name: messages
|
|
22
|
+
- name: count
|
|
23
|
+
container:
|
|
24
|
+
image: plexus-pulse-demeter-example-seeder:local
|
|
25
|
+
imagePullPolicy: IfNotPresent
|
|
26
|
+
command: [ "/app/venv/bin/python", "/app/example_business_seeder.py" ]
|
|
27
|
+
args:
|
|
28
|
+
- "--api-url"
|
|
29
|
+
- "{{inputs.parameters.api-url}}"
|
|
30
|
+
- "--count"
|
|
31
|
+
- "{{inputs.parameters.count}}"
|
|
32
|
+
- "{{inputs.parameters.messages}}"
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
FROM ruyangshou/plexus-pulse-demeter-tools:latest
|
|
2
|
+
|
|
3
|
+
# language=python
|
|
4
|
+
COPY <<'EOF' /app/example_business.py
|
|
5
|
+
from plexus.pulse.demeter.utils import flowutils
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def main() -> None:
|
|
9
|
+
capsule = flowutils.capsule()
|
|
10
|
+
|
|
11
|
+
stage_run = capsule.stage_run()
|
|
12
|
+
stage = stage_run.stage
|
|
13
|
+
if stage not in {"transform", "concat", "repeat"}:
|
|
14
|
+
raise ValueError(f"unsupported example stage: {stage}")
|
|
15
|
+
|
|
16
|
+
work_items = capsule.work_items()
|
|
17
|
+
if stage == "transform":
|
|
18
|
+
for work_item in work_items:
|
|
19
|
+
message = str(work_item.data.get("message", ""))
|
|
20
|
+
lowered_message, reversed_message = message.lower(), message[::-1]
|
|
21
|
+
|
|
22
|
+
capsule.submit(
|
|
23
|
+
name="lowered",
|
|
24
|
+
dedup_key=work_item.dedup_key,
|
|
25
|
+
data={"message": lowered_message},
|
|
26
|
+
)
|
|
27
|
+
capsule.submit(
|
|
28
|
+
name="reversed",
|
|
29
|
+
dedup_key=work_item.dedup_key,
|
|
30
|
+
data={"message": reversed_message},
|
|
31
|
+
)
|
|
32
|
+
capsule.commit(
|
|
33
|
+
work_item.work_item_uuid,
|
|
34
|
+
outcome=stage,
|
|
35
|
+
result={"lowered": lowered_message, "reversed": reversed_message},
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
print(f"{work_item.work_item_name}: {message!r} -> {lowered_message!r}, {reversed_message!r}", flush=True)
|
|
39
|
+
|
|
40
|
+
elif stage == "concat":
|
|
41
|
+
# Inner join the two branch outputs by the source message's digest.
|
|
42
|
+
# A digest is shared by all outputs for one source message.
|
|
43
|
+
lowered_by_key = {work_item.dedup_key: work_item for work_item in work_items if work_item.stage_output == "lowered"}
|
|
44
|
+
reversed_by_key = {work_item.dedup_key: work_item for work_item in work_items if work_item.stage_output == "reversed"}
|
|
45
|
+
joined_keys = lowered_by_key.keys() & reversed_by_key.keys()
|
|
46
|
+
|
|
47
|
+
for work_item in work_items:
|
|
48
|
+
if work_item.dedup_key not in joined_keys:
|
|
49
|
+
capsule.skip(work_item.work_item_uuid)
|
|
50
|
+
|
|
51
|
+
for dedup_key in joined_keys:
|
|
52
|
+
lowered_work_item = lowered_by_key[dedup_key]
|
|
53
|
+
reversed_work_item = reversed_by_key[dedup_key]
|
|
54
|
+
lowered_message = lowered_work_item.data.get("message", "")
|
|
55
|
+
reversed_message = reversed_work_item.data.get("message", "")
|
|
56
|
+
concatenated_message = lowered_message + reversed_message
|
|
57
|
+
|
|
58
|
+
capsule.submit(
|
|
59
|
+
name="result",
|
|
60
|
+
dedup_key=dedup_key,
|
|
61
|
+
data={"message": concatenated_message},
|
|
62
|
+
)
|
|
63
|
+
capsule.commit(lowered_work_item.work_item_uuid, outcome=stage, result={"message": concatenated_message})
|
|
64
|
+
capsule.commit(reversed_work_item.work_item_uuid, outcome=stage, result={"message": concatenated_message})
|
|
65
|
+
|
|
66
|
+
print(f"{dedup_key}: {concatenated_message!r}", flush=True)
|
|
67
|
+
|
|
68
|
+
else:
|
|
69
|
+
for work_item in work_items:
|
|
70
|
+
message = str(work_item.data.get("message", ""))
|
|
71
|
+
repeated_message = message * 2
|
|
72
|
+
|
|
73
|
+
capsule.submit(
|
|
74
|
+
name="result",
|
|
75
|
+
dedup_key=work_item.dedup_key,
|
|
76
|
+
data={"message": repeated_message},
|
|
77
|
+
)
|
|
78
|
+
capsule.commit(work_item.work_item_uuid, outcome=stage, result={"message": repeated_message})
|
|
79
|
+
|
|
80
|
+
print(f"{work_item.work_item_name}: {message!r} -> {repeated_message!r}", flush=True)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
if __name__ == "__main__":
|
|
84
|
+
main()
|
|
85
|
+
EOF
|
|
86
|
+
|
|
87
|
+
ENTRYPOINT ["/app/venv/bin/python", "/app/example_business.py"]
|