mirror of
https://github.com/Faridik/Carolyn.git
synced 2026-07-08 05:11:52 +00:00
Подключил менеджер в app.py
This commit is contained in:
parent
eec8d1b2d5
commit
815bb0e471
@ -1,7 +1,9 @@
|
||||
from flask import Flask
|
||||
import flask
|
||||
import time
|
||||
import models
|
||||
from manager import *
|
||||
|
||||
app = Flask(__name__)
|
||||
app = flask.Flask(__name__)
|
||||
|
||||
|
||||
@app.route("/")
|
||||
@ -11,8 +13,12 @@ def hello_world():
|
||||
|
||||
@app.route("/auth")
|
||||
def auth():
|
||||
is_auth = int(time.time())
|
||||
return f"{is_auth % 2 == 0}"
|
||||
# TODO: return json text instead of text/html.
|
||||
token = flask.request.args.get("token")
|
||||
tg_id = flask.request.args.get("tg_id")
|
||||
manager = Manager()
|
||||
student = manager.get_student_by_name("Дзюба")
|
||||
return str(student)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
import os.path
|
||||
import pathlib
|
||||
from sys import path
|
||||
from googleapiclient.discovery import _MEDIA_SIZE_BIT_SHIFTS, build
|
||||
from google_auth_oauthlib.flow import InstalledAppFlow
|
||||
from google.auth.transport.requests import Request
|
||||
@ -11,54 +13,61 @@ from models.assignment import Assignment
|
||||
|
||||
STUDENT_NUMBERS = 0
|
||||
STUDENT_NAMES = 1
|
||||
GROUP_IDS = 2 # for StudentList and AssignmentList
|
||||
GROUP_IDS = 2 # for StudentList and AssignmentList
|
||||
TELEGRAM_IDS = 3
|
||||
ASSIGNMENT_NAMES = 1
|
||||
ASSIGNMENT_SUBJECT = 3
|
||||
ASSIGNMENT_WEIGHTS = 4
|
||||
ASSIGNMENT_RANGES = 5
|
||||
ASSIGNMENT_ALLOWS = 6
|
||||
TOKEN_FILE = pathlib.Path() / "manager" / "token.json"
|
||||
CLIENT_SECRET_FILE = pathlib.Path() / "manager" / "client_secret.json"
|
||||
|
||||
|
||||
class Manager:
|
||||
"""Позволяет выполнять операции с Google таблицами."""
|
||||
|
||||
def __init__(self, spreadsheet_id: str='1GKfmLwDVGjcpXFQAUyxM4RMQ5Nx6HAZ5VWenz2z--d0',
|
||||
scopes: list=['https://www.googleapis.com/auth/spreadsheets.readonly']):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
spreadsheet_id: str = "1GKfmLwDVGjcpXFQAUyxM4RMQ5Nx6HAZ5VWenz2z--d0",
|
||||
scopes: list = ["https://www.googleapis.com/auth/spreadsheets.readonly"],
|
||||
):
|
||||
|
||||
self.spreadsheet_id = spreadsheet_id
|
||||
|
||||
creds = None
|
||||
|
||||
if os.path.exists('token.json'):
|
||||
creds = Credentials.from_authorized_user_file('token.json', scopes)
|
||||
if os.path.exists(TOKEN_FILE):
|
||||
creds = Credentials.from_authorized_user_file(TOKEN_FILE, scopes)
|
||||
# If there are no (valid) credentials available, let the user log in.
|
||||
if not creds or not creds.valid:
|
||||
if creds and creds.expired and creds.refresh_token:
|
||||
creds.refresh(Request())
|
||||
else:
|
||||
print(CLIENT_SECRET_FILE)
|
||||
flow = InstalledAppFlow.from_client_secrets_file(
|
||||
'client_secret.json', scopes)
|
||||
str(CLIENT_SECRET_FILE), scopes
|
||||
)
|
||||
creds = flow.run_local_server(port=0)
|
||||
# Save the credentials for the next run
|
||||
with open('token.json', 'w') as token:
|
||||
with TOKEN_FILE.open("w") as token:
|
||||
token.write(creds.to_json())
|
||||
|
||||
service = build('sheets', 'v4', credentials=creds)
|
||||
service = build("sheets", "v4", credentials=creds)
|
||||
self.sheet = service.spreadsheets()
|
||||
|
||||
|
||||
|
||||
|
||||
def get_values(self, range_name: str = 'StudentList') -> list: # TODO: change subject
|
||||
def get_values(
|
||||
self, range_name: str = "StudentList"
|
||||
) -> list: # TODO: change subject
|
||||
"""Получить значения с таблицы."""
|
||||
|
||||
result = self.sheet.values().get(spreadsheetId=self.spreadsheet_id,
|
||||
range=range_name).execute()
|
||||
|
||||
return result.get('values', [])
|
||||
|
||||
|
||||
result = (
|
||||
self.sheet.values()
|
||||
.get(spreadsheetId=self.spreadsheet_id, range=range_name)
|
||||
.execute()
|
||||
)
|
||||
|
||||
return result.get("values", [])
|
||||
|
||||
def get_group(self, group_id: int) -> Group:
|
||||
"""Получить группу со студентами."""
|
||||
@ -69,30 +78,31 @@ class Manager:
|
||||
|
||||
f = lambda row: group_id == int(row[GROUP_IDS])
|
||||
for row in filter(f, values):
|
||||
group.add_student(Student(int(row[STUDENT_NUMBERS]), row[STUDENT_NAMES],
|
||||
group_id, row[TELEGRAM_IDS]))
|
||||
group.add_student(
|
||||
Student(
|
||||
int(row[STUDENT_NUMBERS]),
|
||||
row[STUDENT_NAMES],
|
||||
group_id,
|
||||
row[TELEGRAM_IDS],
|
||||
)
|
||||
)
|
||||
|
||||
return group
|
||||
|
||||
|
||||
|
||||
|
||||
def get_student_by_name(self, name: str) -> Student:
|
||||
"""Получить студента по имени."""
|
||||
|
||||
values = self.get_values()
|
||||
|
||||
f = lambda row: name == row[STUDENT_NAMES]
|
||||
f = lambda row: name in row[STUDENT_NAMES]
|
||||
try:
|
||||
row = next(filter(f, values))
|
||||
return Student(int(row[STUDENT_NUMBERS]), name,
|
||||
row[GROUP_IDS], row[TELEGRAM_IDS])
|
||||
return Student(
|
||||
int(row[STUDENT_NUMBERS]), name, row[GROUP_IDS], row[TELEGRAM_IDS]
|
||||
)
|
||||
except StopIteration:
|
||||
raise StudentNotFound("Не могу найти студента по имени")
|
||||
|
||||
|
||||
|
||||
|
||||
def get_student_by_tg_id(self, tg_id: int) -> Student:
|
||||
"""Получить студента по telegram id."""
|
||||
|
||||
@ -101,31 +111,21 @@ class Manager:
|
||||
f = lambda row: tg_id == row[TELEGRAM_IDS]
|
||||
try:
|
||||
row = next(filter(f, values))
|
||||
return Student(int(row[STUDENT_NUMBERS]), row[STUDENT_NAMES],
|
||||
row[GROUP_IDS], tg_id)
|
||||
return Student(
|
||||
int(row[STUDENT_NUMBERS]), row[STUDENT_NAMES], row[GROUP_IDS], tg_id
|
||||
)
|
||||
except StopIteration:
|
||||
raise StudentNotFound("Не могу найти студента по telegram id")
|
||||
|
||||
|
||||
|
||||
|
||||
def set_assignments_for_student(self, student: Student):
|
||||
"""Добавить задания студенту."""
|
||||
|
||||
values = self.get_values('AssignmentList')
|
||||
values = self.get_values("AssignmentList")
|
||||
|
||||
f = lambda row: student.group_id == int(row[GROUP_IDS]) # TODO add subject
|
||||
for row in filter(f,values):
|
||||
f = lambda row: student.group_id == int(row[GROUP_IDS]) # TODO add subject
|
||||
for row in filter(f, values):
|
||||
assignment_value = self.get_values(row[ASSIGNMENT_RANGES])
|
||||
ass_values = list(map(float, assignment_value[student.number]))
|
||||
student.add_assignment(Assignment(row[ASSIGNMENT_NAMES], ass_values,
|
||||
row[ASSIGNMENT_WEIGHTS]))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
student.add_assignment(
|
||||
Assignment(row[ASSIGNMENT_NAMES], ass_values, row[ASSIGNMENT_WEIGHTS])
|
||||
)
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
from .assignment import Assignment
|
||||
import json
|
||||
|
||||
|
||||
class Student:
|
||||
"""Позволяет выполнять операции над студентами."""
|
||||
|
||||
def __init__(self, number: int, name: str, group_id : int, tg_id : int = None):
|
||||
def __init__(self, number: int, name: str, group_id: int, tg_id: int = None):
|
||||
self.number: int = number
|
||||
self.name: str = name
|
||||
self.group_id: int = group_id
|
||||
@ -23,3 +24,13 @@ class Student:
|
||||
def score(self):
|
||||
"""Количество баллов у студента."""
|
||||
return sum([a.total for a in self.assignments])
|
||||
|
||||
def __str__(self):
|
||||
return json.dumps(
|
||||
{
|
||||
"number": self.number,
|
||||
"name": self.name,
|
||||
"group_id": self.group_id,
|
||||
"tg_id": self.tg_id,
|
||||
}
|
||||
)
|
||||
|
||||
@ -24,11 +24,21 @@ def start(update, context):
|
||||
|
||||
p = context.args[0] if len(context.args) > 0 else None
|
||||
|
||||
data = requests.get("http://127.0.0.1:5000/auth").text
|
||||
if p is None:
|
||||
context.bot.send_message(
|
||||
chat_id=update.effective_chat.id,
|
||||
text="Нет доступа к боту",
|
||||
)
|
||||
return
|
||||
|
||||
data = requests.get(
|
||||
"http://127.0.0.1:5000/auth",
|
||||
params={"token": p, "tg_id": update.effective_chat.id},
|
||||
).json()
|
||||
|
||||
context.bot.send_message(
|
||||
chat_id=update.effective_chat.id,
|
||||
text=f"Hello World! {context.args} Authorized? {data}",
|
||||
text=f"Привет, {data}",
|
||||
)
|
||||
|
||||
|
||||
|
||||
@ -1 +1,2 @@
|
||||
python-telegram-bot==13.7
|
||||
python-telegram-bot==13.7
|
||||
requests==2.26.0
|
||||
Loading…
x
Reference in New Issue
Block a user