init: MVP

This commit is contained in:
Arthur K. 2025-01-31 17:05:07 +03:00
commit 46e870be42
Signed by: wzray
GPG key ID: B97F30FDC4636357
17 changed files with 1202 additions and 0 deletions

60
codeforces/ui/config.py Normal file
View file

@ -0,0 +1,60 @@
import json
import sys
from getpass import getpass
from codeforces.client.client import CodeforcesClient
from codeforces.client.spinner import Spinner
from codeforces.ui.utils import CONFIG_FILE, SESSION_FILE, get_int
def add_login_data():
login = input("Login: ")
password = getpass("Password: ")
with Spinner("Logging in (this may take a long time)..."):
c = CodeforcesClient.auth(login, password)
with open(SESSION_FILE, 'w') as f:
json.dump({
'login': login,
'password': password,
'session': c.to_dict()
}, f)
def add_template():
template_path = input('Path to the template file (i.e. ~/algo_template.cpp): ')
try:
with open(template_path) as f:
template = f.read()
with open(CONFIG_FILE) as f:
config = json.load(f)
config.update({'template': template})
with open(CONFIG_FILE, 'w') as f:
json.dump(config, f)
except Exception:
print("Invalid path!", file=sys.stderr)
return add_template()
print("Added successfuly!", end='\n\n')
def config_menu():
print('CFTool-Reborn configuration menu. Press <C-c> to exit.', end='\n\n')
options = [
'1) Add/Update login data',
'2) Add a template'
]
try:
while True:
ans = get_int(options)
if ans == 0:
return
elif ans == 1:
add_login_data()
elif ans == 2:
add_template()
except KeyboardInterrupt:
return