feat: 1차 과제 프로젝트 코드 업로드

This commit is contained in:
eglee committed 2026-10-27 11:01:12 +09:00
1 parent 9cee9bf791
commit 9df1bcfc2a
12 files changed
+129 -6

No files matched your search

+6 -3
View File
@@ -516,7 +516,9 @@ def initial_scene(model):
return ''.join(result)
def build(dxf=DEFAULT_DXF, output=ROOT / 'dist', update_entry=True):
def build(dxf=DEFAULT_DXF, output=ROOT / 'dist', update_entry=True, port=8000):
if not isinstance(port, int) or not 1 <= port <= 65535:
raise ValueError('포트는 1~65535 사이의 정수여야 합니다.')
dxf, output = Path(dxf).resolve(), Path(output).resolve()
if output == ROOT or output == ROOT / 'drawing':
raise ValueError('출력 폴더는 dist 같은 별도 폴더로 지정해 주세요.')
@@ -524,6 +526,7 @@ def build(dxf=DEFAULT_DXF, output=ROOT / 'dist', update_entry=True):
model, svg = payload['model'], payload['drawingSvg']
output.mkdir(parents=True, exist_ok=True)
template = (ROOT / 'web' / 'viewer.html').read_text(encoding='utf-8')
template = template.replace('__SERVER_PORT__', str(port)).replace('http://localhost:8000/', f'http://localhost:{port}/')
template = template.replace('__VIEWER_JS__', (ROOT / 'web' / 'viewer.js').read_text(encoding='utf-8'))
template = template.replace('__INITIAL_SCENE__', initial_scene(model)).replace('__DXF_HREF__', './drawing/' + html.escape(dxf.name, quote=True))
page = template.replace('__MODEL_JSON__', json.dumps(model, ensure_ascii=False, separators=(',', ':')).replace('<', '\\u003c')).replace('__DRAWING_SVG__', svg)
@@ -545,11 +548,11 @@ def main():
parser.add_argument('command', choices=['build', 'serve'], nargs='?', default='serve')
parser.add_argument('--dxf', type=Path, default=DEFAULT_DXF)
parser.add_argument('--output', type=Path, default=ROOT / 'dist')
parser.add_argument('--host', default='127.0.0.1', help='다른 기기에서 접속하려면 0.0.0.0')
parser.add_argument('--host', default='0.0.0.0', help='수신 주소 (기본: 0.0.0.0, 로컬 전용: 127.0.0.1)')
parser.add_argument('--port', type=int, default=8000)
args = parser.parse_args()
try:
build(args.dxf, args.output)
build(args.dxf, args.output, port=args.port)
if args.command == 'serve':
handler = functools.partial(ViewerHandler, directory=str(args.output.resolve()))
with http.server.ThreadingHTTPServer((args.host, args.port), handler) as server: