summaryrefslogtreecommitdiff
path: root/day7/backend.py
blob: 0b63883740c3d778855371d6d2417a6145934bfc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
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 + ('<br>' + text) if show_errors else ''
    )