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

@@ -21,6 +21,8 @@ alias @host=bluer_objects_host
21
21
 
22
22
  alias @ls=bluer_objects_ls
23
23
 
24
+ alias @lock=bluer_objects_mlflow_lock
25
+
24
26
  alias @metadata=bluer_objects_metadata
25
27
 
26
28
  alias @mlflow=bluer_objects_mlflow
@@ -0,0 +1,11 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_objects_mlflow_lock_lock() {
4
+ local object_name=$(bluer_ai_clarify_object $1 .)
5
+
6
+ bluer_ai_eval dryrun=$do_dryrun \
7
+ python3 -m bluer_objects.mlflow.lock \
8
+ lock \
9
+ --object_name $object_name \
10
+ "${@:2}"
11
+ }
@@ -0,0 +1,12 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_objects_mlflow_lock_unlock() {
4
+ local object_name=$(bluer_ai_clarify_object $1 .)
5
+
6
+ bluer_ai_eval dryrun=$do_dryrun \
7
+ python3 -m bluer_objects.mlflow.lock \
8
+ unlock \
9
+ --object_name $object_name \
10
+ "${@:2}"
11
+
12
+ }
@@ -0,0 +1,15 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function bluer_objects_mlflow_lock() {
4
+ local task=$1
5
+
6
+ local function_name=bluer_objects_mlflow_lock_$task
7
+ if [[ $(type -t $function_name) == "function" ]]; then
8
+ $function_name "${@:2}"
9
+ return
10
+ fi
11
+
12
+ python3 -m bluer_objects.mlflow.lock "$@"
13
+ }
14
+
15
+ bluer_ai_source_caller_suffix_path /lock
@@ -37,6 +37,10 @@ function test_bluer_objects_help() {
37
37
  "@host reboot" \
38
38
  "@host shutdown" \
39
39
  \
40
+ "@lock" \
41
+ "@lock lock" \
42
+ "@lock unlock" \
43
+ \
40
44
  "@metadata" \
41
45
  "@metadata get" \
42
46
  "@metadata post" \
@@ -0,0 +1,30 @@
1
+ #! /usr/bin/env bash
2
+
3
+ function test_bluer_objects_mlflow_lock() {
4
+ local options=$1
5
+
6
+ local object_name="test-object-$(bluer_ai_string_timestamp_short)"
7
+ local lock_name="lock-$(bluer_ai_string_random)"
8
+
9
+ bluer_ai_eval ,$options \
10
+ bluer_objects_mlflow_lock \
11
+ lock \
12
+ $object_name \
13
+ --lock $lock_name \
14
+ --timeout 10
15
+ [[ $? -ne 0 ]] && return 1
16
+
17
+ bluer_ai_eval ,$options \
18
+ bluer_objects_mlflow_lock \
19
+ lock \
20
+ $object_name \
21
+ --lock $lock_name \
22
+ --timeout 10
23
+ [[ $? -eq 0 ]] && return 1
24
+
25
+ bluer_ai_eval ,$options \
26
+ bluer_objects_mlflow_lock \
27
+ unlock \
28
+ $object_name \
29
+ --lock $lock_name
30
+ }
@@ -41,5 +41,7 @@ def build_me() -> bool:
41
41
  "../docs/aliases/metadata.md",
42
42
  "../docs/aliases/mlflow.md",
43
43
  "../docs/aliases/upload.md",
44
+ # modules
45
+ "../mlflow/lock",
44
46
  ]
45
47
  )
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.151.1"
7
+ VERSION = "6.164.1"
8
8
 
9
9
  REPO_NAME = "bluer-objects"
10
10
 
bluer_objects/config.env CHANGED
@@ -1,5 +1,8 @@
1
1
  ABCLI_MLFLOW_EXPERIMENT_PREFIX=experiment/
2
2
 
3
+ MLFLOW_LOCK_WAIT_FOR_CLEARANCE=3
4
+ MLFLOW_LOCK_WAIT_FOR_EXCLUSIVITY=1
5
+
3
6
  S3_STORAGE_BUCKET=kamangir
4
7
 
