Ejemplo n.º 1
0
def no_login_main_app(request, *args, **kwargs):
    """Loads the react single page app for non-logged in views."""
    initial_json = {}
    user_token = kwargs.get('user_token')
    if user_token:
        initial_json['newUser'] = _get_json_for_user(
            User.objects.get(password=user_token))
    elif not request.user.is_anonymous():
        initial_json['user'] = _get_json_for_user(request.user)
    return _render_app_html(request, initial_json)
Ejemplo n.º 2
0
def get_all_staff(request):
    staff_analysts = {
        staff.username: _get_json_for_user(staff)
        for staff in User.objects.filter(is_staff=True)
    }

    return create_json_response(staff_analysts)
Ejemplo n.º 3
0
def get_all_users(request):
    users = [
        _get_json_for_user(user, is_anvil=False)
        for user in User.objects.exclude(email='')
    ]

    return create_json_response({'users': users})
Ejemplo n.º 4
0
def render_app_html(request,
                    additional_json=None,
                    include_user=True,
                    status=200):
    html = loader.render_to_string('app.html')
    ui_version = re.search('static/app-(.*)\.js', html).group(1)
    initial_json = {
        'meta': {
            'version': '{}-{}'.format(SEQR_VERSION, ui_version),
            'hijakEnabled': DEBUG or False,
            'googleLoginEnabled': google_auth_enabled(),
        }
    }
    if include_user:
        initial_json['user'] = _get_json_for_user(request.user)
    if additional_json:
        initial_json.update(additional_json)

    html = html.replace(
        "window.initialJSON=null", "window.initialJSON=" +
        json.dumps(initial_json, default=DjangoJSONEncoder().default))

    if request.get_host() == 'localhost:3000':
        html = re.sub(r'static/app(-.*)js', 'app.js', html)
        html = re.sub(r'<link\s+href="/static/app.*css"[^>]*>', '', html)

    return HttpResponse(html, content_type="text/html", status=status)
Ejemplo n.º 5
0
def no_login_main_app(request, *args, **kwargs):
    """Loads the react single page app for non-logged in views."""
    initial_json = {}
    user_token = kwargs.get('user_token')
    if user_token:
        initial_json['newUser'] = _get_json_for_user(User.objects.get(password=user_token))
    return _render_app_html(request, initial_json)
Ejemplo n.º 6
0
def get_all_analyst_options(request):
    analysts = {
        user.username: _get_json_for_user(user, fields=USER_OPTION_FIELDS)
        for user in _get_all_analysts()
    }

    return create_json_response(analysts)
Ejemplo n.º 7
0
def variant_search_page_data(request, project_guid):
    """Returns a JSON object containing information needed to display the variant search page
    ::

      json_response = {
         'user': {..},
         'variants': [..],
       }
    Args:
        project_guid (string): GUID of the Project under case review.
    """

    project = Project.objects.get(guid=project_guid)

    # check permissions
    if not request.user.has_perm(CAN_VIEW,
                                 project) and not request.user.is_staff:
        raise PermissionDenied

    json_response = {
        'user': _get_json_for_user(request.user),
        'project': _get_json_for_project(project, request.user),
        'variants': {},
    }

    return create_json_response(json_response)
Ejemplo n.º 8
0
def _get_collaborator_json(collaborator, include_permissions, can_edit):
    collaborator_json = _get_json_for_user(collaborator)
    if include_permissions:
        collaborator_json.update({
            'hasViewPermissions': True,
            'hasEditPermissions': can_edit,
        })
    return collaborator_json
Ejemplo n.º 9
0
def get_all_collaborators(request):
    if request.user.is_staff:
        collaborators = {user.username: _get_json_for_user(user) for user in User.objects.exclude(email='')}
    else:
        collaborators = {}
        for project in get_projects_user_can_view(request.user):
            collaborators.update(get_project_collaborators_by_username(project, include_permissions=False))

    return create_json_response(collaborators)
Ejemplo n.º 10
0
def get_all_users(request):
    user_tups = [(user, _get_json_for_user(user, is_anvil=False))
                 for user in User.objects.exclude(email='')]
    users = [
        dict(hasGoogleAuth=is_google_authenticated(user), **user_json)
        for user, user_json in user_tups
    ]

    return create_json_response({'users': users})
Ejemplo n.º 11
0
def get_all_collaborator_options(request):
    collaborators = set()
    for project in get_local_access_projects(request.user):
        collaborators.update(project.get_collaborators())

    return create_json_response({
        user.username: _get_json_for_user(user, fields=USER_OPTION_FIELDS)
        for user in collaborators
    })
Ejemplo n.º 12
0
    def test_json_for_user(self):
        for user in User.objects.all():
            user_json = _get_json_for_user(user)
            user_json_keys = set(user_json.keys())

            self.assertSetEqual(
                user_json_keys,
                set(('dateJoined', 'email', 'firstName', 'isStaff', 'lastLogin', 'lastName', 'username', 'displayName'))
            )
