bluer-objects 6.175.1__tar.gz → 6.186.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.

Files changed (180) hide show
  1. {bluer_objects-6.175.1/bluer_objects.egg-info → bluer_objects-6.186.1}/PKG-INFO +2 -2
  2. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/README.md +1 -1
  3. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/alias.sh +2 -0
  4. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/help.sh +3 -0
  5. bluer_objects-6.186.1/bluer_objects/.abcli/tests/storage_public_upload.sh +18 -0
  6. bluer_objects-6.175.1/bluer_objects/.abcli/tests/storage.sh → bluer_objects-6.186.1/bluer_objects/.abcli/tests/storage_upload_download.sh +2 -2
  7. bluer_objects-6.186.1/bluer_objects/.abcli/tests/url_is_accessible.sh +17 -0
  8. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/upload.sh +4 -2
  9. bluer_objects-6.186.1/bluer_objects/.abcli/url/is_accessible.sh +13 -0
  10. bluer_objects-6.186.1/bluer_objects/.abcli/url.sh +15 -0
  11. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/__init__.py +1 -1
  12. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/config.env +1 -0
  13. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/env.py +1 -0
  14. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/functions.py +2 -0
  15. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/upload.py +6 -1
  16. bluer_objects-6.186.1/bluer_objects/help/url.py +23 -0
  17. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/storage/WebDAV.py +6 -0
  18. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/storage/WebDAVrequest.py +7 -0
  19. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/storage/WebDAVzip.py +6 -0
  20. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/storage/__init__.py +2 -0
  21. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/storage/__main__.py +7 -0
  22. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/storage/base.py +3 -1
  23. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/storage/s3.py +20 -2
  24. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_env.py +1 -0
  25. bluer_objects-6.186.1/bluer_objects/tests/test_url_is_accessible.py +11 -0
  26. bluer_objects-6.186.1/bluer_objects/url/__init__.py +1 -0
  27. bluer_objects-6.186.1/bluer_objects/url/__main__.py +31 -0
  28. bluer_objects-6.186.1/bluer_objects/url/functions.py +11 -0
  29. {bluer_objects-6.175.1 → bluer_objects-6.186.1/bluer_objects.egg-info}/PKG-INFO +2 -2
  30. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects.egg-info/SOURCES.txt +11 -2
  31. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/setup.py +1 -0
  32. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/LICENSE +0 -0
  33. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/MANIFEST.in +0 -0
  34. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/abcli.sh +0 -0
  35. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/actions.sh +0 -0
  36. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/aka.sh +0 -0
  37. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/bluer_objects.sh +0 -0
  38. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/clone.sh +0 -0
  39. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/create_test_asset.sh +0 -0
  40. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/download.sh +0 -0
  41. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/file.sh +0 -0
  42. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/gif.sh +0 -0
  43. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/host.sh +0 -0
  44. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/ls.sh +0 -0
  45. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/metadata/get.sh +0 -0
  46. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/metadata/post.sh +0 -0
  47. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/metadata.sh +0 -0
  48. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/browse.sh +0 -0
  49. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/cache.sh +0 -0
  50. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/deploy.sh +0 -0
  51. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/list_registered_models.sh +0 -0
  52. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/lock/lock.sh +0 -0
  53. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/lock/unlock.sh +0 -0
  54. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/lock.sh +0 -0
  55. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/log_artifacts.sh +0 -0
  56. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/log_run.sh +0 -0
  57. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/run.sh +0 -0
  58. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/tags/clone.sh +0 -0
  59. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/tags/get.sh +0 -0
  60. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/tags/search.sh +0 -0
  61. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/tags/set.sh +0 -0
  62. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/tags.sh +0 -0
  63. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/test.sh +0 -0
  64. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow/transition.sh +0 -0
  65. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/mlflow.sh +0 -0
  66. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/object.sh +0 -0
  67. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/select.sh +0 -0
  68. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/storage/clear.sh +0 -0
  69. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/storage/download_file.sh +0 -0
  70. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/storage/exists.sh +0 -0
  71. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/storage/list.sh +0 -0
  72. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/storage/rm.sh +0 -0
  73. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/storage/status.sh +0 -0
  74. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/storage.sh +0 -0
  75. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/README.sh +0 -0
  76. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/clone.sh +0 -0
  77. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/create_test_asset.sh +0 -0
  78. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/gif.sh +0 -0
  79. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/host.sh +0 -0
  80. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/ls.sh +0 -0
  81. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/metadata.sh +0 -0
  82. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/mlflow_cache.sh +0 -0
  83. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/mlflow_lock.sh +0 -0
  84. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/mlflow_logging.sh +0 -0
  85. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/mlflow_tags.sh +0 -0
  86. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/mlflow_test.sh +0 -0
  87. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/.abcli/tests/version.sh +0 -0
  88. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/README/__init__.py +0 -0
  89. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/README/functions.py +0 -0
  90. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/README/items.py +0 -0
  91. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/__main__.py +0 -0
  92. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/file/__init__.py +0 -0
  93. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/file/__main__.py +0 -0
  94. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/file/classes.py +0 -0
  95. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/file/functions.py +0 -0
  96. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/file/load.py +0 -0
  97. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/file/save.py +0 -0
  98. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/graphics/__init__.py +0 -0
  99. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/graphics/__main__.py +0 -0
  100. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/graphics/frame.py +0 -0
  101. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/graphics/gif.py +0 -0
  102. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/graphics/screen.py +0 -0
  103. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/graphics/signature.py +0 -0
  104. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/graphics/text.py +0 -0
  105. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/__init__.py +0 -0
  106. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/__main__.py +0 -0
  107. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/clone.py +0 -0
  108. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/create_test_asset.py +0 -0
  109. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/download.py +0 -0
  110. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/gif.py +0 -0
  111. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/host.py +0 -0
  112. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/ls.py +0 -0
  113. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/metadata.py +0 -0
  114. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/mlflow/__init__.py +0 -0
  115. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/mlflow/cache.py +0 -0
  116. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/mlflow/lock.py +0 -0
  117. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/help/mlflow/tags.py +0 -0
  118. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/host/__init__.py +0 -0
  119. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/host/__main__.py +0 -0
  120. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/host/functions.py +0 -0
  121. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/logger/__init__.py +0 -0
  122. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/logger/matrix.py +0 -0
  123. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/markdown.py +0 -0
  124. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/metadata/__init__.py +0 -0
  125. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/metadata/__main__.py +0 -0
  126. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/metadata/enums.py +0 -0
  127. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/metadata/get.py +0 -0
  128. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/metadata/post.py +0 -0
  129. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/__init__.py +0 -0
  130. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/__main__.py +0 -0
  131. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/cache.py +0 -0
  132. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/lock/__init__.py +0 -0
  133. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/lock/__main__.py +0 -0
  134. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/lock/functions.py +0 -0
  135. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/logging.py +0 -0
  136. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/models.py +0 -0
  137. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/objects.py +0 -0
  138. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/runs.py +0 -0
  139. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/tags.py +0 -0
  140. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/mlflow/testing.py +0 -0
  141. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/objects.py +0 -0
  142. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/path.py +0 -0
  143. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/sample.env +0 -0
  144. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/testing/__init__.py +0 -0
  145. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/testing/__main__.py +0 -0
  146. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/testing/functions.py +0 -0
  147. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/__init__.py +0 -0
  148. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_README.py +0 -0
  149. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_file_download.py +0 -0
  150. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_file_load_save.py +0 -0
  151. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_file_load_save_text.py +0 -0
  152. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_fullname.py +0 -0
  153. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_graphics.py +0 -0
  154. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_graphics_frame.py +0 -0
  155. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_graphics_gif.py +0 -0
  156. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_graphics_screen.py +0 -0
  157. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_graphics_signature.py +0 -0
  158. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_graphics_text.py +0 -0
  159. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_logger.py +0 -0
  160. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_logger_matrix.py +0 -0
  161. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_markdown.py +0 -0
  162. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_metadata.py +0 -0
  163. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_mlflow.py +0 -0
  164. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_mlflow_lock.py +0 -0
  165. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_objects.py +0 -0
  166. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_path.py +0 -0
  167. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_storage.py +0 -0
  168. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_storage_base.py +0 -0
  169. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_storage_s3.py +0 -0
  170. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_storage_webdav_request.py +0 -0
  171. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_storage_webdav_zip.py +0 -0
  172. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_testing.py +0 -0
  173. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/tests/test_version.py +0 -0
  174. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects/urls.py +0 -0
  175. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects.egg-info/dependency_links.txt +0 -0
  176. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects.egg-info/requires.txt +0 -0
  177. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/bluer_objects.egg-info/top_level.txt +0 -0
  178. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/pyproject.toml +0 -0
  179. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/requirements.txt +0 -0
  180. {bluer_objects-6.175.1 → bluer_objects-6.186.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.175.1
3
+ Version: 6.186.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
  [![pylint](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-objects.svg)](https://pypi.org/project/bluer-objects/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/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.175.1`](https://github.com/kamangir/bluer-objects).
67
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.186.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
  [![pylint](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-objects.svg)](https://pypi.org/project/bluer-objects/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/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.175.1`](https://github.com/kamangir/bluer-objects).
33
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.186.1`](https://github.com/kamangir/bluer-objects).
@@ -38,3 +38,5 @@ alias @select=bluer_ai_select
38
38
  alias @storage=bluer_ai_storage
39
39
 
40
40
  alias @upload=bluer_objects_upload
41
+
42
+ alias @url=bluer_objects_url
@@ -77,6 +77,9 @@ function test_bluer_objects_help() {
77
77
  \
78
78
  "@upload" \
79
79
  \
80
+ "@url" \
81
+ "@url is_accessible" \
82
+ \
80
83
  "@wait" \
81
84
  \
82
85
  "bluer_objects"; do
@@ -0,0 +1,18 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function test_bluer_objects_storage_public_upload() {
4
+ local options=$1
5
+
6
+ local object_name=test_bluer_objects_storage_public_upload-$(bluer_ai_string_timestamp_short)
7
+ local object_path=$ABCLI_OBJECT_ROOT/$object_name
8
+ mkdir -pv $object_path
9
+
10
+ bluer_objects_create_test_asset \
11
+ $object_name \
12
+ --depth 1
13
+ [[ $? -ne 0 ]] && return 1
14
+
15
+ bluer_objects_upload \
16
+ public \
17
+ $object_name
18
+ }
@@ -1,9 +1,9 @@
1
1
  #! /usr/bin/env bash
2
2
 
3
- function test_bluer_objects_storage() {
3
+ function test_bluer_objects_storage_upload_download() {
4
4
  local options=$1
5
5
 
6
- local object_name=test_bluer_objects_storage-$(bluer_ai_string_timestamp_short)
6
+ local object_name=test_bluer_objects_storage_upload_download-$(bluer_ai_string_timestamp_short)
7
7
  local object_path=$ABCLI_OBJECT_ROOT/$object_name
8
8
  mkdir -pv $object_path
9
9
 
@@ -0,0 +1,17 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function test_bluer_objects_url_is_accessible() {
4
+ local output=$(bluer_objects_url_is_accessible void)
5
+ [[ "$output" -ne 0 ]] &&
6
+ return 1
7
+
8
+ local url="https://iribnews.ir"
9
+ [[ "$abcli_is_github_workflow" == true ]] &&
10
+ url="https://cnn.com"
11
+
12
+ output=$(bluer_objects_url_is_accessible $url)
13
+ [[ "$output" -ne 1 ]] &&
14
+ return 1
15
+
16
+ return 0
17
+ }
@@ -3,6 +3,7 @@
3
3
  function bluer_objects_upload() {
4
4
  local options=$1
5
5
  local filename=$(bluer_ai_option "$options" filename)
6
+ local public=$(bluer_ai_option_int "$options" public 0)
6
7
 
7
8
  local object_name=$(bluer_ai_clarify_object $2 .)
8
9
  local object_path=$ABCLI_OBJECT_ROOT/$object_name
@@ -12,10 +13,11 @@ function bluer_objects_upload() {
12
13
  python3 -m bluer_objects.storage \
13
14
  upload \
14
15
  --object_name $object_name \
15
- --filename "$filename"
16
+ --filename "$filename" \
17
+ --public $public
16
18
  [[ $? -ne 0 ]] && return 1
17
19
 
18
- if [[ -z "$filename" ]]; then
20
+ if [[ -z "$filename" ]] && [[ "$public" == 0 ]]; then
19
21
  bluer_objects_mlflow_log_run $object_name
20
22
  fi
21
23
  }
@@ -0,0 +1,13 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_objects_url_is_accessible() {
4
+ local url=$1
5
+ if [[ -z "$url" ]]; then
6
+ bluer_ai_log_error "url not found."
7
+ return 1
8
+ fi
9
+
10
+ python3 -m bluer_objects.url \
11
+ is_accessible \
12
+ --url $url
13
+ }
@@ -0,0 +1,15 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_objects_url() {
4
+ local task=$1
5
+
6
+ local function_name=bluer_objects_url_$task
7
+ if [[ $(type -t $function_name) == "function" ]]; then
8
+ $function_name "${@:2}"
9
+ return
10
+ fi
11
+
12
+ python3 -m bluer_objects.url "$@"
13
+ }
14
+
15
+ bluer_ai_source_caller_suffix_path /url
@@ -4,7 +4,7 @@ ICON = "🌀"
4
4
 
5
5
  DESCRIPTION = f"{ICON} Object management in Bash."
6
6
 
7
- VERSION = "6.175.1"
7
+ VERSION = "6.186.1"
8
8
 
9
9
  REPO_NAME = "bluer-objects"
10
10
 
@@ -4,5 +4,6 @@ MLFLOW_LOCK_WAIT_FOR_CLEARANCE=3
4
4
  MLFLOW_LOCK_WAIT_FOR_EXCLUSIVITY=1
5
5
 
6
6
  S3_STORAGE_BUCKET=kamangir
7
+ S3_PUBLIC_STORAGE_BUCKET=kamangir-public
7
8
 
8
9
  BLUER_OBJECTS_STORAGE_INTERFACE=s3
@@ -36,6 +36,7 @@ DUMMY_TEXT = "This is some dummy text. This is some dummy text. This is some dum
36
36
  ABCLI_MLFLOW_EXPERIMENT_PREFIX = get_env("ABCLI_MLFLOW_EXPERIMENT_PREFIX")
37
37
 
38
38
  S3_STORAGE_BUCKET = get_env("S3_STORAGE_BUCKET")
39
+ S3_PUBLIC_STORAGE_BUCKET = get_env("S3_PUBLIC_STORAGE_BUCKET")
39
40
 
40
41
  S3_STORAGE_ENDPOINT_URL = get_env("S3_STORAGE_ENDPOINT_URL")
41
42
  S3_STORAGE_AWS_ACCESS_KEY_ID = get_env("S3_STORAGE_AWS_ACCESS_KEY_ID")
@@ -10,6 +10,7 @@ from bluer_objects.help.ls import help_ls
10
10
  from bluer_objects.help.metadata import help_functions as help_metadata
11
11
  from bluer_objects.help.mlflow import help_functions as help_mlflow
12
12
  from bluer_objects.help.upload import help_upload
13
+ from bluer_objects.help.url import help_functions as help_url
13
14
 
14
15
  help_functions = generic_help_functions(plugin_name=ALIAS)
15
16
 
@@ -24,5 +25,6 @@ help_functions.update(
24
25
  "metadata": help_metadata,
25
26
  "mlflow": help_mlflow,
26
27
  "upload": help_upload,
28
+ "url": help_url,
27
29
  }
28
30
  )
@@ -7,7 +7,12 @@ def help_upload(
7
7
  tokens: List[str],
8
8
  mono: bool,
9
9
  ) -> str:
10
- options = "filename=<filename>"
10
+ options = "".join(
11
+ [
12
+ "filename=<filename>",
13
+ xtra(",public", mono=mono),
14
+ ]
15
+ )
11
16
 
12
17
  return show_usage(
13
18
  [
@@ -0,0 +1,23 @@
1
+ from typing import List
2
+
3
+ from bluer_options.terminal import show_usage
4
+
5
+
6
+ def help_is_accessible(
7
+ tokens: List[str],
8
+ mono: bool,
9
+ ) -> str:
10
+ return show_usage(
11
+ [
12
+ "@url",
13
+ "is_accessible",
14
+ "<url>",
15
+ ],
16
+ "is <url> accessible?",
17
+ mono=mono,
18
+ )
19
+
20
+
21
+ help_functions = {
22
+ "is_accessible": help_is_accessible,
23
+ }
@@ -86,8 +86,13 @@ class WebDAVInterface(StorageInterface):
86
86
  self,
87
87
  object_name: str,
88
88
  filename: str = "",
89
+ public: bool = False,
89
90
  log: bool = True,
90
91
  ) -> bool:
92
+ if public:
93
+ logger.error("public not supported.")
94
+ return False
95
+
91
96
  if filename:
92
97
  remote_dir = "/".join([object_name] + filename.split("/")[:-1])
93
98
  if not self.mkdir(
@@ -111,5 +116,6 @@ class WebDAVInterface(StorageInterface):
111
116
  return super().upload(
112
117
  object_name=object_name,
113
118
  filename=filename,
119
+ public=public,
114
120
  log=log,
115
121
  )
@@ -278,8 +278,13 @@ class WebDAVRequestInterface(StorageInterface):
278
278
  self,
279
279
  object_name: str,
280
280
  filename: str = "",
281
+ public: bool = False,
281
282
  log: bool = True,
282
283
  ) -> bool:
284
+ if public:
285
+ logger.error("public not supported.")
286
+ return False
287
+
283
288
  if filename:
284
289
  if not self.mkdir(
285
290
  path="{}/{}".format(
@@ -315,6 +320,7 @@ class WebDAVRequestInterface(StorageInterface):
315
320
  return super().upload(
316
321
  object_name=object_name,
317
322
  filename=filename,
323
+ public=public,
318
324
  log=log,
319
325
  )
320
326
 
@@ -339,6 +345,7 @@ class WebDAVRequestInterface(StorageInterface):
339
345
  if not self.upload(
340
346
  object_name=object_name,
341
347
  filename=filename_.split(object_path, 1)[1],
348
+ public=public,
342
349
  log=log,
343
350
  ):
344
351
  return False
@@ -125,8 +125,13 @@ class WebDAVzipInterface(StorageInterface):
125
125
  self,
126
126
  object_name: str,
127
127
  filename: str = "",
128
+ public: bool = False,
128
129
  log: bool = True,
129
130
  ) -> bool:
131
+ if public:
132
+ logger.error("public not supported.")
133
+ return False
134
+
130
135
  object_path = objects.object_path(object_name=object_name)
131
136
 
132
137
  if not zip(
@@ -149,5 +154,6 @@ class WebDAVzipInterface(StorageInterface):
149
154
 
150
155
  return super().upload(
151
156
  object_name=object_name,
157
+ public=public,
152
158
  log=log,
153
159
  )
@@ -56,10 +56,12 @@ def ls(
56
56
  def upload(
57
57
  object_name: str,
58
58
  filename: str = "",
59
+ public: bool = False,
59
60
  log: bool = True,
60
61
  ) -> bool:
61
62
  return interface.upload(
62
63
  object_name=object_name,
63
64
  filename=filename,
65
+ public=public,
64
66
  log=log,
65
67
  )
@@ -24,6 +24,12 @@ parser.add_argument(
24
24
  type=str,
25
25
  default="",
26
26
  )
27
+ parser.add_argument(
28
+ "--public",
29
+ type=int,
30
+ default=0,
31
+ help="0 | 1",
32
+ )
27
33
  parser.add_argument(
28
34
  "--where",
29
35
  type=str,
@@ -80,6 +86,7 @@ elif args.task == "upload":
80
86
  success = storage.upload(
81
87
  object_name=args.object_name,
82
88
  filename=args.filename,
89
+ public=args.public == 1,
83
90
  )
84
91
  else:
85
92
  success = None
@@ -66,14 +66,16 @@ class StorageInterface:
66
66
  self,
67
67
  object_name: str,
68
68
  filename: str = "",
69
+ public: bool = False,
69
70
  log: bool = True,
70
71
  ) -> bool:
71
72
  if log:
72
73
  logger.info(
73
- "{}.upload {}{}".format(
74
+ "{}.upload {}{}{}".format(
74
75
  self.__class__.__name__,
75
76
  object_name,
76
77
  f"/{filename}" if filename else "",
78
+ " [public]" if public else "",
77
79
  )
78
80
  )
79
81
 
@@ -225,6 +225,7 @@ class S3Interface(StorageInterface):
225
225
  self,
226
226
  object_name: str,
227
227
  filename: str = "",
228
+ public: bool = False,
228
229
  log: bool = True,
229
230
  ) -> bool:
230
231
  if filename:
@@ -233,6 +234,10 @@ class S3Interface(StorageInterface):
233
234
  filename=filename,
234
235
  )
235
236
 
237
+ bucket_name = (
238
+ env.S3_PUBLIC_STORAGE_BUCKET if public else env.S3_STORAGE_BUCKET
239
+ )
240
+
236
241
  try:
237
242
  s3_resource = boto3.resource(
238
243
  "s3",
@@ -241,11 +246,11 @@ class S3Interface(StorageInterface):
241
246
  aws_secret_access_key=env.S3_STORAGE_AWS_SECRET_ACCESS_KEY,
242
247
  )
243
248
 
244
- bucket = s3_resource.Bucket(env.S3_STORAGE_BUCKET)
249
+ bucket = s3_resource.Bucket(bucket_name)
245
250
 
246
251
  with open(local_path, "rb") as fp:
247
252
  bucket.put_object(
248
- ACL="private",
253
+ ACL="public-read" if public else "private",
249
254
  Body=fp,
250
255
  Key=f"{object_name}/{filename}",
251
256
  )
@@ -253,9 +258,21 @@ class S3Interface(StorageInterface):
253
258
  logger.error(e)
254
259
  return False
255
260
 
261
+ if public:
262
+
263
+ logger.info(
264
+ "🔗 https://{}.{}/{}/{}".format(
265
+ bucket_name,
266
+ env.S3_STORAGE_ENDPOINT_URL.split("https://", 1)[1],
267
+ object_name,
268
+ filename,
269
+ )
270
+ )
271
+
256
272
  return super().upload(
257
273
  object_name=object_name,
258
274
  filename=filename,
275
+ public=public,
259
276
  log=log,
260
277
  )
261
278
 
@@ -277,6 +294,7 @@ class S3Interface(StorageInterface):
277
294
  if not self.upload(
278
295
  object_name=object_name,
279
296
  filename=filename_.split(object_path, 1)[1],
297
+ public=public,
280
298
  log=log,
281
299
  ):
282
300
  return False
@@ -17,6 +17,7 @@ def test_bluer_objects_env():
17
17
  assert env.ABCLI_MLFLOW_EXPERIMENT_PREFIX
18
18
 
19
19
  assert env.S3_STORAGE_BUCKET
20
+ assert env.S3_PUBLIC_STORAGE_BUCKET
20
21
 
21
22
  assert env.S3_STORAGE_ENDPOINT_URL
22
23
  assert env.S3_STORAGE_AWS_ACCESS_KEY_ID
@@ -0,0 +1,11 @@
1
+ from bluer_objects.url.functions import is_accessible
2
+ from bluer_ai.env import abcli_is_github_workflow
3
+
4
+
5
+ def test_url_is_accessible():
6
+ success = is_accessible("void")
7
+ assert not success
8
+
9
+ url = "https://cnn.com" if abcli_is_github_workflow else "https://iribnews.ir"
10
+ success = is_accessible(url)
11
+ assert success
@@ -0,0 +1,31 @@
1
+ import argparse
2
+
3
+ from blueness import module
4
+ from blueness.argparse.generic import sys_exit
5
+
6
+ from bluer_objects import NAME
7
+ from bluer_objects.url.functions import is_accessible
8
+ from bluer_objects.logger import logger
9
+
10
+ NAME = module.name(__file__, NAME)
11
+
12
+ parser = argparse.ArgumentParser(NAME)
13
+ parser.add_argument(
14
+ "task",
15
+ type=str,
16
+ help="is_accessible",
17
+ )
18
+ parser.add_argument(
19
+ "--url",
20
+ type=str,
21
+ )
22
+ args = parser.parse_args()
23
+
24
+ success = False
25
+ if args.task == "is_accessible":
26
+ success = True
27
+ print(int(is_accessible(args.url)))
28
+ else:
29
+ success = None
30
+
31
+ sys_exit(logger, NAME, args.task, success)
@@ -0,0 +1,11 @@
1
+ import requests
2
+
3
+ from bluer_objects.logger import logger
4
+
5
+
6
+ def is_accessible(url) -> bool:
7
+ try:
8
+ response = requests.get(url)
9
+ return response.status_code == 200
10
+ except:
11
+ return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.175.1
3
+ Version: 6.186.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
  [![pylint](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-objects.svg)](https://pypi.org/project/bluer-objects/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/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.175.1`](https://github.com/kamangir/bluer-objects).
67
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.186.1`](https://github.com/kamangir/bluer-objects).
68
68
 
69
69
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -36,6 +36,7 @@ bluer_objects/.abcli/object.sh
36
36
  bluer_objects/.abcli/select.sh
37
37
  bluer_objects/.abcli/storage.sh
38
38
  bluer_objects/.abcli/upload.sh
39
+ bluer_objects/.abcli/url.sh
39
40
  bluer_objects/.abcli/metadata/get.sh
40
41
  bluer_objects/.abcli/metadata/post.sh
41
42
  bluer_objects/.abcli/mlflow/browse.sh
@@ -74,8 +75,11 @@ bluer_objects/.abcli/tests/mlflow_lock.sh
74
75
  bluer_objects/.abcli/tests/mlflow_logging.sh
75
76
  bluer_objects/.abcli/tests/mlflow_tags.sh
76
77
  bluer_objects/.abcli/tests/mlflow_test.sh
77
- bluer_objects/.abcli/tests/storage.sh
78
+ bluer_objects/.abcli/tests/storage_public_upload.sh
79
+ bluer_objects/.abcli/tests/storage_upload_download.sh
80
+ bluer_objects/.abcli/tests/url_is_accessible.sh
78
81
  bluer_objects/.abcli/tests/version.sh
82
+ bluer_objects/.abcli/url/is_accessible.sh
79
83
  bluer_objects/README/__init__.py
80
84
  bluer_objects/README/functions.py
81
85
  bluer_objects/README/items.py
@@ -103,6 +107,7 @@ bluer_objects/help/host.py
103
107
  bluer_objects/help/ls.py
104
108
  bluer_objects/help/metadata.py
105
109
  bluer_objects/help/upload.py
110
+ bluer_objects/help/url.py
106
111
  bluer_objects/help/mlflow/__init__.py
107
112
  bluer_objects/help/mlflow/cache.py
108
113
  bluer_objects/help/mlflow/lock.py
@@ -166,4 +171,8 @@ bluer_objects/tests/test_storage_s3.py
166
171
  bluer_objects/tests/test_storage_webdav_request.py
167
172
  bluer_objects/tests/test_storage_webdav_zip.py
168
173
  bluer_objects/tests/test_testing.py
169
- bluer_objects/tests/test_version.py
174
+ bluer_objects/tests/test_url_is_accessible.py
175
+ bluer_objects/tests/test_version.py
176
+ bluer_objects/url/__init__.py
177
+ bluer_objects/url/__main__.py
178
+ bluer_objects/url/functions.py
@@ -22,6 +22,7 @@ setup(
22
22
  f"{NAME}.storage",
23
23
  f"{NAME}.testing",
24
24
  f"{NAME}.tests",
25
+ f"{NAME}.url",
25
26
  ],
26
27
  include_package_data=True,
27
28
  package_data={
File without changes