def check_updates(): """Executa o procedimento de busca e instalação de atualizações""" cli.i_am("Procurando atualizações...") try: latest_release = _fetch_latest_release() except RuntimeError as ex: gui.error("Falha na atualização." + "Verifique sua conexão com a internet.") log.error("fetch-releases", ex) return cli.info("Encontrado: " + latest_release['tag_name']) if latest_release['tag_name'] == version.current(): cli.success("O god está atualizado.") return cli.error("O god está desatualizado!") if _confirm(latest_release): update_dir = _download_update(latest_release) _install_update(update_dir) version.set_tag(latest_release['tag_name']) with open(".version", "w") as version_file: version_file.write(version.current()) os.system("start python apply_update.py") sys.exit(0) else: cli.warning("Ignorando atualização. " + "Cuidado, isso geralmente dá ruim.")
def use_inet_phrases(): """Tenta usar frases e autores da internet, se falha usa os locais""" cli.i_am("Pegando umas frases aleatórias...") try: amount = quotes.load_inet() cli.success("{} frases".format(amount)) except RuntimeError: cli.error("Falhou :(") use_stored_phrases()
def load_phrases(): """Carrega informações para citações da fonte mais adequada""" cli.i_am("Checando conexão com a internet...") if god.check_internet(): cli.success("OK") cli.list_begin() use_inet_phrases() cli.list_end() else: cli.error("Internet indisponível") cli.list_begin() use_stored_phrases() cli.list_end()
def run(): """Executa o loop de comandos interativos Nota ---- Esse método trava a execução até o usuário lançar um comando `quit` """ try: while True: line = cli.read_command() parts = re.split(r"\s+", line) command = parts[0].lower() for alternatives in _COMMAND_MAP: if command in alternatives: _COMMAND_MAP[alternatives](*parts[1:]) break else: cli.error( f"\tComando não reconhecido: `{command}`. Veja `help`.") except RuntimeError as ex: log.error("interactive", ex)
def danger(): """Sinaliza uso de memória elevado e toma as ações necessárias Nota ---- Esse método altera o estado do programa para `alert` Em caso de falha ao executar as instruções de alerta, usa-se um bloco de notas "flashbang" como medida provisória. """ god.state = 'alert' try: with open('danger.yml', 'r') as danger_file: danger_yml = yaml.load(danger_file) if 'flashbang' in danger_yml and danger_yml['flashbang']: flashbang_notepad() if 'kill' in danger_yml and danger_yml['kill']: kill_processes(danger_yml['kill']) if 'cmd' in danger_yml and danger_yml['cmd']: for pname in danger_yml['cmd']: os.system(pname) if 'popup' in danger_yml and danger_yml['popup']: gui.warning(danger_yml['popup']) except RuntimeError as ex: log.error("on_danger", ex) cli.error("OH GOD OH F**K, I CAN'T RUN THE INSTRUCTIONS!!!!1!!1!!!") cli.error("Flashbang it is, then.") flashbang_notepad()
def func_wrapper(*args): if not args[0].isnumeric(): cli.error("\tEsperava um número. Veja `help`.") return None return cmd_func(int(args[0]))
def func_wrapper(*args): if len(args) != 1: cli.error("\tSintaxe incorreta. Veja `help`.") return None return cmd_func(*args)
def func_wrapper(*args): if len(args) > 1: cli.error("\tNão esperava parâmetros, mas OK.") return cmd_func(*args)