Archived
stable version
This commit is contained in:
@@ -0,0 +1,164 @@
|
||||
#!/usr/bin/python3.3
|
||||
import gspread, os, telebot
|
||||
import pandas as pd
|
||||
from dotenv import load_dotenv
|
||||
from google.oauth2 import service_account
|
||||
from sshtunnel import SSHTunnelForwarder
|
||||
from psycopg2 import pool
|
||||
|
||||
load_dotenv()
|
||||
|
||||
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS schedule(
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
day_of_week VARCHAR(255),
|
||||
begin_time VARCHAR(20),
|
||||
end_time VARCHAR(20),
|
||||
course VARCHAR(255),
|
||||
lector VARCHAR(255),
|
||||
is_lecture BOOLEAN DEFAULT FALSE,
|
||||
room VARCHAR(20),
|
||||
group VARCHAR(10),
|
||||
parity VARCHAR(10),
|
||||
);
|
||||
"""
|
||||
|
||||
"""
|
||||
День недели Время начала Название Чётность пары Лекция? Преподаватель Кабинет 2-ой преподаватель Прочие кабинеты Остальная информация
|
||||
Понедельник 8:45 Английский язык - FALSE Бим Мария Моисеевна 735 Шубина Юлия Витальевна 790
|
||||
Понедельник 10:30 Практикум на ЭВМ - FALSE Тюляева Вера Викторовна МЗ-4
|
||||
Понедельник 12:15 Действительный и комплексный анализ - TRUE Крицков Леонид Владимирович П-12
|
||||
Понедельник 15:00 Физическая культура - FALSE
|
||||
Понедельник 16:20 FALSE
|
||||
Вторник 8:45 Теория вероятностей и математическая статистика - TRUE Королёв Виктор Юрьевич П-13
|
||||
Вторник 10:30 Обыкновенные дифференциальные уравнения - FALSE Дмитриева Ирина Владимировна 607
|
||||
Вторник 12:15 Действительный и комплексный анализ - FALSE Сычугов Дмитрий Юрьевич 613
|
||||
Вторник 14:35 Электродинамика - FALSE Аксенов Владимир Николаевич 659
|
||||
Вторник 16:20 - FALSE
|
||||
Среда 8:45 Практикум на ЭВМ - FALSE Тюляева Вера Викторовна 505
|
||||
Среда 10:30 Теория вероятностей и математическая статистика - FALSE Ирина Геннадьевна Шевцова 645
|
||||
Среда 12:15 Обыкновенные дифференциальные уравнения - TRUE Денисов Александр Михайлович П-13
|
||||
Среда 15:00 FALSE
|
||||
Среда 16:20 FALSE
|
||||
Четверг 9:00 FALSE
|
||||
Четверг 10:30 FALSE
|
||||
Четверг 12:15 FALSE
|
||||
Четверг 15:00 FALSE
|
||||
Четверг 16:20 FALSE
|
||||
Пятница 9:00 FALSE
|
||||
Пятница 10:30 FALSE
|
||||
Пятница 12:15 FALSE
|
||||
Пятница 15:00 FALSE
|
||||
Пятница 16:20 FALSE
|
||||
Суббота 9:00 FALSE
|
||||
Суббота 10:30 FALSE
|
||||
Суббота 12:15 FALSE
|
||||
Суббота 15:00 FALSE
|
||||
Суббота 16:20 FALSE
|
||||
FALSE
|
||||
FALSE
|
||||
FALSE
|
||||
FALSE
|
||||
FALSE
|
||||
FALSE
|
||||
FALSE
|
||||
FALSE
|
||||
FALSE
|
||||
"""
|
||||
|
||||
SERVICE_ACCOUNT_FILE = "app/credentials.json"
|
||||
|
||||
credentials = service_account.Credentials.from_service_account_file(
|
||||
SERVICE_ACCOUNT_FILE,
|
||||
scopes=[
|
||||
"https://www.googleapis.com/auth/drive",
|
||||
"https://www.googleapis.com/auth/documents",
|
||||
],
|
||||
)
|
||||
|
||||
gc = gspread.authorize(credentials)
|
||||
|
||||
table = gc.open_by_key(os.environ.get("TABLE_ID"))
|
||||
|
||||
ws = table.worksheets()
|
||||
|
||||
bot = telebot.TeleBot(os.environ.get("TG_TEST_TOKEN"))
|
||||
|
||||
if os.environ.get("ENV") == "dev":
|
||||
print("DEV: Connecting to local database")
|
||||
server = SSHTunnelForwarder(
|
||||
(os.environ.get("SSH_HOST"), 22),
|
||||
ssh_private_key=os.environ.get("SSH_KEY"),
|
||||
ssh_username=os.environ.get("SSH_USER"),
|
||||
ssh_password=(
|
||||
os.environ.get("SSH_PASSWORD") if os.environ.get("SSH_PASSWORD") else None
|
||||
),
|
||||
remote_bind_address=("localhost", int(os.environ.get("DB_PORT"))),
|
||||
)
|
||||
server.start()
|
||||
|
||||
db = pool.SimpleConnectionPool(
|
||||
1,
|
||||
20,
|
||||
user=os.environ.get("DB_USER"),
|
||||
password=os.environ.get("DB_PASSWORD"),
|
||||
host="localhost" if os.environ.get("ENV") == "dev" else os.environ.get("DB_HOST"),
|
||||
port=(
|
||||
server.local_bind_port
|
||||
if os.environ.get("ENV") == "dev"
|
||||
else os.environ.get("DB_PORT")
|
||||
),
|
||||
database=os.environ.get("DB_NAME"),
|
||||
)
|
||||
|
||||
|
||||
for i in ws:
|
||||
print(i.title)
|
||||
|
||||
if not (i.title == "Пример" or i.title == "main") and i.title.isdigit():
|
||||
df = pd.DataFrame(i.get_all_records())
|
||||
if not df.empty:
|
||||
with db.getconn() as conn:
|
||||
with conn.cursor() as cursor:
|
||||
cursor.execute(
|
||||
'DELETE FROM schedule WHERE "group" = %s', (str(i.title),)
|
||||
)
|
||||
conn.commit()
|
||||
for index, row in df.iterrows():
|
||||
day_of_week_map = {
|
||||
"Понедельник": "mon",
|
||||
"Вторник": "tue",
|
||||
"Среда": "wed",
|
||||
"Четверг": "thu",
|
||||
"Пятница": "fri",
|
||||
"Суббота": "sat",
|
||||
"Воскресенье": "sun",
|
||||
}
|
||||
row["День недели"] = day_of_week_map.get(
|
||||
row["День недели"], row["День недели"]
|
||||
)
|
||||
if row["Название"] == "":
|
||||
continue
|
||||
end_time = (
|
||||
pd.to_datetime(row["Время начала"], format="%H:%M")
|
||||
+ pd.Timedelta(hours=1, minutes=35)
|
||||
).strftime("%H:%M")
|
||||
cursor.execute(
|
||||
"""
|
||||
INSERT INTO schedule (day_of_week, begin_time, end_time, course, lector, is_lecture, room, "group", parity)
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||
""",
|
||||
(
|
||||
row["День недели"],
|
||||
row["Время начала"],
|
||||
end_time,
|
||||
row["Название"],
|
||||
f'{row["Преподаватель"]}{"/" + str(row["2-ой преподаватель"]) if row["2-ой преподаватель"] else ""}',
|
||||
row["Лекция?"],
|
||||
f'{row["Кабинет"]}{"/" + str(row["Прочие кабинеты"]) if row["Прочие кабинеты"] else ""}',
|
||||
i.title,
|
||||
row["Чётность пары"],
|
||||
),
|
||||
)
|
||||
conn.commit()
|
||||
|
||||
Reference in New Issue
Block a user