def clone_design(request, design_id): """Clone a design belonging to any user""" design = authorized_get_design(request, design_id) if design is None: LOG.error('Cannot clone non-existent design %s' % (design_id, )) return list_designs(request) copy = design.clone() copy_doc = design.doc.get().copy() copy.name = design.name + ' (copy)' copy.owner = request.user copy.save() copy_doc.owner = copy.owner copy_doc.name = copy.name copy_doc.save() copy.doc.add(copy_doc) messages.info(request, _('Copied design: %(name)s') % {'name': design.name}) return format_preserving_redirect( request, reverse(get_app_name(request) + ':execute_design', kwargs={'design_id': copy.id}))
def execute_query(request, design_id=None): """ View function for executing an arbitrary query. It understands the optional GET/POST params: on_success_url If given, it will be displayed when the query is successfully finished. Otherwise, it will display the view query results page by default. """ authorized_get_design(request, design_id) error_message = None form = QueryForm() action = request.path log = None design = safe_get_design(request, models.SavedQuery.HQL, design_id) on_success_url = request.REQUEST.get('on_success_url') if request.method == 'POST': form.bind(request.POST) to_explain = request.POST.has_key('button-explain') to_submit = request.POST.has_key('button-submit') # Always validate the saveform, which will tell us whether it needs explicit saving if form.is_valid(): to_save = form.saveform.cleaned_data['save'] to_saveas = form.saveform.cleaned_data['saveas'] if to_saveas and not design.is_auto: # Save As only affects a previously saved query design = design.clone() if to_submit or to_save or to_saveas or to_explain: explicit_save = to_save or to_saveas design = save_design(request, form, models.SavedQuery.HQL, design, explicit_save) action = urlresolvers.reverse(execute_query, kwargs=dict(design_id=design.id)) if to_explain or to_submit: query_str = form.query.cleaned_data["query"] query_server = get_query_server(form.query_servers.cleaned_data["server"]) # (Optional) Parameterization. parameterization = get_parameterization(request, query_str, form, design, to_explain) if parameterization: return parameterization try: query = HQLdesign(form) if to_explain: return explain_directly(request, query, design, query_server) else: notify = form.query.cleaned_data.get('email_notify', False) return execute_directly(request, query, query_server, design, on_success_url=on_success_url, notify=notify) except BeeswaxException, ex: print ex.errorCode print ex.SQLState db = dbms.get(request.user, query_server) error_message, log = expand_exception(ex, db)
def clone_design(request, design_id): """Clone a design belonging to any user""" design = authorized_get_design(request, design_id) if design is None: LOG.error('Cannot clone non-existent design %s' % (design_id,)) return list_designs(request) copy = design.clone(request.user) messages.info(request, _('Copied design: %(name)s') % {'name': design.name}) return format_preserving_redirect(request, reverse(get_app_name(request) + ':execute_design', kwargs={'design_id': copy.id}))
def clone_design(request, design_id): """Clone a design belonging to any user""" design = authorized_get_design(request, design_id) if design is None: LOG.error('Cannot clone non-existent design %s' % (design_id,)) return list_designs(request) copy = design.clone() copy.name = design.name + ' (copy)' copy.owner = request.user copy.save() messages.info(request, _('Copied design: %(name)s') % {'name': design.name}) return format_preserving_redirect( request, urlresolvers.reverse(execute_query, kwargs={'design_id': copy.id}))
def clone_design(request, design_id): """Clone a design belonging to any user""" try: design = models.SavedQuery.get(design_id) except models.SavedQuery.DoesNotExist: LOG.error('Cannot clone non-existent design %s' % (design_id,)) return list_designs(request) copy = design.clone() copy.name = design.name + ' (copy)' copy.owner = request.user copy.save() request.flash.put('Copied design: %s' % (design.name,)) return format_preserving_redirect( request, urlresolvers.reverse(execute_query, kwargs={'design_id': copy.id}))
def clone_design(request, design_id): """Clone a design belonging to any user""" design = authorized_get_design(request, design_id) if design is None: LOG.error("Cannot clone non-existent design %s" % (design_id,)) return list_designs(request) copy = design.clone() copy.name = design.name + " (copy)" copy.owner = request.user copy.save() messages.info(request, _("Copied design: %(name)s") % {"name": design.name}) return format_preserving_redirect( request, reverse(get_app_name(request) + ":execute_query", kwargs={"design_id": copy.id}) )
def clone_design(request, design_id): """Clone a design belonging to any user""" design = authorized_get_design(request, design_id) if design is None: LOG.error("Cannot clone non-existent design %s" % (design_id,)) return list_designs(request) copy = design.clone(request.user) copy.save() copy_doc = Document.objects.link(copy, owner=copy.owner, name=copy.name, description=copy.desc, extra=copy.type) messages.info(request, _("Copied design: %(name)s") % {"name": design.name}) return format_preserving_redirect( request, reverse(get_app_name(request) + ":execute_design", kwargs={"design_id": copy.id}) )
def clone_design(request, design_id): """Clone a design belonging to any user""" design = authorized_get_design(request, design_id) if design is None: LOG.error('Cannot clone non-existent design %s' % (design_id,)) return list_designs(request) copy = design.clone(request.user) copy.save() copy_doc = Document.objects.link(copy, owner=copy.owner, name=copy.name, description=copy.desc, extra=copy.type) messages.info(request, _('Copied design: %(name)s') % {'name': design.name}) return format_preserving_redirect(request, reverse(get_app_name(request) + ':execute_design', kwargs={'design_id': copy.id}))
def execute_query(request, design_id=None): """ View function for executing an arbitrary query. It understands the optional GET/POST params: on_success_url If given, it will be displayed when the query is successfully finished. Otherwise, it will display the view query results page by default. """ authorized_get_design(request, design_id) error_message = None form = QueryForm() action = request.path log = None app_name = get_app_name(request) query_type = SavedQuery.TYPES_MAPPING[app_name] design = safe_get_design(request, query_type, design_id) on_success_url = request.REQUEST.get('on_success_url') query_server = get_query_server_config(app_name) db = dbms.get(request.user, query_server) databases = _get_db_choices(request) if request.method == 'POST': form.bind(request.POST) form.query.fields['database'].choices = databases # Could not do it in the form to_explain = request.POST.has_key('button-explain') to_submit = request.POST.has_key('button-submit') # Always validate the saveform, which will tell us whether it needs explicit saving if form.is_valid(): to_save = form.saveform.cleaned_data['save'] to_saveas = form.saveform.cleaned_data['saveas'] if to_saveas and not design.is_auto: # Save As only affects a previously saved query design = design.clone() if to_submit or to_save or to_saveas or to_explain: explicit_save = to_save or to_saveas design = save_design(request, form, query_type, design, explicit_save) action = reverse(app_name + ':execute_query', kwargs=dict(design_id=design.id)) if to_explain or to_submit: query_str = form.query.cleaned_data["query"] # (Optional) Parameterization. parameterization = get_parameterization(request, query_str, form, design, to_explain) if parameterization: return parameterization try: query = HQLdesign(form, query_type=query_type) if to_explain: return explain_directly(request, query, design, query_server) else: download = request.POST.has_key('download') return execute_directly(request, query, query_server, design, on_success_url=on_success_url, download=download) except Exception, ex: error_message, log = expand_exception(ex, db)
def execute_query(request, design_id=None): """ View function for executing an arbitrary query. It understands the optional GET/POST params: on_success_url If given, it will be displayed when the query is successfully finished. Otherwise, it will display the view query results page by default. """ error_message = None form = beeswax.forms.query_form() action = request.path log = None design = safe_get_design(request, models.SavedQuery.HQL, design_id) on_success_url = request.REQUEST.get('on_success_url') # Use a loop structure to allow the use of 'break' to get out for _ in range(1): if request.method == 'POST': form.bind(request.POST) to_explain = request.POST.has_key('button-explain') to_submit = request.POST.has_key('button-submit') # Always validate the saveform, which will tell us whether it needs explicit saving if not form.saveform.is_valid(): break to_save = form.saveform.cleaned_data['save'] to_saveas = form.saveform.cleaned_data['saveas'] if to_saveas and not design.is_auto: # Save As only affects a previously saved query design = design.clone() if to_submit or to_save or to_saveas or to_explain: explicit_save = to_save or to_saveas design = save_design(request, form, models.SavedQuery.HQL, design, explicit_save) action = urlresolvers.reverse(execute_query, kwargs=dict(design_id=design.id)) # We're not going to process the form. Simply re-render it. if not to_explain and not to_submit or not form.is_valid(): break query_str = _strip_trailing_semicolon(form.query.cleaned_data["query"]) notify = form.query.cleaned_data.get('email_notify', False) # (Optional) Parameterization. parameterization = get_parameterization(request, query_str, form.query, design, to_explain) if parameterization: return parameterization query_msg = make_beeswax_query(request, query_str, form) try: if to_explain: return explain_directly(request, query_str, query_msg, design) else: return execute_directly(request, query_msg, design, on_success_url=on_success_url, notify=notify) except BeeswaxException, ex: error_message, log = expand_exception(ex) # Fall through to re-render the execute form. else: # GET request if design.id is not None: data = beeswax.design.HQLdesign.loads(design.data).get_query_dict() form.bind(data) form.saveform.set_data(design.name, design.desc) else: # New design form.bind()
if request.method == 'POST': form.bind(request.POST) form.query.fields['database'].choices = databases # Could not do it in the form to_explain = request.POST.has_key('button-explain') to_submit = request.POST.has_key('button-submit') # Always validate the saveform, which will tell us whether it needs explicit saving if form.is_valid(): to_save = form.saveform.cleaned_data['save'] to_saveas = form.saveform.cleaned_data['saveas'] if to_saveas and not design.is_auto: # Save As only affects a previously saved query design = design.clone() if to_submit or to_save or to_saveas or to_explain: explicit_save = to_save or to_saveas if explicit_save: request.info(_('Query saved!')) design = save_design(request, form, query_type, design, explicit_save) action = reverse(app_name + ':execute_query', kwargs={'design_id': design.id}) if to_explain or to_submit: query_str = form.query.cleaned_data["query"] # (Optional) Parameterization. parameterization = get_parameterization(request, query_str, form, design, to_explain) if parameterization: return parameterization