mdify-cli 2.10.0__py3-none-any.whl → 2.11.0__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.
- mdify/__init__.py +1 -1
- mdify/cli.py +22 -2
- mdify/container.py +46 -0
- {mdify_cli-2.10.0.dist-info → mdify_cli-2.11.0.dist-info}/METADATA +1 -1
- mdify_cli-2.11.0.dist-info/RECORD +12 -0
- mdify_cli-2.10.0.dist-info/RECORD +0 -12
- {mdify_cli-2.10.0.dist-info → mdify_cli-2.11.0.dist-info}/WHEEL +0 -0
- {mdify_cli-2.10.0.dist-info → mdify_cli-2.11.0.dist-info}/entry_points.txt +0 -0
- {mdify_cli-2.10.0.dist-info → mdify_cli-2.11.0.dist-info}/licenses/LICENSE +0 -0
- {mdify_cli-2.10.0.dist-info → mdify_cli-2.11.0.dist-info}/top_level.txt +0 -0
mdify/__init__.py
CHANGED
mdify/cli.py
CHANGED
|
@@ -38,6 +38,9 @@ SUPPORTED_RUNTIMES = ("docker", "podman", "orbstack", "colima", "container")
|
|
|
38
38
|
MACOS_RUNTIMES_PRIORITY = ("container", "orbstack", "colima", "podman", "docker")
|
|
39
39
|
OTHER_RUNTIMES_PRIORITY = ("docker", "podman")
|
|
40
40
|
|
|
41
|
+
# Debug mode
|
|
42
|
+
DEBUG = os.environ.get("MDIFY_DEBUG", "").lower() in ("1", "true", "yes")
|
|
43
|
+
|
|
41
44
|
|
|
42
45
|
# =============================================================================
|
|
43
46
|
# Update checking functions
|
|
@@ -294,8 +297,10 @@ def check_image_exists(runtime: str, image: str) -> bool:
|
|
|
294
297
|
try:
|
|
295
298
|
images = json.loads(result.stdout.decode())
|
|
296
299
|
# Check if image exists in the list
|
|
300
|
+
# Apple Container returns format: [{"reference": "image:tag", "descriptor": {...}}]
|
|
297
301
|
for img in images:
|
|
298
|
-
|
|
302
|
+
reference = img.get("reference", "")
|
|
303
|
+
if reference == image or reference.startswith(f"{image}:"):
|
|
299
304
|
return True
|
|
300
305
|
except json.JSONDecodeError:
|
|
301
306
|
pass
|
|
@@ -813,6 +818,10 @@ def main() -> int:
|
|
|
813
818
|
|
|
814
819
|
image_exists = check_image_exists(runtime, image)
|
|
815
820
|
|
|
821
|
+
if not args.quiet and image_exists:
|
|
822
|
+
print(f"Using cached image: {image}")
|
|
823
|
+
print()
|
|
824
|
+
|
|
816
825
|
# NOTE: Docker Desktop on macOS/Windows uses a VM, so disk space checks may not
|
|
817
826
|
# accurately reflect available space in the container's filesystem. Remote Docker
|
|
818
827
|
# daemons (DOCKER_HOST) are also not supported. In these cases, the check will
|
|
@@ -977,6 +986,9 @@ def main() -> int:
|
|
|
977
986
|
start_time = time.time()
|
|
978
987
|
try:
|
|
979
988
|
# Convert via HTTP API
|
|
989
|
+
if DEBUG:
|
|
990
|
+
print(f" DEBUG: Converting {input_file.name} via {container.base_url}/v1/convert/file", file=sys.stderr)
|
|
991
|
+
|
|
980
992
|
result = convert_file(
|
|
981
993
|
container.base_url, input_file, to_format="md"
|
|
982
994
|
)
|
|
@@ -1017,7 +1029,15 @@ def main() -> int:
|
|
|
1017
1029
|
print(
|
|
1018
1030
|
f"{progress} {input_file.name} ✗ ({format_duration(elapsed)})"
|
|
1019
1031
|
)
|
|
1020
|
-
print(f" Error: Container crashed
|
|
1032
|
+
print(f" Error: Container crashed while processing file", file=sys.stderr)
|
|
1033
|
+
print(f" File may be too complex, large, or malformed", file=sys.stderr)
|
|
1034
|
+
print(f" Retrieving container logs...", file=sys.stderr)
|
|
1035
|
+
# Get last 20 lines of container logs for debugging
|
|
1036
|
+
logs = container.get_logs(tail=20)
|
|
1037
|
+
if logs:
|
|
1038
|
+
print(f" Container logs (last 20 lines):", file=sys.stderr)
|
|
1039
|
+
for line in logs.strip().split('\n'):
|
|
1040
|
+
print(f" {line}", file=sys.stderr)
|
|
1021
1041
|
print(f" Stopping remaining conversions", file=sys.stderr)
|
|
1022
1042
|
break
|
|
1023
1043
|
|
mdify/container.py
CHANGED
|
@@ -125,6 +125,48 @@ class DoclingContainer:
|
|
|
125
125
|
check=False,
|
|
126
126
|
)
|
|
127
127
|
|
|
128
|
+
def get_logs(self, tail: int = 50) -> str:
|
|
129
|
+
"""Get container logs for debugging.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
tail: Number of lines to retrieve from end of logs
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
Container logs as string
|
|
136
|
+
"""
|
|
137
|
+
if not self.container_name:
|
|
138
|
+
return ""
|
|
139
|
+
|
|
140
|
+
try:
|
|
141
|
+
result = subprocess.run(
|
|
142
|
+
[self.runtime, "logs", "--tail", str(tail), self.container_name],
|
|
143
|
+
capture_output=True,
|
|
144
|
+
text=True,
|
|
145
|
+
check=False,
|
|
146
|
+
)
|
|
147
|
+
return result.stdout if result.returncode == 0 else ""
|
|
148
|
+
except Exception:
|
|
149
|
+
return ""
|
|
150
|
+
|
|
151
|
+
def is_running(self) -> bool:
|
|
152
|
+
"""Check if container process is still running.
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
True if container is running, False otherwise
|
|
156
|
+
"""
|
|
157
|
+
if not self.container_name:
|
|
158
|
+
return False
|
|
159
|
+
|
|
160
|
+
try:
|
|
161
|
+
result = subprocess.run(
|
|
162
|
+
[self.runtime, "ps", "-q", "-f", f"name={self.container_name}"],
|
|
163
|
+
capture_output=True,
|
|
164
|
+
check=False,
|
|
165
|
+
)
|
|
166
|
+
return result.returncode == 0 and bool(result.stdout.strip())
|
|
167
|
+
except Exception:
|
|
168
|
+
return False
|
|
169
|
+
|
|
128
170
|
def is_ready(self) -> bool:
|
|
129
171
|
"""Check if container is healthy.
|
|
130
172
|
|
|
@@ -132,6 +174,10 @@ class DoclingContainer:
|
|
|
132
174
|
True if container is healthy, False otherwise
|
|
133
175
|
"""
|
|
134
176
|
try:
|
|
177
|
+
# First check if container is still running
|
|
178
|
+
if not self.is_running():
|
|
179
|
+
return False
|
|
180
|
+
# Then check health endpoint
|
|
135
181
|
return check_health(self.base_url)
|
|
136
182
|
except Exception:
|
|
137
183
|
return False
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
assets/mdify.png,sha256=qUj7WXWqNwpI2KNXOW79XJwqFqa-UI0JEkmt1mmy4Rg,1820418
|
|
2
|
+
mdify/__init__.py,sha256=vKo2-djuhRrvQ09Em1Mk8XAv_Tu4lXOarH3sNvrrHmU,91
|
|
3
|
+
mdify/__main__.py,sha256=bhpJ00co6MfaVOdH4XLoW04NtLYDa_oJK7ODzfLrn9M,143
|
|
4
|
+
mdify/cli.py,sha256=9nW2mpkbgosP2CKvnNQzlAKr9R8ISDrkXWPnXnL7w1c,35983
|
|
5
|
+
mdify/container.py,sha256=JoN8mUE1hIIVnrxZwdHud70vgNo_1ZIJtmNoPwBWk8I,6647
|
|
6
|
+
mdify/docling_client.py,sha256=xuQR6sC1v3EPloOSwExoHCqT4uUxE8myYq-Yeby3C2I,7975
|
|
7
|
+
mdify_cli-2.11.0.dist-info/licenses/LICENSE,sha256=NWM66Uv-XuSMKaU-gaPmvfyk4WgE6zcIPr78wyg6GAo,1065
|
|
8
|
+
mdify_cli-2.11.0.dist-info/METADATA,sha256=QVa7y09SvJC6GnXnTLnBPJ-iqy2bKOrJT-_YPOaZFcs,9623
|
|
9
|
+
mdify_cli-2.11.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
10
|
+
mdify_cli-2.11.0.dist-info/entry_points.txt,sha256=0Xki8f5lADQUtwdt6Eq_FEaieI6Byhk8UE7BuDhChMg,41
|
|
11
|
+
mdify_cli-2.11.0.dist-info/top_level.txt,sha256=qltzf7h8owHq7dxCdfCkSHY8gT21hn1_E8P-VWS_OKM,6
|
|
12
|
+
mdify_cli-2.11.0.dist-info/RECORD,,
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
assets/mdify.png,sha256=qUj7WXWqNwpI2KNXOW79XJwqFqa-UI0JEkmt1mmy4Rg,1820418
|
|
2
|
-
mdify/__init__.py,sha256=CjafoKZ-RjxyPtnUKVPmPjquU0FlfXDBkDDWZWb1ryw,91
|
|
3
|
-
mdify/__main__.py,sha256=bhpJ00co6MfaVOdH4XLoW04NtLYDa_oJK7ODzfLrn9M,143
|
|
4
|
-
mdify/cli.py,sha256=ZQMirATkanV0l8v0-A000uXPy7BaT5BPbVFSNSnpLJM,34817
|
|
5
|
-
mdify/container.py,sha256=tkk0nv7EquL-rKUY4nkS_yGITb7mqw8B7eEfuqaeVrg,5239
|
|
6
|
-
mdify/docling_client.py,sha256=xuQR6sC1v3EPloOSwExoHCqT4uUxE8myYq-Yeby3C2I,7975
|
|
7
|
-
mdify_cli-2.10.0.dist-info/licenses/LICENSE,sha256=NWM66Uv-XuSMKaU-gaPmvfyk4WgE6zcIPr78wyg6GAo,1065
|
|
8
|
-
mdify_cli-2.10.0.dist-info/METADATA,sha256=c2dtC7VEMeSqPhgbmQBLEM5N6zOkIXfWDPocCz9Ye8E,9623
|
|
9
|
-
mdify_cli-2.10.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
10
|
-
mdify_cli-2.10.0.dist-info/entry_points.txt,sha256=0Xki8f5lADQUtwdt6Eq_FEaieI6Byhk8UE7BuDhChMg,41
|
|
11
|
-
mdify_cli-2.10.0.dist-info/top_level.txt,sha256=qltzf7h8owHq7dxCdfCkSHY8gT21hn1_E8P-VWS_OKM,6
|
|
12
|
-
mdify_cli-2.10.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|