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(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 = False else: ann.obsolete = True