def main(): input_args = parse_input_args(sys.argv[1:]) # setup logging level if input_args.log_level: os.environ.setdefault("LOG_LEVEL", input_args.log_level) if input_args.database: database_path = pathlib.Path(input_args.database) os.environ.setdefault("DATABASE_NAME", str(database_path.absolute())) if input_args.data_dir: data_dir_path = pathlib.Path(input_args.data_dir) os.environ.setdefault("LABEL_STUDIO_BASE_DATA_DIR", str(data_dir_path.absolute())) config = _get_config(input_args.config_path) # set host name host = input_args.host or config.get('host', '') if not get_env('HOST'): os.environ.setdefault('HOST', host) # it will be passed to settings.HOSTNAME as env var _setup_env() _apply_database_migrations() from label_studio.core.utils.common import collect_versions versions = collect_versions() if input_args.command == 'reset_password': _reset_password(input_args) return if input_args.command == 'shell': call_command('shell_plus') return # print version if input_args.command == 'version': from label_studio import __version__ print('\nLabel Studio version:', __version__, '\n') print(json.dumps(versions, indent=4)) # init elif input_args.command == 'user' or getattr(input_args, 'user', None): _get_user_info(input_args.username) return # init elif input_args.command == 'init' or getattr(input_args, 'init', None): _init(input_args, config) print('') print('Label Studio has been successfully initialized.') if input_args.command != 'start': print('Start the server: label-studio start ' + input_args.project_name) return # start with migrations from old projects, '.' project_name means 'label-studio start' without project name elif input_args.command == 'start' and input_args.project_name != '.': from label_studio.core.old_ls_migration import migrate_existing_project from projects.models import Project sampling_map = {'sequential': Project.SEQUENCE, 'uniform': Project.UNIFORM, 'prediction-score-min': Project.UNCERTAINTY} if not _project_exists(input_args.project_name): migrated = False project_path = pathlib.Path(input_args.project_name) if project_path.exists(): print('Project directory from previous verion of label-studio found') print('Start migrating..') config_path = project_path / 'config.json' config = _get_config(config_path) user = _create_user(input_args, config) label_config_path = project_path / 'config.xml' project = _create_project( title=input_args.project_name, user=user, label_config=label_config_path, sampling=sampling_map.get(config.get('sampling', 'sequential'), Project.UNIFORM), description=config.get('description', ''), ) migrate_existing_project(project_path, project, config) migrated = True print( Fore.LIGHTYELLOW_EX + '\n*** WARNING! ***\n' + f'Project {input_args.project_name} migrated to Label Studio Database\n' + "YOU DON'T NEED THIS FOLDER ANYMORE" + '\n****************\n' + Fore.WHITE ) if not migrated: print( 'Project "{project_name}" not found. ' 'Did you miss create it first with `label-studio init {project_name}` ?'.format( project_name=input_args.project_name ) ) return # on `start` command, launch browser if --no-browser is not specified and start label studio server if input_args.command == 'start' or input_args.command is None: from label_studio.core.utils.common import start_browser if get_env('USERNAME') and get_env('PASSWORD') or input_args.username: _create_user(input_args, config) # ssl not supported from now cert_file = input_args.cert_file or config.get('cert') key_file = input_args.key_file or config.get('key') if cert_file or key_file: logger.error("Label Studio doesn't support SSL web server with cert and key.\n" 'Use nginx or other servers for it.') return # internal port and internal host for server start internal_host = input_args.internal_host or config.get('internal_host', '0.0.0.0') internal_port = input_args.port or get_env('PORT') or config.get('port', 8080) internal_port = int(internal_port) internal_port = _get_free_port(internal_port, input_args.debug) # save selected port to global settings from django.conf import settings settings.INTERNAL_PORT = str(internal_port) # browser url = ('http://localhost:' + str(internal_port)) if not host else host start_browser(url, input_args.no_browser) _app_run(host=internal_host, port=internal_port)
def main(): input_args = parse_input_args() # setup logging level if input_args.log_level: os.environ.setdefault("LOG_LEVEL", input_args.log_level) if input_args.database: database_path = pathlib.Path(input_args.database) os.environ.setdefault("DATABASE_NAME", str(database_path.absolute())) if input_args.data_dir: data_dir_path = pathlib.Path(input_args.data_dir) print(data_dir_path) os.environ.setdefault("LABEL_STUDIO_BASE_DATA_DIR", str(data_dir_path.absolute())) config = _get_config(input_args.config_path) # set host name host = input_args.host or config.get('host', '') if not os.environ.get('LABEL_STUDIO_HOSTNAME'): os.environ.setdefault( 'LABEL_STUDIO_HOSTNAME', host) # it will be passed to settings.HOSTNAME as env var _setup_env() _apply_database_migrations() from label_studio.core.utils.common import check_for_the_latest_version, collect_versions check_for_the_latest_version(print_message=True) versions = collect_versions() if input_args.command == 'reset_password': _reset_password(input_args) return if input_args.command == 'shell': call_command('shell_plus') return # print version if input_args.command == 'version': from label_studio import __version__ print('\nLabel Studio version:', __version__, '\n') print(json.dumps(versions, indent=4)) # init elif input_args.command == 'init' or getattr(input_args, 'init', None): _init(input_args, config) print('') print('Label Studio has been successfully initialized.') if input_args.command != 'start': print('Start the server: label-studio start ' + input_args.project_name) return # start with migrations from old projects, '.' project_name means 'label-studio start' without project name elif input_args.command == 'start' and input_args.project_name != '.': from label_studio.core.old_ls_migration import migrate_existing_project from projects.models import Project if not _project_exists(input_args.project_name): migrated = False project_path = pathlib.Path(input_args.project_name) if project_path.exists(): print( 'Project directory from previous verion of label-studio found' ) need_migrate = input('Do you want to migrate it? [y/n] ') if need_migrate == 'y': config_path = project_path / 'config.json' config = _get_config(config_path) user = _create_user(input_args, config) label_config_path = project_path / 'config.xml' choices = (['sequential', 'uniform'], ) sampling_map = { 'sequential': Project.SEQUENCE, 'uniform': Project.UNIFORM } project = _create_project( title=input_args.project_name, user=user, label_config=label_config_path, sampling=sampling_map.get( config.get('sampling', 'sequential'), Project.UNIFORM), description=config.get('description', ''), ) migrate_existing_project(project_path, project, config) migrated = True if not migrated: print( 'Project "{project_name}" not found. ' 'Did you miss create it first with `label-studio init {project_name}` ?' .format(project_name=input_args.project_name)) return # on `start` command, launch browser if --no-browser is not specified and start label studio server if input_args.command == 'start' or input_args.command is None: from label_studio.core.utils.common import start_browser # ssl not supported from now cert_file = input_args.cert_file or config.get('cert') key_file = input_args.key_file or config.get('key') if cert_file or key_file: logger.error( "Label Studio doesn't support SSL web server with cert and key.\n" 'Use nginx or other servers for it.') return # internal port and internal host for server start internal_host = input_args.internal_host or config.get( 'internal_host', '0.0.0.0') internal_port = input_args.port or config.get('port', 8080) internal_port = _get_free_port(internal_port, input_args.debug) # browser url = ('http://localhost:' + str(internal_port)) if not host else host start_browser(url, input_args.no_browser) _app_run(host=internal_host, port=internal_port)