Beispiel #1
0
def parser():
    opt_parser = utils_common.CommonOptionsParser()
    opt_parser.add_option(
        "-e",
        "--export",
        dest="db_tables",
        metavar="DB|DB.TABLE",
        default=[],
        type="db_table",
        action="append",
    )
    opt_parser.add_option(
        "--clients", dest="clients", metavar="NUM", default=3, type="pos_int"
    )
    return opt_parser
def parse_options(argv, prog=None):
    parser = utils_common.CommonOptionsParser(
        usage=usage, epilog=help_epilog, prog=prog
    )

    parser.add_option(
        "-r",
        "--rebuild",
        dest="db_table",
        metavar="DB|DB.TABLE",
        default=[],
        help="databases or tables to rebuild indexes on (default: all, may be specified multiple times)",
        action="append",
        type="db_table",
    )
    parser.add_option(
        "-n",
        dest="concurrent",
        metavar="NUM",
        default=1,
        help="concurrent indexes to rebuild (default: 1)",
        type="pos_int",
    )
    parser.add_option(
        "--force",
        dest="force",
        action="store_true",
        default=False,
        help="rebuild non-outdated indexes",
    )

    options, args = parser.parse_args(argv)

    # Check validity of arguments
    if len(args) != 0:
        parser.error(
            "Error: No positional arguments supported. Unrecognized option '%s'"
            % args[0]
        )

    return options
Beispiel #3
0
def startInterpreter(argv=None, prog=None):
    repl_variables = {"r": net.Connection._r, "rethinkdb": net.Connection._r}
    banner = "The RethinkDB driver has been imported as `r`."

    # -- get host/port setup

    # - parse command line
    parser = utils_common.CommonOptionsParser(
        prog=prog,
        description=
        "An interactive Python shell (repl) with the RethinkDB driver imported",
    )
    options, args = parser.parse_args(
        argv if argv is not None else sys.argv[1:], connect=False)

    if args:
        parser.error(
            "No positional arguments supported. Unrecognized option(s): %s" %
            args)

    # -- open connection

    try:
        repl_variables["conn"] = options.retryQuery.conn()
        repl_variables["conn"].repl()
        banner += """
    A connection to %s:%d has been established as `conn`
    and can be used by calling `run()` on a query without any arguments.""" % (
            options.hostname,
            options.driver_port,
        )
    except errors.ReqlDriverError as e:
        banner += "\nWarning: %s" % str(e)
        if options.debug:
            banner += "\n" + traceback.format_exc()

    # -- start interpreter

    code.interact(banner=banner + "\n==========", local=repl_variables)
