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.

Files changed (186) hide show
  1. {bluer_objects-6.220.1/bluer_objects.egg-info → bluer_objects-6.229.1}/PKG-INFO +2 -2
  2. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/README.md +1 -1
  3. bluer_objects-6.229.1/bluer_objects/README/functions.py +186 -0
  4. bluer_objects-6.229.1/bluer_objects/README/utils.py +235 -0
  5. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/__init__.py +1 -1
  6. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/save.py +3 -1
  7. {bluer_objects-6.220.1 → bluer_objects-6.229.1/bluer_objects.egg-info}/PKG-INFO +2 -2
  8. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects.egg-info/SOURCES.txt +1 -0
  9. bluer_objects-6.220.1/bluer_objects/README/functions.py +0 -297
  10. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/LICENSE +0 -0
  11. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/MANIFEST.in +0 -0
  12. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/abcli.sh +0 -0
  13. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/actions.sh +0 -0
  14. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/aka.sh +0 -0
  15. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/alias.sh +0 -0
  16. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/bluer_objects.sh +0 -0
  17. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/clone.sh +0 -0
  18. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/create_test_asset.sh +0 -0
  19. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/download.sh +0 -0
  20. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/file.sh +0 -0
  21. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/gif.sh +0 -0
  22. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/host.sh +0 -0
  23. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/ls.sh +0 -0
  24. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/metadata/get.sh +0 -0
  25. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/metadata/post.sh +0 -0
  26. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/metadata.sh +0 -0
  27. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/browse.sh +0 -0
  28. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/cache.sh +0 -0
  29. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/deploy.sh +0 -0
  30. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/list_registered_models.sh +0 -0
  31. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/lock/lock.sh +0 -0
  32. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/lock/unlock.sh +0 -0
  33. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/lock.sh +0 -0
  34. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/log_artifacts.sh +0 -0
  35. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/log_run.sh +0 -0
  36. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/run.sh +0 -0
  37. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/tags/clone.sh +0 -0
  38. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/tags/get.sh +0 -0
  39. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/tags/search.sh +0 -0
  40. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/tags/set.sh +0 -0
  41. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/tags.sh +0 -0
  42. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/test.sh +0 -0
  43. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow/transition.sh +0 -0
  44. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/mlflow.sh +0 -0
  45. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/object.sh +0 -0
  46. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/select.sh +0 -0
  47. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/clear.sh +0 -0
  48. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/download_file.sh +0 -0
  49. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/exists.sh +0 -0
  50. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/list.sh +0 -0
  51. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/rm.sh +0 -0
  52. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage/status.sh +0 -0
  53. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/storage.sh +0 -0
  54. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/README.sh +0 -0
  55. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/clone.sh +0 -0
  56. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/create_test_asset.sh +0 -0
  57. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/gif.sh +0 -0
  58. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/help.sh +0 -0
  59. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/host.sh +0 -0
  60. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/ls.sh +0 -0
  61. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/metadata.sh +0 -0
  62. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/mlflow_cache.sh +0 -0
  63. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/mlflow_lock.sh +0 -0
  64. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/mlflow_logging.sh +0 -0
  65. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/mlflow_tags.sh +0 -0
  66. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/mlflow_test.sh +0 -0
  67. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/storage_public_upload.sh +0 -0
  68. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/storage_upload_download.sh +0 -0
  69. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/version.sh +0 -0
  70. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/web_is_accessible.sh +0 -0
  71. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/tests/web_where_am_ai.sh +0 -0
  72. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/upload.sh +0 -0
  73. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/url.sh +0 -0
  74. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/web/is_accessible.sh +0 -0
  75. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/.abcli/web/where_am_i.sh +0 -0
  76. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/README/__init__.py +0 -0
  77. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/README/items.py +0 -0
  78. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/__main__.py +0 -0
  79. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/config.env +0 -0
  80. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/env.py +0 -0
  81. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/__init__.py +0 -0
  82. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/__main__.py +0 -0
  83. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/classes.py +0 -0
  84. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/functions.py +0 -0
  85. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/file/load.py +0 -0
  86. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/__init__.py +0 -0
  87. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/__main__.py +0 -0
  88. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/frame.py +0 -0
  89. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/gif.py +0 -0
  90. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/screen.py +0 -0
  91. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/signature.py +0 -0
  92. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/graphics/text.py +0 -0
  93. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/__init__.py +0 -0
  94. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/__main__.py +0 -0
  95. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/clone.py +0 -0
  96. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/create_test_asset.py +0 -0
  97. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/download.py +0 -0
  98. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/functions.py +0 -0
  99. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/gif.py +0 -0
  100. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/host.py +0 -0
  101. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/ls.py +0 -0
  102. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/metadata.py +0 -0
  103. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/mlflow/__init__.py +0 -0
  104. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/mlflow/cache.py +0 -0
  105. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/mlflow/lock.py +0 -0
  106. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/mlflow/tags.py +0 -0
  107. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/upload.py +0 -0
  108. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/help/web.py +0 -0
  109. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/host/__init__.py +0 -0
  110. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/host/__main__.py +0 -0
  111. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/host/functions.py +0 -0
  112. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/logger/__init__.py +0 -0
  113. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/logger/image.py +0 -0
  114. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/logger/matrix.py +0 -0
  115. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/markdown.py +0 -0
  116. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/metadata/__init__.py +0 -0
  117. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/metadata/__main__.py +0 -0
  118. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/metadata/enums.py +0 -0
  119. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/metadata/get.py +0 -0
  120. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/metadata/post.py +0 -0
  121. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/__init__.py +0 -0
  122. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/__main__.py +0 -0
  123. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/cache.py +0 -0
  124. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/lock/__init__.py +0 -0
  125. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/lock/__main__.py +0 -0
  126. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/lock/functions.py +0 -0
  127. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/logging.py +0 -0
  128. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/models.py +0 -0
  129. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/objects.py +0 -0
  130. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/runs.py +0 -0
  131. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/tags.py +0 -0
  132. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/mlflow/testing.py +0 -0
  133. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/objects.py +0 -0
  134. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/path.py +0 -0
  135. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/sample.env +0 -0
  136. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/WebDAV.py +0 -0
  137. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/WebDAVrequest.py +0 -0
  138. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/WebDAVzip.py +0 -0
  139. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/__init__.py +0 -0
  140. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/__main__.py +0 -0
  141. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/base.py +0 -0
  142. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/storage/s3.py +0 -0
  143. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/testing/__init__.py +0 -0
  144. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/testing/__main__.py +0 -0
  145. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/testing/functions.py +0 -0
  146. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/__init__.py +0 -0
  147. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_README.py +0 -0
  148. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_env.py +0 -0
  149. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_file_download.py +0 -0
  150. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_file_load_save.py +0 -0
  151. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_file_load_save_text.py +0 -0
  152. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_fullname.py +0 -0
  153. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics.py +0 -0
  154. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics_frame.py +0 -0
  155. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics_gif.py +0 -0
  156. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics_screen.py +0 -0
  157. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics_signature.py +0 -0
  158. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_graphics_text.py +0 -0
  159. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_log_image_grid.py +0 -0
  160. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_logger.py +0 -0
  161. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_logger_matrix.py +0 -0
  162. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_markdown.py +0 -0
  163. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_metadata.py +0 -0
  164. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_mlflow.py +0 -0
  165. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_mlflow_lock.py +0 -0
  166. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_objects.py +0 -0
  167. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_path.py +0 -0
  168. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_storage.py +0 -0
  169. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_storage_base.py +0 -0
  170. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_storage_s3.py +0 -0
  171. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_storage_webdav_request.py +0 -0
  172. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_storage_webdav_zip.py +0 -0
  173. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_testing.py +0 -0
  174. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_version.py +0 -0
  175. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/tests/test_web_is_accessible.py +0 -0
  176. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/urls.py +0 -0
  177. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/web/__init__.py +0 -0
  178. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/web/__main__.py +0 -0
  179. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects/web/functions.py +0 -0
  180. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects.egg-info/dependency_links.txt +0 -0
  181. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects.egg-info/requires.txt +0 -0
  182. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/bluer_objects.egg-info/top_level.txt +0 -0
  183. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/pyproject.toml +0 -0
  184. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/requirements.txt +0 -0
  185. {bluer_objects-6.220.1 → bluer_objects-6.229.1}/setup.cfg +0 -0
  186. {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.220.1
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
  [![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.220.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.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
  [![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.220.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.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
+ "![image](https://github.com/{}/blob/main/{}?raw=true)".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("<", "&lt;")
172
+ .replace(">", "&gt;")
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"[![pylint](https://github.com/kamangir/{REPO_NAME}/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/{REPO_NAME}/actions/workflows/pylint.yml)",
219
+ f"[![pytest](https://github.com/kamangir/{REPO_NAME}/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/{REPO_NAME}/actions/workflows/pytest.yml)",
220
+ f"[![bashtest](https://github.com/kamangir/{REPO_NAME}/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/{REPO_NAME}/actions/workflows/bashtest.yml)",
221
+ f"[![PyPI version](https://img.shields.io/pypi/v/{MODULE_NAME}.svg)](https://pypi.org/project/{MODULE_NAME}/)",
222
+ f"[![PyPI - Downloads](https://img.shields.io/pypi/dd/{MODULE_NAME})](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
+ ]
@@ -4,7 +4,7 @@ ICON = "🌀"
4
4
 
5
5
  DESCRIPTION = f"{ICON} Object management in Bash."
6
6
 
7
- VERSION = "6.220.1"
7
+ VERSION = "6.229.1"
8
8
 
9
9
  REPO_NAME = "bluer-objects"
10
10
 
@@ -136,7 +136,9 @@ def save_image(
136
136
  data = np.flip(data, axis=2)
137
137
 
138
138
  cv2.imwrite(filename, data)
139
- except:
139
+ except Exception as e:
140
+ if log:
141
+ logger.error(e)
140
142
  success = False
141
143
 
142
144
  return finish_saving(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.220.1
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
  [![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.220.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.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