示例#1
0
文件: questions.py 项目: RaHus/portal
def where_from_query_question(cls, rp):
    where = []
    query = rp.get('query', '').strip().lower()
    if not query:
        return where
    strict_queries = get_strict_query(query)

    if len(query.split(' ')) > 1 and not strict_queries:
        query = ','.join(['query:%s' % q for q in query.split(' ') if q.strip()])
    if not query.split(','):
        return where

    for type_name, type_queries in strict_queries.iteritems():
        same_type = []
        for query in type_queries:
            if type_name == 'tags':
                same_type.append(or_(Questions.tags.any(func.lower(Tag.text) == query)))
            elif type_name == 'users':
                same_type.append(Questions.user_id == query)
            elif type_name == 'query':
                different_type = [cls.text.ilike('%' + query + '%'),
                                  cls.answers.any(Answers.text.ilike('%' + query + '%'))]
                same_type.append(or_(*different_type))
        where.append(and_(*same_type))

    return where
示例#2
0
def user_where_from_query(rp):
    where = []
    query = rp.get('query', '').strip().lower()
    if not query:
        return where
    strict_queries = get_strict_query(query)

    if len(query.split(' ')) > 1 and not strict_queries:
        query = ','.join(['query:%s' % q for q in query.split(' ') if q.strip()])
    if not query.split(','):
        return where

    for type_name, type_queries in strict_queries.iteritems():
        same_type = []
        for query in type_queries:
            if type_name == 'tags':
                same_type.append(User.tags.any(func.lower(Tag.text) == query))
            elif type_name == 'type':
                same_type.append(User.roles_rel.any(and_(RoleXUser.role_name == query, RoleXUser.is_primary == True)))
            elif type_name == 'location':
                same_type.append(User.state == query)
            elif type_name == 'technical' and len(type_queries) == 1:
                if query == 'true':
                    same_type.append(User.is_technical == True)
                else:
                    same_type.append(User.is_technical.op('IS NOT')(True))
            elif type_name == 'companies':
                same_type.append(User.all_companies.any(func.lower(BaseCompany.name) == query))
            elif type_name == 'query':
                different_type = []
                for search_field in User.search_fields:
                    if 'class' in search_field:
                        if 'class' in query:
                            query = query.replace('alchemistclass', '').replace('class', '').strip().split(' ')[0]
                            try:
                                different_type.append(BaseCompany.alchemistclass == int(query))
                            except:
                                pass
                    else:
                        different_type.append(getattr(User, search_field).ilike('%' + query + '%'))
                for search_field in ['firstname', 'lastname', 'username', 'email', 'linkedin_email']:
                    different_type.append(getattr(User, search_field).ilike(query + '%'))
                different_type.append((User.firstname + ' ' + User.lastname).ilike('%' + query + '%'))
                different_type.append(User.tags.any(Tag.text.ilike('%' + query + '%')))
                different_type.append(User.all_companies.any(BaseCompany.name.ilike('%' + query + '%')))
                for bool_field in User.boolean_fields:
                    if rp.get(bool_field) or bool_field.split('_')[-1] in (query or ''):
                        different_type.append(getattr(User, bool_field) == True)
                same_type.append(or_(*different_type))
        where.append(and_(*same_type))

    return where
示例#3
0
文件: grid.py 项目: RaHus/portal
def where_from_query(request):
    where = []
    if hasattr(request, 'params'):
        rp = request.params
        query = rp.get('query', '').strip().lower()
    elif request.get('sessquery'):
        rp = request
        query = request.get('sessquery').strip().lower()
    else:
        query = ''
    if not query:
        return where
    strict_queries = get_strict_query(query)
    for type_name, type_queries in strict_queries.iteritems():
        same_type = []
        for query in type_queries:
            if type_name == 'tags':
                same_type.append(BaseCompany.tags.any(func.lower(Tag.text) == query))
            elif type_name == 'type':
                same_type.append(BaseCompany.companytype == get_company_typestr(query))
            elif type_name == 'class':
                same_type.append(BaseCompany.alchemistclass == int(query.strip()))
            elif type_name == 'round':
                same_type.append(BaseCompany.startup_lastraise == query)
            elif type_name == 'query':
                different_type = []
                for search_field in BaseCompany.search_fields:
                    if 'class' in search_field:
                        if 'class' in query:
                            query = query.replace('alchemistclass', '').replace('class', '').strip().split(' ')[0]
                            try:
                                different_type.append(BaseCompany.alchemistclass == int(query))
                            except:
                                pass
                    else:
                        different_type.append(getattr(BaseCompany, search_field).ilike('%' + query + '%'))
                different_type.append(BaseCompany.tags.any(Tag.text.ilike('%' + query + '%')))
                for bool_field in BaseCompany.boolean_fields:
                    if rp.get(bool_field) or bool_field.split('_')[-1] in (query or ''):
                        different_type.append(getattr(BaseCompany, bool_field) == True)
                same_type.append(or_(*different_type))
        where.append(and_(*same_type))
    return where