46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
"""Run the existing extraction API headlessly and stream JSON lines to the popup."""
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
|
|
def emit(kind, **values):
|
|
print(json.dumps(dict(type=kind, **values), ensure_ascii=False), flush=True)
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('mode', choices=['choose', 'extract'])
|
|
parser.add_argument('folder', nargs='?')
|
|
parser.add_argument('--output')
|
|
args = parser.parse_args()
|
|
if args.mode == 'choose':
|
|
import tkinter as tk
|
|
from tkinter import filedialog
|
|
root = tk.Tk()
|
|
root.withdraw()
|
|
root.attributes('-topmost', True)
|
|
try:
|
|
folder = filedialog.askdirectory(parent=root, title='DWG 도면이 들어 있는 폴더 선택')
|
|
finally:
|
|
root.destroy()
|
|
emit('folder', folder=folder)
|
|
return
|
|
if not args.folder or not args.output:
|
|
raise ValueError('도면 폴더와 결과 경로가 필요합니다.')
|
|
project = Path(__file__).resolve().parent.parent
|
|
sys.path.insert(0, str(project / '도면추출'))
|
|
from integration.bridge_extract import extract_folder
|
|
result = extract_folder(args.folder, output_dir=args.output,
|
|
on_progress=lambda message: emit('log', message=message))
|
|
emit('result', result=result.to_dict(include_data=False))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
main()
|
|
except Exception as error:
|
|
emit('error', message=str(error))
|
|
sys.exit(1)
|