bakefile 0.0.4__py3-none-any.whl → 0.0.6__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.
Files changed (73) hide show
  1. bake/__init__.py +9 -0
  2. bake/bakebook/bakebook.py +85 -0
  3. bake/bakebook/decorator.py +50 -0
  4. bake/bakebook/get.py +175 -0
  5. bake/cli/bake/__init__.py +3 -0
  6. bake/cli/bake/__main__.py +5 -0
  7. bake/cli/bake/main.py +74 -0
  8. bake/cli/bake/reinvocation.py +63 -0
  9. bake/cli/bakefile/__init__.py +3 -0
  10. bake/cli/bakefile/__main__.py +5 -0
  11. bake/cli/bakefile/add_inline.py +29 -0
  12. bake/cli/bakefile/export.py +212 -0
  13. bake/cli/bakefile/find_python.py +18 -0
  14. bake/cli/bakefile/init.py +56 -0
  15. bake/cli/bakefile/lint.py +77 -0
  16. bake/cli/bakefile/main.py +43 -0
  17. bake/cli/bakefile/uv.py +146 -0
  18. bake/cli/common/app.py +54 -0
  19. bake/cli/common/callback.py +13 -0
  20. bake/cli/common/context.py +145 -0
  21. bake/cli/common/exception_handler.py +57 -0
  22. bake/cli/common/obj.py +216 -0
  23. bake/cli/common/params.py +72 -0
  24. bake/cli/utils/__init__.py +0 -0
  25. bake/cli/utils/version.py +18 -0
  26. bake/manage/__init__.py +0 -0
  27. bake/manage/add_inline.py +71 -0
  28. bake/manage/find_python.py +210 -0
  29. bake/manage/lint.py +101 -0
  30. bake/manage/run_uv.py +88 -0
  31. bake/manage/write_bakefile.py +20 -0
  32. bake/py.typed +0 -0
  33. bake/samples/__init__.py +0 -0
  34. bake/samples/simple.py +8 -0
  35. bake/ui/__init__.py +11 -0
  36. bake/ui/console.py +58 -0
  37. bake/ui/logger/__init__.py +33 -0
  38. bake/ui/logger/capsys.py +158 -0
  39. bake/ui/logger/setup.py +53 -0
  40. bake/ui/logger/utils.py +215 -0
  41. bake/ui/params.py +5 -0
  42. bake/ui/run/__init__.py +5 -0
  43. bake/ui/run/run.py +546 -0
  44. bake/ui/run/script.py +74 -0
  45. bake/ui/run/splitter.py +249 -0
  46. bake/ui/run/uv.py +83 -0
  47. bake/ui/style.py +2 -0
  48. bake/utils/__init__.py +11 -0
  49. bake/utils/constants.py +21 -0
  50. {bakefile → bake/utils}/env.py +3 -1
  51. bake/utils/exceptions.py +17 -0
  52. {bakefile-0.0.4.dist-info → bakefile-0.0.6.dist-info}/METADATA +15 -2
  53. bakefile-0.0.6.dist-info/RECORD +63 -0
  54. {bakefile-0.0.4.dist-info → bakefile-0.0.6.dist-info}/WHEEL +2 -2
  55. bakefile-0.0.6.dist-info/entry_points.txt +5 -0
  56. bakelib/__init__.py +4 -0
  57. bakelib/space/__init__.py +0 -0
  58. bakelib/space/base.py +193 -0
  59. bakelib/space/python.py +80 -0
  60. bakelib/space/utils.py +118 -0
  61. bakefile/__init__.py +0 -13
  62. bakefile/cli/bake/__init__.py +0 -3
  63. bakefile/cli/bake/main.py +0 -127
  64. bakefile/cli/bake/resolve_bakebook.py +0 -103
  65. bakefile/cli/bake/utils.py +0 -25
  66. bakefile/cli/bakefile.py +0 -19
  67. bakefile/cli/utils/version.py +0 -9
  68. bakefile/exceptions.py +0 -9
  69. bakefile-0.0.4.dist-info/RECORD +0 -16
  70. bakefile-0.0.4.dist-info/entry_points.txt +0 -4
  71. {bakefile/cli/utils → bake/bakebook}/__init__.py +0 -0
  72. {bakefile → bake}/cli/__init__.py +0 -0
  73. /bakefile/py.typed → /bake/cli/common/__init__.py +0 -0