Ejemplo n.º 13
0
    def test_json_for_user(self):
        for user in User.objects.all():
            user_json = _get_json_for_user(user)
            user_json_keys = set(user_json.keys())

            self.assertSetEqual(
                user_json_keys,
                set(('dateJoined', 'email', 'firstName', 'isStaff',
                     'lastLogin', 'lastName', 'username', 'displayName')))
Ejemplo n.º 14
0
    def test_json_for_user(self):
        for user in User.objects.all():
            user_json = _get_json_for_user(user)
            user_json_keys = set(user_json.keys())

            self.assertSetEqual(
                user_json_keys,
                set(('date_joined', 'email', 'first_name', 'id', 'is_active',
                     'is_staff', 'last_login', 'last_name', 'username')))
Ejemplo n.º 15
0
def dashboard_page_data(request):
    """Returns a JSON object containing information used by the dashboard page:
    ::

      json_response = {
         'user': {..},
         'familiesByGuid': {..},
         'individualsByGuid': {..},
       }
    """

    cursor = connection.cursor()

    if request.user.is_staff:
        projects_user_can_view = projects_user_can_edit = None
    else:
        projects_user_can_view = Project.objects.filter(
            can_view_group__user=request.user)
        projects_user_can_edit = Project.objects.filter(
            can_edit_group__user=request.user)

        # defensive programming
        edit_but_not_view_permissions = set(
            p.guid for p in projects_user_can_edit) - set(
                p.guid for p in projects_user_can_view)
        if edit_but_not_view_permissions:
            raise Exception(
                'ERROR: %s has EDIT permissions but not VIEW permissions for: %s'
                % (request.user, edit_but_not_view_permissions))

    projects_by_guid = _retrieve_projects_by_guid(
        cursor,
        projects_user_can_view,
        projects_user_can_edit,
        user_is_staff=request.user.is_staff)

    _add_analysis_status_counts(cursor,
                                projects_by_guid,
                                user_is_staff=request.user.is_staff)
    _add_sample_type_counts(cursor,
                            projects_by_guid,
                            user_is_staff=request.user.is_staff)

    project_categories_by_guid = _retrieve_project_categories_by_guid(
        projects_by_guid, user_is_staff=request.user.is_staff)

    cursor.close()

    json_response = {
        'user': _get_json_for_user(request.user),
        'projectsByGuid': projects_by_guid,
        'projectCategoriesByGuid': project_categories_by_guid,
    }

    return create_json_response(json_response)
Ejemplo n.º 16
0
def _get_json_for_initial_user(user):
    user_json = _get_json_for_user(user)

    user_json['currentPolicies'] = False
    if hasattr(user, 'userpolicy'):
        current_privacy = user.userpolicy.privacy_version
        current_tos = user.userpolicy.tos_version
        user_json[
            'currentPolicies'] = current_privacy == SEQR_PRIVACY_VERSION and current_tos == SEQR_TOS_VERSION

    return user_json
Ejemplo n.º 17
0
def project_page_data(request, project_guid):
    """Returns a JSON object containing information used by the project page:
    ::

      json_response = {
         'user': {..},
         'familiesByGuid': {..},
         'individualsByGuid': {..},
         'samplesByGuid': {..},
         'datasetsByGuid': {..},
       }

    Args:
        project_guid (string): GUID of the Project to retrieve data for.
    """

    project = get_project_and_check_permissions(project_guid, request.user)

    cursor = connection.cursor()

    families_by_guid, individuals_by_guid = _retrieve_families_and_individuals(
        cursor, project.guid)
    samples_by_guid, datasets_by_guid = _retrieve_samples(
        cursor, project.guid, individuals_by_guid)

    cursor.close()

    project_json = _get_json_for_project(project, request.user)
    project_json['collaborators'] = _get_json_for_collaborator_list(project)
    project_json['locusLists'] = _get_json_for_locus_lists(project)
    project_json['variantTagTypes'] = _get_json_for_variant_tag_types(project)
    #project_json['referencePopulations'] = _get_json_for_reference_populations(project)

    # gene search will be deprecated once the new database is online.
    project_json['hasGeneSearch'] = _has_gene_search(project)

    user_json = _get_json_for_user(request.user)
    user_json[
        'hasEditPermissions'] = request.user.is_staff or request.user.has_perm(
            CAN_EDIT, project)
    user_json['hasViewPermissions'] = user_json[
        'hasEditPermissions'] or request.user.has_perm(CAN_VIEW, project)

    json_response = {
        'user': user_json,
        'project': project_json,
        'familiesByGuid': families_by_guid,
        'individualsByGuid': individuals_by_guid,
        'samplesByGuid': samples_by_guid,
        'datasetsByGuid': datasets_by_guid,
    }

    return create_json_response(json_response)
Ejemplo n.º 18
0
def no_login_main_app(request, *args, **kwargs):
    """Loads the react single page app for non-logged in views."""
    render_kwargs = {'include_user': False}
    user_token = kwargs.get('user_token')
    if user_token:
        render_kwargs['additional_json'] = {
            'newUser':
            _get_json_for_user(User.objects.get(password=user_token))
        }
    elif not request.user.is_anonymous:
        render_kwargs['include_user'] = True
    if not request.META.get(CSRF_COOKIE_NAME):
        rotate_token(request)
    return render_app_html(request, **render_kwargs)
