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}) )
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}))
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}) )
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)
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