1+ import subprocess
2+ from datetime import datetime , timedelta
13from random import randint
4+ from typing import cast
25
36from peewee import BooleanField , TextField
47
@@ -9,16 +12,42 @@ def cert_code():
912 return "" .join ([str (randint (1 , 9 )) for _ in range (8 )])
1013
1114
15+ async def replace_in_document (
16+ name : str , expires : str , result_filename : str , temp_filename : str
17+ ) -> None :
18+ with open ("src/static/certificate.svg" , "r" , encoding = "utf-8" ) as file :
19+ svg_content = file .read ()
20+ svg_content = svg_content .replace ("fioHandler" , name )
21+ svg_content = svg_content .replace ("dateHandler" , expires )
22+
23+ with open (temp_filename , "w" , encoding = "utf-8" ) as f :
24+ f .write (svg_content )
25+ subprocess .run (
26+ [
27+ "inkscape" ,
28+ temp_filename ,
29+ "--export-type=pdf" ,
30+ f"--export-filename={ result_filename } " ,
31+ ],
32+ check = True ,
33+ )
34+
35+
1236class Cert (BaseModel ):
1337 name = TextField ()
1438 code = TextField (default = cert_code )
1539 used = BooleanField (default = False )
1640
17- def generate_file (self ):
18- path = f"certs/{ self .code } .txt"
19- f = open (path , "w" )
20- print (self .name , self .code , file = f )
21- f .close ()
41+ async def generate_file (self ):
42+ path = f"certs/{ self .code } .pdf"
43+ temp_path = f"certs/{ self .code } .svg"
44+
45+ expire = datetime .now () + timedelta (days = 365 )
46+ expire_str = f"{ expire .year } /{ expire .month } /{ expire .day } "
47+
48+ await replace_in_document (
49+ cast (str , self .name ), expire_str , path , temp_path
50+ )
2251 return path
2352
2453
0 commit comments