5
8
  BLUER_OBJECTS_STORAGE_INTERFACE=s3
bluer_objects/env.py CHANGED
@@ -52,6 +52,10 @@ if MLFLOW_DEPLOYMENT == "local":
52
52
  else:
53
53
  MLFLOW_TRACKING_URI = MLFLOW_DEPLOYMENT
54
54
  os.environ["MLFLOW_TRACKING_URI"] = MLFLOW_TRACKING_URI
55
+ MLFLOW_LOG_ARTIFACTS = "arvan" not in MLFLOW_DEPLOYMENT
56
+
57
+ MLFLOW_LOCK_WAIT_FOR_CLEARANCE = get_env("MLFLOW_LOCK_WAIT_FOR_CLEARANCE", 3)
58
+ MLFLOW_LOCK_WAIT_FOR_EXCLUSIVITY = get_env("MLFLOW_LOCK_WAIT_FOR_EXCLUSIVITY", 1)
55
59
 
56
60
  WEBDAV_HOSTNAME = get_env("WEBDAV_HOSTNAME")
57
61
  WEBDAV_LOGIN = get_env("WEBDAV_LOGIN")
@@ -3,6 +3,7 @@ from typing import List
3
3
  from bluer_options.terminal import show_usage, xtra
4
4
 
5
5
  from bluer_objects.help.mlflow.cache import help_functions as help_cache
6
+ from bluer_objects.help.mlflow.lock import help_functions as help_lock
6
7
  from bluer_objects.help.mlflow.tags import help_functions as help_tags
7
8
  from bluer_ai import env
8
9
 
