Ejemplo n.º 1
0
def for_entities(q, Ent):
    """ Get all entities the current user has access to. Accepts project and
    additional filter parameters. """
    # NOTE: I'm passing in the query and entity alias so that this
    # function can be re-used from the facetting code to constrain
    # the results of the facet sub-query.
    q = q.filter(Ent.same_as == None)  # noqa
    q = q.filter(Ent.project_id.in_(permissions().get('reader')))

    if 'project' in request.args:
        Proj = aliased(Project)
        q = q.join(Proj, Ent.project)
        q = q.filter(Proj.slug == single_arg('project'))

    q = property_filters(Entity, q, Ent)

    if 'q' in request.args and single_arg('q'):
        EntProp = aliased(Property)
        q_text = '%%%s%%' % single_arg('q')
        q = q.join(EntProp)
        q = q.filter(EntProp.name == 'name')
        q = q.filter(EntProp.value_string.ilike(q_text))

    schemata = request.args.getlist('schema')
    if len(schemata):
        alias = aliased(Schema)
        q = q.join(alias, Ent.schema)
        q = q.filter(alias.name.in_(schemata))

    return q
Ejemplo n.º 2
0
def for_relations(q, Rel):
    #Source = aliased(Entity)
    #Target = aliased(Entity)
    #q = q.join(Source, Rel.source)
    #q = q.join(Target, Rel.target)

    q = q.filter(Rel.project_id.in_(permissions().get('reader')))

    project = single_arg('project')
    if project:
        Proj = aliased(Project)
        q = q.join(Proj, Rel.project)
        q = q.filter(Proj.slug == project)

    q = property_filters(Relation, q, Rel)

    if 'source' in request.args:
        q = q.filter(Rel.source_id == single_arg('source'))

    if 'target' in request.args:
        q = q.filter(Rel.target_id == single_arg('target'))

    if 'entity' in request.args:
        id = single_arg('entity')
        q = q.filter(or_(Rel.target_id == id, Rel.source_id == id))

    schemata = request.args.getlist('schema')
    if len(schemata):
        alias = aliased(Schema)
        q = q.join(alias, Rel.schema)
        q = q.filter(alias.name.in_(schemata))

    return q
Ejemplo n.º 3
0
def for_entities(q, Ent):
    """ Get all entities the current user has access to. Accepts project and
    additional filter parameters. """
    # NOTE: I'm passing in the query and entity alias so that this
    # function can be re-used from the facetting code to constrain
    # the results of the facet sub-query.
    q = q.filter(Ent.same_as == None)  # noqa
    q = q.filter(Ent.project_id.in_(permissions().get("reader")))

    if "project" in request.args:
        Proj = aliased(Project)
        q = q.join(Proj, Ent.project)
        q = q.filter(Proj.slug == single_arg("project"))

    q = property_filters(Entity, q, Ent)

    if "q" in request.args and single_arg("q"):
        EntProp = aliased(Property)
        q_text = "%%%s%%" % single_arg("q")
        q = q.join(EntProp)
        q = q.filter(EntProp.name == "name")
        q = q.filter(EntProp.value_string.ilike(q_text))

    schemata = request.args.getlist("schema")
    if len(schemata):
        alias = aliased(Schema)
        q = q.join(alias, Ent.schema)
        q = q.filter(alias.name.in_(schemata))

    return q
Ejemplo n.º 4
0
def for_relations(q, Rel):
    # Source = aliased(Entity)
    # Target = aliased(Entity)
    # q = q.join(Source, Rel.source)
    # q = q.join(Target, Rel.target)

    q = q.filter(Rel.project_id.in_(permissions().get("reader")))

    project = single_arg("project")
    if project:
        Proj = aliased(Project)
        q = q.join(Proj, Rel.project)
        q = q.filter(Proj.slug == project)

    q = property_filters(Relation, q, Rel)

    if "source" in request.args:
        q = q.filter(Rel.source_id == single_arg("source"))

    if "target" in request.args:
        q = q.filter(Rel.target_id == single_arg("target"))

    if "entity" in request.args:
        id = single_arg("entity")
        q = q.filter(or_(Rel.target_id == id, Rel.source_id == id))

    schemata = request.args.getlist("schema")
    if len(schemata):
        alias = aliased(Schema)
        q = q.join(alias, Rel.schema)
        q = q.filter(alias.name.in_(schemata))

    return q
Ejemplo n.º 5
0
def suggest():
    if 'q' not in request.args or not len(request.args.get('q').strip()):
        raise BadRequest("Missing the query ('q' parameter).")

    q = db.session.query(Property)
    q = q.join(Entity)
    q = q.filter(Entity.project_id.in_(authz.permissions().get('reader')))
    q = q.filter(Property.name == 'name')
    q = q.filter(Property.active == True) # noqa
    q = q.filter(Property.entity_id != None) # noqa
    q = q.filter(Property.value_string.ilike(request.args.get('q') + '%'))
    if 'project' in request.args:
        q = q.join(Project)
        q = q.filter(Project.slug == request.args.get('project'))
    if 'exclude' in request.args:
        ents = request.args.getlist('exclude')
        q = q.filter(not_(Property.entity_id.in_(ents)))
    q = q.distinct()
    pager = Pager(q)

    data = []

    def convert(props):
        for prop in props:
            data.append({
                'properties': {
                    'name': prop.to_dict_index(),
                },
                'id': prop.entity_id,
                'api_url': url_for('entities_api.view', id=prop.entity_id)
            })
        return data

    validate_cache(keys='#'.join([d['name'] for d in data]))
    return jsonify(pager.to_dict(results_converter=convert))
Ejemplo n.º 6
0
def suggest():
    if 'q' not in request.args or not len(request.args.get('q').strip()):
        raise BadRequest("Missing the query ('q' parameter).")

    q = db.session.query(Property)
    q = q.join(Entity)
    q = q.filter(Entity.project_id.in_(authz.permissions().get('reader')))
    q = q.filter(Property.name == 'name')
    q = q.filter(Property.active == True)  # noqa
    q = q.filter(Property.entity_id != None)  # noqa
    q = q.filter(Property.value_string.ilike(request.args.get('q') + '%'))
    if 'project' in request.args:
        q = q.join(Project)
        q = q.filter(Project.slug == request.args.get('project'))
    if 'exclude' in request.args:
        ents = request.args.getlist('exclude')
        q = q.filter(not_(Property.entity_id.in_(ents)))
    q = q.distinct()
    pager = Pager(q)

    data = []

    def convert(props):
        for prop in props:
            data.append({
                'properties': {
                    'name': prop.to_dict_index(),
                },
                'id':
                prop.entity_id,
                'api_url':
                url_for('entities_api.view', id=prop.entity_id)
            })
        return data

    validate_cache(keys='#'.join([d['name'] for d in data]))
    return jsonify(pager.to_dict(results_converter=convert))
Ejemplo n.º 7
0
def index():
    q = Project.all()
    q = q.filter(Project.id.in_(authz.permissions().get('reader')))
    pager = Pager(q)
    validate_cache(keys=pager.cache_keys())
    return jsonify(pager, index=True)