bluer-objects 6.220.1__tar.gz → 6.229.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.220.1/bluer_objects.egg-info → bluer_objects-6.229.1}/PKG-INFO +2 -2
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/README.md +1 -1
- bluer_objects-6.229.1/bluer_objects/README/functions.py +186 -0
- bluer_objects-6.229.1/bluer_objects/README/utils.py +235 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/__init__.py +1 -1
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/save.py +3 -1
- {bluer_objects-6.220.1 → bluer_objects-6.229.1/bluer_objects.egg-info}/PKG-INFO +2 -2
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects.egg-info/SOURCES.txt +1 -0
- bluer_objects-6.220.1/bluer_objects/README/functions.py +0 -297
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/LICENSE +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/MANIFEST.in +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/abcli.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/actions.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/aka.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/alias.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/bluer_objects.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/clone.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/create_test_asset.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/download.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/file.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/gif.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/host.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/ls.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/metadata/get.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/metadata/post.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/metadata.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/browse.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/cache.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/deploy.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/list_registered_models.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/lock/lock.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/lock/unlock.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/lock.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/log_artifacts.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/log_run.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/run.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/tags/clone.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/tags/get.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/tags/search.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/tags/set.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/tags.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/test.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/transition.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/object.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/select.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/clear.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/download_file.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/exists.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/list.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/rm.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/status.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/README.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/clone.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/create_test_asset.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/gif.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/help.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/host.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/ls.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/metadata.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/mlflow_cache.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/mlflow_lock.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/mlflow_logging.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/mlflow_tags.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/mlflow_test.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/storage_public_upload.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/storage_upload_download.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/version.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/web_is_accessible.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/web_where_am_ai.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/upload.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/url.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/web/is_accessible.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/web/where_am_i.sh +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/README/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/README/items.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/config.env +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/env.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/classes.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/functions.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/load.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/frame.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/gif.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/screen.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/signature.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/text.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/clone.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/create_test_asset.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/download.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/functions.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/gif.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/host.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/ls.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/metadata.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/mlflow/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/mlflow/cache.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/mlflow/lock.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/mlflow/tags.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/upload.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/web.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/host/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/host/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/host/functions.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/logger/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/logger/image.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/logger/matrix.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/markdown.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/metadata/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/metadata/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/metadata/enums.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/metadata/get.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/metadata/post.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/cache.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/lock/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/lock/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/lock/functions.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/logging.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/models.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/objects.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/runs.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/tags.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/testing.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/objects.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/path.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/sample.env +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/WebDAV.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/WebDAVrequest.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/WebDAVzip.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/base.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/s3.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/testing/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/testing/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/testing/functions.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_README.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_env.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_file_download.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_file_load_save.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_file_load_save_text.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_fullname.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics_frame.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics_gif.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics_screen.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics_signature.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics_text.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_log_image_grid.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_logger.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_logger_matrix.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_markdown.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_metadata.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_mlflow.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_mlflow_lock.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_objects.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_path.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_storage.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_storage_base.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_storage_s3.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_storage_webdav_request.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_storage_webdav_zip.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_testing.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_version.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_web_is_accessible.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/urls.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/web/__init__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/web/__main__.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/web/functions.py +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects.egg-info/dependency_links.txt +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects.egg-info/requires.txt +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects.egg-info/top_level.txt +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/pyproject.toml +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/requirements.txt +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.1}/setup.cfg +0 -0
- {bluer_objects-6.220.1 → bluer_objects-6.229.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.229.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.229.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.229.1`](https://github.com/kamangir/bluer-objects).
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
from typing import List, Dict, Union, Callable
|
|
2
|
+
import os
|
|
3
|
+
import yaml
|
|
4
|
+
|
|
5
|
+
from blueness import module
|
|
6
|
+
|
|
7
|
+
from bluer_objects import NAME as MY_NAME
|
|
8
|
+
from bluer_objects.metadata import get_from_object
|
|
9
|
+
from bluer_objects import file, env
|
|
10
|
+
from bluer_objects import markdown
|
|
11
|
+
from bluer_objects.README.utils import (
|
|
12
|
+
apply_legacy,
|
|
13
|
+
process_assets,
|
|
14
|
+
process_details,
|
|
15
|
+
process_envs,
|
|
16
|
+
process_help,
|
|
17
|
+
process_include,
|
|
18
|
+
process_mermaid,
|
|
19
|
+
process_objects,
|
|
20
|
+
process_variable,
|
|
21
|
+
signature,
|
|
22
|
+
variables,
|
|
23
|
+
)
|
|
24
|
+
from bluer_objects.logger import logger
|
|
25
|
+
|
|
26
|
+
MY_NAME = module.name(__file__, MY_NAME)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def build(
|
|
30
|
+
NAME: str,
|
|
31
|
+
VERSION: str,
|
|
32
|
+
REPO_NAME: str,
|
|
33
|
+
items: List[str] = [],
|
|
34
|
+
template_filename: str = "",
|
|
35
|
+
filename: str = "",
|
|
36
|
+
path: str = "",
|
|
37
|
+
cols: int = 3,
|
|
38
|
+
ICON: str = "",
|
|
39
|
+
MODULE_NAME: str = "",
|
|
40
|
+
macros: Dict[str, str] = {},
|
|
41
|
+
help_function: Union[Callable[[List[str]], str], None] = None,
|
|
42
|
+
legacy_mode: bool = True,
|
|
43
|
+
assets_repo: str = "kamangir/assets",
|
|
44
|
+
) -> bool:
|
|
45
|
+
if path:
|
|
46
|
+
if path.endswith(".md"):
|
|
47
|
+
filename = path
|
|
48
|
+
template_filename = file.add_suffix(path, "template")
|
|
49
|
+
else:
|
|
50
|
+
filename = os.path.join(path, "README.md")
|
|
51
|
+
template_filename = os.path.join(path, "template.md")
|
|
52
|
+
|
|
53
|
+
if not MODULE_NAME:
|
|
54
|
+
MODULE_NAME = REPO_NAME
|
|
55
|
+
|
|
56
|
+
logger.info(
|
|
57
|
+
"{}.build: {}-{}: {}[{}]: {} -{}> {}".format(
|
|
58
|
+
MY_NAME,
|
|
59
|
+
NAME,
|
|
60
|
+
VERSION,
|
|
61
|
+
REPO_NAME,
|
|
62
|
+
MODULE_NAME,
|
|
63
|
+
template_filename,
|
|
64
|
+
"+legacy-" if legacy_mode else "",
|
|
65
|
+
filename,
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
table_of_items = markdown.generate_table(items, cols=cols) if cols > 0 else items
|
|
70
|
+
|
|
71
|
+
success, template = file.load_text(template_filename)
|
|
72
|
+
if not success:
|
|
73
|
+
return success
|
|
74
|
+
|
|
75
|
+
if legacy_mode:
|
|
76
|
+
template = apply_legacy(template)
|
|
77
|
+
|
|
78
|
+
content: List[str] = []
|
|
79
|
+
mermaid_started: bool = False
|
|
80
|
+
for template_line in template:
|
|
81
|
+
if template_line.startswith("ignore:::"):
|
|
82
|
+
content += [template_line.split(":::", 1)[1].strip()]
|
|
83
|
+
continue
|
|
84
|
+
|
|
85
|
+
template_line = process_envs(template_line)
|
|
86
|
+
|
|
87
|
+
for key, value in variables.items():
|
|
88
|
+
template_line = template_line.replace(
|
|
89
|
+
f"get:::{key}",
|
|
90
|
+
value,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
if "metadata:::" in template_line:
|
|
94
|
+
object_name_and_key = template_line.split("metadata:::", 1)[1]
|
|
95
|
+
if " " in object_name_and_key:
|
|
96
|
+
object_name_and_key = object_name_and_key.split(" ", 1)[0]
|
|
97
|
+
if ":::" not in object_name_and_key:
|
|
98
|
+
object_name_and_key += ":::"
|
|
99
|
+
object_name, key = object_name_and_key.split(":::", 1)
|
|
100
|
+
|
|
101
|
+
value = get_from_object(
|
|
102
|
+
object_name,
|
|
103
|
+
key,
|
|
104
|
+
{},
|
|
105
|
+
download=True,
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
logger.info(f"metadata[{object_name_and_key}] = {value}")
|
|
109
|
+
|
|
110
|
+
if template_line.startswith("metadata:::"):
|
|
111
|
+
content += (
|
|
112
|
+
["```yaml"]
|
|
113
|
+
+ yaml.dump(
|
|
114
|
+
value,
|
|
115
|
+
default_flow_style=False,
|
|
116
|
+
).split("\n")
|
|
117
|
+
+ ["```"]
|
|
118
|
+
)
|
|
119
|
+
continue
|
|
120
|
+
|
|
121
|
+
template_line = template_line.replace(
|
|
122
|
+
f"metadata:::{object_name}:::{key}",
|
|
123
|
+
str(value),
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
if template_line.startswith("set:::"):
|
|
127
|
+
process_variable(template_line)
|
|
128
|
+
continue
|
|
129
|
+
|
|
130
|
+
template_line = process_assets(template_line, assets_repo)
|
|
131
|
+
|
|
132
|
+
template_line = process_objects(template_line)
|
|
133
|
+
|
|
134
|
+
if template_line.startswith("details:::"):
|
|
135
|
+
content += process_details(template_line)
|
|
136
|
+
continue
|
|
137
|
+
|
|
138
|
+
if "items:::" in template_line:
|
|
139
|
+
content += table_of_items
|
|
140
|
+
continue
|
|
141
|
+
|
|
142
|
+
if "include:::" in template_line:
|
|
143
|
+
content += process_include(
|
|
144
|
+
template_line,
|
|
145
|
+
file.path(template_filename),
|
|
146
|
+
)
|
|
147
|
+
continue
|
|
148
|
+
|
|
149
|
+
if "signature:::" in template_line:
|
|
150
|
+
content += signature(
|
|
151
|
+
REPO_NAME,
|
|
152
|
+
NAME,
|
|
153
|
+
ICON,
|
|
154
|
+
MODULE_NAME,
|
|
155
|
+
VERSION,
|
|
156
|
+
)
|
|
157
|
+
continue
|
|
158
|
+
|
|
159
|
+
if "help:::" in template_line:
|
|
160
|
+
if help_function is None:
|
|
161
|
+
logger.warning("help_function not found.")
|
|
162
|
+
else:
|
|
163
|
+
content += process_help(
|
|
164
|
+
template_line,
|
|
165
|
+
help_function,
|
|
166
|
+
)
|
|
167
|
+
continue
|
|
168
|
+
|
|
169
|
+
content_section = [template_line]
|
|
170
|
+
if template_line.startswith("```mermaid"):
|
|
171
|
+
mermaid_started = True
|
|
172
|
+
logger.info("🧜🏽♀️ detected ...")
|
|
173
|
+
elif mermaid_started and template_line.startswith("```"):
|
|
174
|
+
mermaid_started = False
|
|
175
|
+
elif mermaid_started:
|
|
176
|
+
if '"' in template_line and ":::folder" not in template_line:
|
|
177
|
+
content_section = process_mermaid(template_line)
|
|
178
|
+
else:
|
|
179
|
+
for macro, macro_value in macros.items():
|
|
180
|
+
if macro in template_line:
|
|
181
|
+
content_section = macro_value
|
|
182
|
+
break
|
|
183
|
+
|
|
184
|
+
content += content_section
|
|
185
|
+
|
|
186
|
+
return file.save_text(filename, content)
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
from typing import List, Tuple, Dict, Union, Callable
|
|
2
|
+
|
|
3
|
+
from bluer_options.env import get_env
|
|
4
|
+
from bluer_objects import file
|
|
5
|
+
from bluer_objects import env
|
|
6
|
+
from bluer_objects import NAME as MY_NAME, ICON as MY_ICON
|
|
7
|
+
|
|
8
|
+
from bluer_objects.logger import logger
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
variables: Dict[str, str] = {}
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def apply_legacy_on_line(line: str) -> str:
|
|
15
|
+
for before, after in {
|
|
16
|
+
"yaml:::": "metadata:::",
|
|
17
|
+
"--help--": "help:::",
|
|
18
|
+
"--include": "include:::",
|
|
19
|
+
"--table--": "items:::",
|
|
20
|
+
"--signature--": "signature:::",
|
|
21
|
+
}.items():
|
|
22
|
+
line = line.replace(before, after)
|
|
23
|
+
return line
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def apply_legacy(template: List[str]) -> List[str]:
|
|
27
|
+
logger.info("applying legacy conversions...")
|
|
28
|
+
template = [apply_legacy_on_line(line) for line in template]
|
|
29
|
+
return template
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def process_assets(
|
|
33
|
+
template_line: str,
|
|
34
|
+
assets_repo: str,
|
|
35
|
+
) -> str:
|
|
36
|
+
if "assets:::" in template_line:
|
|
37
|
+
template_line = " ".join(
|
|
38
|
+
[
|
|
39
|
+
(
|
|
40
|
+
(
|
|
41
|
+
"".format(
|
|
42
|
+
assets_repo,
|
|
43
|
+
token.split(":::")[1].strip(),
|
|
44
|
+
)
|
|
45
|
+
if any(
|
|
46
|
+
token.endswith(extension)
|
|
47
|
+
for extension in ["png", "jpg", "jpeg", "gif"]
|
|
48
|
+
)
|
|
49
|
+
else "[{}](https://github.com/{}/blob/main/{})".format(
|
|
50
|
+
file.name_and_extension(token.split(":::")[1].strip()),
|
|
51
|
+
assets_repo,
|
|
52
|
+
token.split(":::")[1].strip(),
|
|
53
|
+
)
|
|
54
|
+
)
|
|
55
|
+
if token.startswith("assets:::")
|
|
56
|
+
else token
|
|
57
|
+
)
|
|
58
|
+
for token in template_line.split(" ")
|
|
59
|
+
]
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
return template_line
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def process_details(template_line: str) -> List[str]:
|
|
66
|
+
suffix = template_line.split(":::", 1)[1]
|
|
67
|
+
if suffix:
|
|
68
|
+
content_section = [
|
|
69
|
+
"",
|
|
70
|
+
"<details>",
|
|
71
|
+
f"<summary>{suffix}</summary>",
|
|
72
|
+
"",
|
|
73
|
+
]
|
|
74
|
+
else:
|
|
75
|
+
content_section = [
|
|
76
|
+
"",
|
|
77
|
+
"</details>",
|
|
78
|
+
"",
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
return content_section
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def process_envs(template_line: str) -> str:
|
|
85
|
+
while "env:::" in template_line:
|
|
86
|
+
env_name = template_line.split("env:::", 1)[1]
|
|
87
|
+
if " " in env_name:
|
|
88
|
+
env_name = env_name.split(" ", 1)[0]
|
|
89
|
+
else:
|
|
90
|
+
if ":::" in env_name:
|
|
91
|
+
env_name = env_name.split(":::", 1)[0]
|
|
92
|
+
|
|
93
|
+
env_value = get_env(env_name)
|
|
94
|
+
|
|
95
|
+
template_line = template_line.replace(
|
|
96
|
+
f"env:::{env_name}",
|
|
97
|
+
env_value,
|
|
98
|
+
)
|
|
99
|
+
logger.info(f"{env_name} -> {env_value}")
|
|
100
|
+
|
|
101
|
+
return template_line
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def process_help(
|
|
105
|
+
template_line: str,
|
|
106
|
+
help_function: Union[Callable[[List[str]], str], None] = None,
|
|
107
|
+
) -> List[str]:
|
|
108
|
+
help_command = template_line.split("help:::")[1].strip()
|
|
109
|
+
|
|
110
|
+
tokens = help_command.strip().split(" ")[1:]
|
|
111
|
+
|
|
112
|
+
help_content = help_function(tokens)
|
|
113
|
+
if not help_content:
|
|
114
|
+
logger.warning(f"help not found: {help_command}: {tokens}")
|
|
115
|
+
return False
|
|
116
|
+
|
|
117
|
+
logger.info(f"+= help: {help_command}")
|
|
118
|
+
print(help_content)
|
|
119
|
+
content_section = [
|
|
120
|
+
"```bash",
|
|
121
|
+
help_content,
|
|
122
|
+
"```",
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
return content_section
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def process_include(
|
|
129
|
+
template_line: str,
|
|
130
|
+
template_path: str,
|
|
131
|
+
) -> List[str]:
|
|
132
|
+
include_filename_relative = template_line.split(" ")[1].strip()
|
|
133
|
+
include_filename = file.absolute(
|
|
134
|
+
include_filename_relative,
|
|
135
|
+
template_path,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
success, content_section = file.load_text(include_filename)
|
|
139
|
+
if not success:
|
|
140
|
+
return success
|
|
141
|
+
|
|
142
|
+
content_section = [
|
|
143
|
+
line for line in content_section if not line.startswith("used by:")
|
|
144
|
+
]
|
|
145
|
+
|
|
146
|
+
include_title = (template_line.split(" ", 2) + ["", "", ""])[2]
|
|
147
|
+
if include_title:
|
|
148
|
+
content_section = [f"## {include_title}"] + content_section[1:]
|
|
149
|
+
|
|
150
|
+
if "include:::noref" not in template_line:
|
|
151
|
+
content_section += [
|
|
152
|
+
"using [{}]({}).".format(
|
|
153
|
+
file.name(include_filename),
|
|
154
|
+
include_filename_relative,
|
|
155
|
+
)
|
|
156
|
+
]
|
|
157
|
+
|
|
158
|
+
logger.info(f"{MY_NAME}.build: including {include_filename} ...")
|
|
159
|
+
|
|
160
|
+
return content_section
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def process_mermaid(template_line: str) -> List[str]:
|
|
164
|
+
template_line_pieces = template_line.split('"')
|
|
165
|
+
if len(template_line_pieces) != 3:
|
|
166
|
+
logger.error(f"🧜🏽♀️ mermaid line not in expected format: {template_line}.")
|
|
167
|
+
return False
|
|
168
|
+
|
|
169
|
+
template_line_pieces[1] = (
|
|
170
|
+
template_line_pieces[1]
|
|
171
|
+
.replace("<", "<")
|
|
172
|
+
.replace(">", ">")
|
|
173
|
+
.replace(" ", "<br>")
|
|
174
|
+
.replace("~~", " ")
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
return ['"'.join(template_line_pieces)]
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def process_objects(template_line: str) -> str:
|
|
181
|
+
if "object:::" in template_line:
|
|
182
|
+
template_line = " ".join(
|
|
183
|
+
[
|
|
184
|
+
(
|
|
185
|
+
"[{}](https://{}.{}/{}.tar.gz)".format(
|
|
186
|
+
token.split(":::")[1].strip(),
|
|
187
|
+
env.S3_PUBLIC_STORAGE_BUCKET,
|
|
188
|
+
env.S3_STORAGE_ENDPOINT_URL.split("https://", 1)[1],
|
|
189
|
+
token.split(":::")[1].strip(),
|
|
190
|
+
)
|
|
191
|
+
if token.startswith("object:::")
|
|
192
|
+
else token
|
|
193
|
+
)
|
|
194
|
+
for token in template_line.split(" ")
|
|
195
|
+
]
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
return template_line
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def process_variable(template_line: str):
|
|
202
|
+
key, value = template_line.split("set:::", 1)[1].split(" ", 1)
|
|
203
|
+
variables[key] = value
|
|
204
|
+
logger.info(f"{key} = {value}")
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
def signature(
|
|
208
|
+
REPO_NAME: str,
|
|
209
|
+
NAME: str,
|
|
210
|
+
ICON: str,
|
|
211
|
+
MODULE_NAME: str,
|
|
212
|
+
VERSION: str,
|
|
213
|
+
) -> List[str]:
|
|
214
|
+
return [
|
|
215
|
+
"",
|
|
216
|
+
" ".join(
|
|
217
|
+
[
|
|
218
|
+
f"[](https://github.com/kamangir/{REPO_NAME}/actions/workflows/pylint.yml)",
|
|
219
|
+
f"[](https://github.com/kamangir/{REPO_NAME}/actions/workflows/pytest.yml)",
|
|
220
|
+
f"[](https://github.com/kamangir/{REPO_NAME}/actions/workflows/bashtest.yml)",
|
|
221
|
+
f"[](https://pypi.org/project/{MODULE_NAME}/)",
|
|
222
|
+
f"[](https://pypistats.org/packages/{MODULE_NAME})",
|
|
223
|
+
]
|
|
224
|
+
),
|
|
225
|
+
"",
|
|
226
|
+
"built by {} [`{}`]({}), based on {}[`{}-{}`]({}).".format(
|
|
227
|
+
MY_ICON,
|
|
228
|
+
"bluer README",
|
|
229
|
+
"https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README",
|
|
230
|
+
f"{ICON} " if ICON else "",
|
|
231
|
+
NAME,
|
|
232
|
+
VERSION,
|
|
233
|
+
f"https://github.com/kamangir/{REPO_NAME}",
|
|
234
|
+
),
|
|
235
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bluer_objects
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.229.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.229.1`](https://github.com/kamangir/bluer-objects).
|
|
68
68
|
|
|
69
69
|
built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
|
|
@@ -85,6 +85,7 @@ bluer_objects/.abcli/web/where_am_i.sh
|
|
|
85
85
|
bluer_objects/README/__init__.py
|
|
86
86
|
bluer_objects/README/functions.py
|
|
87
87
|
bluer_objects/README/items.py
|
|
88
|
+
bluer_objects/README/utils.py
|
|
88
89
|
bluer_objects/file/__init__.py
|
|
89
90
|
bluer_objects/file/__main__.py
|
|
90
91
|
bluer_objects/file/classes.py
|