Skip to content
Snippets Groups Projects
Controller.py 50 KiB
Newer Older
    input_group.add_argument(
        "--type",
        default="variation",
        choices=[
            "variation",
            "reported",
            "provisional",
            "adjusted",
            "quasi-definitive",
            "definitive",
        ],
        help='Data type, default "variation"',
    )
    input_group.add_argument(
        "--starttime",
        type=UTCDateTime,
        default=None,
        help="UTC date time YYYY-MM-DD HH:MM:SS",
        metavar="ISO8601",
    )
    input_group.add_argument(
        "--endtime",
        type=UTCDateTime,
        default=None,
        help="UTC date time YYYY-MM-DD HH:MM:SS",
        metavar="ISO8601",
    )
    input_group.add_argument(
        "--realtime",
        default=False,
        const=True,
        help="""
                Default 172800 (last 2 days) when interval is day,
                Default 7200 (last 2 hours) when interval is hour,
                Default 3600 (last hour) when interval is minute,
                Default 600 (last 10 minutes) otherwise.
                """,
        metavar="N",
        nargs="?",
        type=int,
    )

    # conversion from bins/volts to nT
    input_group.add_argument(
        "--convert-voltbin",
        nargs="*",
        default=None,
        metavar="CHANNEL",
        help="""
                Convert channels from bins/volts to nT.
                Example: "
                    --inchannels U_Bin U_Volt
                    --interval tenhertz
                    --type variation
                    --convert-voltbin U
                    --outchannels U
                    "
    output_group = parser.add_argument_group("Output", "How data is written.")
    output_type_group = output_group.add_mutually_exclusive_group(required=True)
    output_type_group.add_argument(
        "--output",
        choices=(
            "binlog",
            "edge",
            "iaga2002",
            "imfjson",
            "miniseed",
            "pcdcp",
            "plot",
            "temperature",
            "vbf",
Shavers, Nicholas H's avatar
Shavers, Nicholas H committed
            "covjson",
Shavers, Nicholas H's avatar
Shavers, Nicholas H committed
            "netcdf",
        ),
        # TODO: set default to 'iaga2002'
        help="Output format",
    )

    output_group.add_argument(
        "--outchannels",
        nargs="*",
        default=None,
        help="Defaults to --inchannels",
        metavar="CHANNEL",
    )
    output_group.add_argument(
        "--output-file", help="Write to specified file", metavar="FILE"
    )
    output_group.add_argument(
        "--output-host",
        default="edgecwb.usgs.gov",
        help="Write to specified host",
        metavar="HOST",
    )
    output_group.add_argument(
        "--output-interval",
        default=None,
        choices=["day", "hour", "minute", "second", "tenhertz"],
        help="Default same as --interval",
        metavar="INTERVAL",
    )
    output_group.add_argument(
        "--output-observatory",
        default=None,
        help="Defaults to value of --observatory argument.",
        metavar="OBS",
        nargs="*",
        type=str,
    )
    output_group.add_argument(
        "--output-port",
        default=7981,
        help="Write to specified port",
        metavar="PORT",
        type=int,
    )
    output_group.add_argument(
        "--output-read-port",
        default=2060,
        help="Read from specified port",
        metavar="PORT",
        type=int,
    )
    output_group.add_argument(
        "--output-scale-factor",
        default=None,
        help="Override default factory scale_factor (divide on read; multiply on write)",
    )
    output_group.add_argument(
        "--output-sncl-mode",
        default=None,
        help="Override default factory sncl_mode ()",
        choices=["geomag", "legacy", "fdsn"],
    )
    output_group.add_argument(
        "--output-stdout",
        action="store_true",
        default=False,
        help="Write to standard output",
    )
    output_group.add_argument(
        "--output-url", help="Write to a file:// url pattern", metavar="URL"
    )
    output_group.add_argument(
        "--output-url-interval",
        default=86400,
        help="Output interval in seconds",
        metavar="INTERVAL",
        type=int,
    )
    output_group.add_argument(
        "--rename-output-channel",
        action="append",
        help="Rename an output channel before it is written",
        metavar=("FROM", "TO"),
        nargs=2,
    )
    output_group.add_argument(
        "--outlocationcode",
        help="Defaults to --locationcode",
        metavar="CODE",
        type=edge.LocationCode,
    )
    output_group.add_argument(
        "--output-edge-forceout",
        action="store_true",
        default=False,
        help="Used when writing to EDGE, to close miniseed immediately.",
    )
    output_group.add_argument(
        "--output-edge-tag",
        default="GEOMAG",
        help="Used when writing to EDGE, to identify source of data.",
        metavar="TAG",
    )
    processing_group = parser.add_argument_group("Processing", "How data is processed.")
    processing_group.add_argument(
        "--algorithm",
        choices=[k for k in algorithms],
        default="identity",
        help='Default is "identity", which skips processing',
    )
    for k in algorithms:
        algorithms[k].add_arguments(processing_group)
    processing_group.add_argument(
        "--update",
        action="store_true",
        default=False,
        help="""
                Check for gaps in output,
                and merge new data into existing.
                """,
    )
    processing_group.add_argument(
        "--update-limit",
        type=int,
                Update mode checks for gaps and will step backwards
                to gap fill, if the start of the current interval is a gap,
                when limit is set to more than 0.
                """,
        metavar="N",
    )
    processing_group.add_argument(
        "--no-trim",
        action="store_true",
        default=False,
        help="Ensures output data will not be trimmed down",
    )

    # GOES parameters
    goes_group = parser.add_argument_group(
        "GOES parameters", 'Used to configure "--input goes"'
    )
    goes_group.add_argument(
        "--input-goes-directory",
        default=".",
        help="Directory for support files for goes input of imfv283 data",
        metavar="PATH",
    )
    goes_group.add_argument(
        "--input-goes-getdcpmessages",
        default="",
        help="Location of getDcpMessages.",
        metavar="PATH",
    )
    goes_group.add_argument(
        "--input-goes-password",
        default="",
        help="Password for goes user",
        metavar="PASSWORD",
    )
    goes_group.add_argument(
        "--input-goes-server",
        nargs="*",
        help="The server name(s) to retrieve the GOES data from",
        metavar="HOST",
    )
    goes_group.add_argument(
        "--input-goes-user",
        default="GEOMAG",
        help="The user name to use to retrieve data from GOES",
        metavar="USER",
    )

    # still allow deprecated arguments for now, but hide behind opt in flag
    deprecated = parser.add_argument_group("Deprecated")
    deprecated.add_argument(
        "--enable-deprecated-arguments",
        action="store_true",
        default=False,
        help="enable support for deprecated arguments",
    )
    # check for this argument before adding deprecated args to usage
    if "--enable-deprecated-arguments" in args:
        add_deprecated_args(deprecated, input_type_group, output_type_group)

    deprecated.add_argument(
        "--volt-conversion",
        default=100.0,
        metavar="NT",
        help="(Deprecated, Unused) Conversion factor (nT/V) for volts",
    )
    deprecated.add_argument(
        "--bin-conversion",
        default=500.0,
        metavar="NT",
        help="(Deprecated, Unused) Conversion factor (nT/bin) for bins",
    )
    return parser.parse_args(args)


