Code-Tools / app.py
viaho's picture
Create app.py
23dddf9 verified
import json
from datetime import datetime
import pytz
import time
import gradio as gr
js = """
function createGradioAnimation() {
var container = document.createElement('div');
container.id = 'gradio-animation';
container.style.fontSize = '2em';
container.style.fontWeight = 'bold';
container.style.textAlign = 'center';
container.style.marginBottom = '20px';
var text = 'Welcome to Code Tools!';
for (var i = 0; i < text.length; i++) {
(function(i){
setTimeout(function(){
var letter = document.createElement('span');
letter.style.opacity = '0';
letter.style.transition = 'opacity 0.5s';
letter.innerText = text[i];
container.appendChild(letter);
setTimeout(function() {
letter.style.opacity = '1';
}, 50);
}, i * 250);
})(i);
}
var gradioContainer = document.querySelector('.gradio-container');
gradioContainer.insertBefore(container, gradioContainer.firstChild);
return 'Animation created';
}
"""
def json_format(data):
try:
data = json.loads(data)
return data
except:
raise gr.Error("Json数据格式不正确!")
def html_format(data):
return data
def md_format(data):
return data
# 获取当前 Unix 时间戳
def get_current_timestamp(precision):
timestamp = int(time.time() * 1000) if precision == "ms" else int(time.time())
return str(timestamp)
# 时间戳转换为日期
def timestamp_to_date(input_time, target_timezone, precision):
try:
if precision == "ms":
input_time = int(input_time) / 1000 # 毫秒转为秒
else:
input_time = int(input_time) # 秒级时间戳
# 将输入的 Unix 时间戳转换为 UTC 时间
utc_time = datetime.utcfromtimestamp(input_time).replace(tzinfo=pytz.utc)
# 获取目标时区
target_tz = pytz.timezone(target_timezone)
# 转换到目标时区
target_time = utc_time.astimezone(target_tz)
# 返回格式化后的时间
return target_time.strftime("%Y-%m-%d %H:%M:%S")
except Exception as e:
return f"error: {e}"
# 日期转换为时间戳
def date_to_timestamp(input_date, target_timezone):
try:
# 解析日期输入为 datetime 对象
target_tz = pytz.timezone(target_timezone)
target_time = datetime.fromisoformat(input_date).astimezone(target_tz)
# 转换为 UTC 时间戳
timestamp = int(target_time.astimezone(pytz.utc).timestamp())
return str(timestamp)
except Exception as e:
return f"error: {e}"
# 获取所有时区列表
timezones = pytz.all_timezones
with gr.Blocks(title='Gradio-Tools', theme=gr.themes.Ocean(), js=js) as demo:
with gr.Tabs():
with gr.Tab("Json Format"):
with gr.Row():
json_input = gr.Textbox(label="Json Data", interactive=True, placeholder="{}", lines=50)
json_output = gr.Json(label="Json Format")
json_input.change(fn=json_format, inputs=json_input, outputs=json_output)
with gr.Tab("Timestamp Conversion"):
with gr.Row():
# 时间戳输入框,显示当前时间戳
timestamp_input = gr.Textbox(
label="Timestamp (s/ms)",
value=get_current_timestamp("s"), # 默认显示当前秒级时间戳
interactive=True, # 可编辑
elem_id="timestamp_input",
placeholder="Please enter a timestamp"
)
# 选择精度(秒或毫秒)
precision = gr.Dropdown(
["s", "ms"],
label="Timestamp accuracy",
value="s", # 默认秒
elem_id="precision"
)
target_timezone = gr.Dropdown(
timezones,
label="Target time zone",
value="Asia/Shanghai", # 默认设置为北京时间
elem_id="target_timezone"
)
with gr.Row():
# 日期输入框,用户输入日期
date_input = gr.Textbox(
label="Date Input (ISO 8601)",
placeholder="For example:2025-01-01 12:34:56",
elem_id="date_input"
)
output = gr.Textbox(label="Conversion results", elem_id="output")
with gr.Row():
# 时间戳转日期按钮
timestamp_to_date_btn = gr.Button("Timestamp to date", elem_id="timestamp_to_date_btn")
# 日期转时间戳按钮
date_to_timestamp_btn = gr.Button("Date to timestamp", elem_id="date_to_timestamp_btn")
# 精度选择改变时,动态更新时间戳显示
precision.change(
lambda precision: get_current_timestamp(precision),
inputs=precision,
outputs=timestamp_input
)
# 时间戳转日期按钮点击事件
def handle_timestamp_to_date(timestamp_input, target_timezone, precision):
if timestamp_input: # 如果时间戳输入框有内容
return timestamp_to_date(timestamp_input, target_timezone, precision)
return "Please enter a valid timestamp"
timestamp_to_date_btn.click(
handle_timestamp_to_date,
inputs=[timestamp_input, target_timezone, precision],
outputs=output
)
# 日期转时间戳按钮点击事件
def handle_date_to_timestamp(date_input, target_timezone):
if date_input: # 如果日期输入框有内容
return date_to_timestamp(date_input, target_timezone)
return "Please enter a valid date"
date_to_timestamp_btn.click(
handle_date_to_timestamp,
inputs=[date_input, target_timezone],
outputs=output
)
with gr.Tab("Html Rendering"):
with gr.Row():
html_input = gr.Textbox(label="Html Data", interactive=True, placeholder="<html></html>", lines=50)
html_output = gr.HTML()
html_input.change(fn=html_format, inputs=html_input, outputs=html_output)
with gr.Tab("Markdown Rendering"):
with gr.Row():
md_input = gr.Textbox(label="Markdown Data", interactive=True, placeholder="## title", lines=50)
md_output = gr.Markdown()
md_input.change(fn=md_format, inputs=md_input, outputs=md_output)
demo.launch()