def run(ctx, debug, catch_exceptions=False, **kwargs): """Snapcraft is a delightful packaging tool.""" is_snapcraft_developer_debug = kwargs["enable_developer_debug"] if is_snapcraft_developer_debug: log_level = logging.DEBUG click.echo("Starting snapcraft {} from {}.".format( snapcraft.__version__, os.path.dirname(__file__))) else: log_level = logging.INFO # Setup global exception handler (to be called for unhandled exceptions) sys.excepthook = functools.partial(exception_handler, debug=is_snapcraft_developer_debug) # In an ideal world, this logger setup would be replaced log.configure(log_level=log_level) # Configure `requests` library to use system certificates. configure_requests_ca() # Payload information about argv ctx.obj = dict(argv=sys.argv) # The default command if not ctx.invoked_subcommand: snap_command = lifecyclecli.commands["snap"] # Fill in the context with default values for the snap command. if "directory" not in ctx.params: ctx.params["directory"] = None if "output" not in ctx.params: ctx.params["output"] = None snap_command.invoke(ctx)
def run(ctx, debug, catch_exceptions=False, **kwargs): """Snapcraft is a delightful packaging tool.""" # Debugging snapcraft itself is not tied to debugging a snapcraft project. try: is_snapcraft_developer_debug = util.strtobool( os.getenv("SNAPCRAFT_ENABLE_DEVELOPER_DEBUG", "n") ) except ValueError: is_snapcraft_developer_debug = False if is_snapcraft_developer_debug: log_level = logging.DEBUG click.echo( "Starting snapcraft {} from {}.".format( snapcraft.__version__, os.path.dirname(__file__) ) ) else: log_level = logging.INFO # Setup global exception handler (to be called for unhandled exceptions) sys.excepthook = functools.partial( exception_handler, debug=is_snapcraft_developer_debug ) # In an ideal world, this logger setup would be replaced log.configure(log_level=log_level) # The default command if not ctx.invoked_subcommand: ctx.forward(lifecyclecli.commands["snap"])
def run(ctx, debug, catch_exceptions=False, **kwargs): """Snapcraft is a delightful packaging tool.""" # Debugging snapcraft itself is not tied to debugging a snapcraft project. try: is_snapcraft_developer_debug = util.strtobool( os.getenv("SNAPCRAFT_ENABLE_DEVELOPER_DEBUG", "n")) except ValueError: is_snapcraft_developer_debug = False if is_snapcraft_developer_debug: log_level = logging.DEBUG click.echo("Starting snapcraft {} from {}.".format( snapcraft.__version__, os.path.dirname(__file__))) else: log_level = logging.INFO # Setup global exception handler (to be called for unhandled exceptions) sys.excepthook = functools.partial(exception_handler, debug=is_snapcraft_developer_debug) # In an ideal world, this logger setup would be replaced log.configure(log_level=log_level) # Payload information about argv ctx.obj = dict(argv=sys.argv) # The default command if not ctx.invoked_subcommand: snap_command = lifecyclecli.commands["snap"] # Fill in the context with default values for the snap command. if "directory" not in ctx.params: ctx.params["directory"] = None if "output" not in ctx.params: ctx.params["output"] = None snap_command.invoke(ctx)
def run(ctx, debug, catch_exceptions=False, **kwargs): """Snapcraft is a delightful packaging tool.""" # Debugging snapcraft itself is not tied to debugging a snapcraft project. try: is_snapcraft_developer_debug = util.strtobool( os.getenv("SNAPCRAFT_ENABLE_DEVELOPER_DEBUG", "n")) except ValueError: is_snapcraft_developer_debug = False if is_snapcraft_developer_debug: log_level = logging.DEBUG click.echo("Starting snapcraft {} from {}.".format( snapcraft.__version__, os.path.dirname(__file__))) else: log_level = logging.INFO # Setup global exception handler (to be called for unhandled exceptions) sys.excepthook = functools.partial(exception_handler, debug=is_snapcraft_developer_debug) # In an ideal world, this logger setup would be replaced log.configure(log_level=log_level) # The default command if not ctx.invoked_subcommand: ctx.forward(lifecyclecli.commands["snap"])
def main(argv=None): doc = __doc__.format(DEFAULT_SERIES=DEFAULT_SERIES) args = docopt(doc, version=snapcraft.__version__, argv=argv) # Default log level is INFO unless --debug is specified log_level = logging.INFO if args['--debug']: log_level = logging.DEBUG log.configure(log_level=log_level) project_options = _get_project_options(args) logger.debug("Starting snapcraft {} from {}.".format( snapcraft.__version__, os.path.dirname(__file__))) if args['strip']: logger.warning("DEPRECATED: use 'prime' instead of 'strip'") args['prime'] = True try: return run(args, project_options) except Exception as e: if args['--debug']: raise logger.error(str(e)) sys.exit(1)
def test_configure_must_support_no_tty(self): self.fake_terminal = fixture_setup.FakeTerminal(isatty=False) self.useFixture(self.fake_terminal) logger_name = self.id() log.configure(logger_name, log_level=logging.DEBUG) logger = logging.getLogger(logger_name) logger.debug("Test debug") logger.info("Test info") logger.warning("Test warning") logger.error("Test error") logger.critical("Test critical") stdout = self.fake_terminal.getvalue() self.assertThat(stdout, Contains("Test debug")) self.assertThat(stdout, Contains("Test info")) self.assertThat(stdout, Not(Contains(self.info_color))) stderr = self.fake_terminal.getvalue(stderr=True) self.assertThat(stderr, Contains("Test warning")) self.assertThat(stderr, Not(Contains(self.warning_color))) self.assertThat(stderr, Not(Contains("\033[0m"))) self.assertThat(stderr, Contains("Test error")) self.assertThat(stderr, Not(Contains(self.error_color))) self.assertThat(stderr, Contains("Test critical")) self.assertThat(stderr, Not(Contains(self.critical_color)))
def main(argv=None): args = docopt(__doc__, version=_get_version(), argv=argv) # Default log level is INFO unless --debug is specified log_level = logging.INFO if args['--debug']: log_level = logging.DEBUG log.configure(log_level=log_level) return run(args)
def main(argv=None): args = docopt(__doc__, version=snapcraft.__version__, argv=argv) # Default log level is INFO unless --debug is specified log_level = logging.INFO if args["--debug"]: log_level = logging.DEBUG log.configure(log_level=log_level) return run(args)
def run(debug): """snapcraftctl is how snapcraft.yaml can communicate with snapcraft""" if debug: log_level = logging.DEBUG else: log_level = logging.INFO # Setup global exception handler (to be called for unhandled exceptions) sys.excepthook = functools.partial(exception_handler, debug=debug) # In an ideal world, this logger setup would be replaced log.configure(log_level=log_level)
def run(ctx, debug, catch_exceptions=False, **kwargs): """Snapcraft is a delightful packaging tool.""" if debug: log_level = logging.DEBUG click.echo('Starting snapcraft {} from {}.'.format( snapcraft.__version__, os.path.dirname(__file__))) else: log_level = logging.INFO # In an ideal world, this logger setup would be replaced log.configure(log_level=log_level) # The default command if not ctx.invoked_subcommand: ctx.forward(lifecyclecli.commands['snap'])
def test_configure_must_send_messages_to_stdout(self): logger_name = self.id() log.configure(logger_name) logger = logging.getLogger(logger_name) # Overwrite the level to log everything. logger.setLevel(logging.DEBUG) logger.debug("Test debug") logger.info("Test info") stdout = self.fake_terminal.getvalue() self.assertThat(stdout, Contains("Test debug")) expected_info = "{}Test info\033[0m".format(self.info_color) self.assertThat(stdout, Contains(expected_info)) self.assertThat(self.fake_terminal.getvalue(stderr=True), Equals(""))
def test_configure_must_send_errors_to_stderr(self): logger_name = self.id() log.configure(logger_name) logger = logging.getLogger(logger_name) # Overwrite the level to log everything. logger.setLevel(logging.DEBUG) logger.error("Test error") logger.critical("Test critical") stderr = self.fake_terminal.getvalue(stderr=True) expected_error = "{}Test error\033[0m".format(self.error_color) self.assertThat(stderr, Contains(expected_error)) expected_crit = "{}Test critical\033[0m".format(self.critical_color) self.assertThat(stderr, Contains(expected_crit)) self.assertThat(self.fake_terminal.getvalue(), Equals(""))
def test_configure_must_send_errors_to_stderr( self, mock_stderr, mock_stdout, mock_isatty): logger_name = self.id() log.configure(logger_name) logger = logging.getLogger(logger_name) # Overwrite the level to log everything. logger.setLevel(logging.DEBUG) logger.error('Test error') logger.critical('Test critical') expected_err = ('{}Test error\033[0m\n' '{}Test critical\033[0m\n').format( self.error_color, self.critical_color) self.assertEqual(expected_err, mock_stderr.getvalue()) self.assertEqual('', mock_stdout.getvalue())
def main(argv=None): args = docopt(__doc__, version=_get_version(), argv=argv) # Default log level is INFO unless --debug is specified log_level = logging.INFO if args['--debug']: log_level = logging.DEBUG log.configure(log_level=log_level) try: return run(args) except Exception as e: if args['--debug']: raise sys.exit(textwrap.fill(str(e)))
def run(ctx, debug, catch_exceptions=False, **kwargs): """Snapcraft is a delightful packaging tool.""" if debug: log_level = logging.DEBUG click.echo('Starting snapcraft {} from {}.'.format( snapcraft.__version__, os.path.dirname(__file__))) else: log_level = logging.INFO # Setup global exception handler (to be called for unhandled exceptions) sys.excepthook = functools.partial(exception_handler, debug=debug) # In an ideal world, this logger setup would be replaced log.configure(log_level=log_level) # The default command if not ctx.invoked_subcommand: ctx.forward(lifecyclecli.commands['snap'])
def test_configure_must_send_errors_to_stderr(self): logger_name = self.id() log.configure(logger_name) logger = logging.getLogger(logger_name) # Overwrite the level to log everything. logger.setLevel(logging.DEBUG) logger.error('Test error') logger.critical('Test critical') expected_err = ('{}Test error\033[0m\n' '{}Test critical\033[0m\n').format( self.error_color, self.critical_color) self.assertThat( self.fake_terminal.getvalue(stderr=True), Equals(expected_err)) self.assertThat(self.fake_terminal.getvalue(), Equals(''))
def test_configure_must_send_messages_to_stdout( self, mock_stderr, mock_stdout, mock_isatty): logger_name = self.id() log.configure(logger_name) logger = logging.getLogger(logger_name) # Overwrite the level to log everything. logger.setLevel(logging.DEBUG) logger.debug('Test debug') logger.info('Test info') logger.warning('Test warning') expected_out = ('Test debug\n' '{}Test info\033[0m\n' '{}Test warning\033[0m\n').format( self.info_color, self.warning_color) self.assertEqual(expected_out, mock_stdout.getvalue()) self.assertEqual('', mock_stderr.getvalue())
def test_configure_must_send_messages_to_stdout(self): logger_name = self.id() log.configure(logger_name) logger = logging.getLogger(logger_name) # Overwrite the level to log everything. logger.setLevel(logging.DEBUG) logger.debug('Test debug') logger.info('Test info') logger.warning('Test warning') expected_out = ('Test debug\n' '{}Test info\033[0m\n' '{}Test warning\033[0m\n').format( self.info_color, self.warning_color) self.assertThat(self.fake_terminal.getvalue(), Equals(expected_out)) self.assertThat(self.fake_terminal.getvalue(stderr=True), Equals(''))
def test_configure_must_support_no_tty(self): self.fake_terminal = fixture_setup.FakeTerminal(isatty=False) self.useFixture(self.fake_terminal) logger_name = self.id() log.configure(logger_name, log_level=logging.DEBUG) logger = logging.getLogger(logger_name) logger.debug('Test debug') logger.info('Test info') logger.warning('Test warning') logger.error('Test error') logger.critical('Test critical') expected_out = ('Test debug\n' 'Test info\n' 'Test warning\n') expected_err = ('Test error\n' 'Test critical\n') self.assertEqual(expected_out, self.fake_terminal.getvalue()) self.assertEqual(expected_err, self.fake_terminal.getvalue(stderr=True))
def test_configure_must_log_info_and_higher( self, mock_stderr, mock_stdout, mock_isatty): logger_name = self.id() log.configure(logger_name) logger = logging.getLogger(logger_name) logger.debug('Test debug') logger.info('Test info') logger.warning('Test warning') logger.error('Test error') logger.critical('Test critical') expected_out = ('{}Test info\033[0m\n' '{}Test warning\033[0m\n').format( self.info_color, self.warning_color) expected_err = ('{}Test error\033[0m\n' '{}Test critical\033[0m\n').format( self.error_color, self.critical_color) self.assertEqual(expected_out, mock_stdout.getvalue()) self.assertEqual(expected_err, mock_stderr.getvalue())
def main(argv=None): args = docopt(__doc__, version=_get_version(), argv=argv) # Default log level is INFO unless --debug is specified log_level = logging.INFO if args['--debug']: log_level = logging.DEBUG log.configure(log_level=log_level) project_options = _get_project_options(args) if args['strip']: logger.warning("DEPRECATED: use 'prime' instead of 'strip'") args['prime'] = True try: return run(args, project_options) except Exception as e: if args['--debug']: raise sys.exit(textwrap.fill(str(e)))
def test_configure_must_support_debug( self, mock_stderr, mock_stdout, mock_isatty): logger_name = self.id() log.configure(logger_name, log_level=logging.DEBUG) logger = logging.getLogger(logger_name) logger.debug('Test debug') logger.info('Test info') logger.warning('Test warning') logger.error('Test error') logger.critical('Test critical') expected_out = ( '\033[1mTest debug\033[0m\n' '\033[1mTest info\033[0m\n' '\033[1mTest warning\033[0m\n') expected_err = ( '\033[1mTest error\033[0m\n' '\033[1mTest critical\033[0m\n') self.assertEqual(expected_out, mock_stdout.getvalue()) self.assertEqual(expected_err, mock_stderr.getvalue())
def test_configure_must_log_info_and_higher(self): logger_name = self.id() log.configure(logger_name) logger = logging.getLogger(logger_name) logger.debug('Test debug') logger.info('Test info') logger.warning('Test warning') logger.error('Test error') logger.critical('Test critical') expected_out = ('{}Test info\033[0m\n' '{}Test warning\033[0m\n').format( self.info_color, self.warning_color) expected_err = ('{}Test error\033[0m\n' '{}Test critical\033[0m\n').format( self.error_color, self.critical_color) self.assertThat(self.fake_terminal.getvalue(), Equals(expected_out)) self.assertThat( self.fake_terminal.getvalue(stderr=True), Equals(expected_err))
def test_configure_must_support_debug(self): logger_name = self.id() log.configure(logger_name, log_level=logging.DEBUG) logger = logging.getLogger(logger_name) logger.debug('Test debug') logger.info('Test info') logger.warning('Test warning') logger.error('Test error') logger.critical('Test critical') expected_out = ('Test debug\n' '{}Test info\033[0m\n' '{}Test warning\033[0m\n').format( self.info_color, self.warning_color) expected_err = ('{}Test error\033[0m\n' '{}Test critical\033[0m\n').format( self.error_color, self.critical_color) self.assertEqual(expected_out, self.fake_terminal.getvalue()) self.assertEqual(expected_err, self.fake_terminal.getvalue(stderr=True))
def test_configure_must_support_no_tty( self, mock_stderr, mock_stdout, mock_isatty): mock_isatty.return_value = False logger_name = self.id() log.configure(logger_name, log_level=logging.DEBUG) logger = logging.getLogger(logger_name) logger.debug('Test debug') logger.info('Test info') logger.warning('Test warning') logger.error('Test error') logger.critical('Test critical') expected_out = ('Test debug\n' 'Test info\n' 'Test warning\n').format( self.info_color, self.warning_color) expected_err = ('Test error\n' 'Test critical\n').format( self.error_color, self.critical_color) self.assertEqual(expected_out, mock_stdout.getvalue()) self.assertEqual(expected_err, mock_stderr.getvalue())
def run(ctx, debug, catch_exceptions=False, **kwargs): """Snapcraft is a delightful packaging tool.""" if debug: log_level = logging.DEBUG # Setting this here so that tools run within this are also in debug # mode (e.g. snapcraftctl) os.environ["SNAPCRAFT_DEBUG"] = "true" click.echo("Starting snapcraft {} from {}.".format( snapcraft.__version__, os.path.dirname(__file__))) else: log_level = logging.INFO # Setup global exception handler (to be called for unhandled exceptions) sys.excepthook = functools.partial(exception_handler, debug=debug) # In an ideal world, this logger setup would be replaced log.configure(log_level=log_level) # The default command if not ctx.invoked_subcommand: ctx.forward(lifecyclecli.commands["snap"])
def run(ctx, debug, catch_exceptions=False, **kwargs): """Snapcraft is a delightful packaging tool.""" # Do this early, if we are in managed-host and not root yet we want to re-exec with # sudo keeping the current environment settings. if os.getenv("SNAPCRAFT_BUILD_ENVIRONMENT" ) == "managed-host" and os.geteuid() != 0: snap_path = os.getenv("SNAP") # Use -E to keep the environment. cmd = ["usr/bin/sudo", "-E"] # Pick the correct interpreter if running from a snap (in managed-host mode, this # is most likely the only scenario). if os.getenv("SNAP_NAME") == "snapcraft": cmd.append(os.path.join(snap_path, "usr", "bin", "python3")) cmd.extend(sys.argv) os.execve("/usr/bin/sudo", cmd, os.environ) # Debugging snapcraft itself is not tied to debugging a snapcraft project. try: is_snapcraft_developer_debug = util.strtobool( os.getenv("SNAPCRAFT_ENABLE_DEVELOPER_DEBUG", "n")) except ValueError: is_snapcraft_developer_debug = False if is_snapcraft_developer_debug: log_level = logging.DEBUG click.echo("Starting snapcraft {} from {}.".format( snapcraft.__version__, os.path.dirname(__file__))) else: log_level = logging.INFO # Setup global exception handler (to be called for unhandled exceptions) sys.excepthook = functools.partial(exception_handler, debug=is_snapcraft_developer_debug) # In an ideal world, this logger setup would be replaced log.configure(log_level=log_level) # The default command if not ctx.invoked_subcommand: ctx.forward(lifecyclecli.commands["snap"])
def test_configure_must_support_no_tty(self): self.fake_terminal = fixture_setup.FakeTerminal(isatty=False) self.useFixture(self.fake_terminal) logger_name = self.id() log.configure(logger_name, log_level=logging.DEBUG) logger = logging.getLogger(logger_name) logger.debug('Test debug') logger.info('Test info') logger.warning('Test warning') logger.error('Test error') logger.critical('Test critical') expected_out = ('Test debug\n' 'Test info\n' 'Test warning\n') expected_err = ('Test error\n' 'Test critical\n') self.assertThat(self.fake_terminal.getvalue(), Equals(expected_out)) self.assertThat( self.fake_terminal.getvalue(stderr=True), Equals(expected_err))
def test_configure_must_support_debug(self): logger_name = self.id() log.configure(logger_name, log_level=logging.DEBUG) logger = logging.getLogger(logger_name) logger.debug("Test debug") logger.info("Test info") logger.warning("Test warning") logger.error("Test error") logger.critical("Test critical") stdout = self.fake_terminal.getvalue() self.assertThat(stdout, Contains("Test debug")) expected_info = "{}Test info\033[0m".format(self.info_color) self.assertThat(stdout, Contains(expected_info)) stderr = self.fake_terminal.getvalue(stderr=True) expected_warning = "{}Test warning\033[0m".format(self.warning_color) self.assertThat(stderr, Contains(expected_warning)) expected_error = "{}Test error\033[0m".format(self.error_color) self.assertThat(stderr, Contains(expected_error)) expected_crit = "{}Test critical\033[0m".format(self.critical_color) self.assertThat(stderr, Contains(expected_crit))
def test_configure_must_log_info_and_higher(self): logger_name = self.id() log.configure(logger_name) logger = logging.getLogger(logger_name) logger.debug('Test debug') logger.info('Test info') logger.warning('Test warning') logger.error('Test error') logger.critical('Test critical') stdout = self.fake_terminal.getvalue() self.assertThat(stdout, Not(Contains('Test debug'))) expected_info = '{}Test info\033[0m'.format(self.info_color) self.assertThat(stdout, Contains(expected_info)) expected_warning = '{}Test warning\033[0m'.format(self.warning_color) self.assertThat(stdout, Contains(expected_warning)) stderr = self.fake_terminal.getvalue(stderr=True) expected_error = '{}Test error\033[0m'.format(self.error_color) self.assertThat(stderr, Contains(expected_error)) expected_crit = '{}Test critical\033[0m'.format(self.critical_color) self.assertThat(stderr, Contains(expected_crit))