Exemplo n.º 1
0
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})
Exemplo n.º 2
0
def project_get_or_create():
    """
    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':
        if 'project_name' in session:
            project_name = session['project_name']
        else:
            project_name = str(uuid4())
            session['project_name'] = project_name
        return Project.get_or_create(project_name, input_args)
    else:
        return Project.get_or_create(input_args.project_name, input_args)
Exemplo n.º 3
0
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})
Exemplo n.º 4
0
def goc_project():
    """monkeypatch for get_or_create_project"""
    project_name = "my_project"
    user = "******"
    input_args_dict = {"root_dir": os.path.join(os.path.dirname(__file__), "../../")}
    input_args = SimpleNamespace(**input_args_dict)
    project = Project.get_or_create(
        project_name, input_args, context={"multi_session": False}
    )
    return project
Exemplo n.º 5
0
def goc_project():
    """monkeypatch for get_or_create_project"""
    project_name = 'my_project'
    user = '******'
    input_args_dict = {
        'root_dir': os.path.join(os.path.dirname(__file__), '../../')
    }
    input_args = SimpleNamespace(**input_args_dict)
    project = Project.get_or_create(project_name, input_args, context={
            'multi_session': False
    })
    return project
Exemplo n.º 6
0
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:
    """
    print("Project get or create")
    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={
                                         'user': user,
                                         'project': project,
                                         'multi_session': True,
                                     })
    else:
        # if multi_session_force_recreate:
        #     raise NotImplementedError(
        #         '"multi_session_force_recreate" option supported only with "start-multi-session" mode')
        user = project = input_args.project_name  # in standalone mode, user and project are singletons and consts
        return Project.get_or_create(input_args.project_name,
                                     input_args,
                                     context={
                                         'user': user,
                                         'project': project,
                                         'multi_session': False
                                     })