示例#1
0
    def _build_return_value(self, schema, appstruct, query):
        """
        Return the streamed file object
        """
        all_ids = [elem[0] for elem in query]

        if not all_ids:
            msg = u"Il n'y a aucun élément à exporter"
            set_close_popup_response(self.request, msg)
            return self.request.response

        job = FileGenerationJob()
        job.set_owner(self.request.user.login.login)
        self.request.dbsession.add(job)
        self.request.dbsession.flush()
        celery_job = export_to_file.delay(
            job.id,
            'userdatas',
            all_ids,
            self.filename,
            self.file_format
        )

        logger.info(
            u"The Celery Task {0} has been delayed, its result "
            "sould be retrieved from the FileGenerationJob {1}".format(
                celery_job.id, job.id
            )
        )

        return HTTPFound(
            self.request.route_path('job', id=job.id, _query={'popup': 1})
        )
示例#2
0
    def _build_return_value(self, schema, appstruct, query):
        """
        Return the streamed file object
        """
        all_ids = [elem.id for elem in query]
        logger.debug("    + All_ids where collected : {0}".format(all_ids))
        service_ok, msg = check_alive()
        if not service_ok:
            if "popup" in self.request.GET:
                set_close_popup_response(self.request, error=msg)
                return self.request.response
            else:
                self.request.session.flash(msg, 'error')
                return HTTPFound(self.request.referrer)

        logger.debug("    + In the GlobalInvoicesCsvView._build_return_value")
        job = FileGenerationJob()
        job.set_owner(self.request.user.login.login)
        self.request.dbsession.add(job)
        self.request.dbsession.flush()
        logger.debug("    + The job {job.id} was initialized".format(job=job))
        logger.debug("    + Delaying the export_to_file task")
        celery_job = export_to_file.delay(job.id, 'invoices', all_ids,
                                          self.filename, self.file_format)
        logger.info(u"The Celery Task {0} has been delayed, its result "
                    "sould be retrieved from the FileGenerationJob {1}".format(
                        celery_job.id, job.id))

        return HTTPFound(
            self.request.route_path('job', id=job.id, _query={'popup': 1}))
示例#3
0
    def _build_return_value(self, schema, appstruct, query):
        """
        Return the streamed file object
        """
        all_ids = [elem.id for elem in query]
        logger.debug("    + All_ids where collected : {0}".format(all_ids))
        service_ok, msg = check_alive()
        if not service_ok:
            if "popup" in self.request.GET:
                set_close_popup_response(self.request, error=msg)
                return self.request.response
            else:
                self.request.session.flash(msg, 'error')
                return HTTPFound(self.request.referrer)

        logger.debug("    + In the GlobalInvoicesCsvView._build_return_value")
        job = FileGenerationJob()
        job.set_owner(self.request.user.login.login)
        self.request.dbsession.add(job)
        self.request.dbsession.flush()
        logger.debug("    + The job {job.id} was initialized".format(job=job))
        logger.debug("    + Delaying the export_to_file task")
        celery_job = export_to_file.delay(
            job.id,
            'invoices',
            all_ids,
            self.filename,
            self.file_format
        )
        logger.info(
            u"The Celery Task {0} has been delayed, its result "
            "sould be retrieved from the FileGenerationJob {1}".format(
                celery_job.id, job.id
            )
        )

        return HTTPFound(
            self.request.route_path('job', id=job.id, _query={'popup': 1})
        )
示例#4
0
    def add_popup_response(self):
        """
        Add custom response string to the request :
            Pop message
            or
            Refresh parent page

        regarding the options
        if
        a message was set in the queue, it's shown with a refresh link
        else
        we fully reload the page

        """
        self.logger.debug("Building a popup_close response")
        msg = self.request.session.pop_flash(queue="")
        if msg:
            set_close_popup_response(
                self.request,
                msg[0],
            )
        else:
            set_close_popup_response(self.request, force_reload=True)
示例#5
0
class BaseFormView(FormView):
    """
        Allows to easily build form views

        **Attributes that you may override**

        .. attribute:: add_template_vars

            List of attribute names (or properties) that will be added to the
            result dict object and that you will be able to use in your
            templates (('title',) by default)

        .. attribute:: buttons

            list or tupple of deform.Button objects (or strings), only a submit
            button is added by default

        .. attribute:: schema

            colander form schema to be used to render our form

        .. attribute:: form_class

            form class to use (deform.Form by default)

        **Methods that your should implement**

        .. method:: <button_name>_success(appstruct)

            Is called when the form has been submitted and validated with
            the button called button_name.

            *appstruct* : the colander validated datas (a dict)

        **Methods that you may implement**

        .. method:: before(form)

            Allows to execute some code before the validation process
            e.g: add datas to the form that will be rendered
            Will typically be overrided in an edit form.

            *form* : the form object that's used in our view

        .. method:: <button_name>_failure(e)

            Is called when the form has been submitted the button called
            button_name and the datas have not been validated.

            *e* : deform.exception.ValidationFailure that has
                been raised by colander

        .. code-block:: python

            class MyFormView(BaseFormView):
                title = u"My form view"
                schema = MyColanderSchema

                def before(self, form):
                    form.set_appstruct(self.request.context.appstruct())

                def submit_success(self, appstruct):
                    # Handle the filtered appstruct
    """
    title = None
    add_template_vars = ()
    buttons = (submit_btn, )
    use_csrf_token = False

    def __init__(self, request):
        FormView.__init__(self, request)
        self.context = request.context
        self.dbsession = self.request.dbsession
        self.session = self.request.session
        self.logger = logging.getLogger("autonomie.views.__init__")
        if has_permission('manage', request.context, request):
            tinymce.need()

    def __call__(self):
        if self.use_csrf_token and 'csrf_token' not in self.schema:
            self.schema.children.append(CSRFSchema()['csrf_token'])
        try:
            result = FormView.__call__(self)
        except colander.Invalid, exc:
            self.logger.exception(
                "Exception while rendering form "
                "'%s': %s - struct received: %s", self.title, exc,
                self.appstruct())
            raise
        if isinstance(result, dict):
            result.update(self._more_template_vars())

        if "popup" in self.request.GET:
            if isinstance(result, HTTPFound):
                msg = self.request.session.pop_flash(queue="")
                if msg:
                    self.logger.debug("We've got an HTTPFound result")
                    set_close_popup_response(self.request, msg[0])
                    return self.request.response
        return result