shohabbosdev's picture
Update app.py
b7a0842 verified
import streamlit as st
import pandas as pd
import json
import asyncio
from datetime import datetime, timezone
from utils import validate_input, make_certificates
import pytz
#salom
# Fayl yo'li
DATA_FILE = 'data.json'
# Faylni o'qish funksiyasi
def load_data():
try:
with open(DATA_FILE, 'r') as f:
return json.load(f)
except (FileNotFoundError, json.decoder.JSONDecodeError):
return []
# Faylni yozish funksiyasi
def save_data(data):
with open(DATA_FILE, 'w') as f:
json.dump(data, f, indent=4)
async def main():
st.set_page_config(
page_title="Sertifikatlarni olish",
page_icon="๐ŸŽ“",
layout="wide",
initial_sidebar_state="auto")
st.sidebar.title('Conferences')
st.sidebar.image('image.png')
with open("O'zMU JF_to'plam_17-18-may_2024_1-qism.pdf", "rb") as file:
btn = st.sidebar.download_button(
label="Download conferences files Part 1",
data=file,
file_name="conferences_files part1.pdf",
mime="pdf",
type='primary',
use_container_width=True
)
with open("O'zMU_JF_to'plam_17_18_may_2024_2_qism.pdf", "rb") as file:
btn = st.sidebar.download_button(
label="Download conferences files Part 2",
data=file,
file_name="conferences_files part2.pdf",
mime="pdf",
type='primary',
use_container_width=True
)
st.sidebar.link_button("๐Ÿ“ง About me", url='https://t.me/shohabbosdev', type='secondary')
st.markdown("""
<div style='text-align: center;'>
<h1>Konferensiya ishtirokchilari uchun sertifikat tayyorlash sahifasi</h1>
</div>
""", unsafe_allow_html=True)
st.markdown("<h3 align='center'><i>Ro'yxatga olish formasi</i></h3>", unsafe_allow_html=True)
st.markdown("---")
with st.form("Birinchi formamiz", clear_on_submit=True):
fish = st.text_input("F.I.SH", placeholder="Misol: Ulug'murodov Shoh Abbos Baxodir o'g'li", help='Bu maydonda FISH kiritiladi')
maqola = st.text_input("Maqola mavzuingiz", placeholder="Misol: Ma'lumotlar xavfsizligini oshirishda blockchayn texnologiyalarning o'rni", max_chars=500, help="Bu qismda maqola mavzusi lo'nda kiritilishi kerak")
shuba = st.selectbox(
"Sho'bani tanlang",
options=(
"1-sho'ba. Ta'lim tizimini takomillashtirish: dolzarb tendensiyalar va strategik yo'nalishlar",
"2-sho'ba. Biomuhandislik va biotexnologiyalar sohasida innovatsiyalar",
"3-sho'ba. Raqamli iqtisod va innovatsion axborot-kommunikatsiya texnologiyalarini joriy etishning dolzarb masalalari",
"4-sho'ba. Psixologiya, tabiiy va aniq fanlar sohasida dolzarb tadqiqotlar",
"5-sho'ba. Zamonaviy jamiyatda filologiya, tilshunoslik va didaktika",
"6-sho'ba. Zamonaviy gumanitar ta'limning dolzarb muammolari"
),
placeholder="O'z sho'bangizni tanlang...", help="O'z sho'bangizni tanlashda qiynalsangiz konferensiya ma'muriyatiga telefon qilishingiz mumkin: https://t.me/UzMU_JF_conf_1_2_3_shuba, https://t.me/UzMU_JF_conf_4_5_6_shuba")
ustun_1, ustun_2 = st.columns(2)
email = ustun_1.text_input("Email manzilingizni kiriting", placeholder="Misol: [email protected]", help="Elektron manzil barchangizda bo'ladi degan umiddaman")
phone = ustun_2.text_input("Telefon raqam", placeholder="+998931189988", help="Telefon raqamni kiriting")
rozilik = st.checkbox("Yuqoridagi barcha ma'lumotlar to'g'ri va aniq ekanligini tasdiqlaysizmi?")
taqsdiqlash = st.form_submit_button("Sertifikat olish", type='primary')
if taqsdiqlash and rozilik:
is_valid, error_message = validate_input(fish, email, maqola, phone)
if is_valid:
existing_data = load_data()
# Ma'lumotlar mavjudligini tekshirish
existing_item = next((item for item in existing_data if item["F.I.SH"] == fish or item["Email"] == email or item["Telefon raqam"] == phone), None)
if existing_item:
certificate_link = existing_item["Sertifikat manzili"]
sertifikat_vaqt_utc = datetime.strptime(existing_item["Sertifikat olingan vaqt"], "%Y-%m-%d %H:%M:%S").replace(tzinfo=timezone.utc)
sertifikat_vaqt = sertifikat_vaqt_utc.astimezone(pytz.timezone('Asia/Tashkent'))
st.warning(f"Siz ro'yxatdan o'tgansiz! Pastda siz olgan sertifikat nusxasi mavjud. Sertifikat olgan sana: {sertifikat_vaqt.strftime('%Y-%m-%d %H:%M:%S')}", icon='โš ๏ธ')
st.markdown(f"[{fish}ning sertifikat fayli]({certificate_link})")
else:
sertifikat_vaqt = datetime.now(pytz.timezone('Asia/Tashkent')).strftime("%Y-%m-%d %H:%M:%S")
certificate_link = await make_certificates(fish, maqola)
st.success("Ma'lumotlar muvaffaqiyatli saqlandi", icon='๐Ÿ’พ')
new_entry = {
"F.I.SH": fish,
"Maqola mavzusi": maqola,
"Sho'ba": shuba,
"Email": email,
"Telefon raqam": phone,
"Sertifikat manzili": certificate_link,
"Sertifikat olingan vaqt": sertifikat_vaqt
}
existing_data.append(new_entry)
try:
save_data(existing_data)
except Exception as e:
st.error(f"Ma'lumotlarni saqlashda xatolik yuz berdi: {e}")
st.markdown(f"[{fish}ning sertifikat fayli]({certificate_link})")
table = {
"F.I.SH": fish,
"Maqola mavzusi": maqola,
"Sho'ba": shuba,
"Email": email,
"Telefon raqam": phone,
"Sertifikat manzili": certificate_link,
"Sertifikat olingan vaqt": sertifikat_vaqt
}
with st.expander("Siz kiritgan ma'lumotlar bilan tanishing๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡"):
st.table(table)
# Barcha ro'yxatdan o'tganlar ma'lumotlarini ko'rsatish
df = pd.DataFrame(existing_data)
with st.expander("Umumiy ro'yxat"):
# Telefon raqamlarni qisqartirib olish
df['Telefon raqam'] = df['Telefon raqam'].apply(lambda x: f"+998***{x[-4:]}")
st.dataframe(df)
else:
st.error(f"Xatolik nomi: {error_message}", icon='โŒ')
elif taqsdiqlash and not rozilik:
st.error("Ma'lumotlarni to'g'ri kiritilganligini tasdiqlang", icon='โœ…')
if __name__ == "__main__":
asyncio.run(main())