cook-build 0.7.3__py3-none-any.whl → 0.7.4__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.
cook/__init__.py CHANGED
@@ -1,10 +1,12 @@
1
1
  from .controller import Controller
2
2
  from .manager import Manager, create_task
3
3
  from .task import Task
4
+ from .util import dict2args
4
5
 
5
6
  __all__ = [
6
7
  "Controller",
7
8
  "create_task",
9
+ "dict2args",
8
10
  "Manager",
9
11
  "Task",
10
12
  ]
cook/actions.py CHANGED
@@ -174,6 +174,7 @@ class SubprocessAction(Action):
174
174
  else:
175
175
  for arg in args:
176
176
  hasher.update(arg.encode())
177
+ hasher.update(b"\0")
177
178
  return hasher.hexdigest()
178
179
 
179
180
  def __repr__(self) -> str:
cook/util.py CHANGED
@@ -98,3 +98,47 @@ def format_datetime(dt: datetime) -> str:
98
98
  Format a date-time.
99
99
  """
100
100
  return str(dt).rsplit(".", 2)[0]
101
+
102
+
103
+ def dict2args(*positional, flags: dict | None = None, **kwargs) -> list[str]:
104
+ """
105
+ Convert arguments to command-line argument strings.
106
+
107
+ Args:
108
+ *positional: Positional arguments appended after flags.
109
+ flags: Dictionary for flag names that aren't valid Python identifiers
110
+ (e.g., names containing dashes).
111
+ **kwargs: Keyword arguments converted to flags.
112
+
113
+ Returns:
114
+ List of command-line argument strings.
115
+
116
+ Example:
117
+
118
+ .. doctest::
119
+
120
+ >>> from cook.util import dict2args
121
+ >>> dict2args(output="file.txt", verbose=True, count=3)
122
+ ['--output=file.txt', '--verbose', '--count=3']
123
+ >>> dict2args("input.txt", "output.txt", verbose=True)
124
+ ['--verbose', 'input.txt', 'output.txt']
125
+ >>> dict2args(flags={"dry-run": True, "num-workers": 4})
126
+ ['--dry-run', '--num-workers=4']
127
+ >>> dict2args(values=[1, 2, 3])
128
+ ['--values=1,2,3']
129
+ """
130
+ if flags is not None:
131
+ kwargs = flags | kwargs
132
+ args = []
133
+ for key, value in kwargs.items():
134
+ if isinstance(value, bool):
135
+ if value:
136
+ args.append(f"--{key}")
137
+ elif isinstance(value, (list, tuple)):
138
+ if not value:
139
+ raise ValueError(f"empty sequence for argument {key!r}")
140
+ args.append(f"--{key}={','.join(map(str, value))}")
141
+ else:
142
+ args.append(f"--{key}={value}")
143
+ args.extend(str(arg) for arg in positional)
144
+ return args
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cook-build
3
- Version: 0.7.3
3
+ Version: 0.7.4
4
4
  Summary: A task-centric build system with simple declarative recipes specified in Python
5
5
  Author: Till Hoffmann
6
6
  License: BSD-3-Clause
@@ -0,0 +1,14 @@
1
+ cook/__init__.py,sha256=YuVqQywPpdWLw5IWRV_7iXx6-5_eBeoC8c3W8jGpz8Q,224
2
+ cook/__main__.py,sha256=3vnDZOJLTMJGRQzPolqurVzKJ7KCUjosBuuUkW22tKY,13192
3
+ cook/actions.py,sha256=D118eI7DunYbjI51V2NHTwJuf4w5oDdoqsKDh1-0unk,7574
4
+ cook/contexts.py,sha256=-L4o_b_XPNZ_MBuYAgR1LYbptWPankDyj-00Pji7EVg,10710
5
+ cook/controller.py,sha256=vs9wBfvdQzE5RGZxZtKef6hb8rUOKKMp_kuPnmVAf9s,13432
6
+ cook/manager.py,sha256=sLlqPjsi81UTSHNhNj-ZTDilCdVmEF992N94yxWPOlU,6247
7
+ cook/task.py,sha256=-LNMwHdFlTUG45DF_QyWlIHw55_n_u2Xf5beKB7LrdY,2308
8
+ cook/util.py,sha256=ZrHM242Hf27Vqc0v1BqY3KLgLAnQ5L2bdTv-2XQW4ck,3988
9
+ cook_build-0.7.4.dist-info/licenses/LICENSE,sha256=3Nuj_WTTcz7JDg4-9EzNf6vHlKRWpdLUccg-pvoZ3WE,1500
10
+ cook_build-0.7.4.dist-info/METADATA,sha256=fOpF4Zi5qDz4Y0O-kEoAFJ2TW1khObCuctL_hxBtXqk,4586
11
+ cook_build-0.7.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
12
+ cook_build-0.7.4.dist-info/entry_points.txt,sha256=5UP0ZmmxSNKevTVISUJxmdXEQsKrI4n54OQYkjrdX2c,48
13
+ cook_build-0.7.4.dist-info/top_level.txt,sha256=ewNQIn2oRSYV98vAsUnw88u2Q8XHKhAz70ed2PEdR2c,5
14
+ cook_build-0.7.4.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- cook/__init__.py,sha256=SCa9_i6B84IzSAwq0wnSQqvycyL4dvTO7dRIysJXZj4,179
2
- cook/__main__.py,sha256=3vnDZOJLTMJGRQzPolqurVzKJ7KCUjosBuuUkW22tKY,13192
3
- cook/actions.py,sha256=yxo_LQ42iejq0K92OnYs7x2GaTuyNK3ZmqnRikQUgWs,7537
4
- cook/contexts.py,sha256=-L4o_b_XPNZ_MBuYAgR1LYbptWPankDyj-00Pji7EVg,10710
5
- cook/controller.py,sha256=vs9wBfvdQzE5RGZxZtKef6hb8rUOKKMp_kuPnmVAf9s,13432
6
- cook/manager.py,sha256=sLlqPjsi81UTSHNhNj-ZTDilCdVmEF992N94yxWPOlU,6247
7
- cook/task.py,sha256=-LNMwHdFlTUG45DF_QyWlIHw55_n_u2Xf5beKB7LrdY,2308
8
- cook/util.py,sha256=Ssk_79cB7tvxEk_I9VAjjzmEp1bJ95ELZHCAx6sybyo,2459
9
- cook_build-0.7.3.dist-info/licenses/LICENSE,sha256=3Nuj_WTTcz7JDg4-9EzNf6vHlKRWpdLUccg-pvoZ3WE,1500
10
- cook_build-0.7.3.dist-info/METADATA,sha256=M83L-Uar5tKKLB2OyqQ1IS3wxe-idBZIvH2foLTXxAE,4586
11
- cook_build-0.7.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
12
- cook_build-0.7.3.dist-info/entry_points.txt,sha256=5UP0ZmmxSNKevTVISUJxmdXEQsKrI4n54OQYkjrdX2c,48
13
- cook_build-0.7.3.dist-info/top_level.txt,sha256=ewNQIn2oRSYV98vAsUnw88u2Q8XHKhAz70ed2PEdR2c,5
14
- cook_build-0.7.3.dist-info/RECORD,,