@@ -0,0 +1,249 @@
1
+ import os
2
+ import select
3
+ import subprocess
4
+ import sys
5
+ import threading
6
+ import time
7
+
8
+ # No PTY locks needed - each thread reads from its own PTY fd independently
9
+ # Locks were causing race conditions where threads waited while their process exited
10
+
11
+
12
+ class OutputSplitter:
13
+ def __init__(
14
+ self,
15
+ stream: bool = True,
16
+ capture: bool = True,
17
+ pty_fd: int | None = None,
18
+ stderr_pty_fd: int | None = None,
19
+ encoding: str | None = None,
20
+ ):
21
+ self._stream = stream
22
+ self._capture = capture
23
+ self._pty_fd = pty_fd
24
+ self._stderr_pty_fd = stderr_pty_fd
25
+ self._encoding = encoding
26
+ self._stdout_data = b""
27
+ self._stderr_data = b""
28
+
29
+ def _read_stream(self, stream, target, output_list):
30
+ for line in iter(stream.readline, b""):
31
+ if self._stream:
32
+ target.buffer.write(line)
33
+ target.buffer.flush()
34
+ if self._capture:
35
+ output_list.append(line)
36
+ stream.close()
37
+
38
+ def _handle_data(self, data: bytes, target, output_list) -> bool:
39
+ """Handle data chunk: return False if data is empty (EOF)."""
40
+ if not data:
41
+ return False
42
+ if self._stream:
43
+ target.buffer.write(data)
44
+ target.buffer.flush()
45
+ if self._capture:
46
+ output_list.append(data)
47
+ return True
48
+
49
+ def _read_pty(self, pty_fd: int, target, output_list, proc: subprocess.Popen):
50
+ """Read from PTY file descriptor in chunks and stream to output."""
51
+ import fcntl
52
+
53
+ try:
54
+ while True:
55
+ # Try immediate non-blocking read first (catches fast-exiting processes)
56
+ try:
57
+ # Set non-blocking mode
58
+ flags = fcntl.fcntl(pty_fd, fcntl.F_GETFL)
59
+ fcntl.fcntl(pty_fd, fcntl.F_SETFL, flags | os.O_NONBLOCK)
60
+
61
+ data = os.read(pty_fd, 4096)
62
+ if not self._handle_data(data, target, output_list):
63
+ break
64
+
65
+ # Restore blocking mode
66
+ fcntl.fcntl(pty_fd, fcntl.F_SETFL, flags)
67
+ except BlockingIOError:
68
+ # No data available yet, restore blocking mode and wait with select
69
+ fcntl.fcntl(pty_fd, fcntl.F_SETFL, flags)
70
+
71
+ # Wait for data to be available
72
+ ready, _, _ = select.select([pty_fd], [], [], 0.1)
73
+
74
+ if ready:
75
+ data = os.read(pty_fd, 4096)
76
+ if not self._handle_data(data, target, output_list):
77
+ break
78
+
79
+ # Check if process exited after reading data
80
+ if proc.poll() is not None:
81
+ self._drain_pty(pty_fd, target, output_list)
82
+ break
83
+ finally:
84
+ os.close(pty_fd)
85
+
86
+ def _read_pty_data(self, pty_fd: int, target, output_list) -> bool:
87
+ """Read and handle available PTY data. Returns False on EOF/error."""
88
+ try:
89
+ data = os.read(pty_fd, 4096)
90
+ return self._handle_data(data, target, output_list)
91
+ except OSError:
92
+ return False
93
+
94
+ def _try_select_read(self, pty_fd: int, timeout: float) -> tuple[bool, bool]:
95
+ """Try to read using select.select().
96
+
97
+ Returns:
98
+ (success, has_data): success if select worked, has_data if ready
99
+ """
100
+ try:
101
+ ready, _, _ = select.select([pty_fd], [], [], timeout)
102
+ return True, bool(ready)
103
+ except OSError:
104
+ # On Windows, select.select() raises OSError for non-socket file descriptors
105
+ return False, False
106
+
107
+ def _read_and_handle(self, pty_fd: int, target, output_list) -> bool:
108
+ """Read from PTY and handle data.
109
+
110
+ Returns:
111
+ True if data was handled, False if EOF/error
112
+ """
113
+ try:
114
+ data = os.read(pty_fd, 4096)
115
+ return self._handle_data(data, target, output_list)
116
+ except OSError:
117
+ return False
118
+
119
+ def _handle_data_ready(self, pty_fd: int, target, output_list) -> bool:
120
+ """Handle data ready from select.
121
+
122
+ Returns:
123
+ True if should continue draining, False if done
124
+ """
125
+ return self._read_and_handle(pty_fd, target, output_list)
126
+
127
+ def _handle_timeout(
128
+ self,
129
+ pty_fd: int,
130
+ target,
131
+ output_list,
132
+ select_works: bool,
133
+ consecutive_timeouts: int,
134
+ ) -> tuple[bool, int]:
135
+ """Handle timeout when no data ready.
136
+
137
+ Returns:
138
+ (should_continue, new_timeout_count)
139
+ """
140
+ # Try direct read after 2 consecutive timeouts or if select doesn't work
141
+ if not select_works or consecutive_timeouts >= 2:
142
+ if not self._read_and_handle(pty_fd, target, output_list):
143
+ return False, 0
144
+ return True, 0 # Got data, reset timeout counter
145
+ return True, consecutive_timeouts + 1
146
+
147
+ def _drain_pty(self, pty_fd: int, target, output_list):
148
+ """Drain remaining data from PTY after process exits.
149
+
150
+ We need to handle OS timing: proc.poll() may return exit code before the
151
+ PTY buffer is fully flushed. We use select to wait for data with increasing
152
+ timeouts, and also try direct reads as a fallback in case select doesn't
153
+ detect readiness (e.g., in tests with mocked os.read or on Windows with
154
+ non-socket file descriptors).
155
+ """
156
+ time.sleep(0.005)
157
+
158
+ timeout = 0.05
159
+ consecutive_timeouts = 0
160
+ max_timeouts = 4
161
+ select_works = True
162
+
163
+ try:
164
+ while consecutive_timeouts < max_timeouts:
165
+ # Check if data is ready via select
166
+ if select_works:
167
+ select_works, ready = self._try_select_read(pty_fd, timeout)
168
+ else:
169
+ ready = False
170
+
171
+ if ready:
172
+ # Data ready - read and handle
173
+ if not self._handle_data_ready(pty_fd, target, output_list):
174
+ return
175
+ consecutive_timeouts = 0
176
+ timeout = 0.02
177
+ continue
178
+
179
+ # No data ready - increment timeout and try direct read
180
+ timeout = min(timeout * 1.5, 0.2)
181
+
182
+ should_continue, consecutive_timeouts = self._handle_timeout(
183
+ pty_fd, target, output_list, select_works, consecutive_timeouts
184
+ )
185
+ if not should_continue:
186
+ return
187
+ except OSError:
188
+ pass
189
+
190
+ def attach(self, proc: subprocess.Popen):
191
+ threads = []
192
+
193
+ # Handle PTY stdout (for color-preserving output on Unix)
194
+ if self._pty_fd is not None:
195
+ stdout_list = []
196
+ t = threading.Thread(
197
+ target=self._read_pty, args=(self._pty_fd, sys.stdout, stdout_list, proc)
198
+ )
199
+ t.daemon = True
200
+ t.start()
201
+ threads.append((t, stdout_list, "stdout"))
202
+
203
+ # Handle regular stdout
204
+ elif proc.stdout:
205
+ stdout_list = []
206
+ t = threading.Thread(
207
+ target=self._read_stream, args=(proc.stdout, sys.stdout, stdout_list)
208
+ )
209
+ t.daemon = True
210
+ t.start()
211
+ threads.append((t, stdout_list, "stdout"))
212
+
213
+ # Handle PTY stderr (for color-preserving stderr on Unix)
214
+ if self._stderr_pty_fd is not None:
215
+ stderr_list = []
216
+ t = threading.Thread(
217
+ target=self._read_pty, args=(self._stderr_pty_fd, sys.stderr, stderr_list, proc)
218
+ )
219
+ t.daemon = True
220
+ t.start()
221
+ threads.append((t, stderr_list, "stderr"))
222
+
223
+ # Handle stderr (regular pipe) - use separate if, not elif
224
+ if proc.stderr:
225
+ stderr_list = []
226
+ t = threading.Thread(
227
+ target=self._read_stream, args=(proc.stderr, sys.stderr, stderr_list)
228
+ )
229
+ t.daemon = True
230
+ t.start()
231
+ threads.append((t, stderr_list, "stderr"))
232
+
233
+ return threads
234
+
235
+ def finalize(self, threads):
236
+ for t, data_list, name in threads:
237
+ t.join()
238
+ if name == "stdout":
239
+ self._stdout_data = b"".join(data_list)
240
+ else:
241
+ self._stderr_data = b"".join(data_list)
242
+
243
+ @property
244
+ def stdout(self) -> bytes:
245
+ return self._stdout_data
246
+
247
+ @property
248
+ def stderr(self) -> bytes:
249
+ return self._stderr_data
bake/ui/run/uv.py ADDED
@@ -0,0 +1,83 @@
1
+ import subprocess
2
+ from pathlib import Path
3
+ from typing import Literal, overload
4
+
5
+ from uv import find_uv_bin
6
+
7
+ from bake.ui import console
8
+ from bake.ui.run.run import run
9
+
10
+
11
+ @overload
12
+ def run_uv(
13
+ cmd: list[str] | tuple[str, ...],
14
+ *,
15
+ capture_output: Literal[True] = True,
16
+ check: bool = True,
17
+ cwd: Path | str | None = None,
18
+ stream: bool = False,
19
+ shell: bool | None = None,
20
+ echo: bool = True,
21
+ dry_run: bool = False,
22
+ keep_temp_file: bool = False,
23
+ env: dict[str, str] | None = None,
24
+ _encoding: str | None = None,
25
+ **kwargs,
26
+ ) -> subprocess.CompletedProcess[str]: ...
27
+
28
+
29
+ @overload
30
+ def run_uv(
31
+ cmd: list[str] | tuple[str, ...],
32
+ *,
33
+ capture_output: Literal[False],
34
+ check: bool = True,
35
+ cwd: Path | str | None = None,
36
+ stream: bool = False,
37
+ echo: bool = True,
38
+ dry_run: bool = False,
39
+ keep_temp_file: bool = False,
40
+ env: dict[str, str] | None = None,
41
+ _encoding: str | None = None,
42
+ **kwargs,
43
+ ) -> subprocess.CompletedProcess[None]: ...
44
+
45
+
46
+ def run_uv(
47
+ cmd: list[str] | tuple[str, ...],
48
+ *,
49
+ capture_output: bool = True,
50
+ check: bool = True,
51
+ cwd: Path | str | None = None,
52
+ stream: bool = False,
53
+ echo: bool = True,
54
+ dry_run: bool = False,
55
+ keep_temp_file: bool = False,
56
+ env: dict[str, str] | None = None,
57
+ _encoding: str | None = None,
58
+ **kwargs,
59
+ ) -> subprocess.CompletedProcess[str] | subprocess.CompletedProcess[None]:
60
+ uv_bin = find_uv_bin()
61
+
62
+ # Build display string: "uv" + command parts (no full binary path)
63
+ display_cmd = "uv " + " ".join(cmd)
64
+
65
+ # Echo command to console if requested
66
+ if echo:
67
+ console.cmd(display_cmd)
68
+
69
+ # Call run with full uv binary path, echo=False (already displayed), pass through options
70
+ return run(
71
+ [uv_bin, *cmd],
72
+ capture_output=capture_output,
73
+ check=check,
74
+ cwd=cwd,
75
+ stream=stream,
76
+ shell=False,
77
+ echo=False,
78
+ dry_run=dry_run,
79
+ keep_temp_file=keep_temp_file,
80
+ env=env,
81
+ _encoding=_encoding,
82
+ **kwargs,
83
+ )
bake/ui/style.py ADDED
@@ -0,0 +1,2 @@
1
+ def code(message: str) -> str:
2
+ return f"`[cyan]{message}[/cyan]`"
bake/utils/__init__.py ADDED
@@ -0,0 +1,11 @@
1
+ from bake.utils.constants import DEFAULT_BAKEBOOK_NAME, DEFAULT_FILE_NAME
2
+ from bake.utils.env import should_use_colors
3
+ from bake.utils.exceptions import BakebookError, BaseBakefileError
4
+
5
+ __all__ = [
6
+ "DEFAULT_BAKEBOOK_NAME",
7
+ "DEFAULT_FILE_NAME",
8
+ "BakebookError",
9
+ "BaseBakefileError",
10
+ "should_use_colors",
11
+ ]
@@ -0,0 +1,21 @@
1
+ from pathlib import Path
2
+
3
+ # Default value
4
+ DEFAULT_CHDIR = Path(".")
5
+ DEFAULT_FILE_NAME = "bakefile.py"
6
+ DEFAULT_BAKEBOOK_NAME = "bakebook"
7
+ DEFAULT_IS_CHAIN_COMMAND = False
8
+
9
+ # CLI command names
10
+ CMD_BAKE = "bake"
11
+ CMD_BAKEFILE = "bakefile"
12
+ CMD_INIT = "init"
13
+ CMD_ADD_INLINE = "add-inline"
14
+ CMD_LINT = "lint"
15
+
16
+ # Bakefile app command name
17
+ GET_BAKEFILE_OBJECT = "get_bakefile_object"
18
+
19
+ # Others
20
+ BAKEBOOK_NAME_IN_SAMPLES = "__bakebook__"
21
+ BAKE_COMMAND_KWARGS = "_bake_command_kwargs"
@@ -2,7 +2,9 @@ import os
2
2
 