Ejemplo n.º 19
0
def main_app(request, *args, **kwargs):
    """Loads the react single page app."""

    html = loader.render_to_string('app.html')

    html = html.replace(
        "window.initialJSON=null", "window.initialJSON=" +
        json.dumps({'user': _get_json_for_user(request.user)},
                   default=DjangoJSONEncoder().default))

    if request.get_host() == 'localhost:3000':
        html = re.sub(r'static/app(-.*)js', 'app.js', html)
        html = re.sub(r'<link\s+href="/static/app.*css"[^>]*>', '', html)

    return HttpResponse(html, content_type="text/html")
Ejemplo n.º 20
0
def case_review_page_data(request, project_guid):
    """Returns a JSON object containing information used by the case review page:
    ::

      json_response = {
         'user': {..},
         'project': {..},
         'familiesByGuid': {..},
         'individualsByGuid': {..},
       }
    Args:
        project_guid (string): GUID of the project being case-reviewed.
    """

    # get all families in this project
    project = get_project_and_check_permissions(project_guid, request.user)

    json_response = {
        'user': _get_json_for_user(request.user),
        'project': _get_json_for_project(project, request.user),
        'familiesByGuid': {},
        'individualsByGuid': {},
    }

    for i in Individual.objects.select_related('family').filter(
            family__project=project):

        # filter out individuals that were never in case review
        if not i.case_review_status:
            continue

        # process family record if it hasn't been added already
        family = i.family
        if family.guid not in json_response['familiesByGuid']:
            json_response['familiesByGuid'][
                family.guid] = _get_json_for_family(family, request.user)
            json_response['familiesByGuid'][
                family.guid]['individualGuids'] = []

        json_response['individualsByGuid'][i.guid] = _get_json_for_individual(
            i, request.user)
        json_response['familiesByGuid'][family.guid]['individualGuids'].append(
            i.guid)

    return create_json_response(json_response)
Ejemplo n.º 21
0
def variant_search_page_data(request, project_guid, family_guid):
    """Returns a JSON object containing information needed to display the variant search page
    ::

      json_response = {
         'user': {..},
         'variants': [..],
       }
    Args:
        project_guid (string): GUID of the Project under case review.
    """
    logger.info("project_guid: %s" % (project_guid,))
    logger.info("family_guid: %s" % (family_guid,))
    if family_guid is not None:
        # single-family search mode
        family = Family.objects.get(guid=family_guid)

        # TODO handle family-not-found

        project = family.project

        check_permissions(project, request.user, CAN_VIEW)

        project_guids = [project.guid]
        family_guids = [family_guid]
    else:
        # all-families-in-a-project search mode
        family = None
        family_guids = None
        if project_guid is not None:
            project = Project.objects.get(guid=project_guid)
            # TODO handle project-not-found

            # check permissions
            check_permissions(project, request.user, CAN_VIEW)

            project_guids = [project.guid]
        else:
            # all projects search mode permissions to access
            project = None
            project_guids = [p.guid for p in get_projects_user_can_view(request.user)]

    # get all datasets
    dataset_info = _retrieve_datasets(
        project_guids=project_guids,
        family_guids=family_guids,
        individual_guids=None,
        sample_types=None,
        analysis_types=None,
        only_loaded_datasets=True
    )

    # retrieve search params from hash or use default values
    search_params_hash = request.GET.get("h")
    if search_params_hash is not None:
        search_params = {}  # TODO retrieve search params for hash
        raise ValueError("Not implemented")

    else:
        search_params = {
            'dataset_guids': [],
            'project_guids': project_guids,
            'family_guids': [],
        }

    # TODO adjust search params that are no-longer valid

    json_response = {
        'user': _get_json_for_user(request.user),
        'project': _get_json_for_project(project, request.user) if project is not None else {},
        'family': _get_json_for_family(family, request.user) if family is not None else {},
        'variants': {},
        'datasets': dataset_info,
    }

    return create_json_response(json_response)
Ejemplo n.º 22
0
def main_app(request, *args, **kwargs):
    """Loads the react single page app."""
    return _render_app_html(request,
                            {'user': _get_json_for_user(request.user)})
Ejemplo n.º 23
0
    def test_json_for_user(self):
        for user in User.objects.all():
            user_json = _get_json_for_user(user)
            user_json_keys = set(user_json.keys())

            self.assertSetEqual(user_json_keys, USER_FIELDS)
Ejemplo n.º 24
0
def main_app(request, *args, **kwargs):
    """Loads the react single page app."""
    return _render_app_html(request, {'user': _get_json_for_user(request.user)})
Ejemplo n.º 25
0
def update_user(request):
    request_json = json.loads(request.body)
    _update_user_from_json(request.user, request_json)

    return create_json_response(_get_json_for_user(request.user))