bluer-objects 6.191.1__py3-none-any.whl → 6.201.1__py3-none-any.whl

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.

@@ -11,8 +11,15 @@ function test_bluer_objects_storage_public_upload() {
11
11
  $object_name \
12
12
  --depth 1
13
13
  [[ $? -ne 0 ]] && return 1
14
+ bluer_ai_hr
14
15
 
15
16
  bluer_objects_upload \
16
17
  public \
17
18
  $object_name
19
+ [[ $? -ne 0 ]] && return 1
20
+ bluer_ai_hr
21
+
22
+ bluer_objects_upload \
23
+ public,zip \
24
+ $object_name
18
25
  }
@@ -8,7 +8,8 @@ function test_bluer_objects_storage_upload_download() {
8
8
  mkdir -pv $object_path
9
9
 
10
10
  bluer_objects_create_test_asset \
11
- $object_name
11
+ $object_name \
12
+ --depth 1
12
13
  [[ $? -ne 0 ]] && return 1
13
14
  bluer_ai_hr
14
15
 
@@ -59,4 +60,10 @@ function test_bluer_objects_storage_upload_download() {
59
60
  bluer_objects_download \
60
61
  - \
61
62
  $object_name
63
+ [[ $? -ne 0 ]] && return 1
64
+ bluer_ai_hr
65
+
66
+ bluer_objects_upload \
67
+ zip \
68
+ $object_name
62
69
  }
@@ -4,12 +4,34 @@ function bluer_objects_upload() {
4
4
  local options=$1
5
5
  local filename=$(bluer_ai_option "$options" filename)
6
6
  local public=$(bluer_ai_option_int "$options" public 0)
7
+ local do_zip=$(bluer_ai_option_int "$options" zip 0)
7
8
 
8
9
  local object_name=$(bluer_ai_clarify_object $2 .)
9
10
  local object_path=$ABCLI_OBJECT_ROOT/$object_name
10
11
 
11
12
  rm -rf $object_path/auxiliary
12
13
 
14
+ if [[ "$do_zip" == 1 ]]; then
15
+ local zip_filename=$ABCLI_OBJECT_ROOT/$object_name.tar.gz
16
+
17
+ [[ -f "$zip_filename" ]] &&
18
+ rm -v $zip_filename
19
+
20
+ bluer_ai_eval - \
21
+ tar -czvf \
22
+ $zip_filename \
23
+ -C $ABCLI_OBJECT_ROOT $object_name
24
+ [[ $? -ne 0 ]] && return 1
25
+
26
+ python3 -m bluer_objects.storage \
27
+ upload \
28
+ --object_name $object_name \
29
+ --zip 1 \
30
+ --public $public
31
+
32
+ return
33
+ fi
34
+
13
35
  python3 -m bluer_objects.storage \
14
36
  upload \
15
37
  --object_name $object_name \
@@ -6,7 +6,7 @@ from blueness import module
6
6
 
7
7
  from bluer_objects import NAME as MY_NAME, ICON as MY_ICON
8
8
  from bluer_objects.metadata import get_from_object
9
- from bluer_objects import file
9
+ from bluer_objects import file, env
10
10
  from bluer_objects import markdown
11
11
  from bluer_objects.logger import logger
12
12
 
@@ -148,9 +148,10 @@ def build(
148
148
  template_line = " ".join(
149
149
  [
150
150
  (
151
- "[{}]({}/{}.tar.gz)".format(
151
+ "[{}](https://{}.{}/{}.tar.gz)".format(
152
152
  token.split(":::")[1].strip(),
153
- "TBA",
153
+ env.S3_PUBLIC_STORAGE_BUCKET,
154
+ env.S3_STORAGE_ENDPOINT_URL.split("https://", 1)[1],
154
155
  token.split(":::")[1].strip(),
155
156
  )
156
157
  if token.startswith("object:::")
bluer_objects/__init__.py CHANGED
@@ -4,7 +4,7 @@ ICON = "🌀"
4
4
 
5
5
  DESCRIPTION = f"{ICON} Object management in Bash."
6
6
 
7
- VERSION = "6.191.1"
7
+ VERSION = "6.201.1"
8
8
 
9
9
  REPO_NAME = "bluer-objects"
10
10
 
@@ -10,7 +10,7 @@ def help_upload(
10
10
  options = "".join(
11
11
  [
12
12
  "filename=<filename>",
13
- xtra(",public", mono=mono),
13
+ xtra(",public,zip", mono=mono),
14
14
  ]
15
15
  )
16
16
 
@@ -0,0 +1,91 @@
1
+ import matplotlib.pyplot as plt
2
+ from typing import Dict, Any, Union, List
3
+ import pandas as pd
4
+ import random
5
+ import os
6
+
7
+ from bluer_objects import file, objects
8
+ from bluer_objects.graphics.signature import sign_filename
9
+
10
+
11
+ def log_image_grid(
12
+ items: Union[
13
+ Dict[str, Dict[str, Any]],
14
+ pd.DataFrame,
15
+ ],
16
+ filename: str,
17
+ rows: int = 3,
18
+ cols: int = 5,
19
+ log: bool = True,
20
+ scale: int = 2,
21
+ shuffle: bool = False,
22
+ header: List[str] = [],
23
+ footer: List[str] = [],
24
+ relative_path: bool = False,
25
+ ) -> bool:
26
+ if isinstance(items, pd.DataFrame):
27
+ items = items.to_dict("records")
28
+
29
+ while len(items) < rows * cols:
30
+ items += [{"pass": True}]
31
+ if shuffle:
32
+ random.shuffle(items)
33
+ items = items[: rows * cols]
34
+
35
+ if relative_path:
36
+ root_path = file.path(filename)
37
+ for item in items:
38
+ if item.get("filename", ""):
39
+ item["filename"] = os.path.join(
40
+ root_path,
41
+ item["filename"],
42
+ )
43
+
44
+ _, axes = plt.subplots(
45
+ rows,
46
+ cols,
47
+ figsize=(
48
+ scale * cols,
49
+ scale * rows,
50
+ ),
51
+ )
52
+ axes = axes.flatten()
53
+
54
+ for i, item in enumerate(items):
55
+ if item.get("pass", False):
56
+ axes[i].axis("off")
57
+ continue
58
+
59
+ if item.get("filename", ""):
60
+ success, item["image"] = file.load_image(
61
+ item.get("filename", ""),
62
+ log=log,
63
+ )
64
+ if not success:
65
+ return False
66
+
67
+ ax = axes[i]
68
+ image = item["image"]
69
+ ax.imshow(
70
+ image,
71
+ cmap="gray" if image.ndim == 2 else None,
72
+ )
73
+ ax.set_title(
74
+ item.get("title", f"#{i}"),
75
+ fontsize=10,
76
+ )
77
+ ax.axis("off")
78
+
79
+ plt.tight_layout()
80
+
81
+ if not file.save_fig(
82
+ filename,
83
+ log=log,
84
+ ):
85
+ return False
86
+
87
+ return sign_filename(
88
+ filename,
89
+ [" | ".join(objects.signature("grid.png") + header)],
90
+ [" | ".join(footer)],
91
+ )
@@ -87,10 +87,11 @@ class WebDAVInterface(StorageInterface):
87
87
  object_name: str,
88
88
  filename: str = "",
89
89
  public: bool = False,
90
+ zip: bool = False,
90
91
  log: bool = True,
91
92
  ) -> bool:
92
- if public:
93
- logger.error("public not supported.")
93
+ if public or zip:
94
+ logger.error("public/zip upload not supported.")
94
95
  return False
95
96
 
96
97
  if filename:
@@ -117,5 +118,6 @@ class WebDAVInterface(StorageInterface):
117
118
  object_name=object_name,
118
119
  filename=filename,
119
120
  public=public,
121
+ zip=zip,
120
122
  log=log,
121
123
  )
@@ -279,10 +279,11 @@ class WebDAVRequestInterface(StorageInterface):
279
279
  object_name: str,
280
280
  filename: str = "",
281
281
  public: bool = False,
282
+ zip: bool = False,
282
283
  log: bool = True,
283
284
  ) -> bool:
284
- if public:
285
- logger.error("public not supported.")
285
+ if public or zip:
286
+ logger.error("public/zip upload not supported.")
286
287
  return False
287
288
 
288
289
  if filename:
@@ -321,6 +322,7 @@ class WebDAVRequestInterface(StorageInterface):
321
322
  object_name=object_name,
322
323
  filename=filename,
323
324
  public=public,
325
+ zip=zip,
324
326
  log=log,
325
327
  )
326
328
 
@@ -126,10 +126,11 @@ class WebDAVzipInterface(StorageInterface):
126
126
  object_name: str,
127
127
  filename: str = "",
128
128
  public: bool = False,
129
+ zip: bool = False,
129
130
  log: bool = True,
130
131
  ) -> bool:
131
- if public:
132
- logger.error("public not supported.")
132
+ if public or zip:
133
+ logger.error("public/zip upload not supported.")
133
134
  return False
134
135
 
135
136
  object_path = objects.object_path(object_name=object_name)
@@ -155,5 +156,6 @@ class WebDAVzipInterface(StorageInterface):
155
156
  return super().upload(
156
157
  object_name=object_name,
157
158
  public=public,
159
+ zip=zip,
158
160
  log=log,
159
161
  )
@@ -57,11 +57,13 @@ def upload(
57
57
  object_name: str,
58
58
  filename: str = "",
59
59
  public: bool = False,
60
+ zip: bool = False,
60
61
  log: bool = True,
61
62
  ) -> bool:
62
63
  return interface.upload(
63
64
  object_name=object_name,
64
65
  filename=filename,
65
66
  public=public,
67
+ zip=zip,
66
68
  log=log,
67
69
  )
@@ -30,6 +30,12 @@ parser.add_argument(
30
30
  default=0,
31
31
  help="0 | 1",
32
32
  )
33
+ parser.add_argument(
34
+ "--zip",
35
+ type=int,
36
+ default=0,
37
+ help="0 | 1",
38
+ )
33
39
  parser.add_argument(
34
40
  "--where",
35
41
  type=str,
@@ -86,6 +92,7 @@ elif args.task == "upload":
86
92
  success = storage.upload(
87
93
  object_name=args.object_name,
88
94
  filename=args.filename,
95
+ zip=args.zip == 1,
89
96
  public=args.public == 1,
90
97
  )
91
98
  else:
@@ -67,6 +67,7 @@ class StorageInterface:
67
67
  object_name: str,
68
68
  filename: str = "",
69
69
  public: bool = False,
70
+ zip: bool = False,
70
71
  log: bool = True,
71
72
  ) -> bool:
72
73
  if log:
@@ -74,7 +75,7 @@ class StorageInterface:
74
75
  "{}.upload {}{}{}".format(
75
76
  self.__class__.__name__,
76
77
  object_name,
77
- f"/{filename}" if filename else "",
78
+ ".tar.gz" if zip else f"/{filename}" if filename else "",
78
79
  " [public]" if public else "",
79
80
  )
80
81
  )
@@ -1,4 +1,5 @@
1
1
  import boto3
2
+ import os
2
3
  from botocore.exceptions import ClientError
3
4
  import glob
4
5
  from typing import Tuple, List
@@ -7,6 +8,7 @@ from tqdm import tqdm
7
8
  from functools import reduce
8
9
 
9
10
  from bluer_objects.storage.base import StorageInterface
11
+ from bluer_objects.env import ABCLI_OBJECT_ROOT
10
12
  from bluer_objects import env, file, path
11
13
  from bluer_objects import objects
12
14
  from bluer_objects.logger import logger
@@ -226,12 +228,20 @@ class S3Interface(StorageInterface):
226
228
  object_name: str,
227
229
  filename: str = "",
228
230
  public: bool = False,
231
+ zip: bool = False,
229
232
  log: bool = True,
230
233
  ) -> bool:
231
- if filename:
232
- local_path = objects.path_of(
233
- object_name=object_name,
234
- filename=filename,
234
+ if filename or zip:
235
+ local_path = (
236
+ os.path.join(
237
+ ABCLI_OBJECT_ROOT,
238
+ f"{object_name}.tar.gz",
239
+ )
240
+ if zip
241
+ else objects.path_of(
242
+ object_name=object_name,
243
+ filename=filename,
244
+ )
235
245
  )
236
246
 
237
247
  bucket_name = (
@@ -252,20 +262,22 @@ class S3Interface(StorageInterface):
252
262
  bucket.put_object(
253
263
  ACL="public-read" if public else "private",
254
264
  Body=fp,
255
- Key=f"{object_name}/{filename}",
265
+ Key=(
266
+ f"{object_name}.tar.gz"
267
+ if zip
268
+ else f"{object_name}/{filename}"
269
+ ),
256
270
  )
257
271
  except ClientError as e:
258
272
  logger.error(e)
259
273
  return False
260
274
 
261
275
  if public:
262
-
263
276
  logger.info(
264
- "🔗 https://{}.{}/{}/{}".format(
277
+ "🔗 https://{}.{}/{}".format(
265
278
  bucket_name,
266
279
  env.S3_STORAGE_ENDPOINT_URL.split("https://", 1)[1],
267
- object_name,
268
- filename,
280
+ f"{object_name}.tar.gz" if zip else f"{object_name}/{filename}",
269
281
  )
270
282
  )
271
283
 
@@ -273,6 +285,7 @@ class S3Interface(StorageInterface):
273
285
  object_name=object_name,
274
286
  filename=filename,
275
287
  public=public,
288
+ zip=zip,
276
289
  log=log,
277
290
  )
278
291
 
@@ -0,0 +1,29 @@
1
+ from bluer_objects import objects
2
+ from bluer_objects.testing import create_test_asset
3
+ from bluer_objects.logger.image import log_image_grid
4
+
5
+
6
+ def test_log_image_grid():
7
+ object_name = objects.unique_object("test_log_image_grid")
8
+
9
+ depth = 10
10
+
11
+ assert create_test_asset(
12
+ object_name=object_name,
13
+ depth=depth,
14
+ )
15
+
16
+ assert log_image_grid(
17
+ [
18
+ {
19
+ "filename": objects.path_of(
20
+ object_name=object_name,
21
+ filename=f"test-{suffix:02d}.png",
22
+ )
23
+ for suffix in range(depth)
24
+ }
25
+ ],
26
+ objects.path_of(object_name=object_name, filename="image_grid.png"),
27
+ rows=2,
28
+ cols=5,
29
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.191.1
3
+ Version: 6.201.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.191.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.201.1`](https://github.com/kamangir/bluer-objects).
68
68
 
69
69
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -1,4 +1,4 @@
1
- bluer_objects/__init__.py,sha256=LJ2FI0JBSz8Edj83gykb0Nncu9QvUjZjBO-list95Gg,315
1
+ bluer_objects/__init__.py,sha256=l5ODVDozyMyvmJSdeSoiuT8z0Du3tazCJX9oWS5GlhI,315
2
2
  bluer_objects/__main__.py,sha256=Yqfov833_hJuRne19WrGhT5DWAPtdffpoMxeSXS7EGw,359
3
3
  bluer_objects/config.env,sha256=RjcpnbKfRqNyGLRB4z7M_OG9z2pOM032ck__53JqXqo,216
4
4
  bluer_objects/env.py,sha256=iw4QvaImqnavlsHwfkUScNHc7afDEJQKJSsHTtVJE78,2019
@@ -24,7 +24,7 @@ bluer_objects/.abcli/mlflow.sh,sha256=7ylwHrQas-QbAJ8SfDJiN3zbuU6ifLUBEAhPRw38Hp
24
24
  bluer_objects/.abcli/object.sh,sha256=Zh2ZMFqBSIOHwwwLegCMxJRfaYCbPp1EJMT3LvcFzhE,739
25
25
  bluer_objects/.abcli/select.sh,sha256=CVcqVRN6bMLtEo0SptZS_QGY90_lT1Su71DlcVyddXo,878
26
26
  bluer_objects/.abcli/storage.sh,sha256=iYHxdXJI9sGR-WKxDuYKOB06FccSQ0G0-uZn9UJQGnc,321
27
- bluer_objects/.abcli/upload.sh,sha256=IbT786rA6nWuQurhGOFOiJeH_ZqVpnhvrARA1VJl9MU,640
27
+ bluer_objects/.abcli/upload.sh,sha256=CFw2GkqYDbjOm2dAqg3gmcVEFohjPvjc2ttl15NOmlU,1208
28
28
  bluer_objects/.abcli/url.sh,sha256=1YF6XNG109ItH6l3SUvvbRkm4JBojiUoLZ2wJYwM28U,315
29
29
  bluer_objects/.abcli/metadata/get.sh,sha256=6W9x0akZwwozTyOlKCW_0MndYVUAL4v1HSUPxTAsfKA,835
30
30
  bluer_objects/.abcli/metadata/post.sh,sha256=UdvZNuRu6_NcyRVvDMFZ9GEwOm3K8rsNqM0FFr9LskA,570
@@ -64,15 +64,15 @@ bluer_objects/.abcli/tests/mlflow_lock.sh,sha256=TJwp6HbVUOT1HqRfXPS8_zpKAL7-mBe
64
64
  bluer_objects/.abcli/tests/mlflow_logging.sh,sha256=TVzHhk9qRthpP2xdKwu3LwK00S77GqH50io3oVyS2UE,305
65
65
  bluer_objects/.abcli/tests/mlflow_tags.sh,sha256=pX4sEK_z2Vrb7a6Bq4qWurFVPZkvjpS10K4MLx3mf64,811
66
66
  bluer_objects/.abcli/tests/mlflow_test.sh,sha256=7MXxYq2GgD2MEJbQlpx80qLT2HaaVn_PFFMpSA_hWA4,125
67
- bluer_objects/.abcli/tests/storage_public_upload.sh,sha256=3S7YJQ-mbPcVtG384PRxEGP7xGLJgvvV-CtV4hgz2I8,456
68
- bluer_objects/.abcli/tests/storage_upload_download.sh,sha256=tXjrHuFtmogC9Pf4Q8aTU1Sx1C653GOcy_jIsecelMY,1346
67
+ bluer_objects/.abcli/tests/storage_public_upload.sh,sha256=qwyUSejxDlV5Q1f7jyOLej_ADZt50HwbuSImFcrMWf8,589
68
+ bluer_objects/.abcli/tests/storage_upload_download.sh,sha256=l5EO0TwyHw7zVBrJV8xmJub8RburdAiyg80WEH3VjrQ,1476
69
69
  bluer_objects/.abcli/tests/version.sh,sha256=k-lXozSjyFgFR58cTzUYla0Ef-upx3sSK641zI5ynfE,169
70
70
  bluer_objects/.abcli/tests/web_is_accessible.sh,sha256=3R33_LQM9PIfl8Bks4HrPHp4ug8cGv9X6LaDscsznEs,405
71
71
  bluer_objects/.abcli/tests/web_where_am_ai.sh,sha256=BJ9G_m4id8cx_UB_l_jV2xY6AfQEpG7O4IBsuVjodxk,104
72
72
  bluer_objects/.abcli/web/is_accessible.sh,sha256=Luv_6IvpscRYx7f39V0RnkkNEWTRfVGyQVUeij3iqa0,262
73
73
  bluer_objects/.abcli/web/where_am_i.sh,sha256=QPBXFo6Ni4pZEoOx0rtuJUxk6tOlp0ESMyAc9YPy9zg,92
74
74
  bluer_objects/README/__init__.py,sha256=JwxdTVAK3LeUaw7rMJujOFIXZA59HaLCtxpsR1C-vpo,1311
75
- bluer_objects/README/functions.py,sha256=IriuSysrApSTEgOZHqq32-eyks5v5Tn-KvmwYQUIloc,10752
75
+ bluer_objects/README/functions.py,sha256=WXa-reSe1QxyT8UuA2m1fCYXAKpv2dg9EqiS8IB2ufA,10876
76
76
  bluer_objects/README/items.py,sha256=-XaNCr5b_NGRkZVfIQ6hBFgJw5GIVcMJdktT3hWoam4,755
77
77
  bluer_objects/file/__init__.py,sha256=c_79ipBkKl6OFDimOev0vnaVdpUk-Bl3oJUapOreMXc,681
78
78
  bluer_objects/file/__main__.py,sha256=v2IXWvZeh_B2sGYWzv1CiUY-7HWHXXghZM5M4IPjbu4,1277
@@ -97,7 +97,7 @@ bluer_objects/help/gif.py,sha256=gKV6vNT4bEC2Ch3QIb3Yc5DqzAH_UvAVCsuvzXeF1Sc,564
97
97
  bluer_objects/help/host.py,sha256=4t4yrPGjTbnFtODcuBjfIzpA5pmmvc5s4QrjIqPPVsM,988
98
98
  bluer_objects/help/ls.py,sha256=acvRLDxjJOzQ1a9ZQ4Mn9aBZ8Vf17IDHcAxC2O3R33Y,627
99
99
  bluer_objects/help/metadata.py,sha256=fk22NasBcZU1ffY4fu6AxrCzMQtTI28p_ghaSVRrrPM,2811
100
- bluer_objects/help/upload.py,sha256=tXAdVhy0FZfF5b4cAEgaYlLQ8_cnQ656um8QioKMV_o,456
100
+ bluer_objects/help/upload.py,sha256=kied2p7II-zCdme_GyDs_74n-15iwyS_RMh2SWLkw1I,460
101
101
  bluer_objects/help/web.py,sha256=YGxzU0GyoQAA8tqnEoGcC4rABFW_RnI44PhvHvIG5dA,626
102
102
  bluer_objects/help/mlflow/__init__.py,sha256=fvnGg8l24oGWKd7lbVm32GHyrE3eBlholj4RFrjFNuw,4427
103
103
  bluer_objects/help/mlflow/cache.py,sha256=O8O1oaiq1e1z2HCi8fRe4hjSNimzvCaCAIu-u2GDHkE,704
@@ -107,6 +107,7 @@ bluer_objects/host/__init__.py,sha256=Ko43SWnZNsGKuIPU_l0w17pYrxCgVHQx3_zEoUNaHZ
107
107
  bluer_objects/host/__main__.py,sha256=J0MO2sUzrI_t_X4VVYyM6n41ND0yhhSXOmZSkDAC4rg,1751
108
108
  bluer_objects/host/functions.py,sha256=ADups78hYZDAnC6FlIICQ48WkFd4sPnRMWA0D6X-FV4,1663
109
109
  bluer_objects/logger/__init__.py,sha256=2aGNbx-qBXU3IlX9BDqtrFfN25lO_uarEg22cE3-3dU,102
110
+ bluer_objects/logger/image.py,sha256=plwpVIgMlfhDR-fVxvgviO0vCwxe0C6ZFdBaiRUgzws,2104
110
111
  bluer_objects/logger/matrix.py,sha256=cPKQIhd347MH_9LaB-Ym7Mix1pqampG9MIgkeh08KA4,5757
111
112
  bluer_objects/metadata/__init__.py,sha256=B8cmMOMMO53mTwD2LJUFbSjvangSkpLqhR3oVIBsoBI,260
112
113
  bluer_objects/metadata/__main__.py,sha256=UAZBsf3AMUo-OHIgg4gS5_OowDOIO2T_zjismL3AfkI,2272
@@ -125,13 +126,13 @@ bluer_objects/mlflow/testing.py,sha256=cJH5Ki02fJN_Xos1j9yvwQChXvMkOa9i12vtDKmkb
125
126
  bluer_objects/mlflow/lock/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
126
127
  bluer_objects/mlflow/lock/__main__.py,sha256=xF_xq2UqAsEohSOHjxaFXaw9KopOEDg6LRDM5a4VAPQ,1138
127
128
  bluer_objects/mlflow/lock/functions.py,sha256=MOslqblNAOsRvILzLF4q6m2EAwCk4f4zEWQpsy8lVnM,3045
128
- bluer_objects/storage/WebDAV.py,sha256=TrMroPaCx_ploCol4s3604qdl-4HjOYj906JJ7oRpv8,3074
129
- bluer_objects/storage/WebDAVrequest.py,sha256=tuMXWWpFcOkwf-W3YTsuJ5vQYJPFDOuEzBVRHjcSsdc,10027
130
- bluer_objects/storage/WebDAVzip.py,sha256=Tn-g9wjK6qHHIEO4-N_xBEZ4H8Q7dIh1Iv5banQw-c4,4024
131
- bluer_objects/storage/__init__.py,sha256=Sz9KJzb2p6MbAvHMZEhQIpo2UVOCi1OCSO095uwU3JI,1695
132
- bluer_objects/storage/__main__.py,sha256=yfWoUlpF_HssujOepf6J60G1Ohm0eccq-OQkhLjnWyY,1895
133
- bluer_objects/storage/base.py,sha256=E4u8yuRWK_-3i6aa4u2tFZshj74PWPf5AgGGgK0mmTg,2032
134
- bluer_objects/storage/s3.py,sha256=NOAkScgFIWx5awi9Ve41axFi5TvW_IPzz232Cf9p7wE,8912
129
+ bluer_objects/storage/WebDAV.py,sha256=s0KI5JIfvYcRfrroxsZdEjfnxX_8CiPC-fQ3f0Lrkjw,3140
130
+ bluer_objects/storage/WebDAVrequest.py,sha256=H9GIVPQPjP1j-URZrxJ15Jxnf8qPgQx-dShaxaeAj1U,10101
131
+ bluer_objects/storage/WebDAVzip.py,sha256=vfjk-7HF5EpQ9ad-ZGfPR_qOK57RQzAPXlWc3tIsq8A,4090
132
+ bluer_objects/storage/__init__.py,sha256=CFo0m1ftBGFKBdUAy4FAilJCpXwKvVdXCrBMkmeTW1E,1735
133
+ bluer_objects/storage/__main__.py,sha256=6T4gltrJ-3lihce2fm43UeWB1y09VInXHrVBnAAa_R4,2005
134
+ bluer_objects/storage/base.py,sha256=CPMBGi7koKnEBVLJOeIq9T05xxfKFRg-BHjyWidlCKw,2081
135
+ bluer_objects/storage/s3.py,sha256=kSvm68POErGaqSWZ0ds8zB0Fd5q4WJUZ95kQZSp3n7w,9395
135
136
  bluer_objects/testing/__init__.py,sha256=DWY5ZtvCnHG_t9BDiqy_ArLOZi-nlyAtPVMLA1PPAMU,62
136
137
  bluer_objects/testing/__main__.py,sha256=hhJV9qn0V_8FxzNDcoHCHr4A7zf9UudnNGJCAPkTBGU,750
137
138
  bluer_objects/testing/functions.py,sha256=AXAfzWLcEPkbSYTehdahshjKJ45C4IJkRs_TgrHOntc,1355
@@ -148,6 +149,7 @@ bluer_objects/tests/test_graphics_gif.py,sha256=5vIRJiu1XZ7sjQ2R1VpdiqZszPx4DoZn
148
149
  bluer_objects/tests/test_graphics_screen.py,sha256=26GMDxImz57oWb8mFrNBtiGnctfjO0oNpzi1GLaHEro,138
149
150
  bluer_objects/tests/test_graphics_signature.py,sha256=CVV257E3A5KBwqEDpRXShN-ful1zFwV9S-z-06oFkxM,1588
150
151
  bluer_objects/tests/test_graphics_text.py,sha256=_jLZVuAcQQYlKpATeQCBpPMa8UhKQ__bFYR1bedO5EE,314
152
+ bluer_objects/tests/test_log_image_grid.py,sha256=qjSRMwY5jnJd9S3XZ3FDeoIsSJ9aFJ3yDhth1sV0A5g,737
151
153
  bluer_objects/tests/test_logger.py,sha256=DdkZqj8YOErKf6T-SWEPtU21LGfQf_O3GKrCn3H0Ujs,88
152
154
  bluer_objects/tests/test_logger_matrix.py,sha256=qedidEDGusMWQM04kgk3mt74yFm4iU3jIyjE4gRi_FQ,1703
153
155
  bluer_objects/tests/test_markdown.py,sha256=KtCWKIDs4U1M3qAGFMYhzVpdGiDV2VU8z7dCaU3s3Ec,217
@@ -167,8 +169,8 @@ bluer_objects/tests/test_web_is_accessible.py,sha256=2Y20NAEDMblg0MKnhnqcfw3XVKE
167
169
  bluer_objects/web/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
168
170
  bluer_objects/web/__main__.py,sha256=xf2Ob54FI8JEokfGhFmiyOBdD9nBactwqmZvsKsdioU,624
169
171
  bluer_objects/web/functions.py,sha256=KNufAFOc6N3BYf83lN2rUpKUdsnzb2anWyp9koFRVUo,172
170
- bluer_objects-6.191.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
171
- bluer_objects-6.191.1.dist-info/METADATA,sha256=xHa7FnPzleeatx0ybdV_04CnrXmuYm0BNjphWPwpNE0,3678
172
- bluer_objects-6.191.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
173
- bluer_objects-6.191.1.dist-info/top_level.txt,sha256=RX2TpddbnRkurda3G_pAdyeTztP2IhhRPx949GlEvQo,14
174
- bluer_objects-6.191.1.dist-info/RECORD,,
172
+ bluer_objects-6.201.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
173
+ bluer_objects-6.201.1.dist-info/METADATA,sha256=qNe30ZRwFJjiC5-KHrrcDrJSH9kzRIaHutxlweaz4xw,3678
174
+ bluer_objects-6.201.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
175
+ bluer_objects-6.201.1.dist-info/top_level.txt,sha256=RX2TpddbnRkurda3G_pAdyeTztP2IhhRPx949GlEvQo,14
176
+ bluer_objects-6.201.1.dist-info/RECORD,,