set-password e set-server, documentação e refatoração

This commit is contained in:
Lúcio Carvalho Almeida 2025-12-28 11:14:06 -03:00
parent 82dc80b87e
commit aef40473c9
1 changed files with 26 additions and 30 deletions

View File

@ -43,20 +43,6 @@ domain=$server
username=$ramal
password=$password
authID=$ramal
displayName=
dialingPrefix=
dialPlan=
hideCID=0
voicemailNumber=
transport=udp
publicAddr=
SRTP=
registerRefresh=300
keepAlive=15
publish=0
ICE=0
allowRewrite=0
disableSessionTimer=0
'''
GHOST_TEMPLATE = r'''
@ -71,11 +57,11 @@ authID=0000
'''
class Flags(Enum):
format = "format"
input = "input"
columns = "columns"
input_file = "input-file"
add_ghost = "add-ghost"
delimiter = "delimiter"
output = "output"
output_file = "output-file"
label_pattern = "label-pattern"
help = "help"
set_template = "set-template"
@ -83,6 +69,8 @@ class Flags(Enum):
write_encoding = "write-encoding"
sort_by = "sort-by"
sort = "sort"
set_password = "set-password"
set_server = "set-server"
@classmethod
def from_str(cls, name: str):
@ -104,18 +92,20 @@ class FlagSchema(Enum):
class Config:
def __init__(self):
self.flags = {}
self.define_flag(Flags.format,FlagSchema.Argument, "ramal label", """Define a ordem das colunas no arquivo de entrada. Use nomes de variáveis (ex: ramal, password) ou '_' para ignorar uma coluna específica.""")
self.define_flag(Flags.input, FlagSchema.Argument, "./input.txt", """Caminho do arquivo de origem dos dados.""")
self.define_flag(Flags.delimiter, FlagSchema.Argument, ",", """Define qual string sera considerada como seprador das colunas de cada linha do input.""")
self.define_flag(Flags.add_ghost, FlagSchema.NoArgument, False, """Se presente, adiciona uma conta de 'Desconectado' como o primeiro perfil da lista.""")
self.define_flag(Flags.output, FlagSchema.Argument, "./output.ini", """Caminho onde o arquivo .ini será gerado.""")
self.define_flag(Flags.columns,FlagSchema.Argument, "ramal label", """Define a ordem das colunas no arquivo de entrada. Use nomes de variáveis (ex: ramal, password) ou '_' para ignorar uma coluna específica.""")
self.define_flag(Flags.set_password, FlagSchema.Argument, None, "Quando presente determina uma única senha para ser usada por todas as contas.")
self.define_flag(Flags.set_server, FlagSchema.Argument, None, "Quando presente determina o servidor de todas as contas.")
self.define_flag(Flags.delimiter, FlagSchema.Argument, ",", """Define qual string será considerada como seprador das colunas de cada linha do input.""")
self.define_flag(Flags.label_pattern, FlagSchema.Argument, "label", """Template para customizar o nome de exibição. Substitui nomes de variáveis pelos seus valores.""")
self.define_flag(Flags.help, FlagSchema.NoArgument, False, """Exibe o manual.""")
self.define_flag(Flags.set_template, FlagSchema.Argument, None, """Forcene o caminho para um arquivo que servira como template.""")
self.define_flag(Flags.add_ghost, FlagSchema.NoArgument, False, """Se presente, adiciona uma conta de 'Desconectado' como o primeiro perfil da lista.""")
self.define_flag(Flags.set_template, FlagSchema.Argument, None, """Fornece o caminho para um arquivo que servira como template.""")
self.define_flag(Flags.input_file, FlagSchema.Argument, "./input.txt", """Caminho do arquivo de origem dos dados.""")
self.define_flag(Flags.output_file, FlagSchema.Argument, "./output.ini", """Caminho onde o arquivo .ini será gerado.""")
self.define_flag(Flags.read_encoding, FlagSchema.Argument, "utf-8", "Codificação do arquivo lido por '--input'")
self.define_flag(Flags.write_encoding, FlagSchema.Argument, "utf-8", "Codificação do arquivos gerados.")
self.define_flag(Flags.sort, FlagSchema.NoArgument, True, """Ordena as contas no arquivo final.""")
self.define_flag(Flags.sort_by, FlagSchema.Argument, "ramal", """Define qual a coluna usada para ordenação.""")
self.define_flag(Flags.sort, FlagSchema.NoArgument, True, """Ordena as contas no arquivo final. Caso não presente preservará a ordem das linhas do input.""")
self.define_flag(Flags.sort_by, FlagSchema.Argument, "ramal", """Define qual coluna será usada para ordenação alfabética.""")
def generate_flags_man(self):
res = [MAN_DESCRIPTION]
@ -191,15 +181,15 @@ def main():
print(config.generate_flags_man())
return
output_file = Path(config.get(Flags.output))
input_file = Path(config.get(Flags.input))
output_file = Path(config.get(Flags.output_file))
input_file = Path(config.get(Flags.input_file))
if not input_file.exists():
error_msg = f"Arquivo de input especificado '{input_file.name}' não encontrado."
raise ValueError(error_msg)
input_lines = [line.strip() for line in input_file.open("r", encoding=config.get(Flags.read_encoding)).readlines()]
accounts_settings = []
format_vars = config.get(Flags.format).split(" ")
format_vars = config.get(Flags.columns).split(" ")
label_pattern = config.get(Flags.label_pattern)
for line in input_lines:
@ -221,7 +211,6 @@ def main():
if pattern in format_vars:
formated_pattern = formated_pattern.replace(pattern, data[format_vars.index(pattern)])
account_dict["label"] = formated_pattern
accounts_settings.append(account_dict)
@ -236,6 +225,12 @@ def main():
if not config.get(Flags.set_template) is None:
current_account_template = Path(config.get(Flags.set_template)).read_text(encoding=config.get(Flags.read_encoding))
if not config.get(Flags.set_password) is None:
current_account_template = current_account_template.replace("$password", config.get(Flags.set_password))
if not config.get(Flags.set_server) is None:
current_account_template = current_account_template.replace("$server", config.get(Flags.set_server))
for account in accounts_settings:
new_entry = current_account_template
@ -254,4 +249,5 @@ def main():
output_file.write_text(result, encoding=config.get(Flags.write_encoding))
print(f"Sucesso: {id-1} contas criadas em '{output_file}'.")
main()
if __name__ == "__main__":
main()