Beispiel #4
0
def parse_options(argv, prog=None):
    parser = utils_common.CommonOptionsParser(usage=usage, epilog=help_epilog, prog=prog)

    parser.add_option(
        "-f",
        "--file",
        dest="out_file",
        metavar="FILE",
        default=None,
        help='file to write archive to (defaults to rethinkdb_dump_DATE_TIME.tar.gz);\nif FILE is -, use standard '
             'output (note that intermediate files will still be written to the --temp-dir directory)')
    parser.add_option(
        "-e",
        "--export",
        dest="db_tables",
        metavar="DB|DB.TABLE",
        default=[],
        type='db_table',
        help='limit dump to the given database or table (may be specified multiple times)',
        action="append")

    parser.add_option("--temp-dir", dest="temp_dir", metavar="directory", default=None,
                      help='the directory to use for intermediary results')
    parser.add_option(
        "--overwrite-file",
        dest="overwrite",
        default=False,
        help="overwrite -f/--file if it exists",
        action="store_true")
    parser.add_option(
        "--clients",
        dest="clients",
        metavar="NUM",
        default=3,
        help='number of tables to export simultaneously (default: 3)',
        type="pos_int")
    parser.add_option(
        "--read-outdated",
        dest="outdated",
        default=False,
        help='use outdated read mode',
        action="store_true")

    options, args = parser.parse_args(argv)

    # Check validity of arguments

    if len(args) != 0:
        raise parser.error("No positional arguments supported. Unrecognized option(s): %s" % args)

    # Add dump name
    if platform.system() == "Windows" or platform.system().lower().startswith('cygwin'):
        options.dump_name = "rethinkdb_dump_%s" % datetime.datetime.today().strftime(
            "%Y-%m-%dT%H-%M-%S")  # no colons in name
    else:
        options.dump_name = "rethinkdb_dump_%s" % datetime.datetime.today().strftime("%Y-%m-%dT%H:%M:%S")

    # Verify valid output file
    if options.out_file == "-":
        options.out_file = sys.stdout
        options.quiet = True
    elif options.out_file is None:
        options.out_file = os.path.realpath("%s.tar.gz" % options.dump_name)
    else:
        options.out_file = os.path.realpath(options.out_file)

    if options.out_file is not sys.stdout:
        if os.path.exists(options.out_file) and not options.overwrite:
            parser.error("Output file already exists: %s" % options.out_file)
        if os.path.exists(options.out_file) and not os.path.isfile(options.out_file):
            parser.error("There is a non-file at the -f/--file location: %s" % options.out_file)

    # Verify valid client count
    if options.clients < 1:
        raise RuntimeError("Error: invalid number of clients (%d), must be greater than zero" % options.clients)

    # Make sure the temporary directory exists and is accessible
    if options.temp_dir is not None:
        if not os.path.exists(options.temp_dir):
            try:
                os.makedirs(options.temp_dir)
            except OSError:
                parser.error("Could not create temporary directory: %s" % options.temp_dir)
        if not os.path.isdir(options.temp_dir):
            parser.error("Temporary directory doesn't exist or is not a directory: %s" % options.temp_dir)
        if not os.access(options.temp_dir, os.W_OK):
            parser.error("Temporary directory inaccessible: %s" % options.temp_dir)

    return options
Beispiel #5
0
def parse_options(argv, prog=None):
    parser = utils_common.CommonOptionsParser(usage=usage,
                                              epilog=help_epilog,
                                              prog=prog)

    parser.add_option(
        "-i",
        "--import",
        dest="db_tables",
        metavar="DB|DB.TABLE",
        default=[],
        help=
        "limit restore to the given database or table (may be specified multiple times)",
        action="append",
        type="db_table",
    )

    parser.add_option(
        "--temp-dir",
        dest="temp_dir",
        metavar="DIR",
        default=None,
        help="directory to use for intermediary results",
    )
    parser.add_option(
        "--clients",
        dest="clients",
        metavar="CLIENTS",
        default=8,
        help="client connections to use (default: 8)",
        type="pos_int",
    )
    parser.add_option(
        "--hard-durability",
        dest="durability",
        action="store_const",
        default="soft",
        help="use hard durability writes (slower, uses less memory)",
        const="hard",
    )
    parser.add_option(
        "--force",
        dest="force",
        action="store_true",
        default=False,
        help="import data even if a table already exists",
    )
    parser.add_option(
        "--no-secondary-indexes",
        dest="indexes",
        action="store_false",
        default=None,
        help="do not create secondary indexes for the restored tables",
    )

    parser.add_option(
        "--writers-per-table",
        dest="writers",
        default=multiprocessing.cpu_count(),
        help=optparse.SUPPRESS_HELP,
        type="pos_int",
    )
    parser.add_option(
        "--batch-size",
        dest="batch_size",
        default=utils_common.default_batch_size,
        help=optparse.SUPPRESS_HELP,
        type="pos_int",
    )

    # Replication settings
    replication_options_group = optparse.OptionGroup(parser,
                                                     "Replication Options")
    replication_options_group.add_option(
        "--shards",
        dest="create_args",
        metavar="SHARDS",
        help="shards to setup on created tables (default: 1)",
        type="pos_int",
        action="add_key",
    )
    replication_options_group.add_option(
        "--replicas",
        dest="create_args",
        metavar="REPLICAS",
        help="replicas to setup on created tables (default: 1)",
        type="pos_int",
        action="add_key",
    )
    parser.add_option_group(replication_options_group)

    options, args = parser.parse_args(argv)

    # -- Check validity of arguments

    # - archive
    if len(args) == 0:
        parser.error(
            "Archive to import not specified. Provide an archive file created by rethinkdb-dump."
        )
    elif len(args) != 1:
        parser.error("Only one positional argument supported")
    options.in_file = args[0]
    if options.in_file == "-":
        options.in_file = sys.stdin
    else:
        if not os.path.isfile(options.in_file):
            parser.error("Archive file does not exist: %s" % options.in_file)
        options.in_file = os.path.realpath(options.in_file)

    # - temp_dir
    if options.temp_dir:
        if not os.path.isdir(options.temp_dir):
            parser.error(
                "Temporary directory doesn't exist or is not a directory: %s" %
                options.temp_dir)
        if not os.access(options["temp_dir"], os.W_OK):
            parser.error("Temporary directory inaccessible: %s" %
                         options.temp_dir)

    # - create_args
    if options.create_args is None:
        options.create_args = {}

    # --

    return options
