Source code for taurus.cli.cli

#############################################################################
##
# This file is part of Taurus
##
# http://taurus-scada.org
##
# Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
##
# Taurus is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
##
# Taurus is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
##
# You should have received a copy of the GNU Lesser General Public License
# along with Taurus.  If not, see <http://www.gnu.org/licenses/>.
##
#############################################################################

import pkg_resources
import click
import taurus

import taurus.cli.common
from .import common


@click.group('taurus')
@common.log_level
@common.poll_period
@common.serial_mode
@common.default_formatter
@click.option("--rconsole", "rconsole_port", type=click.INT,
              metavar="PORT", default=None,
              help="Enable remote debugging with rfoo on the given PORT")
@click.version_option(version=taurus.Release.version)
def taurus_cmd(log_level, polling_period, serialization_mode, default_formatter,
               rconsole_port):
    """The main taurus command"""

    # set log level
    taurus.setLogLevel(getattr(taurus, log_level))

    # set polling period
    if polling_period is not None:
        taurus.changeDefaultPollingPeriod(polling_period)

    # set serialization mode
    if serialization_mode is not None:
        from taurus.core.taurusbasetypes import TaurusSerializationMode
        m = getattr(TaurusSerializationMode, serialization_mode)
        taurus.Manager().setSerializationMode(m)

    # enable the remote console port
    if rconsole_port is not None:
        try:
            import rfoo.utils.rconsole
            rfoo.utils.rconsole.spawn_server(port=rconsole_port)
            taurus.info(("rconsole started. "
                         + "You can connect to it by typing: rconsole -p %d"),
                        rconsole_port
                        )
        except Exception as e:
            taurus.warning("Cannot spawn debugger. Reason: %s", e)

    # set the default formatter
    if default_formatter is not None:
        from taurus import tauruscustomsettings
        setattr(tauruscustomsettings, 'DEFAULT_FORMATTER', default_formatter)


[docs]def register_subcommands(): """Discover and add subcommands to taurus_cmd""" # Add subcommands from the taurus_subcommands entry point for ep in pkg_resources.iter_entry_points('taurus.cli.subcommands'): try: subcommand = ep.load() taurus_cmd.add_command(subcommand) except Exception as e: # ----------------------------------------------------------- # Use info instead of warning in case of nonimportable Qwt5 # (e.g. when using py3 or Qt5) to avoid spam # This special case can be removed when taurus.qt.qtgui.qwt5 # is moved to a separate plugin, since the entry point will # be registered only if the plugin is installed if ep.name == 'qwt5': taurus.info( 'Cannot add "%s" subcommand to taurus. Reason: %r', ep.name, e) continue # ----------------------------------------------------------- taurus.warning('Cannot add "%s" subcommand to taurus. Reason: %r', ep.name, e)
[docs]def main(): """Register subcommands and run taurus_cmd""" # set the log level to WARNING avoid spamming the CLI while loading # subcommands # it will be restored to the desired one first thing in taurus_cmd() taurus.setLogLevel(taurus.Warning) #register the subcommands register_subcommands() # launch the taurus command taurus_cmd()
if __name__ == '__main__': main()