70 lines
4.2 KiB
Python
70 lines
4.2 KiB
Python
from sqlalchemy.orm import Session
|
||
from typing import Annotated, Union
|
||
from fastapi import Depends
|
||
from . import models, schemas, utils
|
||
import random
|
||
import datetime
|
||
|
||
# Переменные для получения данных о мусорках с внешнего API
|
||
# url API
|
||
BASE_URL='https://geointelect2.gate.petersburg.ru'#адрес сайта и мой токин
|
||
# токен для получения данных
|
||
my_token='eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhU1RaZm42bHpTdURYcUttRkg1SzN5UDFhT0FxUkhTNm9OendMUExaTXhFIn0.eyJleHAiOjE3ODM3ODk4NjgsImlhdCI6MTY4OTA5NTQ2OCwianRpIjoiNDUzNjQzZTgtYTkyMi00NTI4LWIzYmMtYWJiYTNmYjkyNTkxIiwiaXNzIjoiaHR0cHM6Ly9rYy5wZXRlcnNidXJnLnJ1L3JlYWxtcy9lZ3MtYXBpIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImJjYjQ2NzljLTU3ZGItNDU5ZC1iNWUxLWRlOGI4Yzg5MTMwMyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImFkbWluLXJlc3QtY2xpZW50Iiwic2Vzc2lvbl9zdGF0ZSI6ImM2ZDJiOTZhLWMxNjMtNDAxZS05ZjMzLTI0MmE0NDcxMDY5OCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiLyoiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtZWdzLWFwaSIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJzaWQiOiJjNmQyYjk2YS1jMTYzLTQwMWUtOWYzMy0yNDJhNDQ3MTA2OTgiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiLQktC70LDQtNC40LzQuNGAINCv0LrQvtCy0LvQtdCyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiZTBmYzc2OGRhOTA4MjNiODgwZGQzOGVhMDJjMmQ5NTciLCJnaXZlbl9uYW1lIjoi0JLQu9Cw0LTQuNC80LjRgCIsImZhbWlseV9uYW1lIjoi0K_QutC-0LLQu9C10LIifQ.E2bW0B-c6W5Lj63eP_G8eI453NlDMnW05l11TZT0GSsAtGayXGaolHtWrmI90D5Yxz7v9FGkkCmcUZYy1ywAdO9dDt_XrtFEJWFpG-3csavuMjXmqfQQ9SmPwDw-3toO64NuZVv6qVqoUlPPj57sLx4bLtVbB4pdqgyJYcrDHg7sgwz4d1Z3tAeUfSpum9s5ZfELequfpLoZMXn6CaYZhePaoK-CxeU3KPBPTPOVPKZZ19s7QY10VdkxLULknqf9opdvLs4j8NMimtwoIiHNBFlgQz10Cr7bhDKWugfvSRsICouniIiBJo76wrj5T92s-ztf1FShJuqnQcKE_QLd2A'
|
||
|
||
# Загружаем стихи
|
||
def add_poems_to_db(db: Session):
|
||
f1 = open('text121.txt', encoding='utf-8', mode='r')#открыть фаил для чтения на русском
|
||
for a in range(1, 110):
|
||
f1.seek(0)#перейти к началу
|
||
i=0
|
||
str1 = ""
|
||
stixi = ""
|
||
author = ""
|
||
flag = False
|
||
while str1 != f"стих {a}\n":
|
||
str1=f1.readline()
|
||
name=f1.readline()
|
||
# Цикл для склеивания стихотворения
|
||
while str1 != f"стих {a+1}\n":
|
||
str1=f1.readline()
|
||
if str1 != f"стих {a + 1}\n":
|
||
if (str1 != f"Автор:\n" and flag == False):
|
||
stixi += str1 # удаление /n и заключение в список
|
||
else:
|
||
if str1 == f"Автор:\n":#чтобы не записывать слово "автор"
|
||
flag = True
|
||
else:
|
||
author += str1
|
||
poem = models.Poems(title=name, text=stixi, author=author)
|
||
# В конце каждой итерации добавляем в базу данных
|
||
db.add(poem)
|
||
db.commit()
|
||
db.refresh(poem)
|
||
# close the file
|
||
f1.close()
|
||
|
||
|
||
def filter_ann(schema: schemas.SortAnnouncements, db: Annotated[Session, Depends(utils.get_db)]):
|
||
"""Функция для последовательного применения различных фильтров (через схему SortAnnouncements)"""
|
||
res = db.query(models.Announcement)
|
||
fields = schema.__dict__ # параметры передоваемой схемы SortAnnouncements (ключи и значения)
|
||
for name, filt in fields.items():
|
||
if filt is not None:
|
||
d = {name: filt}
|
||
res = res.filter_by(**d)
|
||
return res.all()
|
||
|
||
|
||
def check_obsolete(db: Annotated[Session, Depends(utils.get_db)], current_date: datetime.date):
|
||
"""
|
||
Обновляем поле obsolete у всех объявлений раз в сутки
|
||
"""
|
||
announcements = db.query(models.Announcement).all()
|
||
for ann in announcements:
|
||
if ann.best_by < current_date:
|
||
ann.obsolete = True
|
||
db.commit()
|
||
db.refresh(ann) # обновляем состояние объекта
|
||
|
||
|