lamin_cli 0.16.1__tar.gz → 0.16.3__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.
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/PKG-INFO +1 -1
- lamin_cli-0.16.3/lamin_cli/__init__.py +3 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/lamin_cli/__main__.py +14 -14
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/lamin_cli/_cache.py +1 -1
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/lamin_cli/_save.py +30 -19
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/notebooks/with-title-and-initialized-consecutive.ipynb +2 -3
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/notebooks/with-title-and-initialized-non-consecutive.ipynb +1 -1
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/scripts/run-track-and-finish-sync-git.py +3 -4
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/scripts/run-track-and-finish.py +3 -4
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/test_cli.py +0 -6
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/test_save_notebooks.py +17 -16
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/test_save_scripts.py +22 -22
- lamin_cli-0.16.1/lamin_cli/__init__.py +0 -3
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/.github/workflows/doc-changes.yml +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/.gitignore +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/.pre-commit-config.yaml +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/README.md +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/lamin_cli/_get.py +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/lamin_cli/_migration.py +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/pyproject.toml +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/conftest.py +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/notebooks/not-initialized.ipynb +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/scripts/merely-import-lamindb.py +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/test_get.py +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/test_migrate.py +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/test_multi_process.py +0 -0
- {lamin_cli-0.16.1 → lamin_cli-0.16.3}/tests/test_save_files.py +0 -0
|
@@ -52,7 +52,7 @@ else:
|
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
54
|
"name": "Configuration commands",
|
|
55
|
-
"commands": ["
|
|
55
|
+
"commands": ["cache", "set"],
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
"name": "Schema commands",
|
|
@@ -72,6 +72,7 @@ else:
|
|
|
72
72
|
@wraps(f)
|
|
73
73
|
def wrapper(*args, **kwargs):
|
|
74
74
|
return f(*args, **kwargs)
|
|
75
|
+
|
|
75
76
|
return wrapper
|
|
76
77
|
|
|
77
78
|
|
|
@@ -97,15 +98,22 @@ def main():
|
|
|
97
98
|
@main.command()
|
|
98
99
|
@click.argument("user", type=str)
|
|
99
100
|
@click.option("--key", type=str, default=None, help="API key")
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
def login(user: str, key: Optional[str]):
|
|
102
|
+
"""Log into LaminHub.
|
|
103
|
+
|
|
104
|
+
Upon logging in the first time, you need to pass your API key via
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
lamin login myemail@acme.com --key YOUR_API_KEY
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
You'll find your API key in the top right corner under "Settings".
|
|
103
111
|
|
|
104
|
-
|
|
112
|
+
After this, you can either use `lamin login myhandle` or `lamin login myemail@acme.com`
|
|
105
113
|
"""
|
|
106
114
|
from lamindb_setup._setup_user import login
|
|
107
115
|
|
|
108
|
-
return login(user, key=key
|
|
116
|
+
return login(user, key=key)
|
|
109
117
|
|
|
110
118
|
|
|
111
119
|
# fmt: off
|
|
@@ -202,14 +210,6 @@ def save(filepath: str, key: str, description: str):
|
|
|
202
210
|
sys.exit(1)
|
|
203
211
|
|
|
204
212
|
|
|
205
|
-
@main.command()
|
|
206
|
-
def register():
|
|
207
|
-
"""Register an instance on the hub."""
|
|
208
|
-
from lamindb_setup._register_instance import register as register_
|
|
209
|
-
|
|
210
|
-
return register_()
|
|
211
|
-
|
|
212
|
-
|
|
213
213
|
main.add_command(cache)
|
|
214
214
|
|
|
215
215
|
|
|
@@ -6,17 +6,21 @@ from lamin_utils import logger
|
|
|
6
6
|
import re
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
def get_stem_uid_and_version_from_file(
|
|
9
|
+
def get_stem_uid_and_version_from_file(
|
|
10
|
+
file_path: Path,
|
|
11
|
+
) -> tuple[str | None, str | None, str | None]:
|
|
10
12
|
# line-by-line matching might be faster, but let's go with this for now
|
|
11
13
|
with open(file_path) as file:
|
|
12
14
|
content = file.read()
|
|
13
15
|
|
|
14
16
|
if file_path.suffix == ".py":
|
|
17
|
+
uid_pattern = re.compile(r'\.context\.uid\s*=\s*["\']([^"\']+)["\']')
|
|
15
18
|
stem_uid_pattern = re.compile(
|
|
16
19
|
r'\.transform\.stem_uid\s*=\s*["\']([^"\']+)["\']'
|
|
17
20
|
)
|
|
18
21
|
version_pattern = re.compile(r'\.transform\.version\s*=\s*["\']([^"\']+)["\']')
|
|
19
22
|
elif file_path.suffix == ".ipynb":
|
|
23
|
+
uid_pattern = re.compile(r'\.context\.uid\s*=\s*\\["\']([^"\']+)\\["\']')
|
|
20
24
|
stem_uid_pattern = re.compile(
|
|
21
25
|
r'\.transform\.stem_uid\s*=\s*\\["\']([^"\']+)\\["\']'
|
|
22
26
|
)
|
|
@@ -27,20 +31,22 @@ def get_stem_uid_and_version_from_file(file_path: Path) -> tuple[str, str]:
|
|
|
27
31
|
raise ValueError("Only .py and .ipynb files are supported.")
|
|
28
32
|
|
|
29
33
|
# Search for matches in the entire file content
|
|
34
|
+
uid_match = uid_pattern.search(content)
|
|
30
35
|
stem_uid_match = stem_uid_pattern.search(content)
|
|
31
36
|
version_match = version_pattern.search(content)
|
|
32
37
|
|
|
33
38
|
# Extract values if matches are found
|
|
39
|
+
uid = uid_match.group(1) if uid_match else None
|
|
34
40
|
stem_uid = stem_uid_match.group(1) if stem_uid_match else None
|
|
35
41
|
version = version_match.group(1) if version_match else None
|
|
36
42
|
|
|
37
|
-
if stem_uid is None or version is None:
|
|
43
|
+
if uid is None and (stem_uid is None or version is None):
|
|
38
44
|
raise SystemExit(
|
|
39
|
-
"ln.
|
|
40
|
-
f" set in {file_path}\nCall ln.track() and copy/paste the output
|
|
41
|
-
" notebook"
|
|
45
|
+
"ln.context.uid isn't"
|
|
46
|
+
f" set in {file_path}\nCall ln.context.track() and copy/paste the output"
|
|
47
|
+
" into the notebook"
|
|
42
48
|
)
|
|
43
|
-
return stem_uid, version
|
|
49
|
+
return uid, stem_uid, version
|
|
44
50
|
|
|
45
51
|
|
|
46
52
|
def save_from_filepath_cli(
|
|
@@ -55,7 +61,7 @@ def save_from_filepath_cli(
|
|
|
55
61
|
ln_setup.settings.auto_connect = True
|
|
56
62
|
|
|
57
63
|
import lamindb as ln
|
|
58
|
-
from lamindb._finish import
|
|
64
|
+
from lamindb._finish import save_context_core
|
|
59
65
|
|
|
60
66
|
ln_setup.settings.auto_connect = auto_connect_state
|
|
61
67
|
|
|
@@ -75,17 +81,22 @@ def save_from_filepath_cli(
|
|
|
75
81
|
return None
|
|
76
82
|
else:
|
|
77
83
|
# consider notebooks & scripts a transform
|
|
78
|
-
stem_uid, transform_version = get_stem_uid_and_version_from_file(filepath)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
84
|
+
uid, stem_uid, transform_version = get_stem_uid_and_version_from_file(filepath)
|
|
85
|
+
if uid is not None:
|
|
86
|
+
transform = ln.Transform.filter(uid=uid).one_or_none()
|
|
87
|
+
if transform is None:
|
|
88
|
+
logger.error(
|
|
89
|
+
f"Did not find uid '{uid}'"
|
|
90
|
+
" in Transform registry. Did you run ln.context.track()?"
|
|
91
|
+
)
|
|
92
|
+
return "not-tracked-in-transform-registry"
|
|
93
|
+
# refactor this, save_context_core should not depend on transform_family
|
|
94
|
+
transform_family = transform.versions
|
|
95
|
+
else:
|
|
96
|
+
# the corresponding transform family in the transform table
|
|
97
|
+
transform_family = ln.Transform.filter(uid__startswith=stem_uid).all()
|
|
98
|
+
# the specific version
|
|
99
|
+
transform = transform_family.get(version=transform_version)
|
|
89
100
|
# latest run of this transform by user
|
|
90
101
|
run = ln.Run.filter(transform=transform).order_by("-started_at").first()
|
|
91
102
|
if run.created_by.id != ln_setup.settings.user.id:
|
|
@@ -95,7 +106,7 @@ def save_from_filepath_cli(
|
|
|
95
106
|
)
|
|
96
107
|
if response != "y":
|
|
97
108
|
return "aborted-save-notebook-created-by-different-user"
|
|
98
|
-
return
|
|
109
|
+
return save_context_core(
|
|
99
110
|
run=run,
|
|
100
111
|
transform=transform,
|
|
101
112
|
filepath=filepath,
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import lamindb as ln
|
|
2
2
|
|
|
3
3
|
ln.settings.sync_git_repo = "https://github.com/laminlabs/lamin-cli"
|
|
4
|
-
ln.
|
|
5
|
-
ln.
|
|
6
|
-
ln.settings.transform.name = "My good script"
|
|
4
|
+
ln.context.uid = "m5uCHTTpJnjQ0000"
|
|
5
|
+
ln.context.name = "My good script"
|
|
7
6
|
|
|
8
7
|
|
|
9
8
|
if __name__ == "__main__":
|
|
10
9
|
# we're using new_run here to mock the notebook situation
|
|
11
10
|
# and cover the look up of an existing run in the tests
|
|
12
11
|
# new_run = True is trivial
|
|
13
|
-
ln.track(new_run=False)
|
|
12
|
+
ln.context.track(new_run=False)
|
|
14
13
|
|
|
15
14
|
print("hello!")
|
|
16
15
|
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import lamindb as ln
|
|
2
2
|
|
|
3
|
-
ln.
|
|
4
|
-
ln.
|
|
5
|
-
ln.settings.transform.name = "My good script 2"
|
|
3
|
+
ln.context.uid = "VFYCIuaw2GsX0000"
|
|
4
|
+
ln.context.name = "My good script 2"
|
|
6
5
|
|
|
7
6
|
if __name__ == "__main__":
|
|
8
7
|
# we're using new_run here to mock the notebook situation
|
|
9
8
|
# and cover the look up of an existing run in the tests
|
|
10
9
|
# new_run = True is trivial
|
|
11
|
-
ln.track(new_run=False)
|
|
10
|
+
ln.context.track(new_run=False)
|
|
12
11
|
|
|
13
12
|
print("hello!")
|
|
14
13
|
|
|
@@ -14,9 +14,3 @@ def test_login():
|
|
|
14
14
|
"lamin login testuser1 --key cEvcwMJFX4OwbsYVaMt2Os6GxxGgDUlBGILs2RyS"
|
|
15
15
|
)
|
|
16
16
|
assert exit_status == 0
|
|
17
|
-
|
|
18
|
-
# backward compat
|
|
19
|
-
exit_status = os.system(
|
|
20
|
-
"lamin login testuser1 --password cEvcwMJFX4OwbsYVaMt2Os6GxxGgDUlBGILs2RyS"
|
|
21
|
-
)
|
|
22
|
-
assert exit_status == 0
|
|
@@ -21,7 +21,7 @@ def test_save_not_initialized():
|
|
|
21
21
|
)
|
|
22
22
|
assert result.returncode == 1
|
|
23
23
|
assert (
|
|
24
|
-
"Call ln.track() and copy/paste the output into the notebook"
|
|
24
|
+
"Call ln.context.track() and copy/paste the output into the notebook"
|
|
25
25
|
in result.stderr.decode()
|
|
26
26
|
)
|
|
27
27
|
|
|
@@ -62,10 +62,10 @@ def test_save_consecutive():
|
|
|
62
62
|
env = os.environ
|
|
63
63
|
env["LAMIN_TESTING"] = "true"
|
|
64
64
|
|
|
65
|
-
transform = ln.Transform.filter(uid="
|
|
65
|
+
transform = ln.Transform.filter(uid="hlsFXswrJjtt0000").one_or_none()
|
|
66
66
|
assert transform is None
|
|
67
67
|
|
|
68
|
-
# let's try to save a notebook for which `ln.track()` was never run
|
|
68
|
+
# let's try to save a notebook for which `ln.context.track()` was never run
|
|
69
69
|
result = subprocess.run(
|
|
70
70
|
f"lamin save {notebook_path}",
|
|
71
71
|
shell=True,
|
|
@@ -73,13 +73,13 @@ def test_save_consecutive():
|
|
|
73
73
|
env=env,
|
|
74
74
|
)
|
|
75
75
|
assert result.returncode == 1
|
|
76
|
-
assert "Did not find
|
|
76
|
+
assert "Did not find uid 'hlsFXswrJjtt0000'" in result.stdout.decode()
|
|
77
77
|
|
|
78
|
-
# now, let's re-run this notebook so that ln.track() is actually run
|
|
78
|
+
# now, let's re-run this notebook so that ln.context.track() is actually run
|
|
79
79
|
nbproject_test.execute_notebooks(notebook_path, print_outputs=True)
|
|
80
80
|
|
|
81
81
|
# now, there is a transform record, but we're missing all artifacts
|
|
82
|
-
transform = ln.Transform.filter(uid="
|
|
82
|
+
transform = ln.Transform.filter(uid="hlsFXswrJjtt0000").one_or_none()
|
|
83
83
|
assert transform is not None
|
|
84
84
|
assert transform.latest_run.report is None
|
|
85
85
|
assert transform._source_code_artifact is None
|
|
@@ -95,11 +95,11 @@ def test_save_consecutive():
|
|
|
95
95
|
assert result.returncode == 0
|
|
96
96
|
|
|
97
97
|
# now, we have the associated artifacts
|
|
98
|
-
transform = ln.Transform.filter(uid="
|
|
98
|
+
transform = ln.Transform.filter(uid="hlsFXswrJjtt0000").one_or_none()
|
|
99
99
|
assert transform is not None
|
|
100
100
|
assert transform.latest_run.report.path.exists()
|
|
101
101
|
assert transform.latest_run.report.path == transform.latest_run.report.path
|
|
102
|
-
assert transform._source_code_artifact.hash == "
|
|
102
|
+
assert transform._source_code_artifact.hash == "EQrdZpS-fPaz5MKk_g02AA"
|
|
103
103
|
assert transform.latest_run.environment.path.exists()
|
|
104
104
|
assert transform._source_code_artifact.path.exists()
|
|
105
105
|
|
|
@@ -114,8 +114,8 @@ def test_save_consecutive():
|
|
|
114
114
|
# try re-running - it fails
|
|
115
115
|
with pytest.raises(CellExecutionError) as error:
|
|
116
116
|
nbproject_test.execute_notebooks(notebook_path, print_outputs=True)
|
|
117
|
-
print(error.exconly())
|
|
118
|
-
assert "
|
|
117
|
+
# print(error.exconly())
|
|
118
|
+
assert "UpdateContext" in error.exconly()
|
|
119
119
|
|
|
120
120
|
# try re-saving - it works but will issue an interactive warning dialogue
|
|
121
121
|
# that clarifies that the user is about to re-save the notebook
|
|
@@ -127,29 +127,30 @@ def test_save_consecutive():
|
|
|
127
127
|
)
|
|
128
128
|
assert result.returncode == 0
|
|
129
129
|
# the source code is overwritten with the edits, reflected in a new hash
|
|
130
|
-
transform = ln.Transform.get("
|
|
130
|
+
transform = ln.Transform.get("hlsFXswrJjtt0000")
|
|
131
131
|
assert transform.latest_run.report.path.exists()
|
|
132
132
|
assert transform.latest_run.report.path == transform.latest_run.report.path
|
|
133
|
-
assert transform._source_code_artifact.hash == "
|
|
133
|
+
assert transform._source_code_artifact.hash == "DMVEHVQqmY3ektOg2KtKKA"
|
|
134
134
|
assert transform.latest_run.environment.path.exists()
|
|
135
135
|
assert transform._source_code_artifact.path.exists()
|
|
136
136
|
|
|
137
137
|
# get the the source code via command line
|
|
138
138
|
result = subprocess.run(
|
|
139
139
|
"lamin get"
|
|
140
|
-
f" https://lamin.ai/{ln.setup.settings.user.handle}/laminci-unit-tests/transform/
|
|
140
|
+
f" https://lamin.ai/{ln.setup.settings.user.handle}/laminci-unit-tests/transform/hlsFXswrJjtt0000", # noqa
|
|
141
141
|
shell=True,
|
|
142
142
|
capture_output=True,
|
|
143
143
|
)
|
|
144
|
-
print(result.stderr.decode())
|
|
144
|
+
# print(result.stderr.decode())
|
|
145
145
|
assert result.returncode == 0
|
|
146
146
|
|
|
147
147
|
# now, assume the user renames the notebook
|
|
148
148
|
new_path = notebook_path.with_name("new_name.ipynb")
|
|
149
149
|
os.system(f"cp {notebook_path} {new_path}")
|
|
150
150
|
|
|
151
|
-
# upon re-running it, the user is asked
|
|
151
|
+
# upon re-running it, the user is asked to create a new stem uid
|
|
152
152
|
with pytest.raises(CellExecutionError) as error:
|
|
153
153
|
nbproject_test.execute_notebooks(new_path, print_outputs=True)
|
|
154
154
|
|
|
155
|
-
|
|
155
|
+
print(error.exconly())
|
|
156
|
+
assert "Notebook filename changed." in error.exconly()
|
|
@@ -19,9 +19,9 @@ def test_run_save_cache():
|
|
|
19
19
|
shell=True,
|
|
20
20
|
capture_output=True,
|
|
21
21
|
)
|
|
22
|
-
print(result.
|
|
22
|
+
# print(result.stdout.decode())
|
|
23
23
|
assert result.returncode == 1
|
|
24
|
-
assert "Did you run ln.track()" in result.stdout.decode()
|
|
24
|
+
assert "Did you run ln.context.track()?" in result.stdout.decode()
|
|
25
25
|
|
|
26
26
|
# run the script
|
|
27
27
|
result = subprocess.run(
|
|
@@ -29,15 +29,15 @@ def test_run_save_cache():
|
|
|
29
29
|
shell=True,
|
|
30
30
|
capture_output=True,
|
|
31
31
|
)
|
|
32
|
-
print(result.stdout.decode())
|
|
33
|
-
print(result.stderr.decode())
|
|
32
|
+
# print(result.stdout.decode())
|
|
33
|
+
# print(result.stderr.decode())
|
|
34
34
|
assert result.returncode == 0
|
|
35
|
-
assert "
|
|
36
|
-
assert "
|
|
37
|
-
assert "
|
|
35
|
+
assert "created Transform" in result.stdout.decode()
|
|
36
|
+
assert "m5uCHTTpJnjQ0000" in result.stdout.decode()
|
|
37
|
+
assert "created Run" in result.stdout.decode()
|
|
38
38
|
|
|
39
39
|
transform = ln.Transform.get("m5uCHTTpJnjQ")
|
|
40
|
-
assert transform._source_code_artifact.hash == "
|
|
40
|
+
assert transform._source_code_artifact.hash == "Cwk0OPOyUH5nzTiU2ISlDQ"
|
|
41
41
|
assert transform.latest_run.environment.path.exists()
|
|
42
42
|
assert transform._source_code_artifact.path.exists()
|
|
43
43
|
|
|
@@ -48,12 +48,12 @@ def test_run_save_cache():
|
|
|
48
48
|
capture_output=True,
|
|
49
49
|
env=env,
|
|
50
50
|
)
|
|
51
|
-
print(result.stdout.decode())
|
|
52
|
-
print(result.stderr.decode())
|
|
51
|
+
# print(result.stdout.decode())
|
|
52
|
+
# print(result.stderr.decode())
|
|
53
53
|
assert result.returncode == 0
|
|
54
|
-
assert "loaded
|
|
55
|
-
assert "
|
|
56
|
-
assert "loaded
|
|
54
|
+
assert "loaded Transform" in result.stdout.decode()
|
|
55
|
+
assert "m5uCHTTpJnjQ0000" in result.stdout.decode()
|
|
56
|
+
assert "loaded Run" in result.stdout.decode()
|
|
57
57
|
assert "source code is already saved" in result.stdout.decode()
|
|
58
58
|
|
|
59
59
|
# you can re-save the script
|
|
@@ -63,8 +63,8 @@ def test_run_save_cache():
|
|
|
63
63
|
capture_output=True,
|
|
64
64
|
env=env,
|
|
65
65
|
)
|
|
66
|
-
print(result.stdout.decode())
|
|
67
|
-
print(result.stderr.decode())
|
|
66
|
+
# print(result.stdout.decode())
|
|
67
|
+
# print(result.stderr.decode())
|
|
68
68
|
assert result.returncode == 0
|
|
69
69
|
assert "source code is already saved" in result.stdout.decode()
|
|
70
70
|
assert "run.environment is already saved" in result.stdout.decode()
|
|
@@ -73,15 +73,15 @@ def test_run_save_cache():
|
|
|
73
73
|
content = filepath.read_text() + "\n # edited"
|
|
74
74
|
filepath.write_text(content)
|
|
75
75
|
|
|
76
|
-
# re-run the script
|
|
76
|
+
# re-run the script without commiting
|
|
77
77
|
result = subprocess.run(
|
|
78
78
|
f"python {filepath}",
|
|
79
79
|
shell=True,
|
|
80
80
|
capture_output=True,
|
|
81
81
|
env=env,
|
|
82
82
|
)
|
|
83
|
-
print(result.stdout.decode())
|
|
84
|
-
print(result.stderr.decode())
|
|
83
|
+
# print(result.stdout.decode())
|
|
84
|
+
# print(result.stderr.decode())
|
|
85
85
|
assert result.returncode == 1
|
|
86
86
|
assert "Did not find blob hash" in result.stderr.decode()
|
|
87
87
|
|
|
@@ -101,15 +101,15 @@ def test_run_save_cache():
|
|
|
101
101
|
capture_output=True,
|
|
102
102
|
env=env,
|
|
103
103
|
)
|
|
104
|
-
print(result.stdout.decode())
|
|
105
|
-
print(result.stderr.decode())
|
|
104
|
+
# print(result.stdout.decode())
|
|
105
|
+
# print(result.stderr.decode())
|
|
106
106
|
assert result.returncode == 1
|
|
107
|
-
assert "
|
|
107
|
+
assert "Source code changed, bump version by setting" in result.stderr.decode()
|
|
108
108
|
|
|
109
109
|
# try to get the the source code via command line
|
|
110
110
|
result = subprocess.run(
|
|
111
111
|
"lamin get"
|
|
112
|
-
f" https://lamin.ai/{settings.user.handle}/laminci-unit-tests/transform/
|
|
112
|
+
f" https://lamin.ai/{settings.user.handle}/laminci-unit-tests/transform/m5uCHTTpJnjQ0000", # noqa
|
|
113
113
|
shell=True,
|
|
114
114
|
capture_output=True,
|
|
115
115
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|