Beispiel #6
0
def parse_options(argv, prog=None):
    if platform.system() == "Windows" or platform.system().lower().startswith(
            'cygwin'):
        # no colons in name
        default_dir = "rethinkdb_export_%s" % datetime.datetime.today(
        ).strftime("%Y-%m-%dT%H-%M-%S")
    else:
        # "
        default_dir = "rethinkdb_export_%s" % datetime.datetime.today(
        ).strftime("%Y-%m-%dT%H:%M:%S")

    parser = utils_common.CommonOptionsParser(usage=usage,
                                              description=help_description,
                                              epilog=help_epilog,
                                              prog=prog)

    parser.add_option(
        "-d",
        "--directory",
        dest="directory",
        metavar="DIRECTORY",
        default=default_dir,
        help='directory to output to (default: rethinkdb_export_DATE_TIME)',
        type="new_file")
    parser.add_option(
        "-e",
        "--export",
        dest="db_tables",
        metavar="DB|DB.TABLE",
        default=[],
        help=
        'limit dump to the given database or table (may be specified multiple times)',
        action="append",
        type="db_table")
    parser.add_option(
        "--fields",
        dest="fields",
        metavar="<FIELD>,...",
        default=None,
        help='export only specified fields (required for CSV format)')
    parser.add_option(
        "--format",
        dest="format",
        metavar="json|csv|ndjson",
        default="json",
        help=
        'format to write (defaults to json. ndjson is newline delimited json.)',
        type="choice",
        choices=['json', 'csv', 'ndjson'])
    parser.add_option(
        "--clients",
        dest="clients",
        metavar="NUM",
        default=3,
        help='number of tables to export simultaneously (default: 3)',
        type="pos_int")
    parser.add_option("--read-outdated",
                      dest="outdated",
                      default=False,
                      help='use outdated read mode',
                      action="store_true")

    csvGroup = optparse.OptionGroup(parser, 'CSV options')
    csvGroup.add_option(
        "--delimiter",
        dest="delimiter",
        metavar="CHARACTER",
        default=None,
        help=
        "character to be used as field delimiter, or '\\t' for tab (default: ',')"
    )
    parser.add_option_group(csvGroup)

    options, args = parser.parse_args(argv)

    # -- Check validity of arguments

    if len(args) != 0:
        parser.error(
            "No positional arguments supported. Unrecognized option(s): %s" %
            args)

    if options.fields:
        if len(options.db_tables) != 1 or options.db_tables[0].table is None:
            parser.error(
                "The --fields option can only be used when exporting a single table"
            )
        options.fields = options.fields.split(",")

    # - format specific validation

    if options.format == "csv":
        if options.fields is None:
            parser.error(
                "CSV files require the '--fields' option to be specified.")

        if options.delimiter is None:
            options.delimiter = ","
        elif options.delimiter == "\\t":
            options.delimiter = "\t"
        elif len(options.delimiter) != 1:
            parser.error(
                "Specify exactly one character for the --delimiter option: %s"
                % options.delimiter)
    else:
        if options.delimiter:
            parser.error(
                "--delimiter option is only valid for CSV file formats")

    # -

    return options