def get_formatted_string(string_type, string, fallback, case): """ Given the name of the type of string, the string itself, and the fallback from which a string will be auto-generated in the given case if the given string does not conform to the case. """ if string is not None: if case.formatted(string): return string else: string = case.convert(fallback) question = "Do you wish to use %s as the %s?" % \ (string, string_type) if not get_confirmation(question): string = input("Please input a %s: " % string_type) while not case.formatted(string): print("'%s' is not a valid %s." % (string, string_type)) string = input("Please input a valid %s: " % string_type) return string
def get_confirmation(question): """ Will pose the question to the user and keep asking them until they provide an answer that starts with either a 'y' or an 'n', at which point it will return True if it was a 'y'. """ while True: response = input("%s (y/n): " % question).lower() if re.match(r'^[yn]', response) is not None: break print("Incorrect option '%s'" % response) return response[0] == 'y'
def get_formatted_string(string_type, string, fallback, case): """ Given the name of the type of string, the string itself, and the fallback from which a string will be auto-generated in the given case if the given string does not conform to the case. """ if string is not None: if case.formatted(string): return string else: string = case.convert(fallback) question = "Do you wish to use %s as the %s?" % \ (string, string_type) if not get_confirmation(question): string = input("Please input a %s: " % string_type) while not case.formatted(string): print("'%s' is not a valid %s." % (string, string_type)) string = input("Please input a valid %s: " % string_type) return string def parse_options(): """ Parses the options and stores them in the global options variable. """ parser = OptionParser(usage="%prog name [options]", version="Review Board " + get_version_string()) parser.add_option("--class-name",
def handle(self, *args, **options): if len(args) != 1: raise CommandError("You must specify a filename on the command " "line.") filename = args[0] if not os.path.exists(filename): raise CommandError("%s does not exist." % filename) confirm = input( """ This will wipe out your existing database prior to loading. It is highly recommended that you have a full SQL database dump in case things go wrong. You should only use this if you're migrating from one type of database to another, with the same version of Review Board on each. Are you sure you want to continue?" Type 'yes' to continue, or 'no' to cancel: """ ) if confirm != "yes": return apps = [app.__name__.split(".")[-2] for app in get_apps()] os.system("./reviewboard/manage.py reset --noinput %s" % " ".join(apps)) transaction_setup = False try: with open(filename, "r") as f: line = f.readline() m = re.match("^# dbdump v(\d+) - (\d+) objects$", line) if not m: raise CommandError("Unknown dump format\n") version = int(m.group(1)) totalobjs = int(m.group(2)) i = 0 prev_pct = -1 if version != 1: raise CommandError("Unknown dump version\n") transaction.commit_unless_managed() transaction.enter_transaction_management() transaction.managed(True) transaction_setup = True self.stdout.write("Importing new style dump format (v%s)" % version) for line in f: if line[0] == "{": for obj in serializers.deserialize("json", "[%s]" % line): try: obj.save() except Exception as e: self.stderr.write("Error: %s\n" % e) self.stderr.write("Line %s: '%s'" % (i, line)) elif line[0] != "#": self.stderr.write("Junk data on line %s" % i) db.reset_queries() i += 1 pct = i * 100 / totalobjs if pct != prev_pct: self.stdout.write(" [%s%%]\r" % pct) self.stdout.flush() prev_pct = pct transaction.commit() transaction.leave_transaction_management() except Exception as e: raise CommandError("Problem installing '%s': %s\n" % (filename, e)) if transaction_setup: transaction.rollback() transaction.leave_transaction_management() self.stdout.write("\nDone.")
def handle(self, *args, **options): if len(args) != 1: raise CommandError("You must specify a filename on the command " "line.") filename = args[0] if not os.path.exists(filename): raise CommandError("%s does not exist." % filename) confirm = input(""" This will wipe out your existing database prior to loading. It is highly recommended that you have a full SQL database dump in case things go wrong. You should only use this if you're migrating from one type of database to another, with the same version of Review Board on each. Are you sure you want to continue?" Type 'yes' to continue, or 'no' to cancel: """) if confirm != 'yes': return apps = [app.__name__.split('.')[-2] for app in get_apps()] os.system("./reviewboard/manage.py reset --noinput %s" % ' '.join(apps)) transaction_setup = False try: with open(filename, 'r') as f: line = f.readline() m = re.match("^# dbdump v(\d+) - (\d+) objects$", line) if not m: raise CommandError("Unknown dump format\n") version = int(m.group(1)) totalobjs = int(m.group(2)) i = 0 prev_pct = -1 if version != 1: raise CommandError("Unknown dump version\n") transaction.commit_unless_managed() transaction.enter_transaction_management() transaction.managed(True) transaction_setup = True self.stdout.write("Importing new style dump format (v%s)" % version) for line in f: if line[0] == "{": for obj in serializers.deserialize( "json", "[%s]" % line): try: obj.save() except Exception as e: self.stderr.write("Error: %s\n" % e) self.stderr.write("Line %s: '%s'" % (i, line)) elif line[0] != "#": self.stderr.write("Junk data on line %s" % i) db.reset_queries() i += 1 pct = (i * 100 / totalobjs) if pct != prev_pct: self.stdout.write(" [%s%%]\r" % pct) self.stdout.flush() prev_pct = pct transaction.commit() transaction.leave_transaction_management() except Exception as e: raise CommandError("Problem installing '%s': %s\n" % (filename, e)) if transaction_setup: transaction.rollback() transaction.leave_transaction_management() self.stdout.write('\nDone.')