示例#1
0
文件: tests.py 项目: jiesicheng/hue
def test_substitute_variables():
  data = ['$greeting', dict(a='${where} $where')]
  assert_equal(['hi', dict(a='there there')],
    substitute_variables(data, dict(greeting='hi', where='there')))

  data = [None, 'foo', dict(a=None)]
  assert_equal(data, substitute_variables(data, dict()), 'Nothing to substitute')
示例#2
0
文件: tests.py 项目: gigfork/hue
def test_substitute_variables():
  data = ["$greeting", dict(a="${where} $where")]
  assert_equal(["hi", dict(a="there there")], 
    substitute_variables(data, dict(greeting="hi", where="there")))

  data = [None, "foo", dict(a=None)]
  assert_equal(data, substitute_variables(data, dict()), "Nothing to substitute")
示例#3
0
def test_substitute_variables():
  data = ["$greeting", dict(a="${where} $where")]
  assert_equal(["hi", dict(a="there there")], 
    substitute_variables(data, dict(greeting="hi", where="there")))

  data = [None, "foo", dict(a=None)]
  assert_equal(data, substitute_variables(data, dict()), "Nothing to substitute")
示例#4
0
def test_substitute_variables():
    data = ['$greeting', dict(a='${where} $where')]
    assert_equal(['hi', dict(a='there there')],
                 substitute_variables(data, dict(greeting='hi',
                                                 where='there')))

    data = [None, 'foo', dict(a=None)]
    assert_equal(data, substitute_variables(data, dict()),
                 'Nothing to substitute')
示例#5
0
文件: api.py 项目: cjwhust/hue
def execute(request, design_id=None):
    response = {'status': -1, 'message': ''}

    if request.method != 'POST':
        response['message'] = _('A POST request is required.')

    app_name = get_app_name(request)
    query_server = get_query_server_config(app_name)
    query_type = beeswax.models.SavedQuery.TYPES_MAPPING[app_name]
    design = safe_get_design(request, query_type, design_id)

    try:
        query_form = get_query_form(request)

        if query_form.is_valid():
            query_str = query_form.query.cleaned_data["query"]
            explain = request.GET.get('explain', 'false').lower() == 'true'
            design = save_design(request, query_form, query_type, design,
                                 False)

            if query_form.query.cleaned_data['is_parameterized']:
                # Parameterized query
                parameterization_form_cls = make_parameterization_form(
                    query_str)
                if parameterization_form_cls:
                    parameterization_form = parameterization_form_cls(
                        request.REQUEST, prefix="parameterization")

                    if parameterization_form.is_valid():
                        real_query = substitute_variables(
                            query_str, parameterization_form.cleaned_data)
                        query = HQLdesign(query_form, query_type=query_type)
                        query._data_dict['query']['query'] = real_query

                        try:
                            if explain:
                                return explain_directly(
                                    request, query, design, query_server)
                            else:
                                return execute_directly(
                                    request, query, design, query_server)

                        except Exception, ex:
                            db = dbms.get(request.user, query_server)
                            error_message, log = expand_exception(ex, db)
                            response['message'] = error_message
                            return HttpResponse(json.dumps(response),
                                                mimetype="application/json")
                    else:
                        response['errors'] = parameterization_form.errors
                        return HttpResponse(json.dumps(response),
                                            mimetype="application/json")

            # Non-parameterized query
            query = HQLdesign(query_form, query_type=query_type)
            if request.GET.get('explain', 'false').lower() == 'true':
                return explain_directly(request, query, design, query_server)
            else:
                return execute_directly(request, query, design, query_server)
        else:
