update persian_nlp_model_sqlite --> fastapi
This commit is contained in:
parent
5513c211df
commit
792e7b6ba1
|
@ -1,65 +1,83 @@
|
||||||
#بسم الله
|
#بسم الله
|
||||||
|
|
||||||
|
|
||||||
|
from apscheduler.schedulers.background import BackgroundScheduler
|
||||||
from transformers import AutoTokenizer
|
from transformers import AutoTokenizer
|
||||||
from bidi.algorithm import get_display
|
from bidi.algorithm import get_display
|
||||||
from huggingface_hub import HfApi
|
from huggingface_hub import HfApi
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
from fastapi import FastAPI
|
||||||
from datetime import date
|
from datetime import date
|
||||||
import arabic_reshaper
|
import arabic_reshaper
|
||||||
from fpdf import FPDF
|
from fpdf import FPDF
|
||||||
|
import threading
|
||||||
import random
|
import random
|
||||||
|
import logging
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import string
|
import string
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# تنظیم لاگدهی برای دیدن خروجی زمانبندی
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
logging.getLogger('apscheduler').setLevel(logging.INFO)
|
||||||
|
|
||||||
|
|
||||||
|
first_id = 6600
|
||||||
text = 'جمهوری موافقتنامه معاملات قانون بودجه اساسی قضائی بینالمللی تأسیس منطقهای لازمالاجراء دامپروری راهآهن کمیسیونهای جدیدالاحداث مسئول فرآورده زائد اسقاط پنجساله'
|
text = 'جمهوری موافقتنامه معاملات قانون بودجه اساسی قضائی بینالمللی تأسیس منطقهای لازمالاجراء دامپروری راهآهن کمیسیونهای جدیدالاحداث مسئول فرآورده زائد اسقاط پنجساله'
|
||||||
list1 = ["ID","model_id","url","downloads","private","author","tags","tag_dataset",\
|
list1 = ["ID","model_id","url","downloads","private","author","tags","tag_dataset",\
|
||||||
"tag_base_model","tag_license","tag_region","pipeline_tag","Likes","languages",\
|
"tag_base_model","tag_license","tag_region","pipeline_tag","Likes","languages",\
|
||||||
"library","datasets","license","just_persian","deleted","date_added","last_modified"]
|
"library","datasets","license","just_persian","deleted","date_added","last_modified"]
|
||||||
cnt = sqlite3.connect(".\\db\\persian_nlp_model.db")
|
cnt = sqlite3.connect(".\\db\\persian_nlp_model.db", check_same_thread=False)
|
||||||
c = cnt.cursor()
|
c = cnt.cursor()
|
||||||
today = date.today()
|
today = date.today()
|
||||||
d1 = today.strftime("%d-%m-%Y")
|
d1 = today.strftime("%d-%m-%Y")
|
||||||
|
|
||||||
|
|
||||||
|
create_tables=True
|
||||||
|
if create_tables == True :
|
||||||
|
try:
|
||||||
# فقط برای اولین بار که جدول قرار است ساخته شود از این کد ها استفاده شود
|
# فقط برای اولین بار که جدول قرار است ساخته شود از این کد ها استفاده شود
|
||||||
# c.execute("""CREATE TABLE PersianNlp(
|
c.execute("""CREATE TABLE PersianNlp(
|
||||||
# ID INT PRIMARY KEY ,
|
ID INT PRIMARY KEY ,
|
||||||
# model_id TEXT ,
|
model_id TEXT ,
|
||||||
# url TEXT ,
|
url TEXT ,
|
||||||
# downloads INT,
|
downloads INT,
|
||||||
# private TEXT,
|
private TEXT,
|
||||||
# author TEXT,
|
author TEXT,
|
||||||
# tags TEXT,
|
tags TEXT,
|
||||||
# tag_dataset TEXT,
|
tag_dataset TEXT,
|
||||||
# tag_base_model TEXT,
|
tag_base_model TEXT,
|
||||||
# tag_license TEXT,
|
tag_license TEXT,
|
||||||
# tag_region TEXT,
|
tag_region TEXT,
|
||||||
# pipeline_tag TEXT,
|
pipeline_tag TEXT,
|
||||||
# Likes INT,
|
Likes INT,
|
||||||
# languages TEXT,
|
languages TEXT,
|
||||||
# library TEXT,
|
library TEXT,
|
||||||
# datasets TEXT,
|
datasets TEXT,
|
||||||
# license TEXT,
|
license TEXT,
|
||||||
# just_persian TEXT,
|
just_persian TEXT,
|
||||||
# deleted TEXT,
|
deleted TEXT,
|
||||||
# date_added TEXT,
|
date_added TEXT,
|
||||||
# last_modified TEXT
|
last_modified TEXT
|
||||||
# );""")
|
);""")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# برای ساخت جدول میزان دانلود ها از این کد استفاده شود
|
# برای ساخت جدول میزان دانلود ها از این کد استفاده شود
|
||||||
# c.execute("""CREATE TABLE downloadCountHistory(
|
c.execute("""CREATE TABLE downloadCountHistory(
|
||||||
# ID INT PRIMARY KEY ,
|
ID INT PRIMARY KEY ,
|
||||||
# key_id INT ,
|
key_id INT ,
|
||||||
# downloads INT,
|
downloads INT,
|
||||||
# date TEXT
|
date TEXT
|
||||||
# );""")
|
);""")
|
||||||
|
create_tables = False
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
|
||||||
|
print("--- یک خطای غیرمنتظره در ساخت تیبل رخ داد ---")
|
||||||
|
print(f"متن خطا: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -107,6 +125,278 @@ def process_text_for_fpdf(text):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def add_download_count():
|
||||||
|
|
||||||
|
count = 1
|
||||||
|
api = HfApi()
|
||||||
|
allModel = c.execute(f'''SELECT * FROM "PersianNlp"
|
||||||
|
WHERE deleted != 'True' ;''')
|
||||||
|
all_model_id = []
|
||||||
|
for model in allModel:
|
||||||
|
all_model_id.append([model[0],model[1]])
|
||||||
|
|
||||||
|
for id_ in all_model_id:
|
||||||
|
# try:
|
||||||
|
print(count)
|
||||||
|
count+=1
|
||||||
|
id_12_digits = generate_random_id(length=12, chars=string.digits)
|
||||||
|
model_details = api.model_info(repo_id=id_[1])
|
||||||
|
c.execute(f"""INSERT INTO downloadCountHistory(ID,key_id,downloads,date)
|
||||||
|
VALUES ({id_12_digits},"{int(id_[0])}","{int(model_details.downloads)}","{str(d1)}");""")
|
||||||
|
# c.execute(f"""INSERT INTO downloadCountHistory(ID,key_id,downloads,date)
|
||||||
|
# VALUES ({id_12_digits},"{int(id_[0])}","{int(model_details.downloads)+1}","22-08-2025");""")
|
||||||
|
cnt.commit()
|
||||||
|
# except:
|
||||||
|
# print("Error!!")
|
||||||
|
|
||||||
|
# add_download_count()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def MultiModelInfo(limit_number=10):
|
||||||
|
|
||||||
|
|
||||||
|
today = date.today()
|
||||||
|
date_year = today.strftime("%Y")
|
||||||
|
date_month = today.strftime("%m")
|
||||||
|
month = int(date_month)
|
||||||
|
year = int(date_year)
|
||||||
|
Models_added_this_month=[]
|
||||||
|
Models_deleted=[]
|
||||||
|
all_id_download = []
|
||||||
|
all_download = []
|
||||||
|
growth_slope_list_info = []
|
||||||
|
growth_slope_list = []
|
||||||
|
model_info = c.execute(f'''SELECT *
|
||||||
|
FROM PersianNlp''')
|
||||||
|
|
||||||
|
for model in model_info:
|
||||||
|
|
||||||
|
if int(model[19].split("/")[1]) == month and int(model[19].split("/")[2]) == year :
|
||||||
|
Models_added_this_month.append(model[1])
|
||||||
|
if str(model[18]) == "True":
|
||||||
|
Models_deleted.append(model[1])
|
||||||
|
|
||||||
|
all_id_download.append([model[0],model[1],model[3],model[11],model[20]])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
listX=[]
|
||||||
|
for model in all_id_download:
|
||||||
|
|
||||||
|
downloadCountHistory = c.execute(f'''SELECT *
|
||||||
|
FROM downloadCountHistory
|
||||||
|
WHERE key_id = {model[0]}''')
|
||||||
|
|
||||||
|
for models in downloadCountHistory :
|
||||||
|
if int(models[3].split("-")[1]) == month and int(models[3].split("-")[2]) == year :
|
||||||
|
model[2]=models[2]
|
||||||
|
listX.append(model)
|
||||||
|
all_id_download = listX
|
||||||
|
|
||||||
|
|
||||||
|
for model in all_id_download:
|
||||||
|
all_download.append(model[2])
|
||||||
|
|
||||||
|
all_download.sort(reverse=True)
|
||||||
|
maximum_download_list = all_download[0:limit_number]
|
||||||
|
maximum_download_info_list = []
|
||||||
|
n=0
|
||||||
|
for DCount in maximum_download_list:
|
||||||
|
|
||||||
|
for model in all_id_download:
|
||||||
|
if DCount == model[2]:
|
||||||
|
if n < limit_number :
|
||||||
|
maximum_download_info_list.append(model)
|
||||||
|
n+=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# پیدا کردن بیشترین شیب دانلود ها در چند ماه :
|
||||||
|
|
||||||
|
for model in all_id_download:
|
||||||
|
growth_slope = []
|
||||||
|
DHList =c.execute(f'''SELECT *
|
||||||
|
FROM "downloadCountHistory"
|
||||||
|
WHERE key_id = {model[0]}''')
|
||||||
|
|
||||||
|
for data in DHList:
|
||||||
|
growth_slope.append(data[2])
|
||||||
|
|
||||||
|
growth_slopee , lenM = find_growth_slope(growth_slope) # به دست آوردن درصد رشد هر مدل
|
||||||
|
growth_slope_list.append(growth_slopee)
|
||||||
|
growth_slope_list_info.append([model[1],growth_slopee,lenM,model[2],model[3]])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
growth_slope_list.sort(reverse=True)
|
||||||
|
maximum_growth_slope_list = growth_slope_list[0:limit_number]
|
||||||
|
maximum_growth_slope_info_list = []
|
||||||
|
n=0
|
||||||
|
for DCount in maximum_growth_slope_list:
|
||||||
|
|
||||||
|
for model in growth_slope_list_info:
|
||||||
|
if DCount == model[1]:
|
||||||
|
if n < limit_number :
|
||||||
|
maximum_growth_slope_info_list.append(model)
|
||||||
|
n+=1
|
||||||
|
|
||||||
|
# پایان پیدا کردن شیب
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
model_id_list = []
|
||||||
|
model_download_count_list = []
|
||||||
|
for info in maximum_download_info_list:
|
||||||
|
|
||||||
|
model_download_count_list.append(info[2])
|
||||||
|
model_id_list.append(str(info[1]))
|
||||||
|
|
||||||
|
listA = []
|
||||||
|
for x in model_download_count_list:
|
||||||
|
listA.append(int(x)/1000000)
|
||||||
|
model_download_count_list = listA
|
||||||
|
|
||||||
|
plt.plot(model_id_list,model_download_count_list,marker='o', linestyle='-')
|
||||||
|
plt.xticks(rotation=30, ha='right', fontsize=10)
|
||||||
|
plt.xlabel("Model Name", color='blue')
|
||||||
|
plt.ylabel("Download Count (milion)" ,color='red')
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.savefig(f'Top_{limit_number}_download_rate.png', dpi=300)
|
||||||
|
pdf = FPDF()
|
||||||
|
pdf.add_page()
|
||||||
|
pdf.add_font('B Nazanin', '', '.\\fonts\\B Nazanin.ttf', uni=True)
|
||||||
|
pdf.set_font("Arial", size=16)
|
||||||
|
# اضافه کردن متن
|
||||||
|
pdf.multi_cell(0, 10, f"Top {limit_number} Model Information : \n ----------------------------------------------------------------")
|
||||||
|
pdf.set_font("Arial", size=12)
|
||||||
|
|
||||||
|
pdf.ln()
|
||||||
|
pdf.multi_cell(0, 5, f" Download Rate Chart :")
|
||||||
|
pdf.ln()
|
||||||
|
|
||||||
|
# اضافه کردن عکس
|
||||||
|
pdf.image(f'Top_{limit_number}_download_rate.png', x=10, y=pdf.get_y() + 5, w=70)
|
||||||
|
pdf.ln(20) # یک خط فاصله بعد از عکس
|
||||||
|
# اضافه کردن جدول
|
||||||
|
pdf.ln(50)
|
||||||
|
pdf.ln()
|
||||||
|
pdf.multi_cell(0, 5, f" Download Rate Table :")
|
||||||
|
pdf.ln()
|
||||||
|
# سربرگ جدول
|
||||||
|
for header in ['Count', 'Model_name','Download-rate','Task','Last_modified']:
|
||||||
|
if header == 'Model_name':
|
||||||
|
pdf.cell(80, 10, header, 1, 0, 'C')
|
||||||
|
else:
|
||||||
|
pdf.cell(40, 10, header, 1, 0, 'C')
|
||||||
|
pdf.ln()
|
||||||
|
|
||||||
|
# ردیفهای داده
|
||||||
|
x=1
|
||||||
|
for row in maximum_download_info_list:
|
||||||
|
n=0
|
||||||
|
row[0] = x
|
||||||
|
x+=1
|
||||||
|
for item in row:
|
||||||
|
if n == 1 :
|
||||||
|
pdf.set_font("Arial", size=6)
|
||||||
|
pdf.cell(80, 10, f"https://huggingface.co/{str(item)}", 1, 0, 'C')
|
||||||
|
n+=1
|
||||||
|
else:
|
||||||
|
pdf.set_font("Arial", size=10)
|
||||||
|
pdf.cell(40, 10, str(item), 1, 0, 'C')
|
||||||
|
n+=1
|
||||||
|
pdf.ln()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pdf.add_page()
|
||||||
|
model_name_list = []
|
||||||
|
model_growth = []
|
||||||
|
for info in maximum_growth_slope_info_list:
|
||||||
|
|
||||||
|
model_name_list.append(info[0])
|
||||||
|
model_growth.append(round(info[1], 2) )
|
||||||
|
|
||||||
|
pdf.ln()
|
||||||
|
pdf.multi_cell(0, 5, f" Download Growth Chart :")
|
||||||
|
pdf.ln()
|
||||||
|
plt.figure(figsize=(8, 6)) # تنظیم اندازه کلی نمودار (عرض و ارتفاع بر حسب اینچ)
|
||||||
|
plt.bar(model_name_list,model_growth,color='lightgreen', width=0.4)
|
||||||
|
plt.xticks(rotation=30, ha='right', fontsize=10)
|
||||||
|
plt.xlabel("Model Name", color='blue')
|
||||||
|
plt.ylabel("Model Growth (%)" ,color='red')
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.savefig(f'Top_{limit_number}_growth_rate.png', dpi=300)
|
||||||
|
pdf.image(f'Top_{limit_number}_growth_rate.png', x=10, y=pdf.get_y() + 5, w=70)
|
||||||
|
pdf.ln(80) # یک خط فاصله بعد از عکس
|
||||||
|
|
||||||
|
pdf.ln()
|
||||||
|
pdf.multi_cell(0, 5, f" Download Growth Table :")
|
||||||
|
pdf.ln()
|
||||||
|
# سربرگ جدول
|
||||||
|
for header in [ 'Model_name','Growth-rate','Length-month','Download-rate','Task']:
|
||||||
|
if header == 'Model_name':
|
||||||
|
pdf.cell(80, 10, header, 1, 0, 'C')
|
||||||
|
else:
|
||||||
|
pdf.cell(30, 10, header, 1, 0, 'C')
|
||||||
|
pdf.ln()
|
||||||
|
|
||||||
|
# ردیفهای داده
|
||||||
|
x=1
|
||||||
|
for row in maximum_growth_slope_info_list:
|
||||||
|
n=0
|
||||||
|
x+=1
|
||||||
|
for item in row:
|
||||||
|
if n == 0 :
|
||||||
|
pdf.set_font("Arial", size=6)
|
||||||
|
pdf.cell(80, 10, f"https://huggingface.co/{str(item)}", 1, 0, 'C')
|
||||||
|
n+=1
|
||||||
|
else:
|
||||||
|
pdf.set_font("Arial", size=6)
|
||||||
|
pdf.cell(30, 10, str(item), 1, 0, 'C')
|
||||||
|
n+=1
|
||||||
|
pdf.ln()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pdf.add_page()
|
||||||
|
pdf.ln()
|
||||||
|
pdf.set_font("Arial", size=14)
|
||||||
|
pdf.multi_cell(0, 5, f"Models added this month :")
|
||||||
|
pdf.set_font("Arial", size=6)
|
||||||
|
pdf.ln()
|
||||||
|
|
||||||
|
txt=''
|
||||||
|
n=1
|
||||||
|
for model_name in Models_added_this_month:
|
||||||
|
txt +=f"{n} --> {model_name}\n"
|
||||||
|
n+=1
|
||||||
|
pdf.multi_cell(0, 5, f"{txt}")
|
||||||
|
|
||||||
|
pdf.ln()
|
||||||
|
pdf.set_font("Arial", size=14)
|
||||||
|
pdf.multi_cell(0, 5, f"Models deleted :")
|
||||||
|
pdf.set_font("Arial", size=6)
|
||||||
|
pdf.ln()
|
||||||
|
txt=''
|
||||||
|
n=1
|
||||||
|
for model_name in Models_deleted:
|
||||||
|
txt +=f"{n} --> {model_name}\n"
|
||||||
|
n+=1
|
||||||
|
pdf.multi_cell(0, 5, f"{txt}")
|
||||||
|
|
||||||
|
pdf.output(f"MultiModelInfo_{today}.pdf")
|
||||||
|
os.remove(f'Top_{limit_number}_download_rate.png')
|
||||||
|
os.remove(f'Top_{limit_number}_growth_rate.png')
|
||||||
|
|
||||||
|
# MultiModelInfo(5)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def find_growth_slope(number_list):
|
def find_growth_slope(number_list):
|
||||||
|
|
||||||
|
@ -150,12 +440,13 @@ def find_growth_slope(number_list):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def persian_model_finder(nlp_tasks,idx):
|
def persian_model_finder(nlp_tasks,idx):
|
||||||
today = date.today()
|
today = date.today()
|
||||||
download_date = today.strftime("%d/%m/%Y")
|
download_date = today.strftime("%d/%m/%Y")
|
||||||
idX = idx # اخرین آیدی موجود در دیتابیس را وارد میکنیم تا موارد جدید با آیدی های قبلی تداخل نکند
|
idX = idx # اخرین آیدی موجود در دیتابیس را وارد میکنیم تا موارد جدید با آیدی های قبلی تداخل نکند
|
||||||
api = HfApi()
|
api = HfApi()
|
||||||
all_persian_nlp_models_data = []
|
# all_persian_nlp_models_data = []
|
||||||
seen_model_ids = set() # برای جلوگیری از اضافه شدن مدلهای تکراری
|
seen_model_ids = set() # برای جلوگیری از اضافه شدن مدلهای تکراری
|
||||||
new_seen_ids = set()
|
new_seen_ids = set()
|
||||||
|
|
||||||
|
@ -292,6 +583,10 @@ WHERE model_id = '{modelID}';''')
|
||||||
|
|
||||||
cnt.commit()
|
cnt.commit()
|
||||||
|
|
||||||
|
|
||||||
|
add_download_count()
|
||||||
|
MultiModelInfo()
|
||||||
|
|
||||||
#اول لیست تسک ها را میدهیم برای جست و جو ، و بعد اولین آیدی که در تیبل مدلها در دیتابیس موجود است
|
#اول لیست تسک ها را میدهیم برای جست و جو ، و بعد اولین آیدی که در تیبل مدلها در دیتابیس موجود است
|
||||||
# persian_model_finder(nlp_task_list,6600)
|
# persian_model_finder(nlp_task_list,6600)
|
||||||
|
|
||||||
|
@ -392,35 +687,6 @@ FROM PersianNlp''')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def add_download_count():
|
|
||||||
|
|
||||||
count = 1
|
|
||||||
api = HfApi()
|
|
||||||
allModel = c.execute(f'''SELECT *
|
|
||||||
FROM PersianNlp''')
|
|
||||||
all_model_id = []
|
|
||||||
for model in allModel:
|
|
||||||
all_model_id.append([model[0],model[1]])
|
|
||||||
|
|
||||||
for id_ in all_model_id:
|
|
||||||
# try:
|
|
||||||
print(count)
|
|
||||||
count+=1
|
|
||||||
id_12_digits = generate_random_id(length=12, chars=string.digits)
|
|
||||||
model_details = api.model_info(repo_id=id_[1])
|
|
||||||
c.execute(f"""INSERT INTO downloadCountHistory(ID,key_id,downloads,date)
|
|
||||||
VALUES ({id_12_digits},"{int(id_[0])}","{int(model_details.downloads)}","{str(d1)}");""")
|
|
||||||
# c.execute(f"""INSERT INTO downloadCountHistory(ID,key_id,downloads,date)
|
|
||||||
# VALUES ({id_12_digits},"{int(id_[0])}","{int(model_details.downloads)+1}","22-08-2025");""")
|
|
||||||
cnt.commit()
|
|
||||||
# except:
|
|
||||||
# print("Error!!")
|
|
||||||
|
|
||||||
# add_download_count()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def singleModelInfo( model_id_ ,month_later = 6 , year_later = 0 ):
|
def singleModelInfo( model_id_ ,month_later = 6 , year_later = 0 ):
|
||||||
|
|
||||||
|
|
||||||
|
@ -535,247 +801,51 @@ WHERE key_id = {model_id}''')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def MultiModelInfo(limit_number=10):
|
# --- بخش ادغام با FastAPI و APScheduler ---
|
||||||
|
app = FastAPI()
|
||||||
|
scheduler = BackgroundScheduler()
|
||||||
today = date.today()
|
|
||||||
date_year = today.strftime("%Y")
|
# یک تابع برای دریافت آخرین ID قبل از اجرای job
|
||||||
date_month = today.strftime("%m")
|
# def get_last_id():
|
||||||
month = int(date_month)
|
# try:
|
||||||
year = int(date_year)
|
# last_id = c.execute("SELECT MAX(ID) FROM PersianNlp").fetchone()[0]
|
||||||
Models_added_this_month=[]
|
# return last_id if last_id is not None else 0
|
||||||
Models_deleted=[]
|
# except sqlite3.OperationalError:
|
||||||
all_id_download = []
|
# return 0
|
||||||
all_download = []
|
|
||||||
growth_slope_list_info = []
|
# تعریف کار زمانبندی شده: اجرای persian_model_finder در روز آخر هر ماه
|
||||||
growth_slope_list = []
|
def scheduled_job():
|
||||||
model_info = c.execute(f'''SELECT *
|
idx = first_id
|
||||||
FROM PersianNlp''')
|
print(f"شروع اجرای کار زمانبندی شده. آخرین ID: {idx}")
|
||||||
|
persian_model_finder(nlp_task_list, idx)
|
||||||
for model in model_info:
|
print("کار زمانبندی شده با موفقیت به پایان رسید.")
|
||||||
|
|
||||||
if int(model[19].split("/")[1]) == month and int(model[19].split("/")[2]) == year :
|
# scheduler.add_job(scheduled_job, 'cron', day='1', hour='0', minute='0')
|
||||||
Models_added_this_month.append(model[1])
|
# scheduler.add_job(scheduled_job, 'interval', minutes=5) # هر بیست دقیقه تابع رو اجرا میکنه که برای تست درست کار کردن هستش و الا کامنت بشه
|
||||||
if str(model[18]) == "True":
|
scheduler.add_job(scheduled_job, 'cron', day='last', hour='0', minute='0') # آخرین روز هرماه رو به عنوان زمان بندی قرار میده
|
||||||
Models_deleted.append(model[1])
|
|
||||||
|
# رویداد startup: شروع زمانبندی هنگام روشن شدن سرور
|
||||||
all_id_download.append([model[0],model[1],model[3],model[11],model[20]])
|
@app.on_event("startup")
|
||||||
|
def startup_event():
|
||||||
|
print("رویداد startup: سرور در حال راهاندازی است و زمانبندی شروع میشود.")
|
||||||
|
scheduler.start()
|
||||||
|
print("زمانبندی فعال شد.")
|
||||||
listX=[]
|
|
||||||
for model in all_id_download:
|
# رویداد shutdown: خاموش کردن زمانبندی هنگام خاموش شدن سرور
|
||||||
|
@app.on_event("shutdown")
|
||||||
downloadCountHistory = c.execute(f'''SELECT *
|
def shutdown_event():
|
||||||
FROM downloadCountHistory
|
print("رویداد shutdown: سرور در حال خاموش شدن است و زمانبندی متوقف میشود.")
|
||||||
WHERE key_id = {model[0]}''')
|
scheduler.shutdown()
|
||||||
|
|
||||||
for models in downloadCountHistory :
|
@app.get("/")
|
||||||
if int(models[3].split("-")[1]) == month and int(models[3].split("-")[2]) == year :
|
def read_root():
|
||||||
model[2]=models[2]
|
return {"message": "FastAPI service is running and the scheduler is active."}
|
||||||
listX.append(model)
|
|
||||||
all_id_download = listX
|
@app.get("/run_monthly_job_now")
|
||||||
|
def run_job_manually():
|
||||||
|
print("درخواست برای اجرای دستی کار ماهانه دریافت شد...")
|
||||||
for model in all_id_download:
|
# اجرای کار در یک ترد مجزا برای جلوگیری از مسدود شدن سرور
|
||||||
all_download.append(model[2])
|
threading.Thread(target=scheduled_job).start()
|
||||||
|
return {"message": "Monthly job has been triggered manually."}
|
||||||
all_download.sort(reverse=True)
|
|
||||||
maximum_download_list = all_download[0:limit_number]
|
|
||||||
maximum_download_info_list = []
|
|
||||||
n=0
|
|
||||||
for DCount in maximum_download_list:
|
|
||||||
|
|
||||||
for model in all_id_download:
|
|
||||||
if DCount == model[2]:
|
|
||||||
if n < limit_number :
|
|
||||||
maximum_download_info_list.append(model)
|
|
||||||
n+=1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# پیدا کردن بیشترین شیب دانلود ها در چند ماه :
|
|
||||||
|
|
||||||
for model in all_id_download:
|
|
||||||
growth_slope = []
|
|
||||||
DHList =c.execute(f'''SELECT *
|
|
||||||
FROM "downloadCountHistory"
|
|
||||||
WHERE key_id = {model[0]}''')
|
|
||||||
|
|
||||||
for data in DHList:
|
|
||||||
growth_slope.append(data[2])
|
|
||||||
|
|
||||||
growth_slopee , lenM = find_growth_slope(growth_slope) # به دست آوردن درصد رشد هر مدل
|
|
||||||
growth_slope_list.append(growth_slopee)
|
|
||||||
growth_slope_list_info.append([model[1],growth_slopee,lenM])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
growth_slope_list.sort(reverse=True)
|
|
||||||
maximum_growth_slope_list = growth_slope_list[0:limit_number]
|
|
||||||
maximum_growth_slope_info_list = []
|
|
||||||
n=0
|
|
||||||
for DCount in maximum_growth_slope_list:
|
|
||||||
|
|
||||||
for model in growth_slope_list_info:
|
|
||||||
if DCount == model[1]:
|
|
||||||
if n < limit_number :
|
|
||||||
maximum_growth_slope_info_list.append(model)
|
|
||||||
n+=1
|
|
||||||
|
|
||||||
# پایان پیدا کردن شیب
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
model_id_list = []
|
|
||||||
model_download_count_list = []
|
|
||||||
for info in maximum_download_info_list:
|
|
||||||
|
|
||||||
model_download_count_list.append(info[2])
|
|
||||||
model_id_list.append(str(info[1]))
|
|
||||||
|
|
||||||
listA = []
|
|
||||||
for x in model_download_count_list:
|
|
||||||
listA.append(int(x)/1000000)
|
|
||||||
model_download_count_list = listA
|
|
||||||
|
|
||||||
plt.plot(model_id_list,model_download_count_list,marker='o', linestyle='-')
|
|
||||||
plt.xticks(rotation=30, ha='right', fontsize=10)
|
|
||||||
plt.xlabel("Model Name", color='blue')
|
|
||||||
plt.ylabel("Download Count (milion)" ,color='red')
|
|
||||||
plt.tight_layout()
|
|
||||||
plt.savefig(f'Top_{limit_number}_download_rate.png', dpi=300)
|
|
||||||
pdf = FPDF()
|
|
||||||
pdf.add_page()
|
|
||||||
pdf.add_font('B Nazanin', '', '.\\fonts\\B Nazanin.ttf', uni=True)
|
|
||||||
pdf.set_font("Arial", size=16)
|
|
||||||
# اضافه کردن متن
|
|
||||||
pdf.multi_cell(0, 10, f"Top {limit_number} Model Information : \n ----------------------------------------------------------------")
|
|
||||||
pdf.set_font("Arial", size=12)
|
|
||||||
|
|
||||||
pdf.ln()
|
|
||||||
pdf.multi_cell(0, 5, f" Download Rate Chart :")
|
|
||||||
pdf.ln()
|
|
||||||
|
|
||||||
# اضافه کردن عکس
|
|
||||||
pdf.image(f'Top_{limit_number}_download_rate.png', x=10, y=pdf.get_y() + 5, w=70)
|
|
||||||
pdf.ln(20) # یک خط فاصله بعد از عکس
|
|
||||||
# اضافه کردن جدول
|
|
||||||
pdf.ln(50)
|
|
||||||
pdf.ln()
|
|
||||||
pdf.multi_cell(0, 5, f" Download Rate Table :")
|
|
||||||
pdf.ln()
|
|
||||||
# سربرگ جدول
|
|
||||||
for header in ['Count', 'Model_name','Download-rate','Task','Last_modified']:
|
|
||||||
if header == 'Model_name':
|
|
||||||
pdf.cell(80, 10, header, 1, 0, 'C')
|
|
||||||
else:
|
|
||||||
pdf.cell(40, 10, header, 1, 0, 'C')
|
|
||||||
pdf.ln()
|
|
||||||
|
|
||||||
# ردیفهای داده
|
|
||||||
x=1
|
|
||||||
for row in maximum_download_info_list:
|
|
||||||
n=0
|
|
||||||
row[0] = x
|
|
||||||
x+=1
|
|
||||||
for item in row:
|
|
||||||
if n == 1 :
|
|
||||||
pdf.set_font("Arial", size=6)
|
|
||||||
pdf.cell(80, 10, str(item), 1, 0, 'C')
|
|
||||||
n+=1
|
|
||||||
else:
|
|
||||||
pdf.set_font("Arial", size=10)
|
|
||||||
pdf.cell(40, 10, str(item), 1, 0, 'C')
|
|
||||||
n+=1
|
|
||||||
pdf.ln()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
model_name_list = []
|
|
||||||
model_growth = []
|
|
||||||
for info in maximum_growth_slope_info_list:
|
|
||||||
|
|
||||||
model_name_list.append(info[0])
|
|
||||||
model_growth.append(round(info[1], 2) )
|
|
||||||
|
|
||||||
pdf.ln()
|
|
||||||
pdf.multi_cell(0, 5, f" Download Growth Chart :")
|
|
||||||
pdf.ln()
|
|
||||||
plt.figure(figsize=(8, 6)) # تنظیم اندازه کلی نمودار (عرض و ارتفاع بر حسب اینچ)
|
|
||||||
plt.bar(model_name_list,model_growth,color='lightgreen', width=0.4)
|
|
||||||
plt.xticks(rotation=30, ha='right', fontsize=10)
|
|
||||||
plt.xlabel("Model Name", color='blue')
|
|
||||||
plt.ylabel("Model Growth (%)" ,color='red')
|
|
||||||
plt.tight_layout()
|
|
||||||
plt.savefig(f'Top_{limit_number}_growth_rate.png', dpi=300)
|
|
||||||
pdf.image(f'Top_{limit_number}_growth_rate.png', x=10, y=pdf.get_y() + 5, w=70)
|
|
||||||
pdf.ln(80) # یک خط فاصله بعد از عکس
|
|
||||||
|
|
||||||
pdf.ln()
|
|
||||||
pdf.multi_cell(0, 5, f" Download Growth Table :")
|
|
||||||
pdf.ln()
|
|
||||||
# سربرگ جدول
|
|
||||||
for header in [ 'Model_name','Growth-rate','Length-month']:
|
|
||||||
if header == 'Model_name':
|
|
||||||
pdf.cell(80, 10, header, 1, 0, 'C')
|
|
||||||
else:
|
|
||||||
pdf.cell(40, 10, header, 1, 0, 'C')
|
|
||||||
pdf.ln()
|
|
||||||
|
|
||||||
# ردیفهای داده
|
|
||||||
x=1
|
|
||||||
for row in maximum_growth_slope_info_list:
|
|
||||||
n=0
|
|
||||||
x+=1
|
|
||||||
for item in row:
|
|
||||||
if n == 0 :
|
|
||||||
pdf.set_font("Arial", size=6)
|
|
||||||
pdf.cell(80, 10, str(item), 1, 0, 'C')
|
|
||||||
n+=1
|
|
||||||
else:
|
|
||||||
pdf.set_font("Arial", size=10)
|
|
||||||
pdf.cell(40, 10, str(item), 1, 0, 'C')
|
|
||||||
n+=1
|
|
||||||
pdf.ln()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pdf.ln()
|
|
||||||
pdf.set_font("Arial", size=14)
|
|
||||||
pdf.multi_cell(0, 5, f"Models added this month :")
|
|
||||||
pdf.set_font("Arial", size=6)
|
|
||||||
pdf.ln()
|
|
||||||
|
|
||||||
txt=''
|
|
||||||
n=1
|
|
||||||
for model_name in Models_added_this_month:
|
|
||||||
txt +=f"{n} --> {model_name}\n"
|
|
||||||
n+=1
|
|
||||||
pdf.multi_cell(0, 5, f"{txt}")
|
|
||||||
|
|
||||||
pdf.ln()
|
|
||||||
pdf.set_font("Arial", size=14)
|
|
||||||
pdf.multi_cell(0, 5, f"Models deleted :")
|
|
||||||
pdf.set_font("Arial", size=6)
|
|
||||||
pdf.ln()
|
|
||||||
txt=''
|
|
||||||
n=1
|
|
||||||
for model_name in Models_deleted:
|
|
||||||
txt +=f"{n} --> {model_name}\n"
|
|
||||||
n+=1
|
|
||||||
pdf.multi_cell(0, 5, f"{txt}")
|
|
||||||
|
|
||||||
pdf.output("MultiModelInfo.pdf")
|
|
||||||
os.remove(f'Top_{limit_number}_download_rate.png')
|
|
||||||
os.remove(f'Top_{limit_number}_growth_rate.png')
|
|
||||||
|
|
||||||
# MultiModelInfo(5)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user