fastled 1.2.86__py3-none-any.whl → 1.2.87__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.
- fastled/__init__.py +1 -1
- fastled/compile_server_impl.py +6 -0
- fastled/docker_manager.py +6 -0
- fastled/print_filter.py +115 -0
- {fastled-1.2.86.dist-info → fastled-1.2.87.dist-info}/METADATA +1 -1
- {fastled-1.2.86.dist-info → fastled-1.2.87.dist-info}/RECORD +10 -10
- {fastled-1.2.86.dist-info → fastled-1.2.87.dist-info}/WHEEL +0 -0
- {fastled-1.2.86.dist-info → fastled-1.2.87.dist-info}/entry_points.txt +0 -0
- {fastled-1.2.86.dist-info → fastled-1.2.87.dist-info}/licenses/LICENSE +0 -0
- {fastled-1.2.86.dist-info → fastled-1.2.87.dist-info}/top_level.txt +0 -0
fastled/__init__.py
CHANGED
@@ -14,7 +14,7 @@ from .types import BuildMode, CompileResult, CompileServerError, FileResponse
|
|
14
14
|
# IMPORTANT! There's a bug in github which will REJECT any version update
|
15
15
|
# that has any other change in the repo. Please bump the version as the
|
16
16
|
# ONLY change in a commit, or else the pypi update and the release will fail.
|
17
|
-
__version__ = "1.2.
|
17
|
+
__version__ = "1.2.87"
|
18
18
|
|
19
19
|
|
20
20
|
class Api:
|
fastled/compile_server_impl.py
CHANGED
@@ -25,6 +25,10 @@ SERVER_OPTIONS = [
|
|
25
25
|
"--no-auto-update", # Don't auto live updates from the git repo.
|
26
26
|
]
|
27
27
|
|
28
|
+
LOCAL_DOCKER_ENV = {
|
29
|
+
"ONLY_QUICK_BUILDS": "0" # When running docker always allow release and debug.
|
30
|
+
}
|
31
|
+
|
28
32
|
|
29
33
|
def _try_get_fastled_src(path: Path) -> Path | None:
|
30
34
|
fastled_src_dir: Path | None = None
|
@@ -310,6 +314,7 @@ class CompileServerImpl:
|
|
310
314
|
ports=ports,
|
311
315
|
volumes=volumes,
|
312
316
|
remove_previous=self.interactive or self.remove_previous or updated,
|
317
|
+
environment=LOCAL_DOCKER_ENV,
|
313
318
|
)
|
314
319
|
self.running_container = self.docker.attach_and_run(container)
|
315
320
|
assert self.running_container is not None, "Container should be running"
|
@@ -330,6 +335,7 @@ class CompileServerImpl:
|
|
330
335
|
command=cmd_str,
|
331
336
|
ports=ports,
|
332
337
|
volumes=volumes,
|
338
|
+
environment=LOCAL_DOCKER_ENV,
|
333
339
|
)
|
334
340
|
|
335
341
|
print("Exiting interactive mode")
|
fastled/docker_manager.py
CHANGED
@@ -533,6 +533,7 @@ class DockerManager:
|
|
533
533
|
volumes: list[Volume] | None = None,
|
534
534
|
ports: dict[int, int] | None = None,
|
535
535
|
remove_previous: bool = False,
|
536
|
+
environment: dict[str, str] | None = None,
|
536
537
|
) -> Container:
|
537
538
|
"""
|
538
539
|
Run a container from an image. If it already exists with matching config, start it.
|
@@ -617,6 +618,7 @@ class DockerManager:
|
|
617
618
|
tty=True,
|
618
619
|
volumes=volumes_dict,
|
619
620
|
ports=ports, # type: ignore
|
621
|
+
environment=environment,
|
620
622
|
remove=True,
|
621
623
|
)
|
622
624
|
return container
|
@@ -629,6 +631,7 @@ class DockerManager:
|
|
629
631
|
command: str | None = None,
|
630
632
|
volumes: list[Volume] | None = None,
|
631
633
|
ports: dict[int, int] | None = None,
|
634
|
+
environment: dict[str, str] | None = None,
|
632
635
|
) -> None:
|
633
636
|
# Convert volumes to the format expected by Docker API
|
634
637
|
volumes = _hack_to_fix_mac(volumes)
|
@@ -663,6 +666,9 @@ class DockerManager:
|
|
663
666
|
if ports:
|
664
667
|
for host_port, container_port in ports.items():
|
665
668
|
docker_command.extend(["-p", f"{host_port}:{container_port}"])
|
669
|
+
if environment:
|
670
|
+
for env_name, env_value in environment.items():
|
671
|
+
docker_command.extend(["-e", f"{env_name}={env_value}"])
|
666
672
|
docker_command.append(f"{image_name}:{tag}")
|
667
673
|
if command:
|
668
674
|
docker_command.append(command)
|
fastled/print_filter.py
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
import re
|
2
|
+
import zlib
|
2
3
|
from abc import ABC, abstractmethod
|
4
|
+
from dataclasses import dataclass
|
5
|
+
from enum import Enum
|
3
6
|
|
4
7
|
|
5
8
|
class PrintFilter(ABC):
|
@@ -56,6 +59,8 @@ class PrintFilterFastled(PrintFilter):
|
|
56
59
|
def __init__(self, echo: bool = True) -> None:
|
57
60
|
super().__init__(echo)
|
58
61
|
self.build_started = False
|
62
|
+
# self.compile_link_active = False
|
63
|
+
# self.compile_link_filter:
|
59
64
|
|
60
65
|
def filter(self, text: str) -> str:
|
61
66
|
lines = text.splitlines()
|
@@ -73,3 +78,113 @@ class PrintFilterFastled(PrintFilter):
|
|
73
78
|
out.append(line)
|
74
79
|
text = "\n".join(out)
|
75
80
|
return text
|
81
|
+
|
82
|
+
|
83
|
+
class CompileOrLink(Enum):
|
84
|
+
COMPILE = "compile"
|
85
|
+
LINK = "link"
|
86
|
+
|
87
|
+
|
88
|
+
@dataclass
|
89
|
+
class BuildArtifact:
|
90
|
+
timestamp: float
|
91
|
+
input_artifact: str | None
|
92
|
+
output_artifact: str | None
|
93
|
+
build_flags: str
|
94
|
+
compile_or_link: CompileOrLink
|
95
|
+
hash: int
|
96
|
+
|
97
|
+
def __str__(self) -> str:
|
98
|
+
return f"{self.timestamp} {self.output_artifact} {self.build_flags} {self.compile_or_link} {self.hash}"
|
99
|
+
|
100
|
+
@staticmethod
|
101
|
+
def parse(input_str: str) -> "BuildArtifact | None":
|
102
|
+
"""
|
103
|
+
Parse a single build-log line of the form:
|
104
|
+
"<timestamp> ... <some .cpp or .h file> ... <flags>"
|
105
|
+
|
106
|
+
Returns a BuildArtifact, or None if parsing failed.
|
107
|
+
"""
|
108
|
+
return _parse(input_str)
|
109
|
+
|
110
|
+
|
111
|
+
class TokenFilter(ABC):
|
112
|
+
@abstractmethod
|
113
|
+
def extract(self, tokens: list[str]) -> str | None:
|
114
|
+
"""
|
115
|
+
Scan `tokens`, remove any tokens this filter is responsible for,
|
116
|
+
and return the extracted string (or None if not found/invalid).
|
117
|
+
"""
|
118
|
+
...
|
119
|
+
|
120
|
+
|
121
|
+
class TimestampFilter(TokenFilter):
|
122
|
+
def extract(self, tokens: list[str]) -> str | None:
|
123
|
+
if not tokens:
|
124
|
+
return None
|
125
|
+
candidate = tokens[0]
|
126
|
+
try:
|
127
|
+
_ = float(candidate)
|
128
|
+
return tokens.pop(0)
|
129
|
+
except ValueError:
|
130
|
+
return None
|
131
|
+
|
132
|
+
|
133
|
+
class InputArtifactFilter(TokenFilter):
|
134
|
+
def extract(self, tokens: list[str]) -> str | None:
|
135
|
+
for i, tok in enumerate(tokens):
|
136
|
+
if tok.endswith(".cpp") or tok.endswith(".h"):
|
137
|
+
return tokens.pop(i)
|
138
|
+
return None
|
139
|
+
|
140
|
+
|
141
|
+
class OutputArtifactFilter(TokenFilter):
|
142
|
+
def extract(self, tokens: list[str]) -> str | None:
|
143
|
+
for i, tok in enumerate(tokens):
|
144
|
+
if tok == "-o" and i + 1 < len(tokens):
|
145
|
+
tokens.pop(i) # drop '-o'
|
146
|
+
return tokens.pop(i) # drop & return artifact
|
147
|
+
return None
|
148
|
+
|
149
|
+
|
150
|
+
class ActionFilter(TokenFilter):
|
151
|
+
def extract(self, tokens: list[str]) -> str | None:
|
152
|
+
if "-c" in tokens:
|
153
|
+
return CompileOrLink.COMPILE.value
|
154
|
+
return CompileOrLink.LINK.value
|
155
|
+
|
156
|
+
|
157
|
+
def _parse(line: str) -> BuildArtifact | None:
|
158
|
+
tokens = line.strip().split()
|
159
|
+
if not tokens:
|
160
|
+
return None
|
161
|
+
|
162
|
+
# instantiate in the order we need them
|
163
|
+
filters: list[TokenFilter] = [
|
164
|
+
TimestampFilter(),
|
165
|
+
InputArtifactFilter(),
|
166
|
+
OutputArtifactFilter(),
|
167
|
+
ActionFilter(),
|
168
|
+
]
|
169
|
+
|
170
|
+
# apply each filter
|
171
|
+
raw_ts = filters[0].extract(tokens)
|
172
|
+
raw_in = filters[1].extract(tokens)
|
173
|
+
raw_out = filters[2].extract(tokens)
|
174
|
+
raw_act = filters[3].extract(tokens)
|
175
|
+
|
176
|
+
if raw_ts is None or raw_in is None or raw_act is None:
|
177
|
+
return None
|
178
|
+
|
179
|
+
# the rest of `tokens` are the flags
|
180
|
+
flags_str = " ".join(tokens)
|
181
|
+
h = zlib.adler32(flags_str.encode("utf-8"))
|
182
|
+
|
183
|
+
return BuildArtifact(
|
184
|
+
timestamp=float(raw_ts),
|
185
|
+
input_artifact=raw_in,
|
186
|
+
output_artifact=raw_out,
|
187
|
+
build_flags=flags_str,
|
188
|
+
compile_or_link=CompileOrLink(raw_act),
|
189
|
+
hash=h,
|
190
|
+
)
|
@@ -1,12 +1,12 @@
|
|
1
|
-
fastled/__init__.py,sha256=
|
1
|
+
fastled/__init__.py,sha256=pXj8FDhKR-hgY-Su4vkm_F5lh4GrG-pJ8tYX73QaSxE,7044
|
2
2
|
fastled/app.py,sha256=0W8Mbplo5UCRzj7nMVgkmCBddQGufsUQjkUUT4pMp74,4611
|
3
3
|
fastled/cli.py,sha256=FjVr31ht0UPlAcmX-84NwfAGMQHTkrCe4o744jCAxiw,375
|
4
4
|
fastled/cli_test.py,sha256=qJB9yLRFR3OwOwdIWSQ0fQsWLnA37v5pDccufiP_hTs,512
|
5
5
|
fastled/cli_test_interactive.py,sha256=BjNhveZOk5aCffHbcrxPQQjWmAuj4ClVKKcKX5eY6yM,542
|
6
6
|
fastled/client_server.py,sha256=4oRDccFMifTZPPtOYIfo4xJBJ8oE7gylVF75Rhytwig,17319
|
7
7
|
fastled/compile_server.py,sha256=sRiXYzw7lv9vcWJWGPUkzOGZPmvZGV_TGwbHYoRc15s,3155
|
8
|
-
fastled/compile_server_impl.py,sha256=
|
9
|
-
fastled/docker_manager.py,sha256=
|
8
|
+
fastled/compile_server_impl.py,sha256=FxTuQTojpA7j59v7zSGh1LEeG4Yu0MFgW9SKfHpspQg,13243
|
9
|
+
fastled/docker_manager.py,sha256=_qoDW34jEHTn3Yvxkv8iRUCr2csJnW6okT-FkXhJxzE,35468
|
10
10
|
fastled/filewatcher.py,sha256=3qS3L7zMQhFuVrkeGn1djsB_cB6x_E2YGJmmQWVAU_w,10033
|
11
11
|
fastled/keyboard.py,sha256=UTAsqCn1UMYnB8YDzENiLTj4GeL45tYfEcO7_5fLFEg,3556
|
12
12
|
fastled/keyz.py,sha256=LO-8m_7CpNDiZLM-FXhQ30f9gN1bUYz5lOsUPTIbI-c,4020
|
@@ -14,7 +14,7 @@ fastled/live_client.py,sha256=yoAul8tVgbbPf1oEC79SUZSHkLECxlrXxgWR9XaBIp4,2957
|
|
14
14
|
fastled/open_browser.py,sha256=DFyMrc1qic4Go7eLNPqMaLuMvTaE73NixdfSKV0yyp8,3709
|
15
15
|
fastled/parse_args.py,sha256=waNeATOEz8D50Py5-9p6HcVSa21piTOAWOXS3ag8PYo,9428
|
16
16
|
fastled/paths.py,sha256=VsPmgu0lNSCFOoEC0BsTYzDygXqy15AHUfN-tTuzDZA,99
|
17
|
-
fastled/print_filter.py,sha256=
|
17
|
+
fastled/print_filter.py,sha256=B0v493WAFN8DgG7aqM8iXMqI_V1EdMMvOnNQ26JNUxU,5499
|
18
18
|
fastled/project_init.py,sha256=bBt4DwmW5hZkm9ICt9Qk-0Nr_0JQM7icCgH5Iv-bCQs,3984
|
19
19
|
fastled/select_sketch_directory.py,sha256=-eudwCns3AKj4HuHtSkZAFwbnf005SNL07pOzs9VxnE,1383
|
20
20
|
fastled/server_flask.py,sha256=fbLuF993pbBqoyMbjHT1GPwjlxBib3cUUW719PNfN1w,18108
|
@@ -33,9 +33,9 @@ fastled/site/build.py,sha256=2YKU_UWKlJdGnjdbAbaL0co6kceFMSTVYwH1KCmgPZA,13987
|
|
33
33
|
fastled/site/examples.py,sha256=s6vj2zJc6BfKlnbwXr1QWY1mzuDBMt6j5MEBOWjO_U8,155
|
34
34
|
fastled/test/can_run_local_docker_tests.py,sha256=LEuUbHctRhNNFWcvnz2kEGmjDJeXO4c3kNpizm3yVJs,400
|
35
35
|
fastled/test/examples.py,sha256=GfaHeY1E8izBl6ZqDVjz--RHLyVR4NRnQ5pBesCFJFY,1673
|
36
|
-
fastled-1.2.
|
37
|
-
fastled-1.2.
|
38
|
-
fastled-1.2.
|
39
|
-
fastled-1.2.
|
40
|
-
fastled-1.2.
|
41
|
-
fastled-1.2.
|
36
|
+
fastled-1.2.87.dist-info/licenses/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
|
37
|
+
fastled-1.2.87.dist-info/METADATA,sha256=WLh9Pi4s5hfiXZRVV2jW7sK0oyxDq_yU3eb7ZeKdZAc,21940
|
38
|
+
fastled-1.2.87.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
|
39
|
+
fastled-1.2.87.dist-info/entry_points.txt,sha256=RCwmzCSOS4-C2i9EziANq7Z2Zb4KFnEMR1FQC0bBwAw,101
|
40
|
+
fastled-1.2.87.dist-info/top_level.txt,sha256=Bbv5kpJpZhWNCvDF4K0VcvtBSDMa8B7PTOrZa9CezHY,8
|
41
|
+
fastled-1.2.87.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|