bluer-objects 6.255.1__tar.gz → 6.268.1__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.
Potentially problematic release.
This version of bluer-objects might be problematic. Click here for more details.
- {bluer_objects-6.255.1/bluer_objects.egg-info → bluer_objects-6.268.1}/PKG-INFO +2 -2
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/README.md +1 -1
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/gif.sh +18 -0
- bluer_objects-6.268.1/bluer_objects/.abcli/ls.sh +24 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/help.sh +1 -4
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/ls.sh +5 -1
- bluer_objects-6.268.1/bluer_objects/.abcli/tests/open.sh +11 -0
- bluer_objects-6.268.1/bluer_objects/.abcli/tests/open_gif_open.sh +14 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/__init__.py +1 -1
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/config.env +3 -1
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/env.py +2 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/functions.py +1 -1
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/gif.py +24 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/ls.py +15 -5
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/metadata/__init__.py +1 -0
- bluer_objects-6.268.1/bluer_objects/metadata/flatten.py +27 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/storage/__init__.py +10 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/storage/__main__.py +17 -6
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/storage/base.py +30 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/storage/s3.py +57 -35
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_env.py +2 -0
- bluer_objects-6.268.1/bluer_objects/tests/test_metadata_flatten.py +109 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1/bluer_objects.egg-info}/PKG-INFO +2 -2
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects.egg-info/SOURCES.txt +4 -4
- bluer_objects-6.255.1/bluer_objects/.abcli/ls.sh +0 -18
- bluer_objects-6.255.1/bluer_objects/.abcli/storage/download_file.sh +0 -9
- bluer_objects-6.255.1/bluer_objects/.abcli/storage/exists.sh +0 -8
- bluer_objects-6.255.1/bluer_objects/.abcli/storage/list.sh +0 -8
- bluer_objects-6.255.1/bluer_objects/.abcli/storage/rm.sh +0 -11
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/LICENSE +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/MANIFEST.in +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/abcli.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/actions.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/aka.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/alias.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/bluer_objects.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/clone.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/create_test_asset.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/download.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/file.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/host.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/metadata/get.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/metadata/post.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/metadata.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/browse.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/cache.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/deploy.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/list_registered_models.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/lock/lock.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/lock/unlock.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/lock.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/log_artifacts.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/log_run.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/run.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/tags/clone.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/tags/get.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/tags/search.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/tags/set.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/tags.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/test.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow/transition.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/mlflow.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/object.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/select.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/storage/clear.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/storage/status.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/storage.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/README.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/clone.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/create_test_asset.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/gif.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/host.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/metadata.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/mlflow_cache.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/mlflow_lock.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/mlflow_logging.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/mlflow_tags.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/mlflow_test.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/storage_public_upload.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/storage_upload_download.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/version.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/web_is_accessible.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/tests/web_where_am_ai.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/upload.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/url.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/web/is_accessible.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/.abcli/web/where_am_i.sh +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/README/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/README/functions.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/README/items.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/README/utils.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/__main__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/file/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/file/__main__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/file/classes.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/file/functions.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/file/load.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/file/save.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/graphics/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/graphics/__main__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/graphics/frame.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/graphics/gif.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/graphics/screen.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/graphics/signature.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/graphics/text.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/__main__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/clone.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/create_test_asset.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/download.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/host.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/metadata.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/mlflow/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/mlflow/cache.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/mlflow/lock.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/mlflow/tags.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/upload.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/help/web.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/host/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/host/__main__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/host/functions.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/logger/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/logger/image.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/logger/matrix.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/markdown.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/metadata/__main__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/metadata/enums.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/metadata/get.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/metadata/post.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/__main__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/cache.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/lock/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/lock/__main__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/lock/functions.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/logging.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/models.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/objects.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/runs.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/tags.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/mlflow/testing.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/objects.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/path.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/sample.env +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/storage/WebDAV.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/storage/WebDAVrequest.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/storage/WebDAVzip.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/storage/policies.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/testing/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/testing/__main__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/testing/functions.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_README.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_file_download.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_file_load_save.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_file_load_save_text.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_fullname.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_graphics.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_graphics_frame.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_graphics_gif.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_graphics_screen.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_graphics_signature.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_graphics_text.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_log_image_grid.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_logger.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_logger_matrix.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_markdown.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_metadata.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_mlflow.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_mlflow_lock.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_objects.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_path.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_storage.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_storage_base.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_storage_s3.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_storage_webdav_request.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_storage_webdav_zip.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_testing.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_version.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/tests/test_web_is_accessible.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/urls.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/web/__init__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/web/__main__.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects/web/functions.py +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects.egg-info/dependency_links.txt +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects.egg-info/requires.txt +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/bluer_objects.egg-info/top_level.txt +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/pyproject.toml +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/requirements.txt +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/setup.cfg +0 -0
- {bluer_objects-6.255.1 → bluer_objects-6.268.1}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bluer_objects
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.268.1
|
|
4
4
|
Summary: 🌀 Object management in Bash.
|
|
5
5
|
Home-page: https://github.com/kamangir/bluer-objects
|
|
6
6
|
Author: Arash Abadpour (Kamangir)
|
|
@@ -64,6 +64,6 @@ pip install bluer-objects
|
|
|
64
64
|
|
|
65
65
|
[](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [](https://pypi.org/project/bluer-objects/) [](https://pypistats.org/packages/bluer-objects)
|
|
66
66
|
|
|
67
|
-
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.
|
|
67
|
+
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.268.1`](https://github.com/kamangir/bluer-objects).
|
|
68
68
|
|
|
69
69
|
built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
|
|
@@ -30,4 +30,4 @@ pip install bluer-objects
|
|
|
30
30
|
|
|
31
31
|
[](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [](https://pypi.org/project/bluer-objects/) [](https://pypistats.org/packages/bluer-objects)
|
|
32
32
|
|
|
33
|
-
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.
|
|
33
|
+
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.268.1`](https://github.com/kamangir/bluer-objects).
|
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
function bluer_objects_gif() {
|
|
4
4
|
local options=$1
|
|
5
|
+
local do_open=$(bluer_ai_option_int "$options" open 0)
|
|
6
|
+
if [[ "$do_open" == 1 ]]; then
|
|
7
|
+
local options=$2
|
|
8
|
+
local do_download=$(bluer_ai_option_int "$options" download 0)
|
|
9
|
+
|
|
10
|
+
local object_name=$(bluer_ai_clarify_object $3 .)
|
|
11
|
+
local filename=$(bluer_ai_option "$options" filename $object_name.gif)
|
|
12
|
+
|
|
13
|
+
[[ "$do_download" == 1 ]] &&
|
|
14
|
+
bluer_objects_download \
|
|
15
|
+
filename=$filename \
|
|
16
|
+
$object_name
|
|
17
|
+
|
|
18
|
+
bluer_ai_browse $ABCLI_OBJECT_ROOT/$object_name/$filename
|
|
19
|
+
|
|
20
|
+
return
|
|
21
|
+
fi
|
|
22
|
+
|
|
5
23
|
local do_dryrun=$(bluer_ai_option_int "$options" dryrun 0)
|
|
6
24
|
local do_download=$(bluer_ai_option_int "$options" download $(bluer_ai_not $do_dryrun))
|
|
7
25
|
local do_upload=$(bluer_ai_option_int "$options" upload $(bluer_ai_not $do_dryrun))
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#! /usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
function bluer_objects_ls() {
|
|
4
|
+
local options=$1
|
|
5
|
+
local where=$(bluer_ai_option_choice "$options" cloud,local local)
|
|
6
|
+
local objects=$(bluer_ai_option_int "$options" objects 0)
|
|
7
|
+
|
|
8
|
+
if [[ "$objects" == 1 ]]; then
|
|
9
|
+
python3 -m bluer_objects.storage \
|
|
10
|
+
ls_objects \
|
|
11
|
+
--where $where \
|
|
12
|
+
"${@:2}"
|
|
13
|
+
|
|
14
|
+
return
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
local object_name=$(bluer_ai_clarify_object $2 .)
|
|
18
|
+
|
|
19
|
+
python3 -m bluer_objects.storage \
|
|
20
|
+
ls \
|
|
21
|
+
--object_name $object_name \
|
|
22
|
+
--where $where \
|
|
23
|
+
"${@:3}"
|
|
24
|
+
}
|
|
@@ -29,6 +29,7 @@ function test_bluer_objects_help() {
|
|
|
29
29
|
"@download" \
|
|
30
30
|
\
|
|
31
31
|
"@gif" \
|
|
32
|
+
"@gif open" \
|
|
32
33
|
\
|
|
33
34
|
"@ls" \
|
|
34
35
|
\
|
|
@@ -69,10 +70,6 @@ function test_bluer_objects_help() {
|
|
|
69
70
|
\
|
|
70
71
|
"@storage" \
|
|
71
72
|
"@storage clear" \
|
|
72
|
-
"@storage download_file" \
|
|
73
|
-
"@storage exists" \
|
|
74
|
-
"@storage list" \
|
|
75
|
-
"@storage rm" \
|
|
76
73
|
"@storage status" \
|
|
77
74
|
\
|
|
78
75
|
"@upload" \
|
|
@@ -20,5 +20,9 @@ function test_bluer_objects_ls() {
|
|
|
20
20
|
[[ $? -ne 0 ]] && return 1
|
|
21
21
|
bluer_ai_hr
|
|
22
22
|
|
|
23
|
-
bluer_objects_ls
|
|
23
|
+
bluer_objects_ls cloud,objects --prefix 2025-09
|
|
24
|
+
[[ $? -ne 0 ]] && return 1
|
|
25
|
+
bluer_ai_hr
|
|
26
|
+
|
|
27
|
+
bluer_objects_ls local,objects --prefix 2025-09
|
|
24
28
|
}
|
|
@@ -61,3 +61,5 @@ MLFLOW_LOCK_WAIT_FOR_EXCLUSIVITY = get_env("MLFLOW_LOCK_WAIT_FOR_EXCLUSIVITY", 1
|
|
|
61
61
|
WEBDAV_HOSTNAME = get_env("WEBDAV_HOSTNAME")
|
|
62
62
|
WEBDAV_LOGIN = get_env("WEBDAV_LOGIN")
|
|
63
63
|
WEBDAV_PASSWORD = get_env("WEBDAV_PASSWORD")
|
|
64
|
+
|
|
65
|
+
BLUER_OBJECTS_TEST_OBJECT = get_env("BLUER_OBJECTS_TEST_OBJECT")
|
|
@@ -4,7 +4,7 @@ from bluer_objects import ALIAS
|
|
|
4
4
|
from bluer_objects.help.clone import help_clone
|
|
5
5
|
from bluer_objects.help.create_test_asset import help_create_test_asset
|
|
6
6
|
from bluer_objects.help.download import help_download
|
|
7
|
-
from bluer_objects.help.gif import help_gif
|
|
7
|
+
from bluer_objects.help.gif import help_functions as help_gif
|
|
8
8
|
from bluer_objects.help.host import help_functions as help_host
|
|
9
9
|
from bluer_objects.help.ls import help_ls
|
|
10
10
|
from bluer_objects.help.metadata import help_functions as help_metadata
|
|
@@ -26,3 +26,27 @@ def help_gif(
|
|
|
26
26
|
"generate <object-name>.gif.",
|
|
27
27
|
mono=mono,
|
|
28
28
|
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def help_gif_open(
|
|
32
|
+
tokens: List[str],
|
|
33
|
+
mono: bool,
|
|
34
|
+
) -> str:
|
|
35
|
+
options = xtra("download,filename=<filename.gif>", mono=mono)
|
|
36
|
+
|
|
37
|
+
return show_usage(
|
|
38
|
+
[
|
|
39
|
+
"@gif",
|
|
40
|
+
"open",
|
|
41
|
+
f"[{options}]",
|
|
42
|
+
"[.|<object-name>]",
|
|
43
|
+
],
|
|
44
|
+
"open <object-name>.gif.",
|
|
45
|
+
mono=mono,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
help_functions = {
|
|
50
|
+
"": help_gif,
|
|
51
|
+
"open": help_gif_open,
|
|
52
|
+
}
|
|
@@ -15,20 +15,30 @@ def help_ls(
|
|
|
15
15
|
usage_1 = show_usage(
|
|
16
16
|
[
|
|
17
17
|
"@ls",
|
|
18
|
-
"cloud
|
|
19
|
-
"
|
|
18
|
+
"[cloud|local]",
|
|
19
|
+
"[.|<object-name>]",
|
|
20
20
|
]
|
|
21
21
|
+ args,
|
|
22
22
|
"ls <object-name>.",
|
|
23
23
|
mono=mono,
|
|
24
24
|
)
|
|
25
25
|
|
|
26
|
+
# ---
|
|
27
|
+
|
|
28
|
+
args = [
|
|
29
|
+
"[--delim <space>]",
|
|
30
|
+
"[--log <0>]",
|
|
31
|
+
"[--prefix <prefix>]",
|
|
32
|
+
]
|
|
33
|
+
|
|
26
34
|
usage_2 = show_usage(
|
|
27
35
|
[
|
|
28
36
|
"@ls",
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
37
|
+
"[cloud|local]",
|
|
38
|
+
"objects",
|
|
39
|
+
]
|
|
40
|
+
+ args,
|
|
41
|
+
"ls objects.",
|
|
32
42
|
mono=mono,
|
|
33
43
|
)
|
|
34
44
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
import numpy as np
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def flatten(obj: Any) -> Any:
|
|
6
|
+
if isinstance(obj, dict):
|
|
7
|
+
return {k: flatten(v) for k, v in obj.items()}
|
|
8
|
+
|
|
9
|
+
if isinstance(obj, list):
|
|
10
|
+
return [flatten(x) for x in obj]
|
|
11
|
+
|
|
12
|
+
if isinstance(obj, tuple):
|
|
13
|
+
return tuple(flatten(x) for x in obj)
|
|
14
|
+
|
|
15
|
+
if isinstance(obj, np.ndarray):
|
|
16
|
+
return obj.tolist()
|
|
17
|
+
|
|
18
|
+
if hasattr(obj, "__dict__"):
|
|
19
|
+
return flatten(vars(obj))
|
|
20
|
+
|
|
21
|
+
if isinstance(obj, (int, float, str)):
|
|
22
|
+
return obj
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
return str(obj)
|
|
26
|
+
except:
|
|
27
|
+
return obj.__class__.__name__
|
|
@@ -56,6 +56,16 @@ def ls(
|
|
|
56
56
|
)
|
|
57
57
|
|
|
58
58
|
|
|
59
|
+
def ls_objects(
|
|
60
|
+
prefix: str,
|
|
61
|
+
where: str = "local",
|
|
62
|
+
) -> Tuple[bool, List[str]]:
|
|
63
|
+
return interface.ls_objects(
|
|
64
|
+
prefix=prefix,
|
|
65
|
+
where=where,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
59
69
|
def upload(
|
|
60
70
|
object_name: str,
|
|
61
71
|
filename: str = "",
|
|
@@ -2,6 +2,7 @@ import argparse
|
|
|
2
2
|
|
|
3
3
|
from blueness import module
|
|
4
4
|
from blueness.argparse.generic import sys_exit
|
|
5
|
+
from bluer_options.logger.config import log_list
|
|
5
6
|
|
|
6
7
|
from bluer_objects import NAME
|
|
7
8
|
from bluer_objects import storage
|
|
@@ -14,7 +15,7 @@ parser = argparse.ArgumentParser(NAME)
|
|
|
14
15
|
parser.add_argument(
|
|
15
16
|
"task",
|
|
16
17
|
type=str,
|
|
17
|
-
help="clear | download | ls | upload",
|
|
18
|
+
help="clear | download | ls | ls_objects | upload",
|
|
18
19
|
)
|
|
19
20
|
parser.add_argument(
|
|
20
21
|
"--object_name",
|
|
@@ -66,6 +67,11 @@ parser.add_argument(
|
|
|
66
67
|
default="none",
|
|
67
68
|
help=" | ".join(sorted([policy.name.lower() for policy in DownloadPolicy])),
|
|
68
69
|
)
|
|
70
|
+
parser.add_argument(
|
|
71
|
+
"--prefix",
|
|
72
|
+
type=str,
|
|
73
|
+
default="",
|
|
74
|
+
)
|
|
69
75
|
args = parser.parse_args()
|
|
70
76
|
|
|
71
77
|
delim = " " if args.delim == "space" else args.delim
|
|
@@ -88,14 +94,19 @@ elif args.task == "ls":
|
|
|
88
94
|
)
|
|
89
95
|
|
|
90
96
|
if args.log:
|
|
91
|
-
logger
|
|
92
|
-
"{:,} file(s).".format(len(list_of_files)),
|
|
93
|
-
)
|
|
94
|
-
for index, filename in enumerate(list_of_files):
|
|
95
|
-
logger.info(f"#{index+1: 4d} - {filename}")
|
|
97
|
+
log_list(logger, "", list_of_files, "file(s)", 999)
|
|
96
98
|
else:
|
|
97
99
|
print(delim.join(list_of_files))
|
|
100
|
+
elif args.task == "ls_objects":
|
|
101
|
+
success, list_of_objects = storage.ls_objects(
|
|
102
|
+
prefix=args.prefix,
|
|
103
|
+
where=args.where,
|
|
104
|
+
)
|
|
98
105
|
|
|
106
|
+
if args.log:
|
|
107
|
+
log_list(logger, "", list_of_objects, "objects(s)", 999)
|
|
108
|
+
else:
|
|
109
|
+
print(delim.join(list_of_objects))
|
|
99
110
|
elif args.task == "upload":
|
|
100
111
|
success = storage.upload(
|
|
101
112
|
object_name=args.object_name,
|
|
@@ -3,8 +3,10 @@ import glob
|
|
|
3
3
|
from typing import Tuple, List
|
|
4
4
|
|
|
5
5
|
from bluer_objects import objects
|
|
6
|
+
from bluer_objects import path
|
|
6
7
|
from bluer_objects.storage.policies import DownloadPolicy
|
|
7
8
|
from bluer_objects.logger import logger
|
|
9
|
+
from bluer_objects.env import ABCLI_OBJECT_ROOT
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
class StorageInterface:
|
|
@@ -69,6 +71,34 @@ class StorageInterface:
|
|
|
69
71
|
logger.error(f"Unknown 'where': {where}")
|
|
70
72
|
return False, []
|
|
71
73
|
|
|
74
|
+
def ls_objects(
|
|
75
|
+
self,
|
|
76
|
+
prefix: str,
|
|
77
|
+
where: str = "local",
|
|
78
|
+
) -> Tuple[bool, List[str]]:
|
|
79
|
+
if where == "local":
|
|
80
|
+
return True, sorted(
|
|
81
|
+
[
|
|
82
|
+
os.path.relpath(dirname, start=ABCLI_OBJECT_ROOT)
|
|
83
|
+
for dirname in glob.glob(
|
|
84
|
+
os.path.join(
|
|
85
|
+
ABCLI_OBJECT_ROOT,
|
|
86
|
+
"*",
|
|
87
|
+
),
|
|
88
|
+
recursive=False,
|
|
89
|
+
)
|
|
90
|
+
if not os.path.isfile(dirname)
|
|
91
|
+
and path.name(dirname).startswith(prefix)
|
|
92
|
+
]
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
if where == "cloud":
|
|
96
|
+
logger.error("not implemented")
|
|
97
|
+
return False, []
|
|
98
|
+
|
|
99
|
+
logger.error(f"Unknown 'where': {where}")
|
|
100
|
+
return False, []
|
|
101
|
+
|
|
72
102
|
def upload(
|
|
73
103
|
self,
|
|
74
104
|
object_name: str,
|
|
@@ -31,41 +31,9 @@ class S3Interface(StorageInterface):
|
|
|
31
31
|
)
|
|
32
32
|
)
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
endpoint_url=env.S3_STORAGE_ENDPOINT_URL,
|
|
38
|
-
aws_access_key_id=env.S3_STORAGE_AWS_ACCESS_KEY_ID,
|
|
39
|
-
aws_secret_access_key=env.S3_STORAGE_AWS_SECRET_ACCESS_KEY,
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
paginator = s3.get_paginator("list_objects_v2")
|
|
43
|
-
pages = paginator.paginate(
|
|
44
|
-
Bucket=env.S3_STORAGE_BUCKET,
|
|
45
|
-
Prefix="test",
|
|
46
|
-
)
|
|
47
|
-
except Exception as e:
|
|
48
|
-
logger.error(e)
|
|
49
|
-
return False
|
|
50
|
-
|
|
51
|
-
list_of_objects = sorted(
|
|
52
|
-
list(
|
|
53
|
-
set(
|
|
54
|
-
reduce(
|
|
55
|
-
lambda x, y: x + y,
|
|
56
|
-
[
|
|
57
|
-
[
|
|
58
|
-
obj["Key"].split("/", 1)[0]
|
|
59
|
-
for obj in page.get("Contents", [])
|
|
60
|
-
]
|
|
61
|
-
for page in pages
|
|
62
|
-
],
|
|
63
|
-
[],
|
|
64
|
-
)
|
|
65
|
-
)
|
|
66
|
-
)
|
|
67
|
-
)
|
|
68
|
-
|
|
34
|
+
success, list_of_objects = self.list_of_objects(prefix="test")
|
|
35
|
+
if not success:
|
|
36
|
+
return success
|
|
69
37
|
logger.info(f"{len(list_of_objects)} object(s) to delete.")
|
|
70
38
|
|
|
71
39
|
for object_name in tqdm(list_of_objects):
|
|
@@ -188,6 +156,47 @@ class S3Interface(StorageInterface):
|
|
|
188
156
|
|
|
189
157
|
return True
|
|
190
158
|
|
|
159
|
+
def list_of_objects(
|
|
160
|
+
self,
|
|
161
|
+
prefix: str = "",
|
|
162
|
+
) -> Tuple[bool, List[str]]:
|
|
163
|
+
try:
|
|
164
|
+
s3 = boto3.client(
|
|
165
|
+
"s3",
|
|
166
|
+
endpoint_url=env.S3_STORAGE_ENDPOINT_URL,
|
|
167
|
+
aws_access_key_id=env.S3_STORAGE_AWS_ACCESS_KEY_ID,
|
|
168
|
+
aws_secret_access_key=env.S3_STORAGE_AWS_SECRET_ACCESS_KEY,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
paginator = s3.get_paginator("list_objects_v2")
|
|
172
|
+
pages = paginator.paginate(
|
|
173
|
+
Bucket=env.S3_STORAGE_BUCKET,
|
|
174
|
+
Prefix=prefix,
|
|
175
|
+
)
|
|
176
|
+
except Exception as e:
|
|
177
|
+
logger.error(e)
|
|
178
|
+
return False, []
|
|
179
|
+
|
|
180
|
+
list_of_objects = sorted(
|
|
181
|
+
list(
|
|
182
|
+
set(
|
|
183
|
+
reduce(
|
|
184
|
+
lambda x, y: x + y,
|
|
185
|
+
[
|
|
186
|
+
[
|
|
187
|
+
obj["Key"].split("/", 1)[0]
|
|
188
|
+
for obj in page.get("Contents", [])
|
|
189
|
+
]
|
|
190
|
+
for page in pages
|
|
191
|
+
],
|
|
192
|
+
[],
|
|
193
|
+
)
|
|
194
|
+
)
|
|
195
|
+
)
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
return True, list_of_objects
|
|
199
|
+
|
|
191
200
|
def ls(
|
|
192
201
|
self,
|
|
193
202
|
object_name: str,
|
|
@@ -232,6 +241,19 @@ class S3Interface(StorageInterface):
|
|
|
232
241
|
where=where,
|
|
233
242
|
)
|
|
234
243
|
|
|
244
|
+
def ls_objects(
|
|
245
|
+
self,
|
|
246
|
+
prefix: str,
|
|
247
|
+
where: str = "local",
|
|
248
|
+
) -> Tuple[bool, List[str]]:
|
|
249
|
+
if where == "cloud":
|
|
250
|
+
return self.list_of_objects(prefix)
|
|
251
|
+
|
|
252
|
+
return super().ls_objects(
|
|
253
|
+
prefix=prefix,
|
|
254
|
+
where=where,
|
|
255
|
+
)
|
|
256
|
+
|
|
235
257
|
def upload(
|
|
236
258
|
self,
|
|
237
259
|
object_name: str,
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
import numpy as np
|
|
3
|
+
|
|
4
|
+
from bluer_objects.metadata import flatten
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
test_objects = [
|
|
8
|
+
np.zeros((4, 5)),
|
|
9
|
+
[np.zeros((4, 5)) for _ in range(5)],
|
|
10
|
+
tuple(np.zeros((4, 5)) for _ in range(5)),
|
|
11
|
+
{"this": np.zeros((4, 5))},
|
|
12
|
+
{"this": 1, "that": 2},
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
test_flatten_objects = [
|
|
16
|
+
[
|
|
17
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
18
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
19
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
20
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
[
|
|
24
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
25
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
26
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
27
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
31
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
32
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
33
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
37
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
38
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
39
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
43
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
44
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
45
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
49
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
50
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
51
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
52
|
+
],
|
|
53
|
+
],
|
|
54
|
+
(
|
|
55
|
+
[
|
|
56
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
57
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
58
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
59
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
60
|
+
],
|
|
61
|
+
[
|
|
62
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
63
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
64
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
65
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
66
|
+
],
|
|
67
|
+
[
|
|
68
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
69
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
70
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
71
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
72
|
+
],
|
|
73
|
+
[
|
|
74
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
75
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
76
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
77
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
78
|
+
],
|
|
79
|
+
[
|
|
80
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
81
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
82
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
83
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
84
|
+
],
|
|
85
|
+
),
|
|
86
|
+
{
|
|
87
|
+
"this": [
|
|
88
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
89
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
90
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
91
|
+
[0.0, 0.0, 0.0, 0.0, 0.0],
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
{"this": 1, "that": 2},
|
|
95
|
+
]
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@pytest.mark.parametrize(
|
|
99
|
+
["obj", "flatten_obj"],
|
|
100
|
+
[
|
|
101
|
+
[obj, flatten_obj]
|
|
102
|
+
for obj, flatten_obj in zip(
|
|
103
|
+
test_objects,
|
|
104
|
+
test_flatten_objects,
|
|
105
|
+
)
|
|
106
|
+
],
|
|
107
|
+
)
|
|
108
|
+
def test_metadata_flatten(obj, flatten_obj):
|
|
109
|
+
assert flatten(obj) == flatten_obj
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bluer_objects
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.268.1
|
|
4
4
|
Summary: 🌀 Object management in Bash.
|
|
5
5
|
Home-page: https://github.com/kamangir/bluer-objects
|
|
6
6
|
Author: Arash Abadpour (Kamangir)
|
|
@@ -64,6 +64,6 @@ pip install bluer-objects
|
|
|
64
64
|
|
|
65
65
|
[](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [](https://pypi.org/project/bluer-objects/) [](https://pypistats.org/packages/bluer-objects)
|
|
66
66
|
|
|
67
|
-
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.
|
|
67
|
+
built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.268.1`](https://github.com/kamangir/bluer-objects).
|
|
68
68
|
|
|
69
69
|
built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
|
|
@@ -57,10 +57,6 @@ bluer_objects/.abcli/mlflow/tags/get.sh
|
|
|
57
57
|
bluer_objects/.abcli/mlflow/tags/search.sh
|
|
58
58
|
bluer_objects/.abcli/mlflow/tags/set.sh
|
|
59
59
|
bluer_objects/.abcli/storage/clear.sh
|
|
60
|
-
bluer_objects/.abcli/storage/download_file.sh
|
|
61
|
-
bluer_objects/.abcli/storage/exists.sh
|
|
62
|
-
bluer_objects/.abcli/storage/list.sh
|
|
63
|
-
bluer_objects/.abcli/storage/rm.sh
|
|
64
60
|
bluer_objects/.abcli/storage/status.sh
|
|
65
61
|
bluer_objects/.abcli/tests/README.sh
|
|
66
62
|
bluer_objects/.abcli/tests/clone.sh
|
|
@@ -75,6 +71,8 @@ bluer_objects/.abcli/tests/mlflow_lock.sh
|
|
|
75
71
|
bluer_objects/.abcli/tests/mlflow_logging.sh
|
|
76
72
|
bluer_objects/.abcli/tests/mlflow_tags.sh
|
|
77
73
|
bluer_objects/.abcli/tests/mlflow_test.sh
|
|
74
|
+
bluer_objects/.abcli/tests/open.sh
|
|
75
|
+
bluer_objects/.abcli/tests/open_gif_open.sh
|
|
78
76
|
bluer_objects/.abcli/tests/storage_public_upload.sh
|
|
79
77
|
bluer_objects/.abcli/tests/storage_upload_download.sh
|
|
80
78
|
bluer_objects/.abcli/tests/version.sh
|
|
@@ -124,6 +122,7 @@ bluer_objects/logger/matrix.py
|
|
|
124
122
|
bluer_objects/metadata/__init__.py
|
|
125
123
|
bluer_objects/metadata/__main__.py
|
|
126
124
|
bluer_objects/metadata/enums.py
|
|
125
|
+
bluer_objects/metadata/flatten.py
|
|
127
126
|
bluer_objects/metadata/get.py
|
|
128
127
|
bluer_objects/metadata/post.py
|
|
129
128
|
bluer_objects/mlflow/__init__.py
|
|
@@ -167,6 +166,7 @@ bluer_objects/tests/test_logger.py
|
|
|
167
166
|
bluer_objects/tests/test_logger_matrix.py
|
|
168
167
|
bluer_objects/tests/test_markdown.py
|
|
169
168
|
bluer_objects/tests/test_metadata.py
|
|
169
|
+
bluer_objects/tests/test_metadata_flatten.py
|
|
170
170
|
bluer_objects/tests/test_mlflow.py
|
|
171
171
|
bluer_objects/tests/test_mlflow_lock.py
|
|
172
172
|
bluer_objects/tests/test_objects.py
|