def add_deprecated_args(parser, input_group, output_group):
    print(
        "WARNING: you are enabling deprecated arguments," + " please update your usage",
        file=sys.stderr,
    )

    # argument options for inputs and outputs,
    # replaced with less TYPE specific options
    parser.add_argument(
        "--input-edge-port",
        type=int,
        default=2060,
        help='(Deprecated) \
        metavar="PORT",
    )
    parser.add_argument(
        "--output-edge-port",
        type=int,
        dest="edge_write_port",
        default=7981,
        help='(Deprecated) \
        metavar="PORT",
    )
    parser.add_argument(
        "--output-edge-cwb-port",
        type=int,
        dest="edge_write_port",
        default=7981,
        help='(Deprecated) \
                Use "--output miniseed" and "--output-port PORT".',
        metavar="PORT",
    )
    parser.add_argument(
        "--output-edge-read-port",
        type=int,
        default=2060,
        help='(Deprecated) \
                Use "--output-read-port".',
        metavar="PORT",
    )
    # input arguments (generally use "--input TYPE")
    input_group.add_argument(
        "--input-edge",
        help='(Deprecated) \
                Use "--input edge" and "--input-host HOST".',
        metavar="HOST",
    )
    input_group.add_argument(
        "--input-iaga-file",
        help='(Deprecated) \
                Use "--input iaga2002" and "--input-file FILE".',
        metavar="FILE",
    )
    input_group.add_argument(
        "--input-iaga-stdin",
        action="store_true",
        default=False,
        help='(Deprecated) \
                Use "--input iaga2002" and "--input-stdin".',
    )
    input_group.add_argument(
        "--input-iaga-url",
        help='(Deprecated) \
                Use "--input iaga2002" and "--input-url URL".',
        metavar="URL",
    )
    input_group.add_argument(
        "--input-imfv283-file",
        help='(Deprecated) \
                Use "--input imfv283" and "--input-file FILE".',
        metavar="FILE",
    )
    input_group.add_argument(
        "--input-imfv283-stdin",
        action="store_true",
        default=False,
        help='(Deprecated) \
                Use "--input imfv283" and "--input-stdin"',
    )
    input_group.add_argument(
        "--input-imfv283-url",
        help='(Deprecated) \
                Use "--input iaga2002" and "--input-url URL".',
        metavar="URL",
    )
    input_group.add_argument(
        "--input-imfv283-goes",
        action="store_true",
        default=False,
        help='(Deprecated) \
                Use "--input goes".',
    )
    input_group.add_argument(
        "--input-pcdcp-file",
        help='(Deprecated) \
                Use "--input pcdcp" and "--input-file FILE".',
        metavar="FILE",
    )
    input_group.add_argument(
        "--input-pcdcp-stdin",
        action="store_true",
        default=False,
        help='(Deprecated) \
                Use "--input pcddp" and "--input-stdin".',
    )
    input_group.add_argument(
        "--input-pcdcp-url",
        help='(Deprecated) \
                Use "--input pcdcp" and "--input-url URL".',
    # output arguments (generally use "--output TYPE")
    output_group.add_argument(
        "--output-iaga-file",
        help='(Deprecated) \
                Use "--output iaga2002" and "--output-file FILE".',
        metavar="FILE",
    )
    output_group.add_argument(
        "--output-iaga-stdout",
        action="store_true",
        default=False,
        help='(Deprecated) \
                Use "--output iaga2002" and "--output-stdout".',
    )
    output_group.add_argument(
        "--output-iaga-url",
        help='(Deprecated) \
                Use "--output iaga2002" and "--output-url URL".',
        metavar="URL",
    )
    output_group.add_argument(
        "--output-pcdcp-file",
        help='(Deprecated) \
                Use "--output pcdcp" and "--output-file FILE".',
        metavar="FILE",
    )
    output_group.add_argument(
        "--output-pcdcp-stdout",
        action="store_true",
        default=False,
        help='(Deprecated) \
                Use "--output pcdcp" and "--output-stdout".',
    )
    output_group.add_argument(
        "--output-pcdcp-url",
        help='(Deprecated) \
                Use "--output pcdcp" and "--output-url URL".',
        metavar="URL",
    )
    output_group.add_argument(
        "--output-edge",
        help='(Deprecated) \
                Use "--output edge" and "--output-host HOST".',
        metavar="HOST",
    )
    output_group.add_argument(
        "--output-plot",
        action="store_true",
        default=False,
        help='(Deprecated) \
                Use "--output plot".',
    )
def parse_deprecated_arguments(args):
    # TODO: remove argument mapping in future version
    # map legacy input arguments
    usingDeprecated = False
    if args.input_edge is not None:
        args.input = "edge"
        args.input_host = args.input_edge
        args.input_port = args.input_edge_port
        usingDeprecated = True
    elif args.input_iaga_file is not None:
        args.input = "iaga2002"
        args.input_file = args.input_iaga_file
        usingDeprecated = True
    elif args.input_iaga_stdin:
        args.input = "iaga2002"
        args.input_stdin = True
        usingDeprecated = True
    elif args.input_iaga_url is not None:
        args.input = "iaga2002"
        args.input_url = args.input_iaga_url
        usingDeprecated = True
    elif args.input_imfv283_file is not None:
        args.input = "imfv283"
        args.input_file = args.input_imfv283_file
        usingDeprecated = True
    elif args.input_imfv283_url is not None:
        args.input = "imfv283"
        args.input_url = args.input_imfv283_url
        usingDeprecated = True
    elif args.input_imfv283_goes:
        args.input = "goes"
        usingDeprecated = True
    # map legacy output arguments
    if args.output_edge is not None:
        args.output = "edge"
        args.output_host = args.output_edge
        args.output_port = args.edge_write_port
        usingDeprecated = True
    elif args.output_iaga_file is not None:
        args.output = "iaga2002"
        args.output_file = args.output_iaga_file
        usingDeprecated = True
    elif args.output_iaga_stdout:
        args.output = "iaga2002"
        args.output_stdout = True
        usingDeprecated = True
    elif args.output_iaga_url is not None:
        args.output = "iaga2002"
        args.output_url = args.output_iaga_url
        usingDeprecated = True
    elif args.output_pcdcp_file is not None:
        args.output = "pcdcp"
        args.output_file = args.output_pcdcp_file
        usingDeprecated = True
    elif args.output_pcdcp_stdout:
        args.output = "pcdcp"
        args.output_stdout = True
        usingDeprecated = True
    elif args.output_pcdcp_url is not None:
        args.output = "pcdcp"
        args.output_url = args.output_pcdcp_url
        usingDeprecated = True
    elif args.output_plot:
        args.output = "plot"
        print(
            "WARNING: you are using deprecated arguments,"
            + " please update your usage",
            file=sys.stderr,
        )