def get_organizations(name=None): ''' Regular response option for organizations. ''' filters = request.args filters, querystring = get_query_params(request.args) if name: # Get one named organization. filter = Organization.name == raw_name(name) org = db.session.query(Organization).filter(filter).first() if org: return jsonify(org.asdict(True)) else: # If no org found return jsonify({"status": "Resource Not Found"}), 404 # Get a bunch of organizations. query = db.session.query(Organization) # Default ordering of results ordering = desc(Organization.last_updated) for attr, value in filters.iteritems(): if 'q' in attr: query = query.filter("organization.tsv_body @@ plainto_tsquery('%s')" % value) ordering = desc(func.ts_rank(Organization.tsv_body, func.plainto_tsquery('%s' % value))) else: query = query.filter(getattr(Organization, attr).ilike('%%%s%%' % value)) query = query.order_by(ordering) response = paged_results(query, int(request.args.get('page', 1)), int(request.args.get('per_page', 10)), querystring) return jsonify(response)
def get_organizations(name=None): ''' Regular response option for organizations. ''' filters, querystring = get_query_params(request.args) if name: # Get one named organization. org_filter = Organization.name == raw_name(name) org = db.session.query(Organization).filter(org_filter).first() if org: return jsonify(org.asdict(True)) else: # If no org found return jsonify({"status": "Resource Not Found"}), 404 # Get a bunch of organizations. query = db.session.query(Organization) # Default ordering of results ordering = desc(Organization.last_updated) for attr, value in filters.iteritems(): if 'q' in attr: query = query.filter('organization.tsv_body @@ plainto_tsquery(:search_query)').params(search_query=value) ordering = desc(func.ts_rank(Organization.tsv_body, func.plainto_tsquery(value))) else: query = query.filter(getattr(Organization, attr).ilike(format_ilike_term(value))) query = query.order_by(ordering) response = paged_results(query=query, include_args=dict(include_extras=True), page=int(request.args.get('page', 1)), per_page=int(request.args.get('per_page', 10)), querystring=querystring) return jsonify(response)
def get_orgs_projects(organization_name): ''' A cleaner url for getting an organizations projects ''' # Check org name organization = Organization.query.filter_by(name=raw_name(organization_name)).first() if not organization: return "Organization not found", 404 filters, querystring = get_query_params(request.args) # Get project objects query = db.session.query(Project).filter_by(organization_name=organization.name).options(defer('tsv_body')) # Default ordering of results last_updated_ordering_filter = Project.last_updated relevance_ordering_filter = None ordering_filter_name = 'last_updated' ordering_filter = last_updated_ordering_filter ordering_dir = 'desc' ordering = None for attr, value in filters.iteritems(): if 'q' in attr: # Returns all results if the value is empty if value: query = query.filter("project.tsv_body @@ plainto_tsquery('%s')" % value) relevance_ordering_filter = func.ts_rank(Project.tsv_body, func.plainto_tsquery('%s' % value)) ordering_filter_name = 'relevance' elif 'only_ids' in attr: query = query.with_entities(Project.id) elif 'sort_by' in attr: if(value == 'relevance'): ordering_filter_name = 'relevance' else: ordering_filter_name = 'last_updated' elif 'sort_dir' in attr: if(value == 'asc'): ordering_dir = 'asc' else: ordering_dir = 'desc' else: query = query.filter(getattr(Project, attr).ilike('%%%s%%' % value)) if(ordering_filter_name == 'last_updated'): ordering_filter = last_updated_ordering_filter elif(ordering_filter_name == 'relevance' and dir(relevance_ordering_filter) != dir(None)): ordering_filter = relevance_ordering_filter if(ordering_dir == 'desc'): ordering = ordering_filter.desc() else: ordering = ordering_filter.asc() query = query.order_by(ordering) response = paged_results(query, int(request.args.get('page', 1)), int(request.args.get('per_page', 10)), querystring) return jsonify(response)
def get_orgs_projects(organization_name): ''' A cleaner url for getting an organizations projects ''' # Check org name organization = Organization.query.filter_by(name=raw_name(organization_name)).first() if not organization: return "Organization not found", 404 filters, querystring = get_query_params(request.args) # Get project objects query = db.session.query(Project).filter_by(organization_name=organization.name).options(defer('tsv_body')) # Default ordering of results last_updated_ordering_filter = Project.last_updated relevance_ordering_filter = None ordering_filter_name = 'last_updated' ordering_filter = last_updated_ordering_filter ordering_dir = 'desc' ordering = None for attr, value in filters.iteritems(): if 'q' in attr: # Returns all results if the value is empty if value: query = query.filter('project.tsv_body @@ plainto_tsquery(:search_query)').params(search_query=value) relevance_ordering_filter = func.ts_rank(Project.tsv_body, func.plainto_tsquery(value)) ordering_filter_name = 'relevance' elif 'only_ids' in attr: query = query.with_entities(Project.id) elif 'sort_by' in attr: if value == 'relevance': ordering_filter_name = 'relevance' else: ordering_filter_name = 'last_updated' elif 'sort_dir' in attr: if value == 'asc': ordering_dir = 'asc' else: ordering_dir = 'desc' else: query = query.filter(getattr(Project, attr).ilike(format_ilike_term(value))) if ordering_filter_name == 'last_updated': ordering_filter = last_updated_ordering_filter elif ordering_filter_name == 'relevance' and dir(relevance_ordering_filter) != dir(None): ordering_filter = relevance_ordering_filter if ordering_dir == 'desc': ordering = ordering_filter.desc() else: ordering = ordering_filter.asc() query = query.order_by(ordering) response = paged_results(query=query, include_args=dict(include_organization=True, include_issues=True), page=int(request.args.get('page', 1)), per_page=int(request.args.get('per_page', 10)), querystring=querystring) return jsonify(response)
def get_organizations(name=None): ''' Regular response option for organizations. ''' filters = request.args filters, querystring = get_query_params(request.args) if name: # Get one named organization. filter = Organization.name == raw_name(name) org = db.session.query(Organization).filter(filter).first() if org: # del org.tsv_body return jsonify(org.asdict(True)) else: # If no org found return jsonify({"status": "Resource Not Found"}), 404 # Get a bunch of organizations. query = db.session.query(Organization) # Default ordering of results ordering = desc(Organization.last_updated) for attr, value in filters.iteritems(): if 'q' in attr: query = query.filter( "organization.tsv_body @@ plainto_tsquery('%s')" % value) ordering = desc( func.ts_rank(Organization.tsv_body, func.plainto_tsquery('%s' % value))) else: query = query.filter( getattr(Organization, attr).ilike('%%%s%%' % value)) query = query.order_by(ordering) response = paged_results(query, int(request.args.get('page', 1)), int(request.args.get('per_page', 10)), querystring) return jsonify(response)
def get_organizations(name=None): ''' Regular response option for organizations. ''' filters, querystring = get_query_params(request.args) if name: # Get one named organization. org_filter = Organization.name == raw_name(name) org = db.session.query(Organization).filter(org_filter).first() if org: return jsonify(org.asdict(True)) else: # If no org found return jsonify({"status": "Resource Not Found"}), 404 # Get a bunch of organizations. query = db.session.query(Organization) # Default ordering of results ordering = desc(Organization.last_updated) if 'tags[]' in filters: tags = request.args.getlist('tags[]') query = query.filter('organization.tags ?& :tags').params(tags=tags) del filters['tags[]'] for attr, value in filters.iteritems(): if 'q' in attr: query = query.filter('organization.tsv_body @@ plainto_tsquery(:search_query)').params(search_query=value) ordering = desc(func.ts_rank(Organization.tsv_body, func.plainto_tsquery(value))) else: query = query.filter(getattr(Organization, attr).ilike(format_ilike_term(value))) query = query.order_by(ordering) response = paged_results(query=query, include_args=dict(include_extras=True), page=int(request.args.get('page', 1)), per_page=int(request.args.get('per_page', 10)), querystring=querystring) return jsonify(response)
def get_projects(id=None): ''' Regular response option for projects. ''' filters, querystring = get_query_params(request.args) if id: # Get one named project. filter = Project.id == id proj = db.session.query(Project).filter(filter).first() if proj: return jsonify(proj.asdict(True)) else: # If no project found return jsonify({"status": "Resource Not Found"}), 404 # Get a bunch of projects. query = db.session.query(Project).options(defer('tsv_body')) # Default ordering of results last_updated_ordering_filter = Project.last_updated relevance_ordering_filter = None ordering_filter_name = 'last_updated' ordering_filter = last_updated_ordering_filter ordering_dir = 'desc' ordering = None for attr, value in filters.iteritems(): if 'organization' in attr: org_attr = attr.split('_')[1] query = query.join(Project.organization).filter(getattr(Organization, org_attr).ilike('%%%s%%' % value)) elif 'q' in attr: # Returns all results if the value is empty if value: query = query.filter("project.tsv_body @@ plainto_tsquery('%s')" % value) relevance_ordering_filter = func.ts_rank(Project.tsv_body, func.plainto_tsquery('%s' % value)) ordering_filter_name = 'relevance' elif 'only_ids' in attr: query = query.with_entities(Project.id) elif 'sort_by' in attr: if(value == 'relevance'): ordering_filter_name = 'relevance' else: ordering_filter_name = 'last_updated' elif 'sort_dir' in attr: if(value == 'asc'): ordering_dir = 'asc' else: ordering_dir = 'desc' else: query = query.filter(getattr(Project, attr).ilike('%%%s%%' % value)) if(ordering_filter_name == 'last_updated'): ordering_filter = last_updated_ordering_filter elif(ordering_filter_name == 'relevance' and dir(relevance_ordering_filter) != dir(None)): ordering_filter = relevance_ordering_filter if(ordering_dir == 'desc'): ordering = ordering_filter.desc() else: ordering = ordering_filter.asc() query = query.order_by(ordering) response = paged_results(query, int(request.args.get('page', 1)), int(request.args.get('per_page', 10)), querystring) return jsonify(response)
def get_projects(id=None): ''' Regular response option for projects. ''' filters, querystring = get_query_params(request.args) if id: # Get one named project. filter = Project.id == id proj = db.session.query(Project).filter(filter).first() if proj: return jsonify(proj.asdict(True)) else: # If no project found return jsonify({"status": "Resource Not Found"}), 404 # Get a bunch of projects. query = db.session.query(Project).options(defer('tsv_body')) # Default ordering of results last_updated_ordering_filter = Project.last_updated relevance_ordering_filter = None ordering_filter_name = 'last_updated' ordering_filter = last_updated_ordering_filter ordering_dir = 'desc' ordering = None for attr, value in filters.iteritems(): if 'organization' in attr: org_attr = attr.split('_')[1] query = query.join(Project.organization).filter( getattr(Organization, org_attr).ilike('%%%s%%' % value)) elif 'q' in attr: # Returns all results if the value is empty if value: query = query.filter( "project.tsv_body @@ plainto_tsquery('%s')" % value) relevance_ordering_filter = func.ts_rank( Project.tsv_body, func.plainto_tsquery('%s' % value)) ordering_filter_name = 'relevance' elif 'only_ids' in attr: query = query.with_entities(Project.id) elif 'sort_by' in attr: if (value == 'relevance'): ordering_filter_name = 'relevance' else: ordering_filter_name = 'last_updated' elif 'sort_dir' in attr: if (value == 'asc'): ordering_dir = 'asc' else: ordering_dir = 'desc' else: query = query.filter( getattr(Project, attr).ilike('%%%s%%' % value)) if (ordering_filter_name == 'last_updated'): ordering_filter = last_updated_ordering_filter elif (ordering_filter_name == 'relevance' and dir(relevance_ordering_filter) != dir(None)): ordering_filter = relevance_ordering_filter if (ordering_dir == 'desc'): ordering = ordering_filter.desc() else: ordering = ordering_filter.asc() query = query.order_by(ordering) response = paged_results(query, int(request.args.get('page', 1)), int(request.args.get('per_page', 10)), querystring) return jsonify(response)
def get_projects(id=None): ''' Regular response option for projects. ''' filters, querystring = get_query_params(request.args) if id: # Get one named project. filter = Project.id == id proj = db.session.query(Project).filter(filter).first() if proj: return jsonify(proj.asdict(True)) else: # If no project found return jsonify({"status": "Resource Not Found"}), 404 # Get a bunch of projects. query = db.session.query(Project).options(defer('tsv_body')) # Default ordering of results last_updated_ordering_filter = Project.last_updated relevance_ordering_filter = None ordering_filter_name = 'last_updated' ordering_filter = last_updated_ordering_filter ordering_dir = 'desc' include_issues = False ordering = None for attr, value in filters.iteritems(): if 'organization' in attr: org_attr = attr.split('_')[1] # Support searching for multiple org_types if "," in value: values = [unicode(item) for item in value.split(",")] # build a list of ilike queries to match on ilike_values = [ getattr(Organization, org_attr).ilike(format_ilike_term(value)) for value in values ] query = query.join(Project.organization).filter( or_(*ilike_values)) else: query = query.join(Project.organization).filter( getattr(Organization, org_attr).ilike(format_ilike_term(value))) elif 'q' in attr: # Returns all results if the value is empty if value: query = query.filter( 'project.tsv_body @@ plainto_tsquery(:search_query)' ).params(search_query=value) relevance_ordering_filter = func.ts_rank( Project.tsv_body, func.plainto_tsquery(value)) ordering_filter_name = 'relevance' elif 'only_ids' in attr: query = query.with_entities(Project.id) elif 'sort_by' in attr: if value == 'relevance': ordering_filter_name = 'relevance' else: ordering_filter_name = 'last_updated' elif 'sort_dir' in attr: if value == 'asc': ordering_dir = 'asc' else: ordering_dir = 'desc' elif 'include_issues' in attr: if value in ['True', 'true', 't']: include_issues = True else: query = query.filter( getattr(Project, attr).ilike(format_ilike_term(value))) if ordering_filter_name == 'last_updated': ordering_filter = last_updated_ordering_filter elif ordering_filter_name == 'relevance' and dir( relevance_ordering_filter) != dir(None): ordering_filter = relevance_ordering_filter if ordering_dir == 'desc': ordering = ordering_filter.desc() else: ordering = ordering_filter.asc() query = query.order_by(ordering) response = paged_results(query=query, include_args=dict(include_organization=True, include_issues=include_issues), page=int(request.args.get('page', 1)), per_page=int(request.args.get('per_page', 10)), querystring=querystring) return jsonify(response)
def get_projects(id=None): ''' Regular response option for projects. ''' filters, querystring = get_query_params(request.args) if id: # Get one named project. filter = Project.id == id proj = db.session.query(Project).filter(filter).first() if proj: return jsonify(proj.asdict(True)) else: # If no project found return jsonify({"status": "Resource Not Found"}), 404 # Get a bunch of projects. query = db.session.query(Project).options(defer('tsv_body')) # Default ordering of results last_updated_ordering_filter = Project.last_updated relevance_ordering_filter = None ordering_filter_name = 'last_updated' ordering_filter = last_updated_ordering_filter ordering_dir = 'desc' include_issues = False ordering = None for attr, value in filters.iteritems(): if 'organization' in attr: org_attr = attr.split('_')[1] # Support searching for multiple org_types if "," in value: values = [unicode(item) for item in value.split(",")] # build a list of ilike queries to match on ilike_values = [getattr(Organization, org_attr).ilike(format_ilike_term(value)) for value in values] query = query.join(Project.organization).filter(or_(*ilike_values)) else: query = query.join(Project.organization).filter(getattr(Organization, org_attr).ilike(format_ilike_term(value))) elif 'q' in attr: # Returns all results if the value is empty if value: query = query.filter('project.tsv_body @@ plainto_tsquery(:search_query)').params(search_query=value) relevance_ordering_filter = func.ts_rank(Project.tsv_body, func.plainto_tsquery(value)) ordering_filter_name = 'relevance' elif 'only_ids' in attr: query = query.with_entities(Project.id) elif 'sort_by' in attr: if value == 'relevance': ordering_filter_name = 'relevance' else: ordering_filter_name = 'last_updated' elif 'sort_dir' in attr: if value == 'asc': ordering_dir = 'asc' else: ordering_dir = 'desc' elif 'include_issues' in attr: if value in ['True','true','t']: include_issues = True else: query = query.filter(getattr(Project, attr).ilike(format_ilike_term(value))) if ordering_filter_name == 'last_updated': ordering_filter = last_updated_ordering_filter elif ordering_filter_name == 'relevance' and dir(relevance_ordering_filter) != dir(None): ordering_filter = relevance_ordering_filter if ordering_dir == 'desc': ordering = ordering_filter.desc() else: ordering = ordering_filter.asc() query = query.order_by(ordering) response = paged_results(query=query, include_args=dict(include_organization=True, include_issues=include_issues), page=int(request.args.get('page', 1)), per_page=int(request.args.get('per_page', 10)), querystring=querystring) return jsonify(response)