3
3
  ENV_NO_COLOR = "NO_COLOR"
4
4
 
5
+ _BAKE_REINVOKED = "_BAKE_REINVOKED"
6
+
5
7
 
6
8
  def should_use_colors() -> bool:
7
9
  value = os.environ.get(ENV_NO_COLOR)
8
- return not (value == "" or value is None)
10
+ return value == "" or value is None
@@ -0,0 +1,17 @@
1
+ """Custom exceptions for bakefile."""
2
+
3
+
4
+ class BaseBakefileError(Exception):
5
+ """Base exception for all bakefile errors."""
6
+
7
+
8
+ class BakebookError(BaseBakefileError):
9
+ """Exception raised when bakebook cannot be loaded or validated (unexpected error)."""
10
+
11
+
12
+ class BakefileNotFoundError(BakebookError):
13
+ """Exception raised when bakefile.py is not found (expected/suppressable error)."""
14
+
15
+
16
+ class PythonNotFoundError(BaseBakefileError):
17
+ """Exception raised when Python executable cannot be found or created."""
@@ -1,12 +1,25 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bakefile
3
- Version: 0.0.4
3
+ Version: 0.0.6
4
4
  Summary: Add your description here
5
5
  Author: Wisaroot Lertthaweedech
6
6
  Author-email: Wisaroot Lertthaweedech <l.wisaroot@gmail.com>
