Skip to content

Commit 8314ed2

Browse files
authored
Merge pull request #255 from Oxid15/description_update
Description update
2 parents aa60e38 + 090941a commit 8314ed2

File tree

4 files changed

+44
-5
lines changed

4 files changed

+44
-5
lines changed

cascade/base/traceable.py

+11-5
Original file line numberDiff line numberDiff line change
@@ -210,25 +210,30 @@ def __repr__(self) -> str:
210210
# Removes adress part of basic object repr and leading < symbol
211211
return super().__repr__().split()[0][1:]
212212

213-
def describe(self, desc: Optional[str]):
213+
def describe(self, desc: str):
214214
"""
215215
Add description to an object
216216
217217
Parameters
218218
----------
219-
desc : Optional[str]
220-
String description of an object.
221-
May be None to use the method in default initializer
219+
desc : str
220+
String description of an object
222221
223222
Raises
224223
------
225224
TypeError
226225
If the input is not None and not a string either
227226
"""
228-
if not isinstance(desc, str) and desc is not None:
227+
if not isinstance(desc, str):
229228
raise TypeError(f"Description should be str, got {type(desc)}")
230229
self.description = desc
231230

231+
def remove_description(self) -> None:
232+
"""
233+
Empties object's description
234+
"""
235+
self.description = None
236+
232237
def tag(self, tag: Union[str, Iterable[str]]) -> None:
233238
"""
234239
If tag is a string:
@@ -498,6 +503,7 @@ def __getattribute__(self, name: str) -> Any:
498503
attr = super().__getattribute__(name)
499504
if name in (
500505
"describe",
506+
"remove_description",
501507
"comment",
502508
"remove_comment",
503509
"tag",

cascade/cli/desc.py

+12
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,15 @@ def desc_add(ctx, d):
3737
tr = TraceableOnDisk(ctx.obj["cwd"], meta_fmt=ctx.obj["meta_fmt"])
3838
tr.sync_meta()
3939
tr.describe(d)
40+
41+
@desc.command("rm")
42+
@click.pass_context
43+
def desc_rm(ctx):
44+
if not ctx.obj.get("meta"):
45+
return
46+
47+
from cascade.base import TraceableOnDisk
48+
49+
tr = TraceableOnDisk(ctx.obj["cwd"], meta_fmt=ctx.obj["meta_fmt"])
50+
tr.sync_meta()
51+
tr.remove_description()

cascade/tests/base/test_traceable.py

+3
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ def test_descriptions():
7979
tr.describe("test2")
8080
assert tr.description == "test2"
8181

82+
tr.remove_description()
83+
assert tr.description is None
84+
8285

8386
def test_tags():
8487
tr = Traceable(tags=["a", "b"])

cascade/tests/cli/test_description.py

+18
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,21 @@ def test_add(tmp_path_str):
4747
del meta[0]["updated_at"]
4848
del init_meta[0]["updated_at"]
4949
assert meta == init_meta
50+
51+
52+
def test_rm(tmp_path_str):
53+
runner = CliRunner()
54+
with runner.isolated_filesystem(temp_dir=tmp_path_str) as td:
55+
mh = MetaHandler()
56+
repo = Repo(td)
57+
58+
result = runner.invoke(cli, args=["desc", "add"], input="Hello")
59+
60+
assert result.exit_code == 0
61+
62+
runner.invoke(cli, args=["desc", "rm"])
63+
64+
meta = mh.read_dir(td)
65+
66+
assert "description" in meta[0]
67+
assert meta[0]["description"] is None

0 commit comments

Comments
 (0)