Skip to content
Snippets Groups Projects
Controller.py 47.2 KiB
Newer Older
  • Learn to ignore specific revisions
  •                     --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",
    
            ),
            # 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-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,
            )