bluer-objects 6.271.1__tar.gz → 6.282.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 (196) hide show
  1. {bluer_objects-6.271.1/bluer_objects.egg-info → bluer_objects-6.282.1}/PKG-INFO +3 -2
  2. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/README.md +2 -1
  3. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/alias.sh +2 -0
  4. bluer_objects-6.282.1/bluer_objects/.abcli/assets/cd.sh +20 -0
  5. bluer_objects-6.282.1/bluer_objects/.abcli/assets/mv.sh +34 -0
  6. bluer_objects-6.282.1/bluer_objects/.abcli/assets/publish.sh +37 -0
  7. bluer_objects-6.282.1/bluer_objects/.abcli/assets.sh +15 -0
  8. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/gif.sh +1 -0
  9. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/help.sh +5 -0
  10. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/README/__init__.py +22 -11
  11. bluer_objects-6.282.1/bluer_objects/README/consts.py +21 -0
  12. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/README/functions.py +2 -1
  13. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/__init__.py +1 -1
  14. bluer_objects-6.282.1/bluer_objects/assets/__main__.py +57 -0
  15. bluer_objects-6.282.1/bluer_objects/assets/functions.py +62 -0
  16. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/graphics/__main__.py +7 -0
  17. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/graphics/gif.py +6 -1
  18. bluer_objects-6.282.1/bluer_objects/help/assets.py +96 -0
  19. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/functions.py +2 -0
  20. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/gif.py +1 -0
  21. bluer_objects-6.282.1/bluer_objects/tests/__init__.py +0 -0
  22. bluer_objects-6.282.1/bluer_objects/tests/test_README_assets.py +35 -0
  23. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_graphics_gif.py +2 -0
  24. {bluer_objects-6.271.1 → bluer_objects-6.282.1/bluer_objects.egg-info}/PKG-INFO +3 -2
  25. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects.egg-info/SOURCES.txt +10 -0
  26. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/setup.py +1 -0
  27. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/LICENSE +0 -0
  28. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/MANIFEST.in +0 -0
  29. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/abcli.sh +0 -0
  30. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/actions.sh +0 -0
  31. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/aka.sh +0 -0
  32. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/bluer_objects.sh +0 -0
  33. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/clone.sh +0 -0
  34. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/create_test_asset.sh +0 -0
  35. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/download.sh +0 -0
  36. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/file.sh +0 -0
  37. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/gif.sh +0 -0
  38. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/host.sh +0 -0
  39. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/ls.sh +0 -0
  40. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/metadata/get.sh +0 -0
  41. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/metadata/post.sh +0 -0
  42. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/metadata.sh +0 -0
  43. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/browse.sh +0 -0
  44. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/cache.sh +0 -0
  45. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/deploy.sh +0 -0
  46. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/list_registered_models.sh +0 -0
  47. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/lock/lock.sh +0 -0
  48. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/lock/unlock.sh +0 -0
  49. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/lock.sh +0 -0
  50. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/log_artifacts.sh +0 -0
  51. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/log_run.sh +0 -0
  52. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/run.sh +0 -0
  53. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/tags/clone.sh +0 -0
  54. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/tags/get.sh +0 -0
  55. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/tags/search.sh +0 -0
  56. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/tags/set.sh +0 -0
  57. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/tags.sh +0 -0
  58. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/test.sh +0 -0
  59. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow/transition.sh +0 -0
  60. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/mlflow.sh +0 -0
  61. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/object.sh +0 -0
  62. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/select.sh +0 -0
  63. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/storage/clear.sh +0 -0
  64. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/storage/status.sh +0 -0
  65. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/storage.sh +0 -0
  66. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/README.sh +0 -0
  67. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/clone.sh +0 -0
  68. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/create_test_asset.sh +0 -0
  69. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/host.sh +0 -0
  70. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/ls.sh +0 -0
  71. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/metadata.sh +0 -0
  72. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/mlflow_cache.sh +0 -0
  73. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/mlflow_lock.sh +0 -0
  74. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/mlflow_logging.sh +0 -0
  75. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/mlflow_tags.sh +0 -0
  76. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/mlflow_test.sh +0 -0
  77. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/open.sh +0 -0
  78. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/open_gif_open.sh +0 -0
  79. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/storage_public_upload.sh +0 -0
  80. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/storage_upload_download.sh +0 -0
  81. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/version.sh +0 -0
  82. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/web_is_accessible.sh +0 -0
  83. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/tests/web_where_am_ai.sh +0 -0
  84. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/upload.sh +0 -0
  85. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/url.sh +0 -0
  86. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/web/is_accessible.sh +0 -0
  87. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/.abcli/web/where_am_i.sh +0 -0
  88. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/README/items.py +0 -0
  89. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/README/utils.py +0 -0
  90. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/__main__.py +0 -0
  91. {bluer_objects-6.271.1/bluer_objects/help → bluer_objects-6.282.1/bluer_objects/assets}/__init__.py +0 -0
  92. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/config.env +0 -0
  93. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/env.py +0 -0
  94. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/file/__init__.py +0 -0
  95. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/file/__main__.py +0 -0
  96. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/file/classes.py +0 -0
  97. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/file/functions.py +0 -0
  98. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/file/load.py +0 -0
  99. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/file/save.py +0 -0
  100. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/graphics/__init__.py +0 -0
  101. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/graphics/frame.py +0 -0
  102. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/graphics/screen.py +0 -0
  103. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/graphics/signature.py +0 -0
  104. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/graphics/text.py +0 -0
  105. {bluer_objects-6.271.1/bluer_objects/tests → bluer_objects-6.282.1/bluer_objects/help}/__init__.py +0 -0
  106. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/__main__.py +0 -0
  107. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/clone.py +0 -0
  108. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/create_test_asset.py +0 -0
  109. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/download.py +0 -0
  110. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/host.py +0 -0
  111. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/ls.py +0 -0
  112. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/metadata.py +0 -0
  113. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/mlflow/__init__.py +0 -0
  114. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/mlflow/cache.py +0 -0
  115. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/mlflow/lock.py +0 -0
  116. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/mlflow/tags.py +0 -0
  117. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/upload.py +0 -0
  118. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/help/web.py +0 -0
  119. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/host/__init__.py +0 -0
  120. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/host/__main__.py +0 -0
  121. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/host/functions.py +0 -0
  122. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/logger/__init__.py +0 -0
  123. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/logger/image.py +0 -0
  124. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/logger/matrix.py +0 -0
  125. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/markdown.py +0 -0
  126. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/metadata/__init__.py +0 -0
  127. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/metadata/__main__.py +0 -0
  128. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/metadata/enums.py +0 -0
  129. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/metadata/flatten.py +0 -0
  130. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/metadata/get.py +0 -0
  131. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/metadata/post.py +0 -0
  132. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/__init__.py +0 -0
  133. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/__main__.py +0 -0
  134. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/cache.py +0 -0
  135. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/lock/__init__.py +0 -0
  136. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/lock/__main__.py +0 -0
  137. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/lock/functions.py +0 -0
  138. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/logging.py +0 -0
  139. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/models.py +0 -0
  140. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/objects.py +0 -0
  141. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/runs.py +0 -0
  142. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/tags.py +0 -0
  143. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/mlflow/testing.py +0 -0
  144. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/objects.py +0 -0
  145. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/path.py +0 -0
  146. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/sample.env +0 -0
  147. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/storage/WebDAV.py +0 -0
  148. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/storage/WebDAVrequest.py +0 -0
  149. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/storage/WebDAVzip.py +0 -0
  150. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/storage/__init__.py +0 -0
  151. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/storage/__main__.py +0 -0
  152. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/storage/base.py +0 -0
  153. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/storage/policies.py +0 -0
  154. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/storage/s3.py +0 -0
  155. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/testing/__init__.py +0 -0
  156. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/testing/__main__.py +0 -0
  157. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/testing/functions.py +0 -0
  158. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_README.py +0 -0
  159. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_env.py +0 -0
  160. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_file_download.py +0 -0
  161. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_file_load_save.py +0 -0
  162. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_file_load_save_text.py +0 -0
  163. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_fullname.py +0 -0
  164. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_graphics.py +0 -0
  165. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_graphics_frame.py +0 -0
  166. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_graphics_screen.py +0 -0
  167. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_graphics_signature.py +0 -0
  168. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_graphics_text.py +0 -0
  169. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_log_image_grid.py +0 -0
  170. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_logger.py +0 -0
  171. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_logger_matrix.py +0 -0
  172. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_markdown.py +0 -0
  173. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_metadata.py +0 -0
  174. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_metadata_flatten.py +0 -0
  175. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_mlflow.py +0 -0
  176. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_mlflow_lock.py +0 -0
  177. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_objects.py +0 -0
  178. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_path.py +0 -0
  179. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_storage.py +0 -0
  180. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_storage_base.py +0 -0
  181. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_storage_s3.py +0 -0
  182. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_storage_webdav_request.py +0 -0
  183. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_storage_webdav_zip.py +0 -0
  184. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_testing.py +0 -0
  185. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_version.py +0 -0
  186. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/tests/test_web_is_accessible.py +0 -0
  187. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/urls.py +0 -0
  188. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/web/__init__.py +0 -0
  189. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/web/__main__.py +0 -0
  190. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects/web/functions.py +0 -0
  191. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects.egg-info/dependency_links.txt +0 -0
  192. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects.egg-info/requires.txt +0 -0
  193. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/bluer_objects.egg-info/top_level.txt +0 -0
  194. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/pyproject.toml +0 -0
  195. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/requirements.txt +0 -0
  196. {bluer_objects-6.271.1 → bluer_objects-6.282.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.271.1
3
+ Version: 6.282.1
4
4
  Summary: 🌀 Object management in Bash.
5
5
  Home-page: https://github.com/kamangir/bluer-objects
6
6
  Author: Arash Abadpour (Kamangir)
@@ -46,6 +46,7 @@ pip install bluer-objects
46
46
 
47
47
  # aliases
48
48
 
49
+ [@assets](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/docs/aliases/assets.md),
49
50
  [@clone](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/docs/aliases/clone.md),
50
51
  [@download](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/docs/aliases/download.md),
51
52
  [@gif](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/docs/aliases/gif.md),
@@ -64,6 +65,6 @@ pip install bluer-objects
64
65
 
65
66
  [![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
67
 
67
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.271.1`](https://github.com/kamangir/bluer-objects).
68
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.282.1`](https://github.com/kamangir/bluer-objects).
68
69
 
69
70
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -12,6 +12,7 @@ pip install bluer-objects
12
12
 
13
13
  # aliases
14
14
 
15
+ [@assets](./bluer_objects/docs/aliases/assets.md),
15
16
  [@clone](./bluer_objects/docs/aliases/clone.md),
16
17
  [@download](./bluer_objects/docs/aliases/download.md),
17
18
  [@gif](./bluer_objects/docs/aliases/gif.md),
@@ -30,4 +31,4 @@ pip install bluer-objects
30
31
 
31
32
  [![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
33
 
33
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.271.1`](https://github.com/kamangir/bluer-objects).
34
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.282.1`](https://github.com/kamangir/bluer-objects).
@@ -2,6 +2,8 @@
2
2
 
3
3
  alias @ai=bluer_ai
4
4
 
5
+ alias @assets=bluer_objects_assets
6
+
5
7
  alias @create_test_asset=bluer_objects_create_test_asset
6
8
 
7
9
  alias @download=bluer_objects_download
@@ -0,0 +1,20 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_objects_assets_cd() {
4
+ local options=$1
5
+ local do_create=$(bluer_ai_option_int "$options" create 0)
6
+ local volume=$(bluer_ai_option "$options" vol)
7
+
8
+ local path=$2
9
+ path=$abcli_path_git/assets$volume/$path
10
+
11
+ if [[ "$do_create" == 1 ]]; then
12
+ mkdir -pv $path
13
+ [[ $? -ne 0 ]] && return 1
14
+ fi
15
+
16
+ cd $path
17
+ [[ $? -ne 0 ]] && return 1
18
+
19
+ bluer_ai_log "🔗 $path"
20
+ }
@@ -0,0 +1,34 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_objects_assets_mv() {
4
+ local options=$1
5
+ local do_create=$(bluer_ai_option_int "$options" create 0)
6
+ local extension=$(bluer_ai_option "$options" extension jpg)
7
+ local volume=$(bluer_ai_option "$options" vol)
8
+
9
+ local path=$2
10
+ path=$abcli_path_git/assets$volume/$path
11
+
12
+ if [[ "$do_create" == 1 ]]; then
13
+ mkdir -pv $path
14
+ [[ $? -ne 0 ]] && return 1
15
+ fi
16
+
17
+ bluer_ai_log "Downloads/.$extension -> assets$volume/path"
18
+
19
+ mv -v \
20
+ $HOME/Downloads/*.$extension \
21
+ $path
22
+ [[ $? -ne 0 ]] && return 1
23
+
24
+ local push_options=$3
25
+ local do_push=$(bluer_ai_option_int "$push_options" push 0)
26
+ [[ "$do_push" == 0 ]] &&
27
+ return 0
28
+
29
+ bluer_ai_git \
30
+ assets$volume \
31
+ push \
32
+ "$path += " \
33
+ $push_options
34
+ }
@@ -0,0 +1,37 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_objects_assets_publish() {
4
+ local options=$1
5
+
6
+ local do_download=$(bluer_ai_option_int "$options" download 0)
7
+ local do_pull=$(bluer_ai_option_int "$options" pull 1)
8
+ local do_push=$(bluer_ai_option_int "$options" push 0)
9
+ local extensions=$(bluer_ai_option "$options" extensions png)
10
+
11
+ [[ "$do_pull" == 1 ]] &&
12
+ bluer_ai_git \
13
+ assets \
14
+ pull \
15
+ ~all
16
+
17
+ local object_name=$(bluer_ai_clarify_object $2 .)
18
+
19
+ [[ "$do_download" == 1 ]] &&
20
+ bluer_objects_download - $object_name
21
+
22
+ bluer_ai_eval dryrun=$do_dryrun \
23
+ python3 -m bluer_objects.assets \
24
+ publish \
25
+ --object_name $object_name \
26
+ --extensions $extensions \
27
+ "${@:3}"
28
+ [[ $? -ne 0 ]] && return 1
29
+
30
+ [[ "$do_push" == 1 ]] &&
31
+ bluer_ai_git \
32
+ assets \
33
+ push \
34
+ "$object_name update."
35
+
36
+ return 0
37
+ }
@@ -0,0 +1,15 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_objects_assets() {
4
+ local task=$1
5
+
6
+ local function_name=bluer_objects_assets_$task
7
+ if [[ $(type -t $function_name) == "function" ]]; then
8
+ $function_name "${@:2}"
9
+ return
10
+ fi
11
+
12
+ python3 -m bluer_objects.assets "$@"
13
+ }
14
+
15
+ bluer_ai_source_caller_suffix_path /assets
@@ -12,6 +12,7 @@ function test_bluer_objects_gif() {
12
12
  bluer_objects_gif \
13
13
  ~upload,$options \
14
14
  $source_object_name \
15
+ --frame_count 20 \
15
16
  --frame_duration 200 \
16
17
  --output_filename test.gif \
17
18
  --scale 2 \
@@ -8,6 +8,11 @@ function test_bluer_objects_help() {
8
8
 
9
9
  local module
10
10
  for module in \
11
+ "@assets" \
12
+ "@assets cd" \
13
+ "@assets mv" \
14
+ "@assets publish" \
15
+ \
11
16
  "@cp" \
12
17
  \
13
18
  "@create_test_asset" \
@@ -30,18 +30,29 @@ def build_me() -> bool:
30
30
  ),
31
31
  )
32
32
  for path in [
33
+ "../docs/aliases",
34
+ "../docs",
33
35
  "../..",
34
36
  ".",
35
- # aliases
36
- "../docs/aliases/clone.md",
37
- "../docs/aliases/download.md",
38
- "../docs/aliases/gif.md",
39
- "../docs/aliases/host.md",
40
- "../docs/aliases/ls.md",
41
- "../docs/aliases/metadata.md",
42
- "../docs/aliases/mlflow.md",
43
- "../docs/aliases/upload.md",
44
- # modules
45
- "../mlflow/lock",
37
+ ]
38
+ + [
39
+ f"../docs/aliases/{alias}.md"
40
+ for alias in [
41
+ "assets",
42
+ "clone",
43
+ "download",
44
+ "gif",
45
+ "host",
46
+ "ls",
47
+ "metadata",
48
+ "mlflow",
49
+ "upload",
50
+ ]
51
+ ]
52
+ + [
53
+ f"../mlflow/{module_name}"
54
+ for module_name in [
55
+ "lock",
56
+ ]
46
57
  ]
47
58
  )
@@ -0,0 +1,21 @@
1
+ from typing import Union
2
+
3
+ github_kamangir = "https://github.com/kamangir"
4
+
5
+
6
+ def asset_volume(volume: Union[str, int] = "") -> str:
7
+ return f"{github_kamangir}/assets{str(volume)}/raw/main"
8
+
9
+
10
+ assets = asset_volume(volume="")
11
+ assets2 = asset_volume(volume="2")
12
+
13
+
14
+ def assets_path(
15
+ suffix: str,
16
+ volume: Union[str, int] = "",
17
+ ) -> str:
18
+ return "{}/{}".format(
19
+ asset_volume(volume=volume),
20
+ suffix,
21
+ )
@@ -42,6 +42,7 @@ def build(
42
42
  help_function: Union[Callable[[List[str]], str], None] = None,
43
43
  legacy_mode: bool = True,
44
44
  assets_repo: str = "kamangir/assets",
45
+ download: bool = True,
45
46
  ) -> bool:
46
47
  if path:
47
48
  if path.endswith(".md"):
@@ -103,7 +104,7 @@ def build(
103
104
  object_name,
104
105
  key,
105
106
  {},
106
- download=True,
107
+ download=download,
107
108
  )
108
109
 
109
110
  logger.info(f"metadata[{object_name_and_key}] = {value}")
@@ -4,7 +4,7 @@ ICON = "🌀"
4
4
 
5
5
  DESCRIPTION = f"{ICON} Object management in Bash."
6
6
 
7
- VERSION = "6.271.1"
7
+ VERSION = "6.282.1"
8
8
 
9
9
  REPO_NAME = "bluer-objects"
10
10
 
@@ -0,0 +1,57 @@
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.assets.functions import publish
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="publish",
17
+ )
18
+ parser.add_argument(
19
+ "--arg",
20
+ type=bool,
21
+ default=0,
22
+ help="0|1",
23
+ )
24
+ parser.add_argument(
25
+ "--object_name",
26
+ type=str,
27
+ )
28
+ parser.add_argument(
29
+ "--extensions",
30
+ type=str,
31
+ default="png",
32
+ help="png+txt",
33
+ )
34
+ parser.add_argument(
35
+ "--prefix",
36
+ type=str,
37
+ default="",
38
+ )
39
+ parser.add_argument(
40
+ "--asset_name",
41
+ type=str,
42
+ default="",
43
+ )
44
+ args = parser.parse_args()
45
+
46
+ success = False
47
+ if args.task == "publish":
48
+ success = publish(
49
+ object_name=args.object_name,
50
+ list_of_extensions=args.extensions.split("+"),
51
+ prefix=args.prefix,
52
+ asset_name=args.asset_name,
53
+ )
54
+ else:
55
+ success = None
56
+
57
+ sys_exit(logger, NAME, args.task, success)
@@ -0,0 +1,62 @@
1
+ import os
2
+ from typing import List
3
+ import glob
4
+ from tqdm import tqdm
5
+
6
+ from blueness import module
7
+
8
+ from bluer_objects import objects, file
9
+ from bluer_objects.env import abcli_path_git
10
+ from bluer_objects import NAME
11
+ from bluer_objects.logger import logger
12
+
13
+
14
+ NAME = module.name(__file__, NAME)
15
+
16
+
17
+ def publish(
18
+ object_name: str,
19
+ list_of_extensions: List[str],
20
+ prefix: str = "",
21
+ asset_name: str = "",
22
+ log: bool = True,
23
+ ) -> bool:
24
+ if not asset_name:
25
+ asset_name = object_name
26
+ logger.info(
27
+ "{}.publish: {}/{}.* for {} -> {}".format(
28
+ NAME,
29
+ object_name,
30
+ prefix,
31
+ ", ".join(list_of_extensions),
32
+ asset_name,
33
+ )
34
+ )
35
+
36
+ for extension in tqdm(list_of_extensions):
37
+ for filename in glob.glob(
38
+ objects.path_of(
39
+ filename=f"{prefix}*.{extension}",
40
+ object_name=object_name,
41
+ )
42
+ ):
43
+ published_filename = os.path.join(
44
+ abcli_path_git,
45
+ "assets",
46
+ asset_name,
47
+ file.name_and_extension(filename).replace(
48
+ object_name,
49
+ asset_name,
50
+ ),
51
+ )
52
+
53
+ if not file.copy(
54
+ filename,
55
+ published_filename,
56
+ log=log,
57
+ ):
58
+ return False
59
+
60
+ logger.info(f"🔗 https://github.com/kamangir/assets/tree/main/{asset_name}")
61
+
62
+ return True
@@ -34,6 +34,12 @@ parser.add_argument(
34
34
  type=str,
35
35
  help="blank: <object-name>.gif",
36
36
  )
37
+ parser.add_argument(
38
+ "--frame_count",
39
+ default=-1,
40
+ type=int,
41
+ help="-1: all",
42
+ )
37
43
  parser.add_argument(
38
44
  "--frame_duration",
39
45
  default=150,
@@ -72,6 +78,7 @@ if args.task == "generate_animated_gif":
72
78
  ),
73
79
  object_name=args.object_name,
74
80
  ),
81
+ frame_count=args.frame_count,
75
82
  frame_duration=args.frame_duration,
76
83
  scale=args.scale,
77
84
  )
@@ -15,6 +15,7 @@ NAME = module.name(__file__, NAME)
15
15
  def generate_animated_gif(
16
16
  list_of_images: List[str],
17
17
  output_filename: str,
18
+ frame_count: int = -1,
18
19
  frame_duration: int = 150,
19
20
  scale: int = 1,
20
21
  log: bool = True,
@@ -22,6 +23,9 @@ def generate_animated_gif(
22
23
  if not list_of_images:
23
24
  return True
24
25
 
26
+ if frame_count != -1:
27
+ list_of_images = list_of_images[:frame_count]
28
+
25
29
  max_width = 0
26
30
  max_height = 0
27
31
  frames = []
@@ -67,7 +71,7 @@ def generate_animated_gif(
67
71
  except Exception:
68
72
  success = False
69
73
 
70
- message = "{}.generate_animated_gif({}x{}x{}) -scale={}-> {} @ {:.2f}ms".format(
74
+ message = "{}.generate_animated_gif({}x{}x{}) -scale={}-> {} @ {:.2f}ms{}".format(
71
75
  NAME,
72
76
  len(list_of_images),
73
77
  height,
@@ -75,6 +79,7 @@ def generate_animated_gif(
75
79
  scale,
76
80
  output_filename,
77
81
  frame_duration,
82
+ "" if frame_count == -1 else " [{} frame(s)]".format(frame_count),
78
83
  )
79
84
 
80
85
  if success:
@@ -0,0 +1,96 @@
1
+ from typing import List
2
+
3
+ from bluer_options.terminal import show_usage, xtra
4
+ from bluer_ai.help.git import push_options
5
+
6
+
7
+ def help_cd(
8
+ tokens: List[str],
9
+ mono: bool,
10
+ ) -> str:
11
+ options = "".join(
12
+ [
13
+ xtra("create,", mono=mono),
14
+ "vol=<2>",
15
+ ]
16
+ )
17
+
18
+ return show_usage(
19
+ [
20
+ "@assets",
21
+ "cd",
22
+ f"[{options}]",
23
+ "[<path>]",
24
+ ],
25
+ "cd assets volume.",
26
+ mono=mono,
27
+ )
28
+
29
+
30
+ def help_mv(
31
+ tokens: List[str],
32
+ mono: bool,
33
+ ) -> str:
34
+ options = "".join(
35
+ [
36
+ xtra("create,", mono=mono),
37
+ "extension=<png>,vol=<2>",
38
+ ]
39
+ )
40
+
41
+ return show_usage(
42
+ [
43
+ "@assets",
44
+ "mv",
45
+ f"[{options}]",
46
+ "[<path>]",
47
+ "[push,{}]".format(
48
+ push_options(
49
+ mono=mono,
50
+ uses_actions=False,
51
+ uses_pull_request=False,
52
+ uses_workflows=False,
53
+ )
54
+ ),
55
+ ],
56
+ "mv assets to volume.",
57
+ mono=mono,
58
+ )
59
+
60
+
61
+ def help_publish(
62
+ tokens: List[str],
63
+ mono: bool,
64
+ ) -> str:
65
+ options = "".join(
66
+ [
67
+ xtra("download,", mono=mono),
68
+ "extensions=<png+txt>",
69
+ xtra(",~pull,", mono=mono),
70
+ "push",
71
+ ]
72
+ )
73
+
74
+ args = [
75
+ "[--asset_name <other-object-name>]",
76
+ "[--prefix <prefix>]",
77
+ ]
78
+
79
+ return show_usage(
80
+ [
81
+ "@assets",
82
+ "publish",
83
+ f"[{options}]",
84
+ "[.|<object-name>]",
85
+ ]
86
+ + args,
87
+ "<object-name>/<prefix> -> assets.",
88
+ mono=mono,
89
+ )
90
+
91
+
92
+ help_functions = {
93
+ "cd": help_cd,
94
+ "mv": help_mv,
95
+ "publish": help_publish,
96
+ }
@@ -1,6 +1,7 @@
1
1
  from bluer_ai.help.generic import help_functions as generic_help_functions
2
2
 
3
3
  from bluer_objects import ALIAS
4
+ from bluer_objects.help.assets import help_functions as help_assets
4
5
  from bluer_objects.help.clone import help_clone
5
6
  from bluer_objects.help.create_test_asset import help_create_test_asset
6
7
  from bluer_objects.help.download import help_download
@@ -16,6 +17,7 @@ help_functions = generic_help_functions(plugin_name=ALIAS)
16
17
 
17
18
  help_functions.update(
18
19
  {
20
+ "assets": help_assets,
19
21
  "clone": help_clone,
20
22
  "create_test_asset": help_create_test_asset,
21
23
  "download": help_download,
@@ -10,6 +10,7 @@ def help_gif(
10
10
  options = xtra("~download,dryrun,~upload", mono=mono)
11
11
 
12
12
  args = [
13
+ "[--frame_count <100>]",
13
14
  "[--frame_duration <150>]",
14
15
  "[--output_filename <object-name>.gif]",
15
16
  "[--scale <1>]",
File without changes
@@ -0,0 +1,35 @@
1
+ import pytest
2
+ from bluer_objects.README.consts import assets_path, asset_volume
3
+
4
+
5
+ @pytest.mark.parametrize(
6
+ ["suffix"],
7
+ [
8
+ ["this"],
9
+ ["that/which"],
10
+ ],
11
+ )
12
+ @pytest.mark.parametrize(
13
+ ["volume"],
14
+ [
15
+ [""],
16
+ ["2"],
17
+ [2],
18
+ ],
19
+ )
20
+ def test_README_assets(
21
+ suffix: str,
22
+ volume: str,
23
+ ):
24
+ volume_path = asset_volume(volume=volume)
25
+ assert isinstance(volume_path, str)
26
+ assert volume_path.endswith(volume_path)
27
+
28
+ path = assets_path(
29
+ suffix=suffix,
30
+ volume=volume,
31
+ )
32
+
33
+ assert isinstance(path, str)
34
+ assert path.endswith(suffix)
35
+ assert volume_path in path
@@ -24,4 +24,6 @@ def test_graphics_gif_generate_animated_gif(
24
24
  list_of_images,
25
25
  objects.path_of("test.gif", test_object),
26
26
  scale=scale,
27
+ frame_count=10,
28
+ frame_duration=100,
27
29
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.271.1
3
+ Version: 6.282.1
4
4
  Summary: 🌀 Object management in Bash.
5
5
  Home-page: https://github.com/kamangir/bluer-objects
6
6
  Author: Arash Abadpour (Kamangir)
@@ -46,6 +46,7 @@ pip install bluer-objects
46
46
 
47
47
  # aliases
48
48
 
49
+ [@assets](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/docs/aliases/assets.md),
49
50
  [@clone](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/docs/aliases/clone.md),
50
51
  [@download](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/docs/aliases/download.md),
51
52
  [@gif](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/docs/aliases/gif.md),
@@ -64,6 +65,6 @@ pip install bluer-objects
64
65
 
65
66
  [![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
67
 
67
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.271.1`](https://github.com/kamangir/bluer-objects).
68
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.282.1`](https://github.com/kamangir/bluer-objects).
68
69
 
69
70
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).