from templater import render_template from utils import parse_cookies, SUCCESS, BAD_REQUEST, METHOD_NOT_ALLOWED from config import TEXT_TEMPLATE_NAME, FORM_TEMPLATE_NAME import db # По заданию любой метод, кроме GET и POST должны быть запрещены на сервере. def fallback_wrong_method(query, *args): return METHOD_NOT_ALLOWED, 'This method is not allowed' def index_get(query, *args): return SUCCESS, render_template(FORM_TEMPLATE_NAME, color=get_color()) def divide_get(query, *args): color = get_color() try: text = str(int(args[0]) / int(args[1])) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, text=text, color=color) except ZeroDivisionError as e: return BAD_REQUEST, get_error_template(str(e), color) def divide_post(query, *args): color = get_color() try: text = str(int(query['numerator']) / int(query['denominator'])) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, text=text, color=color) except KeyError: field = 'числитель' if 'numerator' not in query else 'знаменатель' return BAD_REQUEST, get_error_template(f'Указан неверный {field}', color) except (ValueError, ZeroDivisionError) as e: return BAD_REQUEST, get_error_template(str(e), color) def show_errors_get(query, *args): color = get_color() if args[0] == '1': db.set_config_entry('show_errors', 1) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, color=color, text='Опция show_errors включена') elif args[0] == '0': db.set_config_entry('show_errors', 0) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, color=color, text='Опция show_errors выключена') else: return BAD_REQUEST, render_template( TEXT_TEMPLATE_NAME, color=color, text='Опция show_errors не может принимать такое значение' ) def show_errors_post(query, *args): color = get_color() if 'show_errors' not in query: db.set_config_entry('show_errors', 0) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, color=color, text='Опция show_errors выключена') elif query['show_errors'] == '1': db.set_config_entry('show_errors', 1) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, color=color, text='Опция show_errors включена') else: return BAD_REQUEST, render_template( TEXT_TEMPLATE_NAME, color=color, text='Опция show_errors не может принимать такое значение' ) def set_cookie_get(query, *args): cookie_line = args[0] color = get_color() try: cookies = parse_cookies(cookie_line) for key, value in cookies.items(): db.set_cookie(key, value) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, color=color, text='Cookie-файл обновлен') except ValueError as e: return BAD_REQUEST, get_error_template(str(e), color) def set_cookie_post(query, *args): color = get_color() try: cookie_line = query['cookie_line'] cookies = parse_cookies(cookie_line) for key, value in cookies.items(): db.set_cookie(key, value) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, color=color, text='Cookie-файл обновлен') except KeyError: return BAD_REQUEST, get_error_template('Не указана строка с cookie', color) except ValueError as e: return BAD_REQUEST, get_error_template(str(e), color) def short_log_get(query, *args): color = get_color() if args[0] == '1': db.set_config_entry('short_log', 1) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, color=color, text='Опция short_log включена') elif args[0] == '0': db.set_config_entry('short_log', 0) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, color=color, text='Опция short_log выключена') else: return BAD_REQUEST, render_template( TEXT_TEMPLATE_NAME, color=color, text='Опция short_log не может принимать такое значение' ) def short_log_post(query, *args): color = get_color() if 'short_log' not in query: db.set_config_entry('short_log', 0) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, color=color, text='Опция short_log выключена') elif query['short_log'] == '1': db.set_config_entry('short_log', 1) return SUCCESS, render_template(TEXT_TEMPLATE_NAME, color=color, text='Опция short_log включена') else: return BAD_REQUEST, render_template( TEXT_TEMPLATE_NAME, color=color, text='Опция short_log не может принимать такое значение' ) def get_color(): color = db.get_cookie('bg_color', 'white') if color not in ['green', 'white']: color = 'white' return color def get_error_template(text, color): show_errors = db.get_config_entry('show_errors') return render_template( TEXT_TEMPLATE_NAME, color=color, text = BAD_REQUEST + ('
' + text) if show_errors else '' )