Ejemplo n.º 1
0
def search(request):
    response = {}

    collection = json.loads(request.POST.get('collection', '{}'))
    query = json.loads(request.POST.get('query', '{}'))
    facet = json.loads(request.POST.get('facet', '{}'))
    cluster = request.POST.get('cluster', '""')

    query['download'] = 'download' in request.POST
    fetch_result = 'fetch_result' in request.POST

    if collection:
        try:
            if fetch_result:
                response = get_engine(request.user,
                                      collection,
                                      facet,
                                      cluster=cluster).fetch_result(
                                          collection, query, facet)
            else:
                response = get_engine(request.user,
                                      collection,
                                      facet,
                                      cluster=cluster).query(
                                          collection, query, facet)
        except RestException, e:
            response.update(extract_solr_exception_message(e))
        except Exception as e:
            raise PopupException(e, title=_('Error while accessing Solr'))

            response['error'] = force_unicode(e)
Ejemplo n.º 2
0
  def wrapper(*args, **kwargs):
    response = {}

    try:
      return f(*args, **kwargs)
    except SessionExpired as e:
      response['status'] = -2
    except QueryExpired as e:
      if ENABLE_NOTEBOOK_2.get():
        response['query_status'] = {'status': 'expired'}
        response['status'] = 0
      else:
        response['status'] = -3
      if e.message and isinstance(e.message, basestring):
        response['message'] = e.message
    except AuthenticationRequired as e:
      response['status'] = 401
      if e.message and isinstance(e.message, basestring):
        response['message'] = e.message
    except ValidationError as e:
      LOG.exception('Error validation %s' % f)
      response['status'] = -1
      response['message'] = e.message
    except OperationTimeout as e:
      response['status'] = -4
    except FilesystemException as e:
      response['status'] = 2
      response['message'] = e.message or 'Query history not found'
    except QueryError as e:
      LOG.exception('Error running %s' % f.__name__)
      response['status'] = 1
      response['message'] = smart_unicode(e)
      if response['message'].index("max_row_size"):
        size = re.search(r"(\d+.?\d*) (.B)", response['message'])
        if size and size.group(1):
          response['help'] = {
            'setting': {
              'name': 'max_row_size',
              'value': str(int(_closest_power_of_2(_to_size_in_bytes(size.group(1), size.group(2)))))
            }
          }
      if e.handle:
        response['handle'] = e.handle
      if e.extra:
        response.update(e.extra)
    except OperationNotSupported as e:
      response['status'] = 5
      response['message'] = e.message
    except RestException as e:
      message = extract_solr_exception_message(e)
      response['status'] = 1
      response['message'] = message.get('error')
    except Exception as e:
      LOG.exception('Error running %s' % f.__name__)
      response['status'] = -1
      response['message'] = smart_unicode(e)
    finally:
      if response:
        return JsonResponse(response)
Ejemplo n.º 3
0
                            str(
                                int(
                                    _closest_power_of_2(
                                        _to_size_in_bytes(
                                            size.group(1), size.group(2)))))
                        }
                    }
            if e.handle:
                response['handle'] = e.handle
            if e.extra:
                response.update(e.extra)
        except OperationNotSupported, e:
            response['status'] = 5
            response['message'] = e.message
        except RestException, e:
            message = extract_solr_exception_message(e)
            response['status'] = 1
            response['message'] = message.get('error')
        except Exception, e:
            LOG.exception('Error running %s' % func.__name__)
            response['status'] = -1
            response['message'] = smart_unicode(e)
        finally:
            if response:
                return JsonResponse(response)

    return decorator


def _closest_power_of_2(number):
    return math.pow(2, math.ceil(math.log(number, 2)))