|
20 | 20 | from typing import Any |
21 | 21 |
|
22 | 22 | import requests |
| 23 | +from pathvalidate import sanitize_filename |
23 | 24 |
|
24 | 25 | try: |
25 | 26 | import progressbar # pyright: ignore [reportMissingTypeStubs] |
|
32 | 33 |
|
33 | 34 | REQUEST_TIMEOUT = 60 |
34 | 35 |
|
35 | | -__version__ = "1.0.1" |
| 36 | +__version__ = "1.1.0" |
36 | 37 | logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") |
37 | 38 | logger = logging.getLogger("docker-export") |
38 | 39 | logging.getLogger("urllib3").setLevel(logging.WARNING) |
@@ -230,30 +231,32 @@ class Image: |
230 | 231 | tag: str |
231 | 232 | digest: str |
232 | 233 |
|
233 | | - def __str__(self): |
| 234 | + def __str__(self) -> str: |
234 | 235 | value = f"{self.registry}/{self.repository}/{self.name}:{self.tag}" |
235 | 236 | if self.digest: |
236 | 237 | value += f"@{self.digest}" |
237 | 238 | return value |
238 | 239 |
|
239 | 240 | @property |
240 | | - def fullname(self): |
| 241 | + def fullname(self) -> str: |
241 | 242 | return f"{self.repository}/{self.name}" |
242 | 243 |
|
243 | 244 | @property |
244 | | - def reg_fullname(self): |
| 245 | + def reg_fullname(self) -> str: |
245 | 246 | return f"{self.registry}/{self.fullname}" |
246 | 247 |
|
247 | 248 | @property |
248 | | - def fs_name(self): |
249 | | - return "_".join(pathlib.Path(self.reg_fullname).parts) |
| 249 | + def fs_name(self) -> str: |
| 250 | + return sanitize_filename( |
| 251 | + "_".join(pathlib.Path(self.reg_fullname).parts) + f"_{self.reference}" |
| 252 | + ) |
250 | 253 |
|
251 | 254 | @property |
252 | 255 | def reference(self): |
253 | 256 | return self.digest or self.tag |
254 | 257 |
|
255 | 258 | @property |
256 | | - def url(self): |
| 259 | + def url(self) -> str: |
257 | 260 | domain = ( |
258 | 261 | "hub.docker.com" if self.registry == "index.docker.io" else self.registry |
259 | 262 | ) |
@@ -903,7 +906,7 @@ def main(): |
903 | 906 | image = Image.parse(**args) |
904 | 907 | dest = pathlib.Path(output).expanduser().resolve() |
905 | 908 | if not dest.suffix == ".tar": |
906 | | - dest = dest.joinpath(f"{image.fs_name}.tar") |
| 909 | + dest = dest.joinpath(sanitize_filename(f"{image.fs_name}_{platform}.tar")) |
907 | 910 | build_dir = ( |
908 | 911 | pathlib.Path(build_dir).expanduser().resolve() if build_dir else None |
909 | 912 | ) |
|
0 commit comments