File size: 7,863 Bytes
af5c3bb
 
 
2b2a4f5
aae65f7
2b2a4f5
 
 
af5c3bb
 
 
 
2b2a4f5
 
af5c3bb
 
 
 
 
 
 
 
 
 
 
6d907df
 
 
 
 
 
 
af5c3bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b303e8
af5c3bb
 
 
 
 
 
 
 
 
9b303e8
af5c3bb
9b303e8
af5c3bb
 
 
 
76ce7f7
af5c3bb
 
93006db
 
 
 
 
 
 
feed579
6d907df
2b2a4f5
 
93006db
2b2a4f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
031c516
 
 
2b2a4f5
031c516
 
 
 
2b2a4f5
 
 
031c516
2b2a4f5
031c516
2b2a4f5
 
 
 
 
 
911d69e
93006db
911d69e
faacd14
911d69e
6d907df
 
911d69e
93006db
6d907df
911d69e
6d907df
911d69e
 
 
 
 
 
2b2a4f5
aae65f7
 
 
 
 
 
 
 
 
 
 
 
 
 
f799a80
aae65f7
 
 
 
664a67d
aae65f7
664a67d
aae65f7
 
 
 
 
 
 
2b2a4f5
af5c3bb
664a67d
af5c3bb
2b2a4f5
 
faacd14
 
 
2b2a4f5
 
6d907df
faacd14
 
 
664a67d
 
faacd14
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
from fastapi import FastAPI, Path, Query, Response, BackgroundTasks
from fastapi.responses import FileResponse, HTMLResponse
import gradio as gr
import sys
import re
import os
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
sys.path.append(project_root)
from src.pyscripts import file_process, oss, img_process
from datetime import datetime
from collections import namedtuple
from pydantic import BaseModel
import requests
# from easydict import EasyDict

Person = namedtuple('Person', ['name', 'title', 'category', 'conference', 'respond_person'])

CUSTOM_PATH = "/gradio"

app = FastAPI()

pdf_path = "src/assets/InvitationTemplate.pdf"
output_path = 'output/output.pdf'
person = Person(name="雷军", title="先生", category="观礼", conference="世界教育者大会", respond_person="Eazy")

# data = {
#     'name': '雷军',
#     'title': '先生',
#     "conference": "世界教育者大会"
# }


@app.get("/")
def read_main():
    return {"message": "This is your main app"}

# @app.post("/getInvitationPDF/{name}/{title}/{conference}")
@app.get("/getInvitationPDF")
def getInvitationPDF(name, title, conference, category, respond_person):
    person = Person(name=name, title=title, category=category, conference=conference, respond_person=respond_person)
    formatted_date = datetime.now().strftime('%Y-%m-%d')
    file_name = f"致{name+title}的WWEC2024邀请函.pdf"
    file_dir = f"invitation/{category}"
    object_name = file_dir + "/" + file_name
    pdfStream = file_process.writeInvitationPDF(person)
    # with open(f"output/{file_name}", 'wb') as f:
    #     f.write(pdfStream.getvalue())
    oss.upload_file_stream_to_s3(pdfStream, "host", object_name)
    file_url = f"https://isidoresong.us.kg/{object_name}"
    return {"url": file_url}

class GuestPosterInfo(BaseModel):
    exhibitor: str
    logo_link: str
    slogan: str
    content: str

@app.post("/getExhibitorPoster")
def getExhibitorPoster(item: GuestPosterInfo):
    logo_link = item.logo_link
    exhibitor = item.exhibitor
    slogan = item.slogan
    content = item.content
    img_stream = img_process.make_exhibitor_poster(logo_link, slogan, content)
    file_dir = "ExhibitorPoster"
    object_name = file_dir + "/" + exhibitor + ".jpg"
    # with open(f"output/{exhibitor + '.jpg'}", 'wb') as f:
    #     f.write(img_stream.getvalue())
    oss.upload_file_stream_to_s3(img_stream, "host", object_name)
    file_url = f"https://isidoresong.us.kg/{object_name}"
    return {"url": file_url}


class GuestPosterInfo(BaseModel):
    name: str
    name_pinyin: str
    photo_link: str
    original_photo_link: str
    titles: str

@app.post("/getGuestPoster")
def getGuestPoster(item: GuestPosterInfo):
    photo_link = item.photo_link
    original_photo_link = item.original_photo_link
    name = item.name
    name_pinyin = item.name_pinyin
    titles = item.titles
    img_stream = img_process.make_guest_poster(name, name_pinyin, photo_link, original_photo_link, titles)
    file_dir = "GuestPoster"
    object_name = file_dir + "/" + name + ".jpg"
    #     f.write(img_stream.getvalue())
    oss.upload_file_stream_to_s3(img_stream, "host", object_name)
    file_url = f"https://pub-429c75a96a8f4597984dd7ebc525d652.r2.dev/{object_name}"
    return {"url": file_url}