7
+ Requires-Dist: beautysh>=6.4.2
8
+ Requires-Dist: click>=8.3.1
9
+ Requires-Dist: loguru>=0.7.3
10
+ Requires-Dist: orjson>=3.11.5
11
+ Requires-Dist: pydantic-settings>=2.0.0
7
12
  Requires-Dist: pydantic>=2.12.5
8
- Requires-Dist: typer>=0.0.1
13
+ Requires-Dist: pyyaml>=6.0.3
14
+ Requires-Dist: rich>=14.2.0
15
+ Requires-Dist: ruff>=0.14.10
16
+ Requires-Dist: tomli>=2.0.0 ; python_full_version < '3.11'
17
+ Requires-Dist: ty>=0.0.8
18
+ Requires-Dist: typer>=0.21.0
19
+ Requires-Dist: uv>=0.9.20
20
+ Requires-Dist: pathspec>=1.0.3 ; extra == 'lib'
9
21
  Requires-Python: >=3.10
22
+ Provides-Extra: lib
10
23
  Description-Content-Type: text/markdown
11
24
 
12
25
  [![tests](https://img.shields.io/github/actions/workflow/status/wislertt/bakefile/cd.yml?branch=main&label=tests&logo=github)](https://github.com/wislertt/bakefile/actions/workflows/cd.yml)
@@ -0,0 +1,63 @@
1
+ bake/__init__.py,sha256=ikK9AMD9ELxzcH3_JRZt3bnNLS0vCzlaH82gpGi_dNE,356
2
+ bake/bakebook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ bake/bakebook/bakebook.py,sha256=o1sp8Wewxdqr7k12qT-Q4ZrKQ7c7jDliiNCYrVG93NA,2939
4
+ bake/bakebook/decorator.py,sha256=t2I6Pf1vdTk7k8lTzZCqq71-hzcXFvFYbuFV_Wvg45Q,1545
5
+ bake/bakebook/get.py,sha256=fx5WV66OIBrywPN0thePXAJk2gt7wvTVAxYQqZ_PMao,5807
6
+ bake/cli/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
7
+ bake/cli/bake/__init__.py,sha256=CJokSP1t1KXaIqjkjFQ8_gbaSZ9RRB4YdemIoSTqRcI,56
8
+ bake/cli/bake/__main__.py,sha256=5Ui5_OD1-oG1ou6boak63EPQDmRsW9sGOVVDgXJaNec,133
9
+ bake/cli/bake/main.py,sha256=Lr6eyfaf4-zDRrF0GK9bjjFWop66ydewV5tNUluDd9M,2262
10
+ bake/cli/bake/reinvocation.py,sha256=Ifqc8ZAM7NMyrKU2jkmw1agCEI-Sx7yvLLBiFRi23_0,1985
11
+ bake/cli/bakefile/__init__.py,sha256=_zD3rXQHLr6EWHADdPLAmnc2A5C3dhmBuvP5uJ-_A58,60
12
+ bake/cli/bakefile/__main__.py,sha256=FVntzkZdzdygSWjMzyneXCXsM-MDTPmC3GUk4JZiYFU,137
13
+ bake/cli/bakefile/add_inline.py,sha256=V98T50SLMPqnWVtyEO_6hL17r4n3ZtkSC8NSEqdyHzc,919
14
+ bake/cli/bakefile/export.py,sha256=m9X0u6FgbjUzneQuh39H1CaFUT444jOPTFBNjnjs_Dg,6326
15
+ bake/cli/bakefile/find_python.py,sha256=J2HDs_nfNODqCHBZCNM64ESB4kVZK-C04i-KNmVUoSs,539
16
+ bake/cli/bakefile/init.py,sha256=0QuvADFOZZUBN2BUJfK90aEY1oUzoSNVRiljlUSjLu0,1825
17
+ bake/cli/bakefile/lint.py,sha256=DJkIJNBOef6JvgwQ3iL9jTrLqgUyn66Mhv6cuAgqXk0,2509
18
+ bake/cli/bakefile/main.py,sha256=jbpzNQa55thbzhpcmEtys1M1CvNUJBvi5UmgVzSbOM8,1414
19
+ bake/cli/bakefile/uv.py,sha256=PMFG3BdofzGWkor4fMEi3GE4G7hGtclCgPm2xlaPDso,4013
20
+ bake/cli/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ bake/cli/common/app.py,sha256=_XzBOy0OK2GB14E-cyfLV6CBCn70G62QqjUscj_DHfA,1443
22
+ bake/cli/common/callback.py,sha256=NmrZUl5eRr95nluomTwcKjTU7dSKjWcQVli5VEdZk-4,439
23
+ bake/cli/common/context.py,sha256=RtFHUDCZLcD88Ys17u_zXoHUq-12jkoXc9f_D4jh_7M,3871
24
+ bake/cli/common/exception_handler.py,sha256=2vLbqMeZlLxKqNWUkTs3cA-8l6IjK0dU3SyZlRb96YI,1759
25
+ bake/cli/common/obj.py,sha256=ShDsQtHCxex17IrKb9kSdC1t459qBsam53SFCUB_DSA,7094
26
+ bake/cli/common/params.py,sha256=rhLa34SY92nXfUaKo0SQMKK__xRnrmHejHa25tRyKdg,2002
27
+ bake/cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ bake/cli/utils/version.py,sha256=aiweLD0vDezBlJAcCC99oMms71WGD9CWSJuZ4i3VLHA,390
29
+ bake/manage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ bake/manage/add_inline.py,sha256=yefHmF33ghCB8NZ-v61ybeVsaeE8iDFvfRGeTAKg4I8,2245
31
+ bake/manage/find_python.py,sha256=oVmd8KaSsgDQWHuGZpYiQx-DHn50P9EkRi6-YIad99E,7165
32
+ bake/manage/lint.py,sha256=OqwYFF8GGvzHGVPuJcWMRAv5esXEIX4nQXdGcChnkqA,2394
33
+ bake/manage/run_uv.py,sha256=QzlKeVpr20dXNDcwUgyJqnXT4MofRqK-6XkWpzBbUhE,3234
34
+ bake/manage/write_bakefile.py,sha256=efGViLk7sh-QX9Mox7yQw_A1Tp7EOuc_vmSTbFmXUm0,736
35
+ bake/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ bake/samples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ bake/samples/simple.py,sha256=hP2TW-D7BQBGJseqRPpilxkoQ8ScTuZZePICupyvFKA,155
38
+ bake/ui/__init__.py,sha256=6OhZVKjfC9aumbhraxkGtx7KLpV1ouepeHRA2dUVoSo,209
39
+ bake/ui/console.py,sha256=C5wrbsOc-wwcx0hGmCozHvGCNTWgGhsh-5vxl880xS4,1689
40
+ bake/ui/logger/__init__.py,sha256=bup2cssTHhergh47s6uYbGtY2dJNxlKKH6otBc4ECFM,728
41
+ bake/ui/logger/capsys.py,sha256=KZL6k7Werp_8styfJKfIvQyv0-gJq54vY3hSJFIacEM,5267
42
+ bake/ui/logger/setup.py,sha256=OrX9UiY0iBGfWWfhMJCdfqCRJsL5yC3rIdIEOn7rveo,1377
43
+ bake/ui/logger/utils.py,sha256=dcppxoS_pX92AFcHIerJGI2_JBHBNghRQmQqlZmmj2Q,7218
44
+ bake/ui/params.py,sha256=yNDChJQkbeZSxQzXTSBrAPCbwsJ5zOK4s4sFHQPSnHs,140
45
+ bake/ui/run/__init__.py,sha256=A671l5YVTRAtS47ewvaMCNwPRim_Wkof1am0WibxA2I,205
46
+ bake/ui/run/run.py,sha256=qfDgy-YqcexJyHhSjnQ5IXipBDoK-umwKq-wAn8ZITU,17504
47
+ bake/ui/run/script.py,sha256=fk7KiDklYDYpFGkH3wu-hZGI4OnvgcB8z5jtNt41Hg0,2263
48
+ bake/ui/run/splitter.py,sha256=sQt0prFGR6WCCMDr1wqk1GXBQmUSV9MNHzYzMu9Pwik,8643
49
+ bake/ui/run/uv.py,sha256=3NpnjgAwQNijJiUT_H6U-3mTHQgBZPlJbNWEeYCZY1g,2077
50
+ bake/ui/style.py,sha256=v9dferzV317Acb0GHpVK_niCj_s2HtL-yiToBZtXky4,70
51
+ bake/utils/__init__.py,sha256=GUu_xlJy3RAHo6UcZXu2x4khxGqLHMA9Zos4hDiQIY8,326
52
+ bake/utils/constants.py,sha256=mRq5IpgOTdlHOTWPq5dx0A-LwhiFkWgYHfr8cLWG7rY,471
53
+ bake/utils/env.py,sha256=bzNdH_2bTJebQaw7D0uVJv-vzZ-uYl0pCAS8oQONVsA,190
54
+ bake/utils/exceptions.py,sha256=pwsQnKH5ljMNxmqEREutXa7TohiBHATHg_D5kQUPT30,519
55
+ bakelib/__init__.py,sha256=sZeRiNINWL8xI3b1MxkGyF3f2lKMjyhjKt7qyCCAufs,126
56
+ bakelib/space/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ bakelib/space/base.py,sha256=bJlpPkP85xBu8X5fJoVaHrMzX27rQrYTEPSObwBANJ8,6008
58
+ bakelib/space/python.py,sha256=UEr4Jo76T2cbAQdClVu7RvJYzflLE9i_xFohcNhjFjw,2597
59
+ bakelib/space/utils.py,sha256=xx4X_txhDH_p97CKJ-KuvFpgfNBC0y_din1IBlUVusU,2983
60
+ bakefile-0.0.6.dist-info/WHEEL,sha256=XV0cjMrO7zXhVAIyyc8aFf1VjZ33Fen4IiJk5zFlC3g,80
61
+ bakefile-0.0.6.dist-info/entry_points.txt,sha256=Ecvvh7BYHCPJ0UdntrDc3Od6AZdRPXN5Z7o_7ok_0Qw,107
62
+ bakefile-0.0.6.dist-info/METADATA,sha256=6tec3_eRxbtTAsdHJHUC1Vo4yIondUR_U28oRq2Cp1c,2331
63
+ bakefile-0.0.6.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.9.18
2
+ Generator: uv 0.9.26
3
3
  Root-Is-Purelib: true
4
- Tag: py3-none-any
4
+ Tag: py3-none-any
@@ -0,0 +1,5 @@
1
+ [console_scripts]
2
+ bake = bake.cli.bake:main
3
+ bakefile = bake.cli.bakefile:main
4
+ bf = bake.cli.bakefile:main
5
+
bakelib/__init__.py ADDED
@@ -0,0 +1,4 @@
1
+ from bakelib.space.base import BaseSpace
2
+ from bakelib.space.python import PythonSpace
3
+
4
+ __all__ = ["BaseSpace", "PythonSpace"]
File without changes