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
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
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
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
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))
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)