def prompt_for_password(url, user=None, default_user=None): """Prompt for username and password. If a user name is passed, only prompt for a password. Args: url (str): hostname user (str, optional): Pass a valid name to skip prompting for a user name default_user (str, optional): Pass a valid name that is used as default when prompting for a user name Raises: KeyboardInterrupt if user hits Ctrl-C Returns: (username, password) or None """ if user is None: default_user = default_user or getpass.getuser() while user is None: user = compat.console_input( "Enter username for {} [{}]: ".format(url, default_user) ) if user.strip() == "" and default_user: user = default_user if user: pw = getpass.getpass( "Enter password for {}@{} (Ctrl+C to abort): ".format(user, url) ) if pw or pw == "": return (user, pw) return None
def _interactive_resolve(self, pair): """Return 'local', 'remote', or 'skip' to use local, remote resource or skip.""" if self.resolve_all: if self.verbose >= 5: self._print_pair_diff(pair) return self.resolve_all resolve = self.options.get("resolve", "skip") assert resolve in ("remote", "ask", "skip") if resolve == "ask" or self.verbose >= 5: self._print_pair_diff(pair) if resolve in ("remote", "skip"): # self.resolve_all = resolve return resolve # RED = ansi_code("Fore.LIGHTRED_EX") M = ansi_code("Style.BRIGHT") + ansi_code("Style.UNDERLINE") R = ansi_code("Style.RESET_ALL") # self._print_pair_diff(pair) self._inc_stat("interactive_ask") while True: prompt = ("Use " + M + "R" + R + "emote, " + M + "S" + R + "kip, " + M + "B" + R + "inary compare, " + M + "H" + R + "elp? ") r = compat.console_input(prompt).strip() if r in ("h", "H", "?"): print("The following keys are supported:") print(" 'b': Binary compare") print(" 'r': Download remote file") print(" 's': Skip this file (leave both targets unchanged)") print( "Hold Shift (upper case letters) to apply choice for all " "remaining conflicts.") print("Hit Ctrl+C to abort.") continue elif r in ("B", "b"): self._compare_file(pair.local, pair.remote) continue elif r in ("R", "S"): r = self._resolve_shortcuts[r.lower()] self.resolve_all = r break elif r in ("r", "s"): r = self._resolve_shortcuts[r] break return r
def _interactive_resolve(self, pair): """Return 'local', 'remote', or 'skip' to use local, remote resource or skip.""" if self.resolve_all: # A resolution strategy was selected using Shift+MODE resolve = self.resolve_all else: # A resolution strategy was configured resolve = self.options.get("resolve", "skip") if resolve in ("new", "old") and pair.is_same_time(): # We cannot apply this resolution: force an alternative print("Cannot resolve using '{}' strategy: {}".format( resolve, pair)) resolve = "ask" if self.is_script else "skip" if resolve == "ask" or self.verbose >= 5: self._print_pair_diff(pair) if resolve in ("local", "remote", "old", "new", "skip"): # self.resolve_all = resolve return resolve # RED = ansi_code("Fore.LIGHTRED_EX") M = ansi_code("Style.BRIGHT") + ansi_code("Style.UNDERLINE") R = ansi_code("Style.RESET_ALL") self._inc_stat("interactive_ask") while True: prompt = ("Use " + M + "L" + R + "ocal, " + M + "R" + R + "emote, " + M + "O" + R + "lder, " + M + "N" + R + "ewer, " + M + "S" + R + "kip, " + M + "B" + R + "inary compare, " + M + "H" + R + "elp ? ") r = compat.console_input(prompt).strip() if r in ("h", "H", "?"): print("The following keys are supported:") print(" 'b': Binary compare") print(" 'n': Use newer file") print(" 'o': Use older file") print(" 'l': Use local file") print(" 'r': Use remote file") print(" 's': Skip this file (leave both targets unchanged)") print( "Hold Shift (upper case letters) to apply choice for all " "remaining conflicts.") print("Hit Ctrl+C to abort.") self._print_pair_diff(pair) continue elif r in ("b", "B"): # TODO: we could (offer to) set both mtimes to the same value # if files are identical self._compare_file(pair.local, pair.remote) # self._print_pair_diff(pair) continue elif r in ("o", "O", "n", "N") and pair.is_same_time(): # Ignore 'old' or 'new' selection if times are the same print("Files have identical modification times.") continue elif r in ("L", "R", "O", "N", "S"): r = self._resolve_shortcuts[r.lower()] self.resolve_all = r break elif r in ("l", "r", "o", "n", "s"): r = self._resolve_shortcuts[r] break return r
def _interactive_resolve(self, pair): """Return 'local', 'remote', or 'skip' to use local, remote resource or skip.""" if self.resolve_all: # A resolution strategy was selected using Shift+MODE resolve = self.resolve_all else: # A resolution strategy was configured resolve = self.options.get("resolve", "skip") if resolve in ("new", "old") and pair.is_same_time(): # We cannot apply this resolution: force an alternative print("Cannot resolve using '{}' strategy: {}".format(resolve, pair)) resolve = "ask" if self.is_script else "skip" if resolve == "ask" or self.verbose >= 5: self._print_pair_diff(pair) if resolve in ("local", "remote", "old", "new", "skip"): # self.resolve_all = resolve return resolve # RED = ansi_code("Fore.LIGHTRED_EX") M = ansi_code("Style.BRIGHT") + ansi_code("Style.UNDERLINE") R = ansi_code("Style.RESET_ALL") self._inc_stat("interactive_ask") while True: prompt = ( "Use " + M + "L" + R + "ocal, " + M + "R" + R + "emote, " + M + "O" + R + "lder, " + M + "N" + R + "ewer, " + M + "S" + R + "kip, " + M + "B" + R + "inary compare, " + M + "H" + R + "elp ? " ) r = compat.console_input(prompt).strip() if r in ("h", "H", "?"): print("The following keys are supported:") print(" 'b': Binary compare") print(" 'n': Use newer file") print(" 'o': Use older file") print(" 'l': Use local file") print(" 'r': Use remote file") print(" 's': Skip this file (leave both targets unchanged)") print( "Hold Shift (upper case letters) to apply choice for all " "remaining conflicts." ) print("Hit Ctrl+C to abort.") self._print_pair_diff(pair) continue elif r in ("b", "B"): # TODO: we could (offer to) set both mtimes to the same value # if files are identical self._compare_file(pair.local, pair.remote) # self._print_pair_diff(pair) continue elif r in ("o", "O", "n", "N") and pair.is_same_time(): # Ignore 'old' or 'new' selection if times are the same print("Files have identical modification times.") continue elif r in ("L", "R", "O", "N", "S"): r = self._resolve_shortcuts[r.lower()] self.resolve_all = r break elif r in ("l", "r", "o", "n", "s"): r = self._resolve_shortcuts[r] break return r
def _interactive_resolve(self, pair): """Return 'local', 'remote', or 'skip' to use local, remote resource or skip.""" if self.resolve_all: if self.verbose >= 5: self._print_pair_diff(pair) return self.resolve_all resolve = self.options.get("resolve", "skip") assert resolve in ("remote", "ask", "skip") if resolve == "ask" or self.verbose >= 5: self._print_pair_diff(pair) if resolve in ("remote", "skip"): # self.resolve_all = resolve return resolve # RED = ansi_code("Fore.LIGHTRED_EX") M = ansi_code("Style.BRIGHT") + ansi_code("Style.UNDERLINE") R = ansi_code("Style.RESET_ALL") # self._print_pair_diff(pair) self._inc_stat("interactive_ask") while True: prompt = ( "Use " + M + "R" + R + "emote, " + M + "S" + R + "kip, " + M + "B" + R + "inary compare, " + M + "H" + R + "elp? " ) r = compat.console_input(prompt).strip() if r in ("h", "H", "?"): print("The following keys are supported:") print(" 'b': Binary compare") print(" 'r': Download remote file") print(" 's': Skip this file (leave both targets unchanged)") print( "Hold Shift (upper case letters) to apply choice for all " "remaining conflicts." ) print("Hit Ctrl+C to abort.") continue elif r in ("B", "b"): self._compare_file(pair.local, pair.remote) continue elif r in ("R", "S"): r = self._resolve_shortcuts[r.lower()] self.resolve_all = r break elif r in ("r", "s"): r = self._resolve_shortcuts[r] break return r