示例#6
0
文件: views.py 项目: jriv96/hue
def _run_parameterized_query(request, design_id, explain):
    """
  Given a design and arguments to parameterize that design, runs the query.
  - explain is a boolean to determine whether to run as an explain or as an
  execute.

  This is an extra "step" in the flow from execute_query.
  """
    design = authorized_get_design(request, design_id, must_exist=True)

    # Reconstitute the form
    design_obj = beeswax.design.HQLdesign.loads(design.data)
    query_form = QueryForm()
    params = design_obj.get_query_dict()
    params.update(request.POST)

    databases = _get_db_choices(request)
    query_form.bind(params)
    query_form.query.fields["database"].choices = databases  # Could not do it in the form

    if not query_form.is_valid():
        raise PopupException(_("Query form is invalid: %s") % query_form.errors)

    query_str = query_form.query.cleaned_data["query"]
    app_name = get_app_name(request)
    query_server = get_query_server_config(app_name)
    query_type = SavedQuery.TYPES_MAPPING[app_name]

    parameterization_form_cls = make_parameterization_form(query_str)
    if not parameterization_form_cls:
        raise PopupException(_("Query is not parameterizable."))

    parameterization_form = parameterization_form_cls(request.REQUEST, prefix="parameterization")

    if parameterization_form.is_valid():
        real_query = substitute_variables(query_str, parameterization_form.cleaned_data)
        query = HQLdesign(query_form, query_type=query_type)
        query._data_dict["query"]["query"] = real_query
        try:
            if explain:
                return explain_directly(request, query, design, query_server)
            else:
                return execute_directly(request, query, query_server, design)
        except Exception, ex:
            db = dbms.get(request.user, query_server)
            error_message, log = expand_exception(ex, db)
            return render(
                "execute.mako",
                request,
                {
                    "action": reverse(get_app_name(request) + ":execute_query"),
                    "design": design,
                    "error_message": error_message,
                    "form": query_form,
                    "log": log,
                    "autocomplete_base_url": reverse(get_app_name(request) + ":autocomplete", kwargs={}),
                },
            )
示例#7
0
 def is_valid_parameterization(self, post_data):
   self.parameterization_form = self._parameterization_form(self.data)(post_data)
   if self.parameterization_form.is_valid():
     self.parameterization_data = self.parameterization_form.cleaned_data
     self.parameterized_data = substitute_variables(copy.deepcopy(self.data),
       self.parameterization_data)
     return True
   else:
     return False
示例#8
0
def _run_parameterized_query(request, design_id, explain):
  """
  Given a design and arguments to parameterize that design, runs the query.
  - explain is a boolean to determine whether to run as an explain or as an
  execute.

  This is an extra "step" in the flow from execute_query.
  """
  design = authorized_get_design(request, design_id, must_exist=True)

  # Reconstitute the form
  design_obj = beeswax.design.HQLdesign.loads(design.data)
  query_form = QueryForm()
  params = design_obj.get_query_dict()
  params.update(request.POST)

  databases = _get_db_choices(request)
  query_form.bind(params)
  query_form.query.fields['database'].choices = databases # Could not do it in the form

  if not query_form.is_valid():
    raise PopupException(_("Query form is invalid: %s") % query_form.errors)

  query_str = query_form.query.cleaned_data["query"]
  app_name = get_app_name(request)
  query_server = get_query_server_config(app_name)
  query_type = SavedQuery.TYPES_MAPPING[app_name]

  parameterization_form_cls = make_parameterization_form(query_str)
  if not parameterization_form_cls:
    raise PopupException(_("Query is not parameterizable."))

  parameterization_form = parameterization_form_cls(request.REQUEST, prefix="parameterization")

  if parameterization_form.is_valid():
    real_query = substitute_variables(query_str, parameterization_form.cleaned_data)
    query = HQLdesign(query_form, query_type=query_type)
    query._data_dict['query']['query'] = real_query
    try:
      if explain:
        return explain_directly(request, query, design, query_server)
      else:
        return execute_directly(request, query, query_server, design)
    except Exception, ex:
      db = dbms.get(request.user, query_server)
      error_message, log = expand_exception(ex, db)
      return render('execute.mako', request, {
        'action': reverse(get_app_name(request) + ':execute_query'),
        'design': design,
        'error_message': error_message,
        'form': query_form,
        'log': log,
        'autocomplete_base_url': reverse(get_app_name(request) + ':autocomplete', kwargs={}),
      })
