bluer-objects 6.175.1__py3-none-any.whl → 6.181.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.

@@ -0,0 +1,18 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function test_bluer_objects_storage_public_upload() {
4
+ local options=$1
5
+
6
+ local object_name=test_bluer_objects_storage_public_upload-$(bluer_ai_string_timestamp_short)
7
+ local object_path=$ABCLI_OBJECT_ROOT/$object_name
8
+ mkdir -pv $object_path
9
+
10
+ bluer_objects_create_test_asset \
11
+ $object_name \
12
+ --depth 1
13
+ [[ $? -ne 0 ]] && return 1
14
+
15
+ bluer_objects_upload \
16
+ public \
17
+ $object_name
18
+ }
@@ -1,9 +1,9 @@
1
1
  #! /usr/bin/env bash
2
2
 
3
- function test_bluer_objects_storage() {
3
+ function test_bluer_objects_storage_upload_download() {
4
4
  local options=$1
5
5
 
6
- local object_name=test_bluer_objects_storage-$(bluer_ai_string_timestamp_short)
6
+ local object_name=test_bluer_objects_storage_upload_download-$(bluer_ai_string_timestamp_short)
7
7
  local object_path=$ABCLI_OBJECT_ROOT/$object_name
8
8
  mkdir -pv $object_path
9
9
 
@@ -3,6 +3,7 @@
3
3
  function bluer_objects_upload() {
4
4
  local options=$1
5
5
  local filename=$(bluer_ai_option "$options" filename)
6
+ local public=$(bluer_ai_option_int "$options" public 0)
6
7
 
7
8
  local object_name=$(bluer_ai_clarify_object $2 .)
8
9
  local object_path=$ABCLI_OBJECT_ROOT/$object_name
@@ -12,10 +13,11 @@ function bluer_objects_upload() {
12
13
  python3 -m bluer_objects.storage \
13
14
  upload \
14
15
  --object_name $object_name \
15
- --filename "$filename"
16
+ --filename "$filename" \
17
+ --public $public
16
18
  [[ $? -ne 0 ]] && return 1
17
19
 
18
- if [[ -z "$filename" ]]; then
20
+ if [[ -z "$filename" ]] && [[ "$public" == 0 ]]; then
19
21
  bluer_objects_mlflow_log_run $object_name
20
22
  fi
21
23
  }
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.175.1"
7
+ VERSION = "6.181.1"
8
8
 
9
9
  REPO_NAME = "bluer-objects"
10
10
 
bluer_objects/config.env CHANGED
@@ -4,5 +4,6 @@ MLFLOW_LOCK_WAIT_FOR_CLEARANCE=3
4
4
  MLFLOW_LOCK_WAIT_FOR_EXCLUSIVITY=1
5
5
 
6
6
  S3_STORAGE_BUCKET=kamangir
7
+ S3_PUBLIC_STORAGE_BUCKET=kamangir-public
7
8
 
8
9
  BLUER_OBJECTS_STORAGE_INTERFACE=s3
bluer_objects/env.py CHANGED
@@ -36,6 +36,7 @@ DUMMY_TEXT = "This is some dummy text. This is some dummy text. This is some dum
36
36
  ABCLI_MLFLOW_EXPERIMENT_PREFIX = get_env("ABCLI_MLFLOW_EXPERIMENT_PREFIX")
37
37
 
38
38
  S3_STORAGE_BUCKET = get_env("S3_STORAGE_BUCKET")
39
+ S3_PUBLIC_STORAGE_BUCKET = get_env("S3_PUBLIC_STORAGE_BUCKET")
39
40
 
40
41
  S3_STORAGE_ENDPOINT_URL = get_env("S3_STORAGE_ENDPOINT_URL")
41
42
  S3_STORAGE_AWS_ACCESS_KEY_ID = get_env("S3_STORAGE_AWS_ACCESS_KEY_ID")
@@ -7,7 +7,12 @@ def help_upload(
7
7
  tokens: List[str],
8
8
  mono: bool,
9
9
  ) -> str:
10
- options = "filename=<filename>"
10
+ options = "".join(
11
+ [
12
+ "filename=<filename>",
13
+ xtra(",public", mono=mono),
14
+ ]
15
+ )
11
16
 
12
17
  return show_usage(
13
18
  [
@@ -86,8 +86,13 @@ class WebDAVInterface(StorageInterface):
86
86
  self,
87
87
  object_name: str,
88
88
  filename: str = "",
89
+ public: bool = False,
89
90
  log: bool = True,
90
91
  ) -> bool:
92
+ if public:
93
+ logger.error("public not supported.")
94
+ return False
95
+
91
96
  if filename:
92
97
  remote_dir = "/".join([object_name] + filename.split("/")[:-1])
93
98
  if not self.mkdir(
@@ -111,5 +116,6 @@ class WebDAVInterface(StorageInterface):
111
116
  return super().upload(
112
117
  object_name=object_name,
113
118
  filename=filename,
119
+ public=public,
114
120
  log=log,
115
121
  )
@@ -278,8 +278,13 @@ class WebDAVRequestInterface(StorageInterface):
278
278
  self,
279
279
  object_name: str,
280
280
  filename: str = "",
281
+ public: bool = False,
281
282
  log: bool = True,
282
283
  ) -> bool:
284
+ if public:
285
+ logger.error("public not supported.")
286
+ return False
287
+
283
288
  if filename:
284
289
  if not self.mkdir(
285
290
  path="{}/{}".format(
@@ -315,6 +320,7 @@ class WebDAVRequestInterface(StorageInterface):
315
320
  return super().upload(
316
321
  object_name=object_name,
317
322
  filename=filename,
323
+ public=public,
318
324
  log=log,
319
325
  )
320
326
 
@@ -339,6 +345,7 @@ class WebDAVRequestInterface(StorageInterface):
339
345
  if not self.upload(
340
346
  object_name=object_name,
341
347
  filename=filename_.split(object_path, 1)[1],
348
+ public=public,
342
349
  log=log,
343
350
  ):
344
351
  return False
@@ -125,8 +125,13 @@ class WebDAVzipInterface(StorageInterface):
125
125
  self,
126
126
  object_name: str,
127
127
  filename: str = "",
128
+ public: bool = False,
128
129
  log: bool = True,
129
130
  ) -> bool:
131
+ if public:
132
+ logger.error("public not supported.")
133
+ return False
134
+
130
135
  object_path = objects.object_path(object_name=object_name)
131
136
 
132
137
  if not zip(
@@ -149,5 +154,6 @@ class WebDAVzipInterface(StorageInterface):
149
154
 
150
155
  return super().upload(
151
156
  object_name=object_name,
157
+ public=public,
152
158
  log=log,
153
159
  )
@@ -56,10 +56,12 @@ def ls(
56
56
  def upload(
57
57
  object_name: str,
58
58
  filename: str = "",
59
+ public: bool = False,
59
60
  log: bool = True,
60
61
  ) -> bool:
61
62
  return interface.upload(
62
63
  object_name=object_name,
63
64
  filename=filename,
65
+ public=public,
64
66
  log=log,
65
67
  )
@@ -24,6 +24,12 @@ parser.add_argument(
24
24
  type=str,
25
25
  default="",
26
26
  )
27
+ parser.add_argument(
28
+ "--public",
29
+ type=int,
30
+ default=0,
31
+ help="0 | 1",
32
+ )
27
33
  parser.add_argument(
28
34
  "--where",
29
35
  type=str,
@@ -80,6 +86,7 @@ elif args.task == "upload":
80
86
  success = storage.upload(
81
87
  object_name=args.object_name,
82
88
  filename=args.filename,
89
+ public=args.public == 1,
83
90
  )
84
91
  else:
85
92
  success = None
@@ -66,14 +66,16 @@ class StorageInterface:
66
66
  self,
67
67
  object_name: str,
68
68
  filename: str = "",
69
+ public: bool = False,
69
70
  log: bool = True,
70
71
  ) -> bool:
71
72
  if log:
72
73
  logger.info(
73
- "{}.upload {}{}".format(
74
+ "{}.upload {}{}{}".format(
74
75
  self.__class__.__name__,
75
76
  object_name,
76
77
  f"/{filename}" if filename else "",
78
+ " [public]" if public else "",
77
79
  )
78
80
  )
79
81
 
@@ -225,6 +225,7 @@ class S3Interface(StorageInterface):
225
225
  self,
226
226
  object_name: str,
227
227
  filename: str = "",
228
+ public: bool = False,
228
229
  log: bool = True,
229
230
  ) -> bool:
230
231
  if filename:
@@ -233,6 +234,10 @@ class S3Interface(StorageInterface):
233
234
  filename=filename,
234
235
  )
235
236
 
237
+ bucket_name = (
238
+ env.S3_PUBLIC_STORAGE_BUCKET if public else env.S3_STORAGE_BUCKET
239
+ )
240
+
236
241
  try:
237
242
  s3_resource = boto3.resource(
238
243
  "s3",
@@ -241,11 +246,11 @@ class S3Interface(StorageInterface):
241
246
  aws_secret_access_key=env.S3_STORAGE_AWS_SECRET_ACCESS_KEY,
242
247
  )
243
248
 
244
- bucket = s3_resource.Bucket(env.S3_STORAGE_BUCKET)
249
+ bucket = s3_resource.Bucket(bucket_name)
245
250
 
246
251
  with open(local_path, "rb") as fp:
247
252
  bucket.put_object(
248
- ACL="private",
253
+ ACL="public-read" if public else "private",
249
254
  Body=fp,
250
255
  Key=f"{object_name}/{filename}",
251
256
  )
@@ -253,9 +258,21 @@ class S3Interface(StorageInterface):
253
258
  logger.error(e)
254
259
  return False
255
260
 
261
+ if public:
262
+
263
+ logger.info(
264
+ "🔗 https://{}.{}/{}/{}".format(
265
+ bucket_name,
266
+ env.S3_STORAGE_ENDPOINT_URL.split("https://", 1)[1],
267
+ object_name,
268
+ filename,
269
+ )
270
+ )
271
+
256
272
  return super().upload(
257
273
  object_name=object_name,
258
274
  filename=filename,
275
+ public=public,
259
276
  log=log,
260
277
  )
261
278
 
@@ -277,6 +294,7 @@ class S3Interface(StorageInterface):
277
294
  if not self.upload(
278
295
  object_name=object_name,
279
296
  filename=filename_.split(object_path, 1)[1],
297
+ public=public,
280
298
  log=log,
281
299
  ):
282
300
  return False
@@ -17,6 +17,7 @@ def test_bluer_objects_env():
17
17
  assert env.ABCLI_MLFLOW_EXPERIMENT_PREFIX
18
18
 
19
19
  assert env.S3_STORAGE_BUCKET
20
+ assert env.S3_PUBLIC_STORAGE_BUCKET
20
21
 
21
22
  assert env.S3_STORAGE_ENDPOINT_URL
22
23
  assert env.S3_STORAGE_AWS_ACCESS_KEY_ID
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.175.1
3
+ Version: 6.181.1
4
4
  Summary: 🌀 Object management in Bash.
5
5
  Home-page: https://github.com/kamangir/bluer-objects
6
6
  Author: Arash Abadpour (Kamangir)
@@ -64,6 +64,6 @@ pip install bluer-objects
64
64
 
65
65
  [![pylint](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-objects.svg)](https://pypi.org/project/bluer-objects/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/bluer-objects)](https://pypistats.org/packages/bluer-objects)
66
66
 
67
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.175.1`](https://github.com/kamangir/bluer-objects).
67
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.181.1`](https://github.com/kamangir/bluer-objects).
68
68
 
69
69
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -1,7 +1,7 @@
1
- bluer_objects/__init__.py,sha256=6gVB8kZmeOPmYrSyWuk7xz1PChKg2N6bauiQcEnurzg,315
1
+ bluer_objects/__init__.py,sha256=ZS-H8ZaUb_ms3k0y-QCmwt8bOPXKu7xlp2mbW8xNmpk,315
2
2
  bluer_objects/__main__.py,sha256=Yqfov833_hJuRne19WrGhT5DWAPtdffpoMxeSXS7EGw,359
3
- bluer_objects/config.env,sha256=cpmtTuKHIBvVjX30MpAImFgwM0g24qTHwoO-lCJRInA,175
4
- bluer_objects/env.py,sha256=aImjtNh8NKaua2rpQVFXWp86QF7nY87fDuMOO14O58E,1956
3
+ bluer_objects/config.env,sha256=RjcpnbKfRqNyGLRB4z7M_OG9z2pOM032ck__53JqXqo,216
4
+ bluer_objects/env.py,sha256=iw4QvaImqnavlsHwfkUScNHc7afDEJQKJSsHTtVJE78,2019
5
5
  bluer_objects/markdown.py,sha256=PhAwCTHIisO9qOpKHeb63U5oD9Zi8LnIQKTx_OWS4wE,938
6
6
  bluer_objects/objects.py,sha256=EYzA1vKngY2c_gdMKnUfrKVUcf-5wpFKgBFaVJA4cLE,1626
7
7
  bluer_objects/path.py,sha256=9uspZqObI29NerVDF30uILLaouDtloASh0Mywyq2_ew,3946
@@ -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=vRkzfDzze0MYMoUalzY6QzNC2DXlTFfm2nSMfNSB-9k,529
27
+ bluer_objects/.abcli/upload.sh,sha256=IbT786rA6nWuQurhGOFOiJeH_ZqVpnhvrARA1VJl9MU,640
28
28
  bluer_objects/.abcli/metadata/get.sh,sha256=6W9x0akZwwozTyOlKCW_0MndYVUAL4v1HSUPxTAsfKA,835
29
29
  bluer_objects/.abcli/metadata/post.sh,sha256=UdvZNuRu6_NcyRVvDMFZ9GEwOm3K8rsNqM0FFr9LskA,570
30
30
  bluer_objects/.abcli/mlflow/browse.sh,sha256=jPHAKLgG7yDLCdSAW5acVmCOcOltAkZQ8FrttrX401s,1166
@@ -63,7 +63,8 @@ bluer_objects/.abcli/tests/mlflow_lock.sh,sha256=TJwp6HbVUOT1HqRfXPS8_zpKAL7-mBe
63
63
  bluer_objects/.abcli/tests/mlflow_logging.sh,sha256=TVzHhk9qRthpP2xdKwu3LwK00S77GqH50io3oVyS2UE,305
64
64
  bluer_objects/.abcli/tests/mlflow_tags.sh,sha256=pX4sEK_z2Vrb7a6Bq4qWurFVPZkvjpS10K4MLx3mf64,811
65
65
  bluer_objects/.abcli/tests/mlflow_test.sh,sha256=7MXxYq2GgD2MEJbQlpx80qLT2HaaVn_PFFMpSA_hWA4,125
66
- bluer_objects/.abcli/tests/storage.sh,sha256=194FlYzc8Eplsl2Xxi0n0iTh1r_44oIDB0Fbn7tRJxs,1314
66
+ bluer_objects/.abcli/tests/storage_public_upload.sh,sha256=3S7YJQ-mbPcVtG384PRxEGP7xGLJgvvV-CtV4hgz2I8,456
67
+ bluer_objects/.abcli/tests/storage_upload_download.sh,sha256=tXjrHuFtmogC9Pf4Q8aTU1Sx1C653GOcy_jIsecelMY,1346
67
68
  bluer_objects/.abcli/tests/version.sh,sha256=k-lXozSjyFgFR58cTzUYla0Ef-upx3sSK641zI5ynfE,169
68
69
  bluer_objects/README/__init__.py,sha256=JwxdTVAK3LeUaw7rMJujOFIXZA59HaLCtxpsR1C-vpo,1311
69
70
  bluer_objects/README/functions.py,sha256=IriuSysrApSTEgOZHqq32-eyks5v5Tn-KvmwYQUIloc,10752
@@ -91,7 +92,7 @@ bluer_objects/help/gif.py,sha256=gKV6vNT4bEC2Ch3QIb3Yc5DqzAH_UvAVCsuvzXeF1Sc,564
91
92
  bluer_objects/help/host.py,sha256=4t4yrPGjTbnFtODcuBjfIzpA5pmmvc5s4QrjIqPPVsM,988
92
93
  bluer_objects/help/ls.py,sha256=acvRLDxjJOzQ1a9ZQ4Mn9aBZ8Vf17IDHcAxC2O3R33Y,627
93
94
  bluer_objects/help/metadata.py,sha256=fk22NasBcZU1ffY4fu6AxrCzMQtTI28p_ghaSVRrrPM,2811
94
- bluer_objects/help/upload.py,sha256=p-nRw9d_S6PI7PcD0mBwWqQRPWQG4r3usjvOIzAbTeM,368
95
+ bluer_objects/help/upload.py,sha256=tXAdVhy0FZfF5b4cAEgaYlLQ8_cnQ656um8QioKMV_o,456
95
96
  bluer_objects/help/mlflow/__init__.py,sha256=fvnGg8l24oGWKd7lbVm32GHyrE3eBlholj4RFrjFNuw,4427
96
97
  bluer_objects/help/mlflow/cache.py,sha256=O8O1oaiq1e1z2HCi8fRe4hjSNimzvCaCAIu-u2GDHkE,704
97
98
  bluer_objects/help/mlflow/lock.py,sha256=REdB4LmlHu2_6SF1nDA50KBbYtNIKRDbYH7KduUnuEg,848
@@ -118,19 +119,19 @@ bluer_objects/mlflow/testing.py,sha256=cJH5Ki02fJN_Xos1j9yvwQChXvMkOa9i12vtDKmkb
118
119
  bluer_objects/mlflow/lock/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
119
120
  bluer_objects/mlflow/lock/__main__.py,sha256=xF_xq2UqAsEohSOHjxaFXaw9KopOEDg6LRDM5a4VAPQ,1138
120
121
  bluer_objects/mlflow/lock/functions.py,sha256=MOslqblNAOsRvILzLF4q6m2EAwCk4f4zEWQpsy8lVnM,3045
121
- bluer_objects/storage/WebDAV.py,sha256=IvYZDST6Cg1rgRhQ5eh3Hrq8V7S3oon9O29MH55QLxA,2922
122
- bluer_objects/storage/WebDAVrequest.py,sha256=ihWOxP7h28qj0-5AZ0SsERSBrViq9p4iNVeR4pGBWQo,9836
123
- bluer_objects/storage/WebDAVzip.py,sha256=Sd_rU57pJaRa05sKNQiMr85Bg3w7O5k8N1pSN1u8omA,3872
124
- bluer_objects/storage/__init__.py,sha256=XosPRjB20wDS-QMwQtr3zqKC9UM7U8z-PHwySGBegcQ,1646
125
- bluer_objects/storage/__main__.py,sha256=vZI6rUkrekf1eYUgWOOUnFhl4qPfpByzwb-tihTOiIo,1776
126
- bluer_objects/storage/base.py,sha256=72I1zvlpbQbFU20TxqcTodR4m8PYgBPXMfteek8V0_A,1949
127
- bluer_objects/storage/s3.py,sha256=evUFpPk6PUv1KCXTMq_QCbygqNk0YNAOQr_B4gYrjBE,8342
122
+ bluer_objects/storage/WebDAV.py,sha256=TrMroPaCx_ploCol4s3604qdl-4HjOYj906JJ7oRpv8,3074
123
+ bluer_objects/storage/WebDAVrequest.py,sha256=tuMXWWpFcOkwf-W3YTsuJ5vQYJPFDOuEzBVRHjcSsdc,10027
124
+ bluer_objects/storage/WebDAVzip.py,sha256=Tn-g9wjK6qHHIEO4-N_xBEZ4H8Q7dIh1Iv5banQw-c4,4024
125
+ bluer_objects/storage/__init__.py,sha256=Sz9KJzb2p6MbAvHMZEhQIpo2UVOCi1OCSO095uwU3JI,1695
126
+ bluer_objects/storage/__main__.py,sha256=yfWoUlpF_HssujOepf6J60G1Ohm0eccq-OQkhLjnWyY,1895
127
+ bluer_objects/storage/base.py,sha256=E4u8yuRWK_-3i6aa4u2tFZshj74PWPf5AgGGgK0mmTg,2032
128
+ bluer_objects/storage/s3.py,sha256=NOAkScgFIWx5awi9Ve41axFi5TvW_IPzz232Cf9p7wE,8912
128
129
  bluer_objects/testing/__init__.py,sha256=DWY5ZtvCnHG_t9BDiqy_ArLOZi-nlyAtPVMLA1PPAMU,62
129
130
  bluer_objects/testing/__main__.py,sha256=hhJV9qn0V_8FxzNDcoHCHr4A7zf9UudnNGJCAPkTBGU,750
130
131
  bluer_objects/testing/functions.py,sha256=AXAfzWLcEPkbSYTehdahshjKJ45C4IJkRs_TgrHOntc,1355
131
132
  bluer_objects/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
133
  bluer_objects/tests/test_README.py,sha256=5D4UV8VcjbeAPThsYVynYtVFuP8gwMAhIjEWuOQZsWs,89
133
- bluer_objects/tests/test_env.py,sha256=Kh3aVc7UbXkv39-oJPvRxg6nCKFlLQnEnK_wO-UlGEo,1050
134
+ bluer_objects/tests/test_env.py,sha256=vjaNwfsLodw8jpTEKYBsjKwpxcwcNOtsWHqS4iyH4oQ,1090
134
135
  bluer_objects/tests/test_file_download.py,sha256=1_adHYqgSifkdP-I7TQVW0t8MLCujQ61fvRbcrSkcmg,512
135
136
  bluer_objects/tests/test_file_load_save.py,sha256=unqxfiqba6RVhMS95AtHZWsT7Q097jBOKdckAT9PyFU,2390
136
137
  bluer_objects/tests/test_file_load_save_text.py,sha256=3XnBGlv3KZvheHY-RlX1Su6LOBkkn57pkf9_dXR81r8,1017
@@ -156,8 +157,8 @@ bluer_objects/tests/test_storage_webdav_request.py,sha256=h2b8PeIx0-hQ2d6PmQcJZy
156
157
  bluer_objects/tests/test_storage_webdav_zip.py,sha256=C19qxhkcHyTwVFzW35vL85SOcXJPkqXXaWUNll0Uyqc,1017
157
158
  bluer_objects/tests/test_testing.py,sha256=d2NH435yqJBl9wmfMqGGd-f0Y0jsL2QhHUXkty9AwPA,235
158
159
  bluer_objects/tests/test_version.py,sha256=Lyf3PMcA22e17BNRk_2VgPrtao6dWEgVoXo68Uds8SE,75
159
- bluer_objects-6.175.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
160
- bluer_objects-6.175.1.dist-info/METADATA,sha256=vyAEE05U7u6-0heCnWZI9Kz2WiFoKsD17rM-Y3yj05U,3678
161
- bluer_objects-6.175.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
162
- bluer_objects-6.175.1.dist-info/top_level.txt,sha256=RX2TpddbnRkurda3G_pAdyeTztP2IhhRPx949GlEvQo,14
163
- bluer_objects-6.175.1.dist-info/RECORD,,
160
+ bluer_objects-6.181.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
161
+ bluer_objects-6.181.1.dist-info/METADATA,sha256=1Qg1tbF7rFdTgwJ8ezbLyU-EtbWNukcWILBQV5QthQ4,3678
162
+ bluer_objects-6.181.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
163
+ bluer_objects-6.181.1.dist-info/top_level.txt,sha256=RX2TpddbnRkurda3G_pAdyeTztP2IhhRPx949GlEvQo,14
164
+ bluer_objects-6.181.1.dist-info/RECORD,,