porridger/back/service.py

87 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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, 102):
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