示例#9
0
文件: api.py 项目: fhferreira/hue
def execute(request, query_id=None):
  response = {'status': -1, 'message': ''}

  if request.method != 'POST':
    response['message'] = _('A POST request is required.')

  app_name = get_app_name(request)
  query_server = get_query_server_config(app_name)
  query_type = beeswax.models.SavedQuery.TYPES_MAPPING[app_name]
  design = safe_get_design(request, query_type, query_id)

  try:
    query_form = get_query_form(request)

    if query_form.is_valid():
      query_str = query_form.query.cleaned_data["query"]
      explain = request.GET.get('explain', 'false').lower() == 'true'
      design = save_design(request, query_form, query_type, design, False)

      if query_form.query.cleaned_data['is_parameterized']:
        # Parameterized query
        parameterization_form_cls = make_parameterization_form(query_str)
        if parameterization_form_cls:
          parameterization_form = parameterization_form_cls(request.REQUEST, prefix="parameterization")

          if parameterization_form.is_valid():
            real_query = substitute_variables(query_str, parameterization_form.cleaned_data)
            query = HQLdesign(query_form, query_type=query_type)
            query._data_dict['query']['query'] = real_query

            try:
              if explain:
                return explain_directly(request, query, design, query_server)
              else:
                return execute_directly(request, query, design, query_server)

            except Exception, ex:
              db = dbms.get(request.user, query_server)
              error_message, log = expand_exception(ex, db)
              response['message'] = error_message
              return HttpResponse(json.dumps(response), mimetype="application/json")
          else:
            response['errors'] = parameterization_form.errors
            return HttpResponse(json.dumps(response), mimetype="application/json")

      # non-parameterized query
      query = HQLdesign(query_form, query_type=query_type)
      if request.GET.get('explain', 'false').lower() == 'true':
        return explain_directly(request, query, design, query_server)
      else:
        return execute_directly(request, query, design, query_server)
    else:
示例#10
0
文件: views.py 项目: yjkim/hue
def _run_parameterized_query(request, design_id, explain):
  """
  Given a design and arguments to parameterize that design, runs the query.
  - explain is a boolean to determine whether to run as an explain or as an
  execute.

  This is an extra "step" in the flow from execute_query.
  """
  design = authorized_get_design(request, design_id, must_exist=True)

  # Reconstitute the form
  design_obj = beeswax.design.HQLdesign.loads(design.data)
  query_form = QueryForm()
  params = design_obj.get_query_dict()
  params.update(request.POST)
  query_form.bind(params)
  assert query_form.is_valid()

  query_str = query_form.query.cleaned_data["query"]
  query_server = get_query_server_config(get_app_name(request))

  parameterization_form_cls = make_parameterization_form(query_str)
  if not parameterization_form_cls:
    raise PopupException(_("Query is not parameterizable."))

  parameterization_form = parameterization_form_cls(request.REQUEST, prefix="parameterization")

  if parameterization_form.is_valid():
    real_query = substitute_variables(query_str, parameterization_form.cleaned_data)
    query = HQLdesign(query_form)
    query._data_dict['query']['query'] = real_query
    try:
      if explain:
        return explain_directly(request, query, design, query_server)
      else:
        return execute_directly(request, query, query_server, design)
    except Exception, ex:
      db = dbms.get(request.user, query_server)
      error_message, log = expand_exception(ex, db)
      return render('execute.mako', request, {
        'action': reverse(get_app_name(request) + ':execute_query'),
        'design': design,
        'error_message': error_message,
        'form': query_form,
        'log': log,
        'autocomplete': json.dumps({}),
      })
示例#11
0
def _run_parameterized_query(request, design_id, explain):
  """
  Given a design and arguments to parameterize that design, runs the query.
  - explain is a boolean to determine whether to run as an explain or as an
  execute.

  This is an extra "step" in the flow from execute_query.
  """
  design = authorized_get_design(request, design_id, must_exist=True)

  # Reconstitute the form
  design_obj = beeswax.design.HQLdesign.loads(design.data)
  query_form = beeswax.forms.query_form()
  params = design_obj.get_query_dict()
  params.update(request.POST)
  query_form.bind(params)
  assert query_form.is_valid()

  query_str = _strip_trailing_semicolon(query_form.query.cleaned_data["query"])
  query_server = db_utils.get_query_server(query_form.query_servers.cleaned_data["server"])

  parameterization_form_cls = make_parameterization_form(query_str)
  if not parameterization_form_cls:
    raise PopupException(_("Query is not parameterizable."))

  parameterization_form = parameterization_form_cls(request.REQUEST, prefix="parameterization")
  if parameterization_form.is_valid():
    real_query = substitute_variables(query_str, parameterization_form.cleaned_data)
    query_msg = make_beeswax_query(request, real_query, query_form)
    try:
      if explain:
        return explain_directly(request, query_str, query_msg, design, query_server)
      else:
        return execute_directly(request, query_msg, query_server, design)
    except BeeswaxException, ex:
      error_message, log = expand_exception(ex, query_server)
      return render('execute.mako', request, {
        'action': urlresolvers.reverse(execute_query),
        'design': design,
        'error_message': error_message,
        'form': query_form,
        'log': log,
      })