Esempio n. 1
0
def search(*, common: dict = Depends(common_parameters), type: SearchTypes):
    """Perform a search."""
    if common["query_str"]:
        models = [get_class_by_tablename(t) for t in type]
        results = composite_search(
            db_session=common["db_session"],
            query_str=common["query_str"],
            models=models,
            current_user=common["current_user"],
        )
        # add a filter for restricted incidents
        # TODO won't currently show incidents that you are a member
        admin_projects = []
        for p in common["current_user"].projects:
            if p.role == UserRoles.admin:
                admin_projects.append(p)

        filtered_incidents = []
        for incident in results["Incident"]:
            if incident.project in admin_projects or incident.visibility == Visibility.open:
                filtered_incidents.append(incident)

        results["Incident"] = filtered_incidents

    else:
        results = []

    return SearchResponse(**{
        "query": common["query_str"],
        "results": results
    }).dict(by_alias=False)
Esempio n. 2
0
def match(*, db_session, filter_spec: List[dict], class_instance: Base):
    """Matches a class instance with a given search filter."""
    table_name = get_table_name_by_class_instance(class_instance)
    model_cls = get_class_by_tablename(table_name)
    query = db_session.query(model_cls)
    query = apply_filters(query, filter_spec)
    return query.filter(model_cls.id == class_instance.id).one_or_none()
Esempio n. 3
0
def search(
    *,
    db_session: Session = Depends(get_db),
    skip: int = 0,
    limit: int = 10,
    q: str = None,
    type: List[str] = [
        v.value for v in SearchTypes
    ],  # hack for pydantic enum json generation see: https://github.com/samuelcolvin/pydantic/pull/1749
    current_user: DispatchUser = Depends(get_current_user),
):
    """
    Perform a search.
    """
    if q:
        models = [get_class_by_tablename(t) for t in type]
        results = composite_search(db_session=db_session,
                                   query_str=q,
                                   models=models)
    else:
        results = []

    # add a filter for restricted incidents
    if current_user.role != UserRoles.admin:
        results["Incident"] = [
            i for i in results["Incident"] if i.visibility == Visibility.open
        ]

    return SearchResponse(**{
        "query": q,
        "results": results
    }).dict(by_alias=False)
Esempio n. 4
0
def search(
    *,
    common: dict = Depends(common_parameters),
    type: List[str] = [
        v.value for v in SearchTypes
    ],  # hack for pydantic enum json generation see: https://github.com/samuelcolvin/pydantic/pull/1749
):
    """
    Perform a search.
    """
    if common["query_str"]:
        models = [get_class_by_tablename(t) for t in type]
        results = composite_search(
            db_session=common["db_session"],
            query_str=common["query_str"],
            models=models,
            current_user=common["current_user"],
        )
    else:
        results = []

    # add a filter for restricted incidents
    # TODO won't currently show incidents that you are a member
    admin_projects = []
    for p in common["current_user"].projects:
        if p.role == UserRoles.admin:
            admin_projects.append(p)

    filtered_incidents = []
    for incident in results["Incident"]:
        if incident.project in admin_projects:
            filtered_incidents.append(incident)
            continue

        if incident.visibility == Visibility.open:
            filtered_incidents.append(incident)

    results["Incident"] = filtered_incidents

    return SearchResponse(**{
        "query": common["query_str"],
        "results": results
    }).dict(by_alias=False)
Esempio n. 5
0
def get_tag_recommendations(*,
                            db_session: Session = Depends(get_db),
                            model_name: str,
                            id: int):
    """
    Retrieves a tag recommendation based on the model and model id.
    """
    model_object = get_class_by_tablename(model_name)
    model = db_session.query(model_object).filter(
        model_object.id == id).one_or_none()

    if not model:
        raise HTTPException(
            status_code=404,
            detail=f"No model found. ModelName: {model_name} Id: {id}")

    tags = get_recommendations(db_session, [t.id for t in model.tags],
                               model_name)
    return {"items": tags, "total": len(tags)}
Esempio n. 6
0
def get_tag_recommendations(*,
                            db_session: Session = Depends(get_db),
                            model_name: str,
                            id: int):
    """Retrieves a tag recommendation based on the model and model id."""
    model_object = get_class_by_tablename(model_name)
    model = db_session.query(model_object).filter(
        model_object.id == id).one_or_none()
    project_slug = model.project.slug
    organization_slug = model.project.organization.slug

    if not model:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=[{
                "msg": f"No model found. ModelName: {model_name} Id: {id}"
            }],
        )

    tags = get_recommendations(db_session, [t.id for t in model.tags],
                               organization_slug, project_slug, model_name)
    return {"items": tags, "total": len(tags)}