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
|
from rich.prompt import Prompt
import pwd
import grp
import os
class ConfigVar:
def __init__(self, name: str, description: str, default_value_generator, /, default_value_for_ask=None):
"""Create a config var.
Args:
name (str): The name of the config var.
description (str): The description of the config var.
default_value_generator (typing.Callable([], str) | str): The default value generator of the config var. If it is a string, it will be used as the input prompt and let user input the value.
"""
self.name = name
self.description = description
self.default_value_generator = default_value_generator
self.default_value_for_ask = default_value_for_ask
def get_default_value(self, /, console):
if isinstance(self.default_value_generator, str):
return Prompt.ask(self.default_value_generator, console=console, default=self.default_value_for_ask)
else:
return self.default_value_generator()
config_var_list: list = [
ConfigVar("CRUPEST_DOMAIN", "domain name",
"Please input your domain name"),
ConfigVar("CRUPEST_EMAIL", "admin email address",
"Please input your email address"),
ConfigVar("CRUPEST_USER", "your system account username",
lambda: pwd.getpwuid(os.getuid()).pw_name),
ConfigVar("CRUPEST_GROUP", "your system account group name",
lambda: grp.getgrgid(os.getgid()).gr_name),
ConfigVar("CRUPEST_UID", "your system account uid",
lambda: str(os.getuid())),
ConfigVar("CRUPEST_GID", "your system account gid",
lambda: str(os.getgid())),
ConfigVar("CRUPEST_HALO_DB_PASSWORD",
"password for halo h2 database, once used never change it", lambda: os.urandom(8).hex()),
ConfigVar("CRUPEST_IN_CHINA",
"set to true if you are in China, some network optimization will be applied", lambda: "false"),
ConfigVar("CRUPEST_AUTO_BACKUP_COS_SECRET_ID",
"access key id for Tencent COS, used for auto backup", "Please input your Tencent COS access key id for backup"),
ConfigVar("CRUPEST_AUTO_BACKUP_COS_SECRET_KEY",
"access key secret for Tencent COS, used for auto backup", "Please input your Tencent COS access key for backup"),
ConfigVar("CRUPEST_AUTO_BACKUP_COS_REGION",
"region for Tencent COS, used for auto backup", "Please input your Tencent COS region for backup", "ap-hongkong"),
ConfigVar("CRUPEST_AUTO_BACKUP_BUCKET_NAME",
"bucket name for Tencent COS, used for auto backup", "Please input your Tencent COS bucket name for backup"),
ConfigVar("CRUPEST_GITHUB_USERNAME",
"github username for fetching todos", "Please input your github username for fetching todos", "crupest"),
ConfigVar("CRUPEST_GITHUB_PROJECT_NUMBER",
"github project number for fetching todos", "Please input your github project number for fetching todos", "2"),
ConfigVar("CRUPEST_GITHUB_TOKEN",
"github token for fetching todos", "Please input your github token for fetching todos"),
ConfigVar("CRUPEST_GITHUB_TODO_COUNT",
"github todo count", "Please input your github todo count", 10),
]
config_var_name_set = set([config_var.name for config_var in config_var_list])
def check_config_var_set(needed_config_var_set: set):
more = []
less = []
for var_name in needed_config_var_set:
if var_name not in config_var_name_set:
more.append(var_name)
for var_name in config_var_name_set:
if var_name not in needed_config_var_set:
less.append(var_name)
return (True if len(more) == 0 else False, more, less)
|