87 lines
3.7 KiB
Python
87 lines
3.7 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
|
||
|
||
|
||
# Загружаем стихи
|
||
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
|
||
if(str1 != f"стих {a+1}\n"):
|
||
stixi+=str1#удаление /n и заключение в список
|
||
poem = Poems(title=name, text=stixi, author=author)
|
||
# В конце каждой итерации добавляем в базу данных
|
||
db.add(poem)
|
||
db.commit()
|
||
db.refresh(poem)
|
||
# close the file
|
||
f1.close()
|
||
|
||
|
||
# def generate_poem(db: Session):
|
||
# # генерируем 1 случайное id и выбираем объект бд с этим id
|
||
# rand_id = random.randint(1, 102)
|
||
# poem = db.query(models.Poems).filter(models.Poems.id == rand_id).first()
|
||
# # возвращаем название и текст стихотворения
|
||
# return {"name": poem.title, "text": poem.poem_text, "author":""} # добавить поле author в Poems
|
||
#Вова тестирует получение поэм, Димоны, помогите пж
|
||
# def poems_to_front(db: Annotated[Session, Depends(utils.get_db)]):
|
||
# kolvo_stixov = 109 # пока количество стихотворений = 101
|
||
# rand_id = random.randint(1, kolvo_stixov) # номер стихотворения
|
||
# poem_json = dict()
|
||
# poem = database.query(models.Poems).filter(models.Poems.id == rand_id).first()
|
||
# poem_json = {"title": poem.title, "text": poem.text, "author":poem.author}
|
||
# return poem_json
|
||
|
||
|
||
|
||
def get_query_results(db: Annotated[Session, Depends(utils.get_db)], schema: schemas.SortAnnouncements):
|
||
"""Функция для последовательного применения различных фильтров (через схему 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):
|
||
"""
|
||
Возвращаем список объектов базы данных типа Announcement
|
||
, удовлетворяющих условию obsolete == True
|
||
"""
|
||
list_to_return = []
|
||
not_obsolete = database.query(models.Announcement).filter(models.Announcement.obsolete == True).all()
|
||
for ann in not_obsolete:
|
||
if ann.best_by < current_date:
|
||
ann.obsolete = False
|
||
else:
|
||
list_to_return.append(ann)
|
||
|
||
return list_to_return
|
||
|