Для студентов МГТУ им. Н.Э.Баумана по предмету ИнформатикаИсключенияИсключения
2025-01-052025-01-05СтудИзба
Задача: Исключения
Описание
Напишем часть сервиса, который будет помогать бронировать переговорки в офисе. Для этого опишем класс Booking - его объекты будут содержать информацию о конкретном бронировании, а также вспомогательную функцию create_booking, которая будет создавать новый объект бронирования и записывать информацию о бронировании в базу данных бронирований через предоставляемое API. Возвращать она должна будет статус создания бронирования (получилось или переговорка уже занята) и информацию о брони в формате JSON. Ниже - подробности.
Класс
где аргументы - это те же аргументы, которые принимает конструктор Booking, а выходная строка - это json определенного формата, который описан чуть ниже по тексту.
Будем считать, что взаимодействие с базой данных у нас уже описано нашим коллегой в соседнем файле
"Вагнер",
datetime.datetime(2022, 9, 1, 14),
datetime.datetime(2022, 9, 1, 15, 15)
)
print(result)
Функция возвращает:
{
"created": false,
"msg": "Комната занята",
"booking": {
"room_name": "Вагнер",
"start_date": "2022-09-01",
"start_time": "14:00",
"end_date": "2022-09-01",
"end_time": "15:15",
"duration": 75
}
}
from api import register_booking
def create_booking(room_name, start, end):
booking = Booking(........)
try:
result = register_booking(booking)
except ....:
....
return json.dumps(......)
Класс
Booking
должен обладать следующим функционалом. - конструктор должен принимать три аргумента в следующем порядке: название переговорки, datetime начала брони и datetime конца брони
- внутри конструктора, если datetime конца брони оказался раньше, чем datetime начала, нужно вызвать исключение ValueError
room_name
- название переговорки, полученное из конструктораstart
- datetime начала брони. Должна быть возможность назначить новое время начала уже созданной брониend
- datetime конца брони. Должна быть возможность назначить новое время конца уже созданной брониduration
- длительность бронирования в минутах (гарантируется, что длительность любой встречи кратна одной минуте, поэтому это должно быть целое число)start_date
- дата начала брони в формате YYYY-MM-DD (строка)end_date
- дата конца брони в формате YYYY-MM-DD (строка)start_time
- время начала брони в формате HH:MM (строка)end_time
- время конца брони в формате HH:MM (строка)
create_booking(room_name, start, end) -> str
, где аргументы - это те же аргументы, которые принимает конструктор Booking, а выходная строка - это json определенного формата, который описан чуть ниже по тексту.
Будем считать, что взаимодействие с базой данных у нас уже описано нашим коллегой в соседнем файле
api.py
. В нем есть уже готовая функция register_booking
, которая: - принимает на вход объект класса Booking
- возвращает True, если бронирование получилось создать
- возвращает False, если мы пытаемся забронировать уже занятую в это время переговорку
- если такой переговорки не существует, вызывается KeyError
create_booking
, которая: - обладает сигнатурой
create_booking(room_name, start, end) -> str
, где аргументы - те же, что и в конструкторе Booking - в самом начале своей работы выводит на экран текст:
Начинаем создание бронирования
- внутри функции создается объект класса Booking, а также вызывается функция register_booking, которая принимает на вход созданный объект. Должны быть обработаны все случаи работы register_booking: True, False и KeyError. Сделать это поможет конструкция try-except
- перед выходом из функции должно выводиться на экран сообщение
Заканчиваем создание бронирования
. Это должно происходить в любом случае, даже если мы попытались создать бронирование с неверными датами и получили ValueError (см. описание класса Booking). Для этого рекомендую использовать блок finally, в котором описать этот print
created
: true/false, получилось ли забронировать комнату. Если возникло KeyError, то нужно здесь записать falsemsg
: сообщение с пояснениями. Сообщение должно быть одним из следующих:Бронирование создано
,Комната занята
,Комната не найдена
. Сообщение выбирается на основе того, что вернет функция register_bookingbooking
- это бронирование в виде json-строки. Должны содержаться поля: room_name, duration, start_date, end_date, start_time, end_time.
Пример использования
result = create_booking("Вагнер",
datetime.datetime(2022, 9, 1, 14),
datetime.datetime(2022, 9, 1, 15, 15)
)
print(result)
Функция возвращает:
{
"created": false,
"msg": "Комната занята",
"booking": {
"room_name": "Вагнер",
"start_date": "2022-09-01",
"start_time": "14:00",
"end_date": "2022-09-01",
"end_time": "15:15",
"duration": 75
}
}
Примечания
Пример написания функции create_booking:from api import register_booking
def create_booking(room_name, start, end):
booking = Booking(........)
try:
result = register_booking(booking)
except ....:
....
return json.dumps(......)
Характеристики решённой задачи
Предмет
Учебное заведение
Учебная пора
Программы
Просмотров
2
Качество
Идеальное компьютерное
Размер
2,03 Kb
Список файлов
base-6.3.txt

Vladelo