예제 #1
0
    def run(self, args, options):
        if options.version:
            print(weewx.__version__)
            sys.exit(0)

        if options.list_drivers:
            weecfg.print_drivers()
            sys.exit(0)

        #
        # Check for errors in the options.
        #

        # We must be doing one of install, upgrade, and reconfigure:
        if sum(1 if x is True else 0 for x in
               [options.install, options.upgrade, options.reconfigure]) != 1:
            sys.exit(
                "Must specify one and only one of --install, --upgrade, or --reconfigure."
            )

        # Check for missing --dist-config
        if (options.install or options.upgrade) and not options.dist_config:
            sys.exit(
                "The commands --install and --upgrade require option --dist-config."
            )

        if options.install and not options.output:
            sys.exit("The --install command requires option --output.")

        # The install option does not take an old config file
        if options.install and (options.config_path or len(args)):
            sys.exit(
                "The --install command does not require the config option.")

        #
        # Error checking done. Now run the commands.
        #

        # First, fiddle with option --altitude to convert it into a list:
        if options.altitude:
            options.altitude = options.altitude.split(",")

        if options.install or options.upgrade:
            # These options require a distribution config file.
            # Open it up and parse it:
            try:
                dist_config_dict = configobj.ConfigObj(options.dist_config,
                                                       file_error=True)
            except IOError as e:
                sys.exit("Unable to open distribution configuration file: %s" %
                         e)
            except SyntaxError as e:
                sys.exit(
                    "Syntax error in distribution configuration file '%s': %s"
                    % (options.dist_config, e))

        # The install command uses the distribution config file as its input.
        # Other commands use an existing config file.
        if options.install:
            config_dict = dist_config_dict
        else:
            try:
                config_path, config_dict = weecfg.read_config(
                    options.config_path, args)
            except SyntaxError as e:
                sys.exit("Syntax error in configuration file: %s" % e)
            except IOError as e:
                sys.exit("Unable to open configuration file: %s" % e)
            self.logger.log("Using configuration file %s" % config_path)

        output_path = None

        if options.upgrade:
            # Update the config dictionary, then merge it with the distribution
            # dictionary
            weecfg.update_and_merge(config_dict, dist_config_dict)

            # Save to the specified output
            output_path = options.output

        if options.install or options.reconfigure:
            # Modify the configuration contents
            self.modify_config(config_dict, options)

            # Save to the specified output, or the original location if
            # output is not specified
            output_path = options.output if options.output else config_path

        if output_path is not None:
            # Save the file.
            self.save_config(config_dict, output_path, not options.no_backup)
예제 #2
0
        else:
            try:
                config_path, config_dict = weecfg.read_config(
                    options.config_path, args)
            except SyntaxError, e:
                sys.exit("Syntax error in configuration file: %s" % e)
            except IOError, e:
                sys.exit("Unable to open configuration file: %s" % e)
            self.logger.log("Using configuration file %s" % config_path)

        output_path = None

        if options.upgrade:
            # Update the config dictionary, then merge it with the distribution
            # dictionary
            weecfg.update_and_merge(config_dict, dist_config_dict)

            # Save to the specified output
            output_path = options.output

        if options.install or options.reconfigure:
            # Modify the configuration contents
            self.modify_config(config_dict, options)

            # Save to the specified output, or the original location, if not specified
            output_path = options.output if options.output else config_path

        if output_path is not None:
            # Save the file. First, pretty it up...
            weecfg.reorder_to_ref(config_dict)
            # ... then save
예제 #3
0
파일: config.py 프로젝트: fleabearded/weewx
    def run(self, args, options):
        if options.version:
            print(weewx.__version__)
            sys.exit(0)

        if options.list_drivers:
            weecfg.print_drivers()
            sys.exit(0)

        #
        # If we got to this point, the verb must be --install, --upgrade, or --reconfigure.
        # Check for errors in the options.
        #

        # We can do one and only one of install, upgrade, and reconfigure:
        if (options.install and options.upgrade) \
                or (options.install and options.reconfigure) \
                or (options.upgrade and options.reconfigure):
            sys.exit("Must specify one and only one of --install, --upgrade, or --reconfigure.")

        # Check for missing --dist-config
        if (options.install or options.upgrade) and not options.dist_config:
            sys.exit("The commands --install and --upgrade require option --dist-config.")

        # Check for missing config file
        if options.upgrade and not (options.config_path or args):
            sys.exit("The command --upgrade requires an existing configuration file.")

        if options.install and not options.output:
            sys.exit("The --install command requires option --output.")

        # The install option does not take an old config file
        if options.install and (options.config_path or args):
            sys.exit("A configuration file cannot be used with the --install command.")

        #
        # Now run the commands.
        #

        # First, fiddle with option --altitude to convert it into a list:
        if options.altitude:
            options.altitude = options.altitude.split(",")

        if options.install or options.upgrade:
            # These options require a distribution config file.
            # Open it up and parse it:
            try:
                dist_config_dict = configobj.ConfigObj(options.dist_config,
                                                       file_error=True,
                                                       encoding='utf-8')
            except IOError as e:
                sys.exit("Unable to open distribution configuration file: %s" % e)
            except SyntaxError as e:
                sys.exit("Syntax error in distribution configuration file '%s': %s"
                         % (options.dist_config, e))

        # The install command uses the distribution config file as its input.
        # Other commands use an existing config file.
        if options.install:
            config_dict = dist_config_dict
        else:
            try:
                config_path, config_dict = weecfg.read_config(options.config_path, args)
            except SyntaxError as e:
                sys.exit("Syntax error in configuration file: %s" % e)
            except IOError as e:
                sys.exit("Unable to open configuration file: %s" % e)
            self.logger.log("Using configuration file %s" % config_path)

        if options.upgrade:
            # Update the config dictionary, then merge it with the distribution
            # dictionary
            weecfg.update_and_merge(config_dict, dist_config_dict)

        elif options.install or options.reconfigure:
            # Extract stn_info from the config_dict and command-line options:
            stn_info = self.get_stn_info(config_dict, options)
            # Use it to modify the configuration file.
            weecfg.modify_config(config_dict, stn_info, self.logger, options.debug)

        else:
            sys.exit("Internal logic error in config.py")

        # For the path to the final file, use whatever was specified by --output,
        # or the original path if that wasn't specified
        output_path = options.output or config_path

        # Save weewx.conf, backing up any old file.
        backup_path = weecfg.save(config_dict, output_path, not options.no_backup)
        if backup_path:
            self.logger.log("Saved backup to %s" % backup_path)
예제 #4
0
        else:
            try:
                config_path, config_dict = weecfg.read_config(
                    options.config_path, args)
            except SyntaxError, e:
                sys.exit("Syntax error in configuration file: %s" % e)
            except IOError, e:
                sys.exit("Unable to open configuration file: %s" % e)
            self.logger.log("Using configuration file %s" % config_path)

        output_path = None

        if options.upgrade:
            # Update the config dictionary, then merge it with the distribution
            # dictionary
            weecfg.update_and_merge(config_dict, dist_config_dict)

            # Save to the specified output
            output_path = options.output
            
        if options.install or options.reconfigure:
            # Modify the configuration contents
            self.modify_config(config_dict, options)

            # Save to the specified output, or the original location if
            # output is not specified
            output_path = options.output if options.output else config_path

        if output_path is not None:
            # Save the file. First, pretty it up...
            weecfg.reorder_to_ref(config_dict)