pourimoto's picture
Create core.py
2847c29 verified
Raw
History Blame Contribute Delete
1.97 kB
"""
core.py
Application orchestration
"""
from __future__ import annotations
import tempfile
import zipfile
from pathlib import Path
from builder import (
build_markdown,
build_xml,
split_output,
)
from reader import load_files
from scanner import (
scan_files,
build_tree_text,
)
from statistics import (
build_statistics,
statistics_markdown,
)
def extract_zip(zip_path: str) -> Path:
"""
Extract uploaded ZIP into temp directory.
"""
temp_dir = Path(tempfile.mkdtemp())
with zipfile.ZipFile(zip_path, "r") as z:
z.extractall(temp_dir)
items = list(temp_dir.iterdir())
if len(items) == 1 and items[0].is_dir():
return items[0]
return temp_dir
def build_context(
zip_path: str,
ignored_dirs: str,
allowed_extensions: set[str] | None,
max_size_mb: float,
output_format: str,
max_tokens: int,
include_hash: bool,
):
root = extract_zip(zip_path)
ignore = {
x.strip()
for x in ignored_dirs.split(",")
if x.strip()
}
files = scan_files(
root=root,
extra_ignore_dirs=ignore,
max_size_mb=max_size_mb,
allowed_extensions=allowed_extensions,
)
contents = load_files(files)
stats = build_statistics(
files,
contents,
)
if output_format.lower() == "xml":
text = build_xml(
root,
contents,
include_hash,
)
ext = "xml"
else:
text = build_markdown(
root,
contents,
include_hash,
)
ext = "md"
chunks = split_output(
text,
max_tokens,
)
tree = build_tree_text(
root,
files,
)
preview = text[:3000]
return {
"statistics": statistics_markdown(stats),
"tree": tree,
"preview": preview,
"chunks": chunks,
"extension": ext,
}