mirror of
https://github.com/Faridik/Carolyn.git
synced 2026-07-08 13:21:53 +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 time
|
||||||
|
import models
|
||||||
|
from manager import *
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = flask.Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/")
|
@app.route("/")
|
||||||
@ -11,8 +13,12 @@ def hello_world():
|
|||||||
|
|
||||||
@app.route("/auth")
|
@app.route("/auth")
|
||||||
def auth():
|
def auth():
|
||||||
is_auth = int(time.time())
|
# TODO: return json text instead of text/html.
|
||||||
return f"{is_auth % 2 == 0}"
|
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__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
import os.path
|
import os.path
|
||||||
|
import pathlib
|
||||||
|
from sys import path
|
||||||
from googleapiclient.discovery import _MEDIA_SIZE_BIT_SHIFTS, build
|
from googleapiclient.discovery import _MEDIA_SIZE_BIT_SHIFTS, build
|
||||||
from google_auth_oauthlib.flow import InstalledAppFlow
|
from google_auth_oauthlib.flow import InstalledAppFlow
|
||||||
from google.auth.transport.requests import Request
|
from google.auth.transport.requests import Request
|
||||||
@ -18,47 +20,54 @@ ASSIGNMENT_SUBJECT = 3
|
|||||||
ASSIGNMENT_WEIGHTS = 4
|
ASSIGNMENT_WEIGHTS = 4
|
||||||
ASSIGNMENT_RANGES = 5
|
ASSIGNMENT_RANGES = 5
|
||||||
ASSIGNMENT_ALLOWS = 6
|
ASSIGNMENT_ALLOWS = 6
|
||||||
|
TOKEN_FILE = pathlib.Path() / "manager" / "token.json"
|
||||||
|
CLIENT_SECRET_FILE = pathlib.Path() / "manager" / "client_secret.json"
|
||||||
|
|
||||||
|
|
||||||
class Manager:
|
class Manager:
|
||||||
"""Позволяет выполнять операции с Google таблицами."""
|
"""Позволяет выполнять операции с Google таблицами."""
|
||||||
|
|
||||||
def __init__(self, spreadsheet_id: str='1GKfmLwDVGjcpXFQAUyxM4RMQ5Nx6HAZ5VWenz2z--d0',
|
def __init__(
|
||||||
scopes: list=['https://www.googleapis.com/auth/spreadsheets.readonly']):
|
self,
|
||||||
|
spreadsheet_id: str = "1GKfmLwDVGjcpXFQAUyxM4RMQ5Nx6HAZ5VWenz2z--d0",
|
||||||
|
scopes: list = ["https://www.googleapis.com/auth/spreadsheets.readonly"],
|
||||||
|
):
|
||||||
|
|
||||||
self.spreadsheet_id = spreadsheet_id
|
self.spreadsheet_id = spreadsheet_id
|
||||||
|
|
||||||
creds = None
|
creds = None
|
||||||
|
|
||||||
if os.path.exists('token.json'):
|
if os.path.exists(TOKEN_FILE):
|
||||||
creds = Credentials.from_authorized_user_file('token.json', scopes)
|
creds = Credentials.from_authorized_user_file(TOKEN_FILE, scopes)
|
||||||
# If there are no (valid) credentials available, let the user log in.
|
# If there are no (valid) credentials available, let the user log in.
|
||||||
if not creds or not creds.valid:
|
if not creds or not creds.valid:
|
||||||
if creds and creds.expired and creds.refresh_token:
|
if creds and creds.expired and creds.refresh_token:
|
||||||
creds.refresh(Request())
|
creds.refresh(Request())
|
||||||
else:
|
else:
|
||||||
|
print(CLIENT_SECRET_FILE)
|
||||||
flow = InstalledAppFlow.from_client_secrets_file(
|
flow = InstalledAppFlow.from_client_secrets_file(
|
||||||
'client_secret.json', scopes)
|
str(CLIENT_SECRET_FILE), scopes
|
||||||
|
)
|
||||||
creds = flow.run_local_server(port=0)
|
creds = flow.run_local_server(port=0)
|
||||||
# Save the credentials for the next run
|
# 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())
|
token.write(creds.to_json())
|
||||||
|
|
||||||
service = build('sheets', 'v4', credentials=creds)
|
service = build("sheets", "v4", credentials=creds)
|
||||||
self.sheet = service.spreadsheets()
|
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,
|
result = (
|
||||||
range=range_name).execute()
|
self.sheet.values()
|
||||||
|
.get(spreadsheetId=self.spreadsheet_id, range=range_name)
|
||||||
return result.get('values', [])
|
.execute()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
return result.get("values", [])
|
||||||
|
|
||||||
def get_group(self, group_id: int) -> Group:
|
def get_group(self, group_id: int) -> Group:
|
||||||
"""Получить группу со студентами."""
|
"""Получить группу со студентами."""
|
||||||
@ -69,30 +78,31 @@ class Manager:
|
|||||||
|
|
||||||
f = lambda row: group_id == int(row[GROUP_IDS])
|
f = lambda row: group_id == int(row[GROUP_IDS])
|
||||||
for row in filter(f, values):
|
for row in filter(f, values):
|
||||||
group.add_student(Student(int(row[STUDENT_NUMBERS]), row[STUDENT_NAMES],
|
group.add_student(
|
||||||
group_id, row[TELEGRAM_IDS]))
|
Student(
|
||||||
|
int(row[STUDENT_NUMBERS]),
|
||||||
|
row[STUDENT_NAMES],
|
||||||
|
group_id,
|
||||||
|
row[TELEGRAM_IDS],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
return group
|
return group
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_student_by_name(self, name: str) -> Student:
|
def get_student_by_name(self, name: str) -> Student:
|
||||||
"""Получить студента по имени."""
|
"""Получить студента по имени."""
|
||||||
|
|
||||||
values = self.get_values()
|
values = self.get_values()
|
||||||
|
|
||||||
f = lambda row: name == row[STUDENT_NAMES]
|
f = lambda row: name in row[STUDENT_NAMES]
|
||||||
try:
|
try:
|
||||||
row = next(filter(f, values))
|
row = next(filter(f, values))
|
||||||
return Student(int(row[STUDENT_NUMBERS]), name,
|
return Student(
|
||||||
row[GROUP_IDS], row[TELEGRAM_IDS])
|
int(row[STUDENT_NUMBERS]), name, row[GROUP_IDS], row[TELEGRAM_IDS]
|
||||||
|
)
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
raise StudentNotFound("Не могу найти студента по имени")
|
raise StudentNotFound("Не могу найти студента по имени")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_student_by_tg_id(self, tg_id: int) -> Student:
|
def get_student_by_tg_id(self, tg_id: int) -> Student:
|
||||||
"""Получить студента по telegram id."""
|
"""Получить студента по telegram id."""
|
||||||
|
|
||||||
@ -101,31 +111,21 @@ class Manager:
|
|||||||
f = lambda row: tg_id == row[TELEGRAM_IDS]
|
f = lambda row: tg_id == row[TELEGRAM_IDS]
|
||||||
try:
|
try:
|
||||||
row = next(filter(f, values))
|
row = next(filter(f, values))
|
||||||
return Student(int(row[STUDENT_NUMBERS]), row[STUDENT_NAMES],
|
return Student(
|
||||||
row[GROUP_IDS], tg_id)
|
int(row[STUDENT_NUMBERS]), row[STUDENT_NAMES], row[GROUP_IDS], tg_id
|
||||||
|
)
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
raise StudentNotFound("Не могу найти студента по telegram id")
|
raise StudentNotFound("Не могу найти студента по telegram id")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def set_assignments_for_student(self, student: Student):
|
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
|
f = lambda row: student.group_id == int(row[GROUP_IDS]) # TODO add subject
|
||||||
for row in filter(f, values):
|
for row in filter(f, values):
|
||||||
assignment_value = self.get_values(row[ASSIGNMENT_RANGES])
|
assignment_value = self.get_values(row[ASSIGNMENT_RANGES])
|
||||||
ass_values = list(map(float, assignment_value[student.number]))
|
ass_values = list(map(float, assignment_value[student.number]))
|
||||||
student.add_assignment(Assignment(row[ASSIGNMENT_NAMES], ass_values,
|
student.add_assignment(
|
||||||
row[ASSIGNMENT_WEIGHTS]))
|
Assignment(row[ASSIGNMENT_NAMES], ass_values, row[ASSIGNMENT_WEIGHTS])
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
from .assignment import Assignment
|
from .assignment import Assignment
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
class Student:
|
class Student:
|
||||||
@ -23,3 +24,13 @@ class Student:
|
|||||||
def score(self):
|
def score(self):
|
||||||
"""Количество баллов у студента."""
|
"""Количество баллов у студента."""
|
||||||
return sum([a.total for a in self.assignments])
|
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
|
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(
|
context.bot.send_message(
|
||||||
chat_id=update.effective_chat.id,
|
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