Upload app.py
This commit is contained in:
1 parent
e9e3374032
commit
d1e33bc1d7
1 file changed
+43
@@ -0,0 +1,43 @@
|
||||
IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0NCmZyb20gZG90ZW52IGltcG9ydCBsb2FkX2RvdGVudg0KbG9hZF9kb3RlbnYoKQ0KDQoiIiINCuq4gOuylyBMaWdodCB2Mi4wDQpGbGFzayDrnbzsmrDtjIUgKyDqs7XthrUg6riw64qlDQoiIiINCg0KaW1wb3J0IG9zDQppbXBvcnQgaW8NCmltcG9ydCB0ZW1wZmlsZQ0KaW1wb3J0IGpzb24NCmltcG9ydCBzaHV0aWwNCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lDQpmcm9tIGZsYXNrIGltcG9ydCBGbGFzaywgcmVuZGVyX3RlbXBsYXRlLCByZXF1ZXN0LCBqc29uaWZ5LCBSZXNwb25zZSwgc2Vzc2lvbiwgc2VuZF9maWxlDQppbXBvcnQgcXVldWUNCmltcG9ydCB0aHJlYWRpbmcNCmZyb20gaGFuZGxlcnMudGVtcGxhdGUudGVtcGxhdGVfbWFuYWdlciBpbXBvcnQgVGVtcGxhdGVNYW5hZ2VyIA0KZnJvbSBwYXRobGliIGltcG9ydCBQYXRoDQpmcm9tIGRvbWFpbl9hcGkgaW1wb3J0IHJlZ2lzdGVyX2RvbWFpbl9yb3V0ZXMNCmZyb20gZGIgaW1wb3J0IGluaXRfZGINCg0KDQojIOusuOyEnCDsnKDtmJXrs4Qg7ZSE66Gc7IS47IScDQpmcm9tIGhhbmRsZXJzLnRlbXBsYXRlIGltcG9ydCBUZW1wbGF0ZVByb2Nlc3Nvcg0KZnJvbSBoYW5kbGVycy5icmllZmluZyBpbXBvcnQgQnJpZWZpbmdQcm9jZXNzb3INCmZyb20gaGFuZGxlcnMucmVwb3J0IGltcG9ydCBSZXBvcnRQcm9jZXNzb3INCmZyb20gaGFuZGxlcnMuZG9jLmN1c3RvbV9kb2NfdHlwZSBpbXBvcnQgQ3VzdG9tRG9jVHlwZVByb2Nlc3NvciANCmZyb20gaGFuZGxlcnMuZG9jLmRvY190eXBlX2FuYWx5emVyIGltcG9ydCBEb2NUeXBlQW5hbHl6ZXIgICAgICANCg0KYXBwID0gRmxhc2soX19uYW1lX18pDQphcHAuY29uZmlnWydNQVhfQ09OVEVOVF9MRU5HVEgnXSA9IDE2ICogMTAyNCAqIDEwMjQgICMgMTZNQiBtYXgNCmFwcC5jb25maWdbJ1NFQ1JFVF9LRVknXSA9IG9zLmVudmlyb24uZ2V0KCdTRUNSRVRfS0VZJywgJ2dldWxiZW90LWxpZ2h0LXNlY3JldC1rZXktdjInKQ0KcmVnaXN0ZXJfZG9tYWluX3JvdXRlcyhhcHApICANCmluaXRfZGIoKQ0KDQoNCiMgcHJvY2Vzc29ycyDrlJXshZTrhIjrpqzsl5Ag7LaU6rCADQp0ZW1wbGF0ZV9tZ3IgPSBUZW1wbGF0ZU1hbmFnZXIoKQ0KcHJvY2Vzc29ycyA9IHsNCiAgICAnYnJpZWZpbmcnOiBCcmllZmluZ1Byb2Nlc3NvcigpLA0KICAgICdyZXBvcnQnOiBSZXBvcnRQcm9jZXNzb3IoKSwNCiAgICAndGVtcGxhdGUpOiBUZW1wbGF0ZVByb2Nlc3NvcigpLA0KICAgICdjdXN0b20nOiBDdXN0b21Eb2NUeXBlUHJvY2Vzc29yKCkNCn0NCg0KRE9DX1RZUEVTX0RFRkFVTFQgPSBQYXRoKCd0ZW1wbGF0ZXMvZGVmYXVsdC9kb2NfdHlwZXMnKQ0KRE9DX1RZUEVTX1VTRVIgPSBQYXRoKCd0ZW1wbGF0ZXMvdXNlci9kb2NfdHlwZXMnKQ0KDQoNCiMgPT09PT09PT09PT09PT0g66mU7J24IO2OmOydtOyngCA9PT09PT09PT09PT09PQ0KQGFwcC5yb3V0ZSgnLycpDQpkZWYgaW5kZXgoKToNCiAgICAiIiLrqZTsnbgg7Y6Y7J207KeAIiIiDQogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgnaW5kZXguaHRtbCcpDQoNCg0KQGFwcC5yb3V0ZSgnL2FwaS9kb2MtdHlwZXMnLCBtZXRob2RzPVsnR0VUJ10pDQpkZWYgZ2V0X2RvY190eXBlcygpOg0KICAgICIiIuusuOyEnCDsnKDtmJUg66qp66GdIOyhsO2ajCIiIg0KICAgIHRyeToNCiAgICAgICAgZG9jX3R5cGVzID0gW10NCiAgICAgICAgDQogICAgICAgICMgZGVmYXVsdCDtj7TrjZQg7Iqk7LqUDQogICAgICAgIGlmIERPQ19UWVBFU19ERUZBVUxULmV4aXN0cygpOg0KICAgICAgICAgICAgZm9yIGZvbGRlciBpbiBET0NfVFlQRVNfREVGQVVMVC5pdGVyZGlyKCk6DQogICAgICAgICAgICAgICAgaWYgZm9sZGVyLmlzX2RpcigpOg0KICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZSA9IGZvbGRlciAvICdjb25maWcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgY29uZmlnX2ZpbGUuZXhpc3RzKCk6DQogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZmlnX2ZpbGUsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NfdHlwZXMuYXBwZW5kKGpzb24ubG9hZChmKSkNCiAgICAgICAgDQogICAgICAgICMgdXNlciDtj7TrjZQg7Iqk7LqUDQogICAgICAgIGlmIERPQ19UWVBFU19VU0VSLmV4aXN0cygpOg0KICAgICAgICAgICAgZm9yIGZvbGRlciBpbiBET0NfVFlQRVNfVVNFUi5pdGVyZGlyKCk6DQogICAgICAgICAgICAgICAgaWYgZm9sZGVyLmlzX2RpcigpOg0KICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZSA9IGZvbGRlciAvICdjb25maWcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgY29uZmlnX2ZpbGUuZXhpc3RzKCk6DQogICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZmlnX2ZpbGUsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NfdHlwZXMuYXBwZW5kKGpzb24ubG9hZChmKSkNCiAgICAgICAgDQogICAgICAgICMgb3JkZXIg4oaSIGlzRGVmYXVsdCDsiJwg7KCV66CsDQogICAgICAgIGRvY190eXBlcy5zb3J0KGtleT1sYW1iZGEgeDogKHguZ2V0KCdvcmRlcicsIDk5OSksIG5vdCB4LmdldCgnaXNEZWZhdWx0JywgRmFsc2UpKSkNCiAgICAgICAgDQogICAgICAgIHJldHVybiBqc29uaWZ5KGRvY190eXBlcykNCiAgICAgICAgDQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KICAgICAgICBpbXBvcnQgdHJhY2ViYWNrDQogICAgICAgIHJldHVybiBqc29uaWZ5KHsnZXJyb3InOiBzdHIoZSksICd0cmFjZSc6IHRyYWNlYmFjay5mb3JtYXRfZXhjKCl9KSwgNTAwDQoNCg0KQGFwcC5yb3V0ZSgnL2FwaS9kb2MtdHlwZXMnLCBtZXRob2RzPVsnUE9TVCddKQ0KZGVmIGFkZF9kb2NfdHlwZSgpOg0KICAgICIiIuusuOyEnCDsnKDtmJUg7LaU6rCAICjrtoTshJ0g6rKw6rO8IOyggOyepSkiIiINCiAgICB0cnk6DQogICAgICAgIGRhdGEgPSByZXF1ZXN0LmdldF9qc29uKCkNCiAgICAgICAgDQogICAgICAgIGlmIG5vdCBkYXRhOg0KICAgICAgICAgICAgcmV0dXJuIGpzb25pZnkoeydlcnJvcic6ICdKU09OIOuNsOydtO2EsOqwgCDtlYTsmpTtlanri4jri6QnfSksIDQwMA0KICAgICAgICANCiAgICAgICAgIyB1c2VyIO2PtOuNlCDsg53shLENCiAgICAgICAgRE9DX1RZUEVTX1VTRVIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKQ0KICAgICAgICANCiAgICAgICAgdHlwZV9pZCA9IGRhdGEuZ2V0KCdpZCcpDQogICAgICAgIGlmIG5vdCB0eXBlX2lkOg0KICAgICAgICAgICAgaW1wb3J0IHRpbWUNCiAgICAgICAgICAgIHR5cGVfaWQgPSBmInVzZXJfe2ludCh0aW1lLnRpbWUoKSl9Ig0KICAgICAgICAgICAgZGF0YVsnaWQnXSA9IHR5cGVfaWQNCiAgICAgICAgDQogICAgICAgIGZvbGRlcl9wYXRoID0gRE9DX1RZUEVTX1VTRVIgLyB0eXBlX2lkDQogICAgICAgIGZvbGRlcl9wYXRoLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkNCiAgICAgICAgDQogICAgICAgICMgY29uZmlnLmpzb24g7KCA7J6lDQogICAgICAgIHdpdGggb3Blbihmb2xkZXJfcGF0aCAvICdjb25maWcuanNvbicsICd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoNCiAgICAgICAgICAgIGpzb24uZHVtcChkYXRhLCBmLCBlbnN1cmVfYXNjaWk9RmFsc2UsIGluZGVudD0yKQ0KICAgICAgICANCiAgICAgICAgcmV0dXJuIGpLine truncated
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
|
||||
@app.route('/api/generate-report', methods=['POST'])
|
||||
def generate_report():
|
||||
"""문서 생성 (전체 프로세스)"""
|
||||
try:
|
||||
data = request.get_json()
|
||||
session_id = data.get('session_id')
|
||||
doc_type = data.get('doc_type', 'report')
|
||||
|
||||
if not session_id:
|
||||
return jsonify({'error': 'session_id가 필요합니다.'}), 400
|
||||
|
||||
processor = processors.get(doc_type)
|
||||
if not processor:
|
||||
return jsonify({'error': f'지원하지 않는 문서 타입입니다: {doc_type}'}), 400
|
||||
|
||||
# 백그라운드 작업으로 실행하는 것이 좋으나, 여기서는 단순 구현을 위해 직접 실행
|
||||
result = processor.process(session_id, data)
|
||||
|
||||
return jsonify(result)
|
||||
except Exception as e:
|
||||
import traceback
|
||||
return jsonify({'error': str(e), 'trace': traceback.format_exc()}), 500
|
||||
|
||||
|
||||
# === 정적 파일 서빙 ===
|
||||
|
||||
@app.route('/output/<path:filename>')
|
||||
def serve_output(filename):
|
||||
return send_file(os.path.join('output', filename))
|
||||
|
||||
@app.route('/static/<path:filename>')
|
||||
def serve_static(filename):
|
||||
return send_file(os.path.join('static', filename))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# DB 초기화 및 서버 실행
|
||||
app.run(host='0.0.0.0', port=5000, debug=True)
|
||||
Reference in new issue
Block a user