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 username=$ramal
password=$password password=$password
authID=$ramal 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''' GHOST_TEMPLATE = r'''
@ -71,11 +57,11 @@ authID=0000
''' '''
class Flags(Enum): class Flags(Enum):
format = "format" columns = "columns"
input = "input" input_file = "input-file"
add_ghost = "add-ghost" add_ghost = "add-ghost"
delimiter = "delimiter" delimiter = "delimiter"
output = "output" output_file = "output-file"
label_pattern = "label-pattern" label_pattern = "label-pattern"
help = "help" help = "help"
set_template = "set-template" set_template = "set-template"
@ -83,6 +69,8 @@ class Flags(Enum):
write_encoding = "write-encoding" write_encoding = "write-encoding"
sort_by = "sort-by" sort_by = "sort-by"
sort = "sort" sort = "sort"
set_password = "set-password"
set_server = "set-server"
@classmethod @classmethod
def from_str(cls, name: str): def from_str(cls, name: str):
@ -104,18 +92,20 @@ class FlagSchema(Enum):
class Config: class Config:
def __init__(self): def __init__(self):
self.flags = {} 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.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.input, FlagSchema.Argument, "./input.txt", """Caminho do arquivo de origem dos dados.""") 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.delimiter, FlagSchema.Argument, ",", """Define qual string sera considerada como seprador das colunas de cada linha do input.""") self.define_flag(Flags.set_server, FlagSchema.Argument, None, "Quando presente determina o servidor de todas as contas.")
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.delimiter, FlagSchema.Argument, ",", """Define qual string será considerada como seprador das colunas de cada linha do input.""")
self.define_flag(Flags.output, FlagSchema.Argument, "./output.ini", """Caminho onde o arquivo .ini será gerado.""")
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.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.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.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.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, 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 a coluna usada para ordenação.""") self.define_flag(Flags.sort_by, FlagSchema.Argument, "ramal", """Define qual coluna será usada para ordenação alfabética.""")
def generate_flags_man(self): def generate_flags_man(self):
res = [MAN_DESCRIPTION] res = [MAN_DESCRIPTION]
@ -191,15 +181,15 @@ def main():
print(config.generate_flags_man()) print(config.generate_flags_man())
return return
output_file = Path(config.get(Flags.output)) output_file = Path(config.get(Flags.output_file))
input_file = Path(config.get(Flags.input)) input_file = Path(config.get(Flags.input_file))
if not input_file.exists(): if not input_file.exists():
error_msg = f"Arquivo de input especificado '{input_file.name}' não encontrado." error_msg = f"Arquivo de input especificado '{input_file.name}' não encontrado."
raise ValueError(error_msg) raise ValueError(error_msg)
input_lines = [line.strip() for line in input_file.open("r", encoding=config.get(Flags.read_encoding)).readlines()] input_lines = [line.strip() for line in input_file.open("r", encoding=config.get(Flags.read_encoding)).readlines()]
accounts_settings = [] accounts_settings = []
format_vars = config.get(Flags.format).split(" ") format_vars = config.get(Flags.columns).split(" ")
label_pattern = config.get(Flags.label_pattern) label_pattern = config.get(Flags.label_pattern)
for line in input_lines: for line in input_lines:
@ -221,7 +211,6 @@ def main():
if pattern in format_vars: if pattern in format_vars:
formated_pattern = formated_pattern.replace(pattern, data[format_vars.index(pattern)]) formated_pattern = formated_pattern.replace(pattern, data[format_vars.index(pattern)])
account_dict["label"] = formated_pattern account_dict["label"] = formated_pattern
accounts_settings.append(account_dict) accounts_settings.append(account_dict)
@ -237,6 +226,12 @@ def main():
if not config.get(Flags.set_template) is None: 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)) 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: for account in accounts_settings:
new_entry = current_account_template new_entry = current_account_template
for var_name, value in account.items(): for var_name, value in account.items():
@ -254,4 +249,5 @@ def main():
output_file.write_text(result, encoding=config.get(Flags.write_encoding)) output_file.write_text(result, encoding=config.get(Flags.write_encoding))
print(f"Sucesso: {id-1} contas criadas em '{output_file}'.") print(f"Sucesso: {id-1} contas criadas em '{output_file}'.")
main() if __name__ == "__main__":
main()