def _upload_files(request_files, project): filelist = [] for _, file in request_files.items(): if file and file.filename and _is_allowed_file(file.filename): filename = secure_filename(file.filename) # read as text or binary file if isinstance(file, io.TextIOWrapper): with open(filename, mode='rb') as f: data = f.read() else: data = file.read() # assign unique filename filename = convert_string_to_hash( data, trim=6) + '-' + os.path.basename(filename) # eval upload dir upload_dir = os.environ.get('LS_UPLOAD_DIR', '') upload_dir = upload_dir if upload_dir else project.upload_dir os.makedirs(upload_dir, exist_ok=True) # save file to path on disk with open(os.path.join(upload_dir, filename), mode='wb') as f: f.write(data) filelist.append(filename) return filelist
def project_get_or_create(multi_session_force_recreate=False): """ Return existed or create new project based on environment. Currently supported methods: - "fixed": project is based on "project_name" attribute specified by input args when app starts - "session": project is based on "project_name" key restored from flask.session object :return: """ if input_args.command == 'start-multi-session': # get user from session if 'user' not in session: session['user'] = str(uuid4()) user = session['user'] # get project from session if 'project' not in session or multi_session_force_recreate: session['project'] = str(uuid4()) project = session['project'] project_name = user + '/' + project return Project.get_or_create(project_name, input_args, context={ 'multi_session': True, 'user': convert_string_to_hash(user) }) else: if multi_session_force_recreate: raise NotImplementedError( '"multi_session_force_recreate" option supported only with "start-multi-session" mode' ) return Project.get_or_create(input_args.project_name, input_args, context={'multi_session': False})
def project_get_or_create(multi_session_force_recreate=False): """ Return existed or create new project based on environment. Currently supported methods: - "fixed": project is based on "project_name" attribute specified by input args when app starts - "session": project is based on "project_name" key restored from flask.session object :param multi_session_force_recreate: create a new project if True :return: project """ input_args = current_app.label_studio.input_args if input_args and input_args.command == 'start-multi-session': # get user from session if 'user' not in session: session['user'] = str(uuid4()) user = session['user'] g.user = user # get project from session if 'project' not in session or multi_session_force_recreate: session['project'] = str(uuid4()) project = session['project'] # check for shared projects and get owner user if project in session.get('shared_projects', []): owner = Project.get_user_by_project(project, input_args.root_dir) if owner is None: # owner is None when project doesn't exist raise Exception( 'No such shared project found: project_uuid = ' + project) else: user = owner project_name = user + '/' + project return Project.get_or_create(project_name, input_args, context={ 'multi_session': True, 'user': convert_string_to_hash(user.encode()) }) else: if multi_session_force_recreate: raise NotImplementedError( '"multi_session_force_recreate" option supported only with "start-multi-session" mode' ) return Project.get_or_create(input_args.project_name, input_args, context={'multi_session': False})