

def run(self, options, robot_class, **static_options):
    from .. import config
    config.mode = 'upload'
    if (not options.skip_tests):
        from .cli_test import PyFrcTest
        tester = PyFrcTest()
        retval = tester.run_test([], robot_class, options.builtin, ignore_missing_test=True)
        if (retval != 0):
            print_err('ERROR: Your robot tests failed, aborting upload.')
            if (not sys.stdin.isatty()):
                print_err('- Use --skip-tests if you want to upload anyways')
                return retval
            print()
            if (not yesno('- Upload anyways?')):
                return retval
            if (not yesno('- Are you sure? Your robot code may crash!')):
                return retval
            print()
            print('WARNING: Uploading code against my better judgement...')
    robot_file = abspath(inspect.getfile(robot_class))
    robot_path = dirname(robot_file)
    robot_filename = basename(robot_file)
    cfg_filename = join(robot_path, '.deploy_cfg')
    if ((not options.nonstandard) and (robot_filename != 'robot.py')):
        print_err(('ERROR: Your robot code must be in a file called robot.py (launched from %s)!' % robot_filename))
        print_err()
        print_err('If you really want to do this, then specify the --nonstandard argument')
        return 1
    deploy_dir = '/home/lvuser'
    py_deploy_dir = ('%s/py' % deploy_dir)
    if options.debug:
        deployed_cmd = ('env LD_LIBRARY_PATH=/usr/local/frc/rpath-lib/ /usr/local/frc/bin/netconsole-host /usr/local/bin/python3 -u %s/%s -v run' % (py_deploy_dir, robot_filename))
        deployed_cmd_fname = 'robotDebugCommand'
        extra_cmd = 'touch /tmp/frcdebug; chown lvuser:ni /tmp/frcdebug'
    else:
        deployed_cmd = ('env LD_LIBRARY_PATH=/usr/local/frc/rpath-lib/ /usr/local/frc/bin/netconsole-host /usr/local/bin/python3 -u -O %s/%s run' % (py_deploy_dir, robot_filename))
        deployed_cmd_fname = 'robotCommand'
        extra_cmd = ''
    if options.in_place:
        del_cmd = ''
    else:
        del_cmd = '[ -d %(py_deploy_dir)s ] && rm -rf %(py_deploy_dir)s'
    del_cmd %= {
        'py_deploy_dir': py_deploy_dir,
    }
    check_version = ('/usr/local/bin/python3 -c "exec(open(\\"$SITEPACKAGES/wpilib/version.py\\", \\"r\\").read(), globals()); print(\\"WPILib version on robot is \\" + __version__);exit(0) if __version__ == \\"%s\\" else exit(89)"' % wpilib.__version__)
    if options.no_version_check:
        check_version = ''
    sshcmd = inspect.cleandoc('\n            /bin/bash -ce \'[ -x /usr/local/bin/python3 ] || exit 87\n            SITEPACKAGES=$(/usr/local/bin/python3 -c "import site; print(site.getsitepackages()[0])")\n            [ -f $SITEPACKAGES/wpilib/version.py ] || exit 88\n            %(check_version)s\n            %(del_cmd)s\n            echo "%(cmd)s" > %(deploy_dir)s/%(cmd_fname)s\n            %(extra_cmd)s\'\n        ')
    sshcmd %= {
        'del_cmd': del_cmd,
        'deploy_dir': deploy_dir,
        'cmd': deployed_cmd,
        'cmd_fname': deployed_cmd_fname,
        'extra_cmd': extra_cmd,
        'check_version': check_version,
    }
    sshcmd = re.sub('\n+', ';', sshcmd)
    nc_thread = None
    try:
        controller = installer.ssh_from_cfg(cfg_filename, username='lvuser', password='', hostname=retval.robot, allow_mitm=True, no_resolve=options.no_resolve)
        logger.debug('SSH: %s', sshcmd)
        controller.ssh(sshcmd)
        tmp_dir = tempfile.mkdtemp()
        py_tmp_dir = join(tmp_dir, 'py')
        try:
            self._copy_to_tmpdir(py_tmp_dir, robot_path)
            controller.sftp(py_tmp_dir, deploy_dir, mkdir=(not options.in_place))
        finally:
            shutil.rmtree(tmp_dir)
        if options.nc:
            from netconsole import run
            nc_event = threading.Event()
            nc_thread = threading.Thread(target=run, kwargs={
                'init_event': nc_event,
            }, daemon=True)
            nc_thread.start()
            nc_event.wait(5)
            logger.info('Netconsole is listening...')
        if (not options.in_place):
            sshcmd = (((("/bin/bash -ce '" + '. /etc/profile.d/natinst-path.sh; ') + 'chown -R lvuser:ni %s; ') + '/usr/local/frc/bin/frcKillRobot.sh -t -r') + "'")
            sshcmd %= py_deploy_dir
            logger.debug('SSH: %s', sshcmd)
            controller.ssh(sshcmd)
    except installer.SshExecError as e:
        if (e.retval == 87):
            print_err('ERROR: python3 was not found on the roboRIO: have you installed robotpy?')
        elif (e.retval == 88):
            print_err('ERROR: WPILib was not found on the roboRIO: have you installed robotpy?')
        elif (e.retval == 89):
            print_err(('ERROR: expected WPILib version %s' % wpilib.__version__))
            print_err()
            print_err('You should either:')
            print_err('- If the robot version is older, upgrade the RobotPy on your robot')
            print_err('- Otherwise, upgrade pyfrc on your computer')
            print_err()
            print_err('Alternatively, you can specify --no-version-check to skip this check')
        else:
            print_err(('ERROR: %s' % e))
        return 1
    except installer.Error as e:
        print_err(('ERROR: %s' % e))
        return 1
    else:
        print('\nSUCCESS: Deploy was successful!')
    if (nc_thread is not None):
        nc_thread.join()
    return 0

dataset/ETHPy150Open robotpy/pyfrc/lib/pyfrc/mains/cli_deploy.py PyFrcDeploy.run/VarMisuse@431/1198 `options`->`retval`