class ConferenceInfo(BaseModel):
    name: str
    eng_name: str
    full_name: str
    start_time: str
    end_time: str
    member: list
    address: str = None
    guest: list = None

class ConferencePosterInfo(BaseModel):
    conference_info: ConferenceInfo
    conference_rundown:list


def format_time(start_time, end_time):
    start_datetime = datetime.strptime(start_time, "%Y/%m/%d %H:%M:%S")
    end_datetime = datetime.strptime(end_time, "%Y/%m/%d %H:%M:%S")
    
    start_period = "上午" if start_datetime.hour < 12 else "下午"
    end_period = "上午" if end_datetime.hour < 12 else "下午"
    
    formatted_start_time = start_datetime.strftime(f"%Y年%m月%d日{start_period}%H:%M")
    formatted_end_time = end_datetime.strftime(f"{end_period}%H:%M")
    
    return f"{formatted_start_time}-{formatted_end_time}"


@app.post("/getConferencePoster")
def getConferencePoster(item: ConferencePosterInfo):
    # item.conference_rundown = [list(i) for i in item.conference_rundown]
    sorted_conference_rundown = sorted(item.conference_rundown, key=lambda x: x['end_time'])
    img_stream = img_process.make_conference_poster(
        item.conference_info.name,
        item.conference_info.eng_name,
        item.conference_info.full_name,
        [
            *item.conference_info.member, 
            ["论坛时间", format_time(item.conference_info.start_time, 
                              item.conference_info.end_time)],
            ["论坛地点", "国家会展中心4.2号馆 " + item.conference_info.address]
        ],
        sorted_conference_rundown)
    file_dir = "ConferencePoster"
    object_name = file_dir + "/" + item.conference_info.name + ".jpg"
    if os.path.exists("src/assets/output"):
        with open(f"src/assets/output/{item.conference_info.name + '.jpg'}", 'wb') as f:
            f.write(img_stream.getvalue())
    else:
        oss.upload_file_stream_to_s3(img_stream, "host", object_name)
        file_url = f"https://pub-429c75a96a8f4597984dd7ebc525d652.r2.dev/{object_name}"
        return {"url": file_url}

@app.post("/getGuestComposePoster")
def getGuestComposePoster(item:ConferenceInfo):
    # item.conference_rundown = [list(i) for i in item.conference_rundown]
    sorted_conference_guest = sorted(item.guest, key=lambda x: x['rank'] if 'rank' in x else 0)
    img_stream = img_process.getGuestComposePoster(
        item.name,
        item.eng_name,
        sorted_conference_guest)
    file_dir = "ConferenceGuestPoster"
    object_name = file_dir + "/" + item.name + ".jpg"
    if os.path.exists("src/assets/output"):
        with open(f"src/assets/output/{item.name + '.jpg'}", 'wb') as f:
            f.write(img_stream.getvalue())
    else:
        oss.upload_file_stream_to_s3(img_stream, "host", object_name)
        file_url = f"https://pub-429c75a96a8f4597984dd7ebc525d652.r2.dev/{object_name}"
        return {"url": file_url}


class GuestEScreenInfo(BaseModel):
    room_types: list
    person: object



@app.post("/getGuestEScreen")
def getGuestEScreen(item: GuestEScreenInfo):
    file_dir = "GuestEScreen"
    file_urls = []
    for room_type in item.room_types:
        rt = ""
        if room_type.startswith("M"):
            rt = "M"
        elif re.match(r"\d+", room_type):
            rt = "half"
        else:
            rt = "full"
        img_stream = img_process.getGuestEScreen(rt, item.person)
        object_name = file_dir + "/" + rt + "_" + item.person["name"] + ".jpg"
        if os.path.exists("src/assets/output"):
            with open(f"src/assets/output/{item.person['name'] + '.jpg'}", 'wb') as f:
                f.write(img_stream.getvalue())
        else:
            oss.upload_file_stream_to_s3(img_stream, "host", object_name)
            file_url = f"https://pub-429c75a96a8f4597984dd7ebc525d652.r2.dev/{object_name}"
            file_urls.append(file_url)
    return {"url": "\n".join(file_urls)}


interface = gr.Interface(lambda x: "Hello, " + x + "!", "textbox", "textbox")
# app = gr.(app, interface, path=CUSTOM_PATH)


if __name__ == "__main__":
    # MOCK_URL = "https://mock.jsont.run/1H9o2vvkIBMB83oeVQd1q"
    MOCK_URL = "https://mock.jsont.run/c3oQ2XLm1ZIHoVWZa18Ui"
    
    res = requests.get(MOCK_URL)
    mock_data = res.json()
    print(mock_data)

    mock_data = ConferencePosterInfo(**mock_data)
    getConferencePoster(mock_data)
    # mock_data = ConferenceInfo(**mock_data["conference_info"])
    # getGuestComposePoster(mock_data)
    # mock_data = GuestEScreenInfo(**mock_data)
    # getGuestEScreen(mock_data)