def form_valid(self, form, *args, **kwargs): # all we've done is validate that the form is validly formed. # This has nothing to do with the actual data import being valid. sourcefile = self.request.FILES['sourcefile'] post_data = self.request.POST.copy() meta_from_filename = True if 'type' in post_data and 'attributes' in post_data: meta_from_filename = False importer = TablibImporter(sourcefile, post_data, meta_from_filename) valid, errors = importer.validate() if not valid: error_dicts = [e.to_json() for e in errors] return HttpResponseBadRequest(json.dumps(error_dicts), content_type='application/json') if self.request.is_ajax(): save_import.apply_async((importer.deferred(), self.request.user.email)) return HttpResponse(u'OK') else: #save = importer.save() save = save_import.apply_async((importer.deferred(), self.request.user.email)) if save: return redirect('import_success') else: return HttpResponseServerError(_(u'Save failed.'))
def save_import(deferred, email): from openbudgets.apps.transport.incoming.importers.tablibimporter import \ TablibImporter importer = TablibImporter() saved = importer.resolve(deferred).save() sender = settings.EMAIL_HOST_USER recipient = email container = deferred['container'] name = container.get('name', '') if not name: name = get_parser(deferred['class']).container_model._meta.verbose_name + ' of ' entity = container.get('entity', None) period = container.get('period_start') if entity: try: entity_name = getattr(entity, 'name') except AttributeError: entity_name = entity.get('name') name += entity_name else: name += 'unknown' name += ' for ' + period if saved: subject = _('[OPEN BUDGETS]: Data import success') message = _('The data import succeeded for ' + name) else: subject = _('[OPEN BUDGETS]: Data import failure') message = _('The data import failed for ' + name) return send_mail(subject, message, sender, [recipient], fail_silently=True)