-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
65 lines (49 loc) · 1.7 KB
/
main.py
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
import cmd
from datetime import datetime
from returns.pipeline import is_successful
from returns.result import safe
from toolz.itertoolz import groupby
import webapi
from bootstrap import bootstrap
from inviter.usecase import InviteAdultsToBar
DATE_FORMAT = "%Y-%m-%d %H:%M"
# Input Validator
@safe
def parse_time(time_to_validate: str) -> datetime:
return datetime.strptime(time_to_validate, DATE_FORMAT)
# App
class CliApp(cmd.Cmd):
"""Invitations Management App"""
def do_webserver(self, debug):
"""Runs a webserver"""
webapi.app.run(debug=debug)
def do_EOF(self, line):
"""Use CRTL+d to exit"""
return True
def do_invite_adults(self, invite_datetime):
"""invite_adults [invite_datetime]
Send an invite to adults only to come at [invite_datetime]
invite_date: on format "YYYY-MM-DD HH:MM"
"""
invitation_date = parse_time(invite_datetime)
if not is_successful(invitation_date):
print(invitation_date.failure())
return False
command_bus = bootstrap()
command = InviteAdultsToBar(invitation_date=invitation_date.unwrap())
send_invites_result = command_bus.handle(command)
result_by_success = groupby(is_successful, send_invites_result)
for is_success, results in result_by_success.items():
count = len(results)
if is_success:
msg = f"Success Count: {count}"
else:
msg = f"Failed Count: {count}"
print(msg)
return True
if __name__ == "__main__":
import sys
if len(sys.argv) > 1:
CliApp().onecmd(" ".join(sys.argv[1:]))
else:
CliApp().cmdloop()