Пример #1
0
    def post(self, request):
        sql = request.POST.get("sql")
        action = request.POST.get("action", "")
        existing_query_id = url_get_query_id(request)

        if existing_query_id:
            query = get_object_or_404(
                Query, pk=existing_query_id, created_by_user=self.request.user
            )
        else:
            query = Query(sql=sql, title="Playground", connection=request.POST.get("connection"))

        if action == "save":
            play_sql, _ = PlaygroundSQL.objects.get_or_create(
                sql=sql, created_by_user=request.user
            )
            play_sql.save()

            if existing_query_id:
                redirect_url = reverse(
                    "explorer:query_detail",
                    kwargs={"query_id": existing_query_id},
                )
            else:
                redirect_url = reverse("explorer:query_create")

            query_params = (("play_id", play_sql.id),)
            return redirect(redirect_url + f"?{urlencode(query_params)}")

        elif action == "run":
            query.params = url_get_params(request)
            rows = url_get_rows(request)
            return self.render_with_sql(request, query, run_query=True, rows=rows)

        elif action == "fetch-page":
            query.params = url_get_params(request)
            rows = url_get_rows(request)
            page = url_get_page(request)
            return self.render_with_sql(request, query, run_query=True, rows=rows, page=page)

        elif action == "share":
            play_sql, _ = PlaygroundSQL.objects.get_or_create(
                sql=sql, created_by_user=request.user
            )
            play_sql.save()
            return HttpResponseRedirect(f"{reverse('explorer:share_query')}?play_id={play_sql.id}")

        else:
            return HttpResponse(f"Unknown form action: {action}", 400)
Пример #2
0
    def get_instance_and_form(request, query_id, play_sql=None):
        query = get_object_or_404(Query, pk=query_id, created_by_user=request.user)
        query.params = url_get_params(request)
        form = QueryForm(request.POST if len(request.POST) > 0 else None, instance=query)

        if play_sql:
            form.initial["sql"] = play_sql.sql

        return query, form
Пример #3
0
    def post(self, request):
        sql = request.POST.get('sql')
        action = request.POST.get('action', '')
        existing_query_id = url_get_query_id(request)

        if action.startswith("download"):
            download_format = action.split('-')[1]
            query_params = (('sql', sql), ('format', download_format))
            return HttpResponseRedirect(
                reverse('explorer:download_sql') +
                f"?{urlencode(query_params)}")

        if existing_query_id:
            query = get_object_or_404(Query,
                                      pk=existing_query_id,
                                      created_by_user=self.request.user)
        else:
            query = Query(sql=sql,
                          title="Playground",
                          connection=request.POST.get('connection'))

        if action == 'save':
            play_sql, _ = PlaygroundSQL.objects.get_or_create(
                sql=sql, created_by_user=request.user)
            play_sql.save()

            if existing_query_id:
                redirect_url = reverse(
                    'explorer:query_detail',
                    kwargs={"query_id": existing_query_id},
                )
            else:
                redirect_url = reverse('explorer:query_create')

            query_params = (("play_id", play_sql.id), )
            return redirect(redirect_url + f"?{urlencode(query_params)}")

        elif action in {'run', 'fetch-page'}:
            query.params = url_get_params(request)
            response = self.render_with_sql(request,
                                            query,
                                            run_query=True,
                                            log=True)

            return response

        else:
            return HttpResponse(f"Unknown form action: {action}", 400)
Пример #4
0
def _export(request, query, download=True):
    format_ = request.GET.get('format', 'csv')
    exporter_class = get_exporter_class(format_)
    query.params = url_get_params(request)
    delim = request.GET.get('delim')
    exporter = exporter_class(query=query, user=request.user)
    try:
        output = exporter.get_output(delim=delim)
    except DatabaseError as e:
        msg = "Error executing query %s: %s" % (query.title, e)
        return HttpResponse(msg, status=500)
    response = HttpResponse(output, content_type=exporter.content_type)
    if download:
        response['Content-Disposition'] = 'attachment; filename="%s"' % (
            exporter.get_filename())
    return response