Update app.py
Browse files
app.py
CHANGED
|
@@ -0,0 +1,207 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
from datetime import datetime, timedelta
|
| 3 |
+
import gradio as gr
|
| 4 |
+
|
| 5 |
+
def simulate_file_naming(name_option, additional_name, add_date, add_time):
|
| 6 |
+
# ๊ณ ์ ๋ ์๋ณธ ํ์ผ๋ช
|
| 7 |
+
original_filename = "sample.jpg"
|
| 8 |
+
original_name, ext = os.path.splitext(original_filename)
|
| 9 |
+
ext = ext.lstrip(".") if ext else "bin"
|
| 10 |
+
|
| 11 |
+
# ์ต์
์ ๋ฐ๋ฅธ ํ์ผ๋ช
๊ธฐ๋ณธ ๋ถ๋ถ ๊ฒฐ์
|
| 12 |
+
if name_option == "ํ์ผ๋ช
๋ณ๊ฒฝ":
|
| 13 |
+
final_base = additional_name.strip() if additional_name.strip() else "ํ์ผ"
|
| 14 |
+
option_text = f"ํ์ผ๋ช
๋ณ๊ฒฝ ({additional_name.strip() if additional_name.strip() else '๊ธฐ๋ณธ๊ฐ'})"
|
| 15 |
+
elif name_option == "ํ์ผ๋ช
์ ์ง":
|
| 16 |
+
final_base = original_name
|
| 17 |
+
option_text = "ํ์ผ๋ช
์ ์ง"
|
| 18 |
+
elif name_option == "ํ์ผ๋ช
์ ์ง + ์ถ๊ฐ๋ช
":
|
| 19 |
+
final_base = original_name + (f"_{additional_name.strip()}" if additional_name.strip() else "")
|
| 20 |
+
option_text = f"ํ์ผ๋ช
์ ์ง + ์ถ๊ฐ๋ช
({additional_name.strip() if additional_name.strip() else '์์'})"
|
| 21 |
+
elif name_option == "์ถ๊ฐ๋ช
+ ํ์ผ๋ช
์ ์ง":
|
| 22 |
+
final_base = (f"{additional_name.strip()}_" if additional_name.strip() else "") + original_name
|
| 23 |
+
option_text = f"์ถ๊ฐ๋ช
+ ํ์ผ๋ช
์ ์ง ({additional_name.strip() if additional_name.strip() else '์์'})"
|
| 24 |
+
else:
|
| 25 |
+
final_base = original_name
|
| 26 |
+
option_text = "๋ฏธ์ ํ"
|
| 27 |
+
|
| 28 |
+
# ๋ ์ง ๋ฐ ์๊ฐ stamp (ํ๊ตญ ๊ธฐ์ค)
|
| 29 |
+
now = datetime.utcnow() + timedelta(hours=9)
|
| 30 |
+
date_str = now.strftime('%Y%m%d') if add_date else ""
|
| 31 |
+
time_str = now.strftime('%H%M%S') if add_time else ""
|
| 32 |
+
timestamp = ""
|
| 33 |
+
additional_info = []
|
| 34 |
+
if add_date:
|
| 35 |
+
additional_info.append("๋ ์ง ์ ์ฉ")
|
| 36 |
+
timestamp += f"_{date_str}"
|
| 37 |
+
if add_time:
|
| 38 |
+
additional_info.append("์๊ฐ ์ ์ฉ")
|
| 39 |
+
timestamp += f"_{time_str}"
|
| 40 |
+
|
| 41 |
+
# ์ต์ข
ํ์ผ๋ช
๊ตฌ์ฑ (ํ์ฅ์ ์ ์ง)
|
| 42 |
+
final_file_name = f"{final_base}{timestamp}.{ext}"
|
| 43 |
+
|
| 44 |
+
# ์์ธ ๊ฒฐ๊ณผ ๋ฉ์์ง ๊ตฌ์ฑ
|
| 45 |
+
detail_msg = (
|
| 46 |
+
f"์๋ณธ์ด๋ฆ : {original_filename}\n"
|
| 47 |
+
f"์ต์
์ ํ : {option_text}\n"
|
| 48 |
+
f"์ถ๊ฐ : {', '.join(additional_info) if additional_info else '์์'}\n"
|
| 49 |
+
f"๊ฒฐ๊ณผ๋ช
: {final_file_name}"
|
| 50 |
+
)
|
| 51 |
+
|
| 52 |
+
return detail_msg, final_file_name
|
| 53 |
+
|
| 54 |
+
# ์ฝ๋์ถ๋ ฅ์ ํ์ํ ์ ์ฒด ์ฝ๋ ๋ฌธ์์ด (ํค๋๋ ์ ๊ฑฐ)
|
| 55 |
+
code_str = '''
|
| 56 |
+
์ ์ ํ๋ ํญ๋ชฉ๋ถ๋ถ๊ณผ ์
๋ก๋ ๋ ํ์ผ๋ช
์ ๊ธฐ๋ฐ์ผ๋ก ์๋ ์ฝ๋๋ฅผ ํ์ฉํ์ฌ ๋ฐ๋ก ์ ์ฉํ ์ ์๋ ์ฝ๋๋ก ๋ณ๊ฒฝํ์ธ์.
|
| 57 |
+
ํ์ผ๋ช
์ ๋ฐ๊พธ๋ ๊ธฐ๋ฅ์ ์ฝ๋ ์ธ ๋ชจ๋ ์ญ์ ํ์ธ์.
|
| 58 |
+
|
| 59 |
+
import os
|
| 60 |
+
import tempfile
|
| 61 |
+
from datetime import datetime, timedelta
|
| 62 |
+
import gradio as gr
|
| 63 |
+
from PIL import Image
|
| 64 |
+
def save_file(file_data, final_file_name):
|
| 65 |
+
"""
|
| 66 |
+
ํ์ผ ๋ฐ์ดํฐ๋ฅผ ์์ ํด๋์ ์ ์ฅํ๊ณ ์ต์ข
ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ฐํ.
|
| 67 |
+
final_file_name์๋ ํ์ฅ์ ํฌํจ.
|
| 68 |
+
"""
|
| 69 |
+
temp_file_path = os.path.join(tempfile.gettempdir(), final_file_name)
|
| 70 |
+
|
| 71 |
+
# ์
๋ก๋๋ ํ์ผ์ด ํ์ผ ๊ฒฝ๋ก์ธ ๊ฒฝ์ฐ
|
| 72 |
+
if isinstance(file_data, str) and os.path.exists(file_data):
|
| 73 |
+
with open(file_data, "rb") as f:
|
| 74 |
+
data = f.read()
|
| 75 |
+
with open(temp_file_path, "wb") as f:
|
| 76 |
+
f.write(data)
|
| 77 |
+
# PIL ์ด๋ฏธ์ง ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ
|
| 78 |
+
elif hasattr(file_data, "save"):
|
| 79 |
+
ext = os.path.splitext(final_file_name)[1].lstrip(".")
|
| 80 |
+
pil_format = "JPEG" if ext.lower() == "jpg" else ext.upper()
|
| 81 |
+
file_data.save(temp_file_path, format=pil_format)
|
| 82 |
+
# bytes ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ
|
| 83 |
+
elif isinstance(file_data, bytes):
|
| 84 |
+
with open(temp_file_path, "wb") as f:
|
| 85 |
+
f.write(file_data)
|
| 86 |
+
# ๋ฌธ์์ด ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ (์: ํ
์คํธ)
|
| 87 |
+
elif isinstance(file_data, str):
|
| 88 |
+
with open(temp_file_path, "w", encoding="utf-8") as f:
|
| 89 |
+
f.write(file_data)
|
| 90 |
+
else:
|
| 91 |
+
raise ValueError("์ง์๋์ง ์๋ ํ์ผ ํ์์
๋๋ค.")
|
| 92 |
+
|
| 93 |
+
return temp_file_path
|
| 94 |
+
def process_file(file, name_option, additional_name, add_date, add_time):
|
| 95 |
+
"""
|
| 96 |
+
์
๋ก๋๋ ํ์ผ์ ๋ฐ์ ๋ผ๋์ค ์ต์
์ ๋ฐ๋ผ ํ์ผ๋ช
์ ์ฌ๊ตฌ์ฑํ ํ ์ ์ฅํฉ๋๋ค.
|
| 97 |
+
|
| 98 |
+
Parameters:
|
| 99 |
+
file: ์
๋ก๋๋ ํ์ผ (gr.File ๋ฑ, ํ์ผ ๊ฒฝ๋ก ๋๋ ํ์ผ ๊ฐ์ฒด)
|
| 100 |
+
name_option: ๋ผ๋์ค ๋ฒํผ ์ ํ๊ฐ (๋ค ๊ฐ์ง ์ต์
์ค ํ๋)
|
| 101 |
+
additional_name: ์ต์
์ ๋ฐ๋ฅธ ์ถ๊ฐ ์
๋ ฅ(์ถ๊ฐ๋ช
๋๋ ๋ณ๊ฒฝํ ํ์ผ๋ช
)
|
| 102 |
+
add_date: ๋ ์ง ์ ์ฉ ์ฌ๋ถ (Boolean)
|
| 103 |
+
add_time: ์๊ฐ ์ ์ฉ ์ฌ๋ถ (Boolean)
|
| 104 |
+
|
| 105 |
+
๋ฐํ๊ฐ:
|
| 106 |
+
๋ณ๊ฒฝ๋ ํ์ผ๋ช
์ ๊ฐ์ง ๋ค์ด๋ก๋ ๊ฐ๋ฅํ ํ์ผ ๊ฒฝ๋ก
|
| 107 |
+
"""
|
| 108 |
+
if file is None:
|
| 109 |
+
return None
|
| 110 |
+
# ์๋ณธ ํ์ผ๋ช
๊ณผ ํ์ฅ์ ์ถ์ถ
|
| 111 |
+
if isinstance(file, str) and os.path.exists(file):
|
| 112 |
+
original_filename = os.path.basename(file)
|
| 113 |
+
elif hasattr(file, "name"):
|
| 114 |
+
original_filename = os.path.basename(file.name)
|
| 115 |
+
else:
|
| 116 |
+
original_filename = "ํ์ผ.bin"
|
| 117 |
+
|
| 118 |
+
original_name, ext = os.path.splitext(original_filename)
|
| 119 |
+
ext = ext.lstrip(".") if ext else "bin"
|
| 120 |
+
|
| 121 |
+
# ๋ผ๋์ค ์ต์
์ ๋ฐ๋ผ ์ต์ข
๊ธฐ๋ณธ ํ์ผ๋ช
๊ฒฐ์
|
| 122 |
+
if name_option == "ํ์ผ๋ช
๋ณ๊ฒฝ":
|
| 123 |
+
# ์
๋ ฅ๋ ์ ํ์ผ๋ช
์ฌ์ฉ (์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ "ํ์ผ")
|
| 124 |
+
final_base = additional_name.strip() if additional_name.strip() else "ํ์ผ"
|
| 125 |
+
elif name_option == "ํ์ผ๋ช
์ ์ง":
|
| 126 |
+
final_base = original_name
|
| 127 |
+
elif name_option == "ํ์ผ๋ช
์ ์ง + ์ถ๊ฐ๋ช
":
|
| 128 |
+
final_base = original_name + (f"_{additional_name.strip()}" if additional_name.strip() else "")
|
| 129 |
+
elif name_option == "์ถ๊ฐ๋ช
+ ํ์ผ๋ช
์ ์ง":
|
| 130 |
+
final_base = (f"{additional_name.strip()}_" if additional_name.strip() else "") + original_name
|
| 131 |
+
else:
|
| 132 |
+
final_base = original_name
|
| 133 |
+
# ๋ ์ง ๋ฐ ์๊ฐ stamp (ํ๊ตญ ๊ธฐ์ค)
|
| 134 |
+
now = datetime.utcnow() + timedelta(hours=9)
|
| 135 |
+
date_str = now.strftime('%Y%m%d') if add_date else ""
|
| 136 |
+
time_str = now.strftime('%H%M%S') if add_time else ""
|
| 137 |
+
timestamp = ""
|
| 138 |
+
if date_str and time_str:
|
| 139 |
+
timestamp = f"_{date_str}_{time_str}"
|
| 140 |
+
elif date_str:
|
| 141 |
+
timestamp = f"_{date_str}"
|
| 142 |
+
elif time_str:
|
| 143 |
+
timestamp = f"_{time_str}"
|
| 144 |
+
|
| 145 |
+
# ์ต์ข
ํ์ผ๋ช
๊ตฌ์ฑ (์ ๋์ฌ ์ ๊ฑฐ)
|
| 146 |
+
final_file_name = f"{final_base}{timestamp}.{ext}"
|
| 147 |
+
|
| 148 |
+
return save_file(file, final_file_name)
|
| 149 |
+
iface = gr.Interface(
|
| 150 |
+
fn=process_file,
|
| 151 |
+
inputs=[
|
| 152 |
+
gr.File(label="ํ์ผ ์
๋ก๋"),
|
| 153 |
+
gr.Radio(
|
| 154 |
+
choices=["ํ์ผ๋ช
๋ณ๊ฒฝ", "ํ์ผ๋ช
์ ์ง", "ํ์ผ๋ช
์ ์ง + ์ถ๊ฐ๋ช
", "์ถ๊ฐ๋ช
+ ํ์ผ๋ช
์ ์ง"],
|
| 155 |
+
label="ํ์ผ๋ช
์ต์
"
|
| 156 |
+
),
|
| 157 |
+
gr.Text(label="์ถ๊ฐ๋ช
/๋ณ๊ฒฝ ํ์ผ๋ช
์
๋ ฅ", placeholder="์ต์
์ ๋ฐ๋ผ ์
๋ ฅํ์ธ์"),
|
| 158 |
+
gr.Checkbox(label="๋ ์ง ์ ์ฉ", value=True),
|
| 159 |
+
gr.Checkbox(label="์๊ฐ ์ ์ฉ", value=True)
|
| 160 |
+
],
|
| 161 |
+
outputs=gr.File(label="๋ค์ด๋ก๋ ํ์ผ"),
|
| 162 |
+
title="ํ์ผ๋ช
์ต์
์ ๋ฐ๋ฅธ ํ์ผ๋ช
๋ณ๊ฒฝ ๋ฐ ๋ค์ด๋ก๋",
|
| 163 |
+
description=(
|
| 164 |
+
"์
๋ก๋๋ ํ์ผ์ ํ์ผ๋ช
์ ์๋ ์ต์
์ ๋ฐ๋ผ ๋ณ๊ฒฝํฉ๋๋ค.\n"
|
| 165 |
+
"์ต์
1(ํ์ผ๋ช
๋ณ๊ฒฝ): ์
๋ ฅํ ์ด๋ฆ์ผ๋ก ํ์ผ๋ช
๋ณ๊ฒฝ\n"
|
| 166 |
+
"์ต์
2(ํ์ผ๋ช
์ ์ง): ์๋ณธ ํ์ผ๋ช
์ ์ง\n"
|
| 167 |
+
"์ต์
3(ํ์ผ๋ช
์ ์ง + ์ถ๊ฐ๋ช
): ์๋ณธ ํ์ผ๋ช
๋ค์ ์ถ๊ฐ๋ช
๋ถ์ฐฉ\n"
|
| 168 |
+
"์ต์
4(์ถ๊ฐ๋ช
+ ํ์ผ๋ช
์ ์ง): ์ถ๊ฐ๋ช
์ ์๋ณธ ํ์ผ๋ช
์์ ๋ถ์ฐฉ\n"
|
| 169 |
+
"๋ ์ง/์๊ฐ ์ฒดํฌ ์ ํด๋น ์ ๋ณด๊ฐ ํ์ผ๋ช
๋ค์ ์ถ๊ฐ๋ฉ๋๋ค."
|
| 170 |
+
)
|
| 171 |
+
)
|
| 172 |
+
if __name__ == "__main__":
|
| 173 |
+
iface.launch()'''
|
| 174 |
+
|
| 175 |
+
def update_all(name_option, additional_name, add_date, add_time):
|
| 176 |
+
detail_msg, final_file_name = simulate_file_naming(name_option, additional_name, add_date, add_time)
|
| 177 |
+
# ์ฝ๋์ถ๋ ฅ ์์ญ ์ต์๋จ์ "[ํ์ผ๋ช
๋ณ๊ฒฝ ์ฝ๋์์]"์ ํ ์นธ ๋์ด ํ ์ ํ์์ ๊ฒฐ๊ณผ(detail_msg)์ ์ ์ฒด ์ฝ๋ ์ถ๋ ฅ
|
| 178 |
+
code_result = f"[ํ์ผ๋ช
๋ณ๊ฒฝ ์ฝ๋์์]\n\n{detail_msg}\n\n{code_str}"
|
| 179 |
+
return final_file_name, code_result
|
| 180 |
+
|
| 181 |
+
with gr.Blocks() as demo:
|
| 182 |
+
with gr.Group():
|
| 183 |
+
gr.Markdown("### ์๋ณธ ํ์ผ๋ช
: sample.jpg")
|
| 184 |
+
with gr.Row():
|
| 185 |
+
name_option = gr.Radio(
|
| 186 |
+
choices=["ํ์ผ๋ช
๋ณ๊ฒฝ", "ํ์ผ๋ช
์ ์ง", "ํ์ผ๋ช
์ ์ง + ์ถ๊ฐ๋ช
", "์ถ๊ฐ๋ช
+ ํ์ผ๋ช
์ ์ง"],
|
| 187 |
+
label="ํ์ผ๋ช
์ต์
",
|
| 188 |
+
value="ํ์ผ๋ช
๋ณ๊ฒฝ"
|
| 189 |
+
)
|
| 190 |
+
additional_name = gr.Text(
|
| 191 |
+
label="์ถ๊ฐ๋ช
/๋ณ๊ฒฝ ํ์ผ๋ช
์
๋ ฅ",
|
| 192 |
+
placeholder="์ต์
์ ๋ฐ๋ผ ์
๋ ฅํ์ธ์"
|
| 193 |
+
)
|
| 194 |
+
with gr.Row():
|
| 195 |
+
add_date = gr.Checkbox(label="๋ ์ง ์ ์ฉ", value=True)
|
| 196 |
+
add_time = gr.Checkbox(label="์๊ฐ ์ ์ฉ", value=True)
|
| 197 |
+
with gr.Row():
|
| 198 |
+
final_filename_output = gr.Text(label="ํ์ผ๋ช
๊ฒฐ๊ณผ", lines=2)
|
| 199 |
+
with gr.Row():
|
| 200 |
+
code_output = gr.Text(label="์ฝ๋์ถ๋ ฅ", lines=20)
|
| 201 |
+
|
| 202 |
+
inputs = [name_option, additional_name, add_date, add_time]
|
| 203 |
+
outputs = [final_filename_output, code_output]
|
| 204 |
+
for comp in inputs:
|
| 205 |
+
comp.change(update_all, inputs=inputs, outputs=outputs)
|
| 206 |
+
|
| 207 |
+
demo.launch()
|