@@ -202,6 +203,7 @@ help_functions = {
202
203
  "get_id": help_get_id,
203
204
  "get_run_id": help_get_run_id,
204
205
  "list_registered_models": help_list_registered_models,
206
+ "lock": help_lock,
205
207
  "log_artifacts": help_log_artifacts,
206
208
  "log_run": help_log_run,
207
209
  "rm": help_rm,
@@ -0,0 +1,52 @@
1
+ from typing import List
2
+
3
+ from bluer_options.terminal import show_usage, xtra
4
+
5
+
6
+ def help_lock(
7
+ tokens: List[str],
8
+ mono: bool,
9
+ ) -> str:
10
+ args = [
11
+ "[--lock <lock-name>]",
12
+ "[--timeout <10>]",
13
+ "[--verbose 0]",
14
+ ]
15
+
16
+ return show_usage(
17
+ [
18
+ "@lock",
19
+ "lock",
20
+ "[.|<object-name>]",
21
+ ]
22
+ + args,
23
+ "lock <object-name>.",
24
+ mono=mono,
25
+ )
26
+
27
+
28
+ def help_unlock(
29
+ tokens: List[str],
30
+ mono: bool,
31
+ ) -> str:
32
+ args = [
33
+ "[--lock <lock-name>]",
34
+ "[--verbose 0]",
35
+ ]
36
+
37
+ return show_usage(
38
+ [
39
+ "@lock",
40
+ "unlock",
41
+ "[.|<object-name>]",
42
+ ]
43
+ + args,
44
+ "unlock <object-name>.",
45
+ mono=mono,
46
+ )
47
+
48
+
49
+ help_functions = {
50
+ "lock": help_lock,
51
+ "unlock": help_unlock,
52
+ }
@@ -6,7 +6,7 @@ import mlflow
6
6
  from blueness import module
7
7
  from bluer_options.logger import crash_report
8
8
 
9
- from bluer_objects import file, objects, NAME
9
+ from bluer_objects import file, objects, NAME, env
10
10
  from bluer_objects.mlflow.runs import start_run, end_run
11
11
  from bluer_objects.logger import logger
12
12
 
@@ -22,25 +22,28 @@ def log_artifacts(
22
22
 
23
23
  object_path = objects.object_path(object_name, create=True)
24
24
 
25
- try:
26
- mlflow.log_artifacts(object_path)
25
+ if env.MLFLOW_LOG_ARTIFACTS:
26
+ try:
27
+ mlflow.log_artifacts(object_path)
27
28
 
28
- logger.info("⬆️ {}".format(object_name))
29
+ logger.info("⬆️ {}".format(object_name))
29
30
 
30
- # https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.register_model
31
- # https://stackoverflow.com/a/71447758/17619982
32
- if model_name:
33
- mv = mlflow.register_model(
34
- "runs:/{}".format(mlflow.active_run().info.run_id),
35
- model_name,
36
- await_registration_for=0,
37
- )
31
+ # https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.register_model
32
+ # https://stackoverflow.com/a/71447758/17619982
33
+ if model_name:
34
+ mv = mlflow.register_model(
35
+ "runs:/{}".format(mlflow.active_run().info.run_id),
36
+ model_name,
37
+ await_registration_for=0,
38
+ )
38
39
 
39
- logger.info("*️⃣ {} -> {}.{}".format(object_name, mv.name, mv.version))
40
+ logger.info("*️⃣ {} -> {}.{}".format(object_name, mv.name, mv.version))
40
41
 
41
- except:
42
- crash_report(f"{NAME}.log_artifacts({object_name})")
43
- return False
42
+ except:
43
+ crash_report(f"{NAME}.log_artifacts({object_name})")
44
+ return False
45
+ else:
46
+ logger.info("skipped log artifacts.")
44
47
 
45
48
  return end_run(object_name)
46
49
 
@@ -51,31 +54,34 @@ def log_run(object_name: str) -> bool:
51
54
 
52
55
  object_path = objects.object_path(object_name, create=True)
53
56
 
54
- counts: Dict[str, int] = {}
55
- skipped_count = 0
56
- for extension in "dot,gif,jpeg,jpg,json,png,sh,xml,yaml".split(","):
57
- for filename in glob.glob(
58
- os.path.join(object_path, f"*.{extension}"),
59
- ):
60
- filename_name = file.name(filename)
61
-
62
- counts[len(filename_name)] = counts.get(len(filename_name), 0) + 1
63
-
64
- if any(
65
- [
66
- file.size(filename) > 10 * 1024 * 1024,
67
- filename_name.startswith("thumbnail"),
68
- counts[len(filename_name)] > 20,
69
- ]
57
+ if env.MLFLOW_LOG_ARTIFACTS:
58
+ counts: Dict[str, int] = {}
59
+ skipped_count = 0
60
+ for extension in "dot,gif,jpeg,jpg,json,png,sh,xml,yaml".split(","):
61
+ for filename in glob.glob(
62
+ os.path.join(object_path, f"*.{extension}"),
70
63
  ):
71
- logger.info(f"skipping {filename}")
72
- skipped_count += 1
73
- continue
74
-
75
- mlflow.log_artifact(filename)
76
- logger.info(f"⬆️ {filename}")
77
-
78
- if skipped_count:
79
- logger.info(f"skipped {skipped_count:,} file(s).")
64
+ filename_name = file.name(filename)
65
+
66
+ counts[len(filename_name)] = counts.get(len(filename_name), 0) + 1
67
+
68
+ if any(
69
+ [
70
+ file.size(filename) > 10 * 1024 * 1024,
71
+ filename_name.startswith("thumbnail"),
72
+ counts[len(filename_name)] > 20,
73
+ ]
74
+ ):
75
+ logger.info(f"skipping {filename}")
76
+ skipped_count += 1
77
+ continue
78
+
79
+ mlflow.log_artifact(filename)
80
+ logger.info(f"⬆️ {filename}")
81
+
82
+ if skipped_count:
83
+ logger.info(f"skipped {skipped_count:,} file(s).")
84
+ else:
85
+ logger.info("skipped log artifacts.")
80
86
 
81
87
  return end_run(object_name)
@@ -31,6 +31,12 @@ def test_bluer_objects_env():
31
31
 
32
32
  assert env.MLFLOW_DEPLOYMENT
33
33
 
34
+ assert isinstance(env.MLFLOW_LOCK_WAIT_FOR_CLEARANCE, int)
35
+ assert env.MLFLOW_LOCK_WAIT_FOR_CLEARANCE > 0
36
+
37
+ assert isinstance(env.MLFLOW_LOCK_WAIT_FOR_EXCLUSIVITY, int)
38
+ assert env.MLFLOW_LOCK_WAIT_FOR_EXCLUSIVITY > 0
39
+
34
40
  assert env.WEBDAV_HOSTNAME
35
41
  assert env.WEBDAV_LOGIN
36
42
  assert env.WEBDAV_PASSWORD
@@ -0,0 +1,26 @@
1
+ from bluer_options import string
2
+
3
+ from bluer_objects import objects
4
+ from bluer_objects.mlflow.lock.functions import lock, unlock
5
+
6
+
7
+ def test_mlflow_lock():
8
+ object_name = objects.unique_object("test_mlflow_lock")
9
+ lock_name = "lock-{}".format(string.random())
10
+
11
+ assert lock(
12
+ object_name=object_name,
13
+ lock_name=lock_name,
14
+ timeout=10,
15
+ )
16
+
17
+ assert not lock(
18
+ object_name=object_name,
19
+ lock_name=lock_name,
20
+ timeout=10,
21
+ )
22
+
23
+ assert unlock(
24
+ object_name=object_name,
25
+ lock_name=lock_name,
26
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.151.1
3
+ Version: 6.164.1
4
4
  Summary: 🌀 Object management in Bash.
5
5
  Home-page: https://github.com/kamangir/bluer-objects
6
6
  Author: Arash Abadpour (Kamangir)
@@ -36,7 +36,7 @@ Dynamic: summary
36
36
 
37
37
  🌀 `bluer-objects` are the inputs and outputs of [AI algo](https://github.com/kamangir/giza). They are maintained in cloud storage (supports [WebDav](https://pypi.org/project/webdavclient3/)) and their metadata is tracked by [MLflow](https://mlflow.org/). Examples are the Sentinel-2 [datacube](https://github.com/kamangir/blue-geo/tree/main/blue_geo/datacube) `datacube-EarthSearch-sentinel_2_l1c-S2A_10UDC_20240731_0_L1C` and 🌐 [`@geo watch` outputs](https://github.com/kamangir/blue-geo/tree/main/blue_geo/watch).
38
38
 
39
- Also home to 🌀 [bluer README](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/README/).
39
+ Also home to 🌀 [bluer README](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/README/), and the 🔒 [`Lock`](https://github.com/kamangir/bluer-objects/blob/main/bluer_objects/mlflow/lock/).
40
40
 
41
41
  # installation
42
42
 
@@ -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.151.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.164.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=yoClSDMlQOMm5nP6xRwEtBNNt79hxPuXvoiTGH_ApSY,315
1
+ bluer_objects/__init__.py,sha256=MapXenwFvLfJK_3xBUL7zkS9Xk66E8WWYkOJOBq2AKc,315
2
2
  bluer_objects/__main__.py,sha256=Yqfov833_hJuRne19WrGhT5DWAPtdffpoMxeSXS7EGw,359
3
- bluer_objects/config.env,sha256=95lXp0kUrsGoUetHgxJpQ4QD16TdFyf-u1AiKBhtrlQ,106
4
- bluer_objects/env.py,sha256=3NuRp7M6lk6q-WoUawvG1PrxtUMg7IVwMkOt_vTlm6w,1739
3
+ bluer_objects/config.env,sha256=cpmtTuKHIBvVjX30MpAImFgwM0g24qTHwoO-lCJRInA,175
4
+ bluer_objects/env.py,sha256=aImjtNh8NKaua2rpQVFXWp86QF7nY87fDuMOO14O58E,1956
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
@@ -10,7 +10,7 @@ bluer_objects/urls.py,sha256=paHaYlLMQOI46-EYNch5ohu9Q09BMkF2vvJy1QufrVI,19
10
10
  bluer_objects/.abcli/abcli.sh,sha256=zcqSfpuonb7u9YZCO6jbYeU63pTi0WD5q7lBMSUBXqw,352
11
11
  bluer_objects/.abcli/actions.sh,sha256=HZI-X5KUy6bXEHmxywfBN1zbHalU0mcTblTQ2HvIfOE,236
12
12
  bluer_objects/.abcli/aka.sh,sha256=odRbw4KZb9Ld7uXny6H2pPi64_5kowKX3s68N6YvRmI,23
13
- bluer_objects/.abcli/alias.sh,sha256=g0avaLQ6SNbCNuP54-VZW2GTlMTcn0eQp_MBlCsu_W0,719
13
+ bluer_objects/.abcli/alias.sh,sha256=wrYmXLozAQKQ3XWoI5id9MFWgU8NvI3wnU8cFs2G3DE,758
14
14
  bluer_objects/.abcli/bluer_objects.sh,sha256=x7qf8hSAp3dAl0Hes4J07vL6qP-mWFUkJhvUXzTJC_8,210
15
15
  bluer_objects/.abcli/clone.sh,sha256=KqC5d4MAXwo7UZGhKnfCq9k9CCSl3I1dpU1igYs0Yrs,1975
16
16
  bluer_objects/.abcli/create_test_asset.sh,sha256=ONIdad_WRjZWdW6V2RalRW2qSJwybEwzU-_KsvaJ9og,245
@@ -31,12 +31,15 @@ bluer_objects/.abcli/mlflow/browse.sh,sha256=jPHAKLgG7yDLCdSAW5acVmCOcOltAkZQ8Fr
31
31
  bluer_objects/.abcli/mlflow/cache.sh,sha256=tpdCqL3jMFpfRmYS6UTgLiycv43_z_N_J1ux2XsDgdA,556
32
32
  bluer_objects/.abcli/mlflow/deploy.sh,sha256=oTdFUDOAtDhREstbQCOZkgwJgdua9Tp8w9aYSV-C4yc,772
33
33
  bluer_objects/.abcli/mlflow/list_registered_models.sh,sha256=cZGtAzfLx-kW3-zi0mLrfhzk4B8KyUL2sq2tD7lK5q8,191
34
+ bluer_objects/.abcli/mlflow/lock.sh,sha256=MXq8srb4qAq5gZb0QC4Nkf6x7mME9L0cf46nGkTkbYY,340
34
35
  bluer_objects/.abcli/mlflow/log_artifacts.sh,sha256=3sCdDHoRVFqCg_DPF8zw3HSAj8Grr-Mbwmf0iUlDmrk,243
35
36
  bluer_objects/.abcli/mlflow/log_run.sh,sha256=-oDsAxVnw3wot-Jk4mju_6fgW_6K2VnhlWtAtom-tlc,231
36
37
  bluer_objects/.abcli/mlflow/run.sh,sha256=4eywpZJ1Qc8sGObzRiS6iyeySOxTHsq2ygvSDFMHX3U,260
37
38
  bluer_objects/.abcli/mlflow/tags.sh,sha256=IdynOEpoID-s2Lq2Ht8Hyo3IC48qQl_LXZ32LbxEYDA,373
38
39
  bluer_objects/.abcli/mlflow/test.sh,sha256=LvnsMQnEzecb-jeNQ9YXFA-ijOTIqcDgThayh55ZcAQ,256
39
40
  bluer_objects/.abcli/mlflow/transition.sh,sha256=6-FxiK6AV92kdHEYvWTLqp6_HyMqyw6A8ZwS4pLsLcQ,615
41
+ bluer_objects/.abcli/mlflow/lock/lock.sh,sha256=FQaLlwG5P5bw80tCloj6nH-fF0JA8jyAPC94RrSwB10,277
42
+ bluer_objects/.abcli/mlflow/lock/unlock.sh,sha256=KS0RRlBhPah93F66ny5AbJ0OxKa1eMAJPHNqWlmmb5s,282
40
43
  bluer_objects/.abcli/mlflow/tags/clone.sh,sha256=HY2tigFx9fG4BVDjcoQAUCKil01yESv1f4H9Y5_thm4,440
41
44
  bluer_objects/.abcli/mlflow/tags/get.sh,sha256=hsI_zzwJkRmnxvAKlCPdkGlEbn5Ol3eVp8sOi_iA2o8,233
42
45
  bluer_objects/.abcli/mlflow/tags/search.sh,sha256=kJBLkd7_ACeMUXdRk-zXkBfOoiyDWwO8sUit2NkIhNY,299
@@ -51,17 +54,18 @@ bluer_objects/.abcli/tests/README.sh,sha256=gk2KuNLFTuV3qdVgH8BNfJmur3gZoSV8EwLb
51
54
  bluer_objects/.abcli/tests/clone.sh,sha256=Rl9pHvmRJ4H-y-iMA80q11UdSZFrguNaMTez0LTtJjA,473
52
55
  bluer_objects/.abcli/tests/create_test_asset.sh,sha256=onRGc3VjDWA7On3isxKD3J7mxA6n349AVXRj90Z3Jzc,386
53
56
  bluer_objects/.abcli/tests/gif.sh,sha256=2FvcomiyYTzJa527a7Wk2EJt5N9_vZt8tmQD1QVetDg,461
54
- bluer_objects/.abcli/tests/help.sh,sha256=FHY1Ma38XGnHS-1IhYdxtjvtbPyZx1RIpAvIdzUFLhg,1783
57
+ bluer_objects/.abcli/tests/help.sh,sha256=g3sBEvdkvUWPuxPF_yFdkxiuCAssJ1_8lc7dvOC_q5E,1859
55
58
  bluer_objects/.abcli/tests/host.sh,sha256=GBuTLNw1sU3fAb5jS-ew_qAfovVCQ5CLaz5ad04IkoA,144
56
59
  bluer_objects/.abcli/tests/ls.sh,sha256=oOvcnEQZgnNlwCK4SvkdAjCBs2_z0qBOhgFLsXDBSXM,555
57
60
  bluer_objects/.abcli/tests/metadata.sh,sha256=OP1c0h0TSlDycrv0UglKLyBtTQwqh9M0nqVAdQUzkno,1723
58
61
  bluer_objects/.abcli/tests/mlflow_cache.sh,sha256=EEAPGasQgN4j6YLp30_IMYAPCTUBxmTgoMzMSpseVbw,388
62
+ bluer_objects/.abcli/tests/mlflow_lock.sh,sha256=TJwp6HbVUOT1HqRfXPS8_zpKAL7-mBee_yyOhmKNzt4,717
59
63
  bluer_objects/.abcli/tests/mlflow_logging.sh,sha256=TVzHhk9qRthpP2xdKwu3LwK00S77GqH50io3oVyS2UE,305
60
64
  bluer_objects/.abcli/tests/mlflow_tags.sh,sha256=pX4sEK_z2Vrb7a6Bq4qWurFVPZkvjpS10K4MLx3mf64,811
61
65
  bluer_objects/.abcli/tests/mlflow_test.sh,sha256=7MXxYq2GgD2MEJbQlpx80qLT2HaaVn_PFFMpSA_hWA4,125
62
66
  bluer_objects/.abcli/tests/storage.sh,sha256=194FlYzc8Eplsl2Xxi0n0iTh1r_44oIDB0Fbn7tRJxs,1314
63
67
  bluer_objects/.abcli/tests/version.sh,sha256=k-lXozSjyFgFR58cTzUYla0Ef-upx3sSK641zI5ynfE,169
64
- bluer_objects/README/__init__.py,sha256=5ghygLdrsjqP2Tui5O3Ax9DR8nEHHh1HydKV05dhRhc,1259
68
+ bluer_objects/README/__init__.py,sha256=JwxdTVAK3LeUaw7rMJujOFIXZA59HaLCtxpsR1C-vpo,1311
65
69
  bluer_objects/README/functions.py,sha256=IriuSysrApSTEgOZHqq32-eyks5v5Tn-KvmwYQUIloc,10752
66
70
  bluer_objects/README/items.py,sha256=-XaNCr5b_NGRkZVfIQ6hBFgJw5GIVcMJdktT3hWoam4,755
67
71
  bluer_objects/file/__init__.py,sha256=c_79ipBkKl6OFDimOev0vnaVdpUk-Bl3oJUapOreMXc,681
@@ -88,8 +92,9 @@ bluer_objects/help/host.py,sha256=4t4yrPGjTbnFtODcuBjfIzpA5pmmvc5s4QrjIqPPVsM,98
88
92
  bluer_objects/help/ls.py,sha256=acvRLDxjJOzQ1a9ZQ4Mn9aBZ8Vf17IDHcAxC2O3R33Y,627
89
93
  bluer_objects/help/metadata.py,sha256=fk22NasBcZU1ffY4fu6AxrCzMQtTI28p_ghaSVRrrPM,2811
90
94
  bluer_objects/help/upload.py,sha256=p-nRw9d_S6PI7PcD0mBwWqQRPWQG4r3usjvOIzAbTeM,368
91
- bluer_objects/help/mlflow/__init__.py,sha256=oimroGIHpMzvP3iTT99mUk3MA2BfaSWA2B8hSq3uCUA,4019
95
+ bluer_objects/help/mlflow/__init__.py,sha256=xox0NM53OIRxpvWzDJh8DYspwIX_teNsQlEeGZdWgWk,4113
92
96
  bluer_objects/help/mlflow/cache.py,sha256=O8O1oaiq1e1z2HCi8fRe4hjSNimzvCaCAIu-u2GDHkE,704
97
+ bluer_objects/help/mlflow/lock.py,sha256=REdB4LmlHu2_6SF1nDA50KBbYtNIKRDbYH7KduUnuEg,848
93
98
  bluer_objects/help/mlflow/tags.py,sha256=C3FcMRe-JhelhCQkAyZ5jlxGtgYxhNjtIhxka8k_ytI,2137
94
99
  bluer_objects/host/__init__.py,sha256=Ko43SWnZNsGKuIPU_l0w17pYrxCgVHQx3_zEoUNaHZY,272
95
100
  bluer_objects/host/__main__.py,sha256=J0MO2sUzrI_t_X4VVYyM6n41ND0yhhSXOmZSkDAC4rg,1751
@@ -104,7 +109,7 @@ bluer_objects/metadata/post.py,sha256=1r0yLmIuEPrKJ_-RfALC5ajpLzmUqEjLYoIQMuI4Jj
104
109
  bluer_objects/mlflow/__init__.py,sha256=GVPXTclqYAyu-iJoLeHSgTaMeoMpVaczFgU4PavS3QA,523
105
110
  bluer_objects/mlflow/__main__.py,sha256=uPRUT0x__m1jJ-TTRHmzSdv3AEFM2oKGqOJOG6wdSMk,5819
106
111
  bluer_objects/mlflow/cache.py,sha256=RQu9hLI6oRhCvj0N1VLcynSutjsxU4wQDo7N3m3i3ho,310
107
- bluer_objects/mlflow/logging.py,sha256=XiXNCdpVTAIUqY3GovcghG_t_umr2eRELdbzvNbbf2E,2281
112
+ bluer_objects/mlflow/logging.py,sha256=tyECJl56SY7IsLAuMUsmXoAuyGFLcwKqrbrj5y_IvYE,2612
108
113
  bluer_objects/mlflow/models.py,sha256=6xU64Irq9LWyWFwzDJoqMN8KGziSv9VbOGv1tALzf9M,1280
109
114
  bluer_objects/mlflow/objects.py,sha256=aXYHLRCTt1FtDQoyPOG-doCFms7qF6Krz00Fg3kzJSM,1844
110
115
  bluer_objects/mlflow/runs.py,sha256=v1IKRvxbuKkengESnG-xdUXxxNSkALMeBmfMQwrUKSs,2416
@@ -122,7 +127,7 @@ bluer_objects/testing/__main__.py,sha256=hhJV9qn0V_8FxzNDcoHCHr4A7zf9UudnNGJCAPk
122
127
  bluer_objects/testing/functions.py,sha256=AXAfzWLcEPkbSYTehdahshjKJ45C4IJkRs_TgrHOntc,1355
123
128
  bluer_objects/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
129
  bluer_objects/tests/test_README.py,sha256=5D4UV8VcjbeAPThsYVynYtVFuP8gwMAhIjEWuOQZsWs,89
125
- bluer_objects/tests/test_env.py,sha256=Oe-Y-WC0tLVAW7n4QwMqx9pZN7a9nOyu1RPDomUdDos,818
130
+ bluer_objects/tests/test_env.py,sha256=Kh3aVc7UbXkv39-oJPvRxg6nCKFlLQnEnK_wO-UlGEo,1050
126
131
  bluer_objects/tests/test_file_download.py,sha256=1_adHYqgSifkdP-I7TQVW0t8MLCujQ61fvRbcrSkcmg,512
127
132
  bluer_objects/tests/test_file_load_save.py,sha256=unqxfiqba6RVhMS95AtHZWsT7Q097jBOKdckAT9PyFU,2390
128
133
  bluer_objects/tests/test_file_load_save_text.py,sha256=3XnBGlv3KZvheHY-RlX1Su6LOBkkn57pkf9_dXR81r8,1017
@@ -138,6 +143,7 @@ bluer_objects/tests/test_logger_matrix.py,sha256=qedidEDGusMWQM04kgk3mt74yFm4iU3
138
143
  bluer_objects/tests/test_markdown.py,sha256=KtCWKIDs4U1M3qAGFMYhzVpdGiDV2VU8z7dCaU3s3Ec,217
139
144
  bluer_objects/tests/test_metadata.py,sha256=Qy-Zp5yFrHmZ5tjujuLNcvI2YEyzNuAFXgy0L7sJOJ0,4389
140
145
  bluer_objects/tests/test_mlflow.py,sha256=Ee6T7r2qT1fvUv2ommC3Wl5Gwz1olURvMvhoaM0779M,1419
146
+ bluer_objects/tests/test_mlflow_lock.py,sha256=rDNfyWHZu3U88yIIFrPeQPsTneU0GR8n9gSgqpj0q9k,569
141
147
  bluer_objects/tests/test_objects.py,sha256=pqdXvnAJ5WPlHvqqaKrd9-vqktrE9GOVxSgqHs8yK8w,1441
142
148
  bluer_objects/tests/test_path.py,sha256=JjONWyhZyMM_u1SzD1RI_iZ5vYJDUe-B51fbbHczIig,85
143
149
  bluer_objects/tests/test_storage.py,sha256=3kFq4lVuvHIpHYob6YprqNdiPaZKgSdMJSsCZ-nvXdI,822
@@ -147,8 +153,8 @@ bluer_objects/tests/test_storage_webdav_request.py,sha256=h2b8PeIx0-hQ2d6PmQcJZy
147
153
  bluer_objects/tests/test_storage_webdav_zip.py,sha256=C19qxhkcHyTwVFzW35vL85SOcXJPkqXXaWUNll0Uyqc,1017
148
154
  bluer_objects/tests/test_testing.py,sha256=d2NH435yqJBl9wmfMqGGd-f0Y0jsL2QhHUXkty9AwPA,235
149
155
  bluer_objects/tests/test_version.py,sha256=Lyf3PMcA22e17BNRk_2VgPrtao6dWEgVoXo68Uds8SE,75
150
- bluer_objects-6.151.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
151
- bluer_objects-6.151.1.dist-info/METADATA,sha256=w6l5w4Ur7HWWI33B_lo3WuFNchy7YfGw423hj6P8QBE,3575
152
- bluer_objects-6.151.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
153
- bluer_objects-6.151.1.dist-info/top_level.txt,sha256=RX2TpddbnRkurda3G_pAdyeTztP2IhhRPx949GlEvQo,14
154
- bluer_objects-6.151.1.dist-info/RECORD,,
156
+ bluer_objects-6.164.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
157
+ bluer_objects-6.164.1.dist-info/METADATA,sha256=bXZyizINJFJrFLPKqNJTkcATAQZCVUmEhBvPAfAWISE,3678
158
+ bluer_objects-6.164.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
159
+ bluer_objects-6.164.1.dist-info/top_level.txt,sha256=RX2TpddbnRkurda3G_pAdyeTztP2IhhRPx949GlEvQo,14
160
+ bluer_objects-6.164.1.dist-info/RECORD,,