-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
69 lines (53 loc) · 1.68 KB
/
main.py
File metadata and controls
69 lines (53 loc) · 1.68 KB
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
from redis_like import Redis
import re
r = Redis()
no_param_pattern = "^(END|BEGIN|ROLLBACK|COMMIT)$"
one_param_pattern = "^(GET|UNSET|NUMEQUALTO) <([^<>;]*)>$"
two_param_pattern = "^(SET) <([^<>;]*)><([^<>;]*)>$"
valid_pattern = re.compile(f"({no_param_pattern}|{one_param_pattern}|{two_param_pattern})")
def is_valid_input(input_value):
# Big O = N
# N: input_value lenght
return True if valid_pattern.match(input_value) else False
def get_parameters(input_value):
# Big O = N
# N: input_value lenght
params = input_value.split("<")
if len(params) == 2:
return [params[1][:len(params[1])-1]]
else:
return [params[1][:len(params[1])-1], params[2][:len(params[2])-1]]
def process_input(input_value):
# Big O = N
# N: input_value lenght
if "GET" in input_value:
params = get_parameters(input_value)
print(r.get(params[0]))
elif "UNSET" in input_value:
params = get_parameters(input_value)
r.unset(params[0])
print()
elif "NUMEQUALTO" in input_value:
params = get_parameters(input_value)
print(r.num_equal_to(params[0]))
elif "SET" in input_value:
params = get_parameters(input_value)
r.set(params[0], params[1])
print()
elif "BEGIN" in input_value:
r.begin()
elif "COMMIT" in input_value:
r.commit()
elif "ROLLBACK" in input_value:
r.rollback()
user_input = None
print()
print("Redis-like started!")
print()
while user_input != "END":
user_input = input()
is_valid = is_valid_input(user_input)
if is_valid:
process_input(user_input)
else:
print("ERRO")