def exporters(self): exporters = [] responses = register_data_exporters.send(self.request.event) for ex in sorted([response(self.request.event, self.request.organizer) for r, response in responses], key=lambda ex: str(ex.verbose_name)): ex._serializer = JobRunSerializer(exporter=ex) exporters.append(ex) return exporters
def exporters(self): exporters = [] responses = register_data_exporters.send(self.request.event) for receiver, response in responses: ex = response(self.request.event) if self.request.GET.get( "identifier" ) and ex.identifier != self.request.GET.get("identifier"): continue # Use form parse cycle to generate useful defaults test_form = ExporterForm(data=self.request.GET, prefix=ex.identifier) test_form.fields = ex.export_form_fields test_form.is_valid() initial = { k: v for k, v in test_form.cleaned_data.items() if ex.identifier + "-" + k in self.request.GET } ex.form = ExporterForm( data=(self.request.POST if self.request.method == 'POST' else None), prefix=ex.identifier, initial=initial) ex.form.fields = ex.export_form_fields exporters.append(ex) return exporters
def export(event, fileid, provider, form_data): event = Event.objects.current.get(identity=event) file = CachedFile.objects.get(id=fileid) responses = register_data_exporters.send(event) for receiver, response in responses: ex = response(event) if ex.identifier == provider: file.filename, file.type, data = ex.render(form_data) file.file.save(cachedfile_name(file, file.filename), ContentFile(data)) file.save()
def exporters(self): exporters = [] responses = register_data_exporters.send(self.request.event) for receiver, response in responses: ex = response(self.request.event) ex.form = forms.Form(data=( self.request.POST if self.request.method == 'POST' else None)) ex.form.fields = ex.export_form_fields exporters.append(ex) return exporters
def exporters(self): exporters = [] responses = register_data_exporters.send(self.request.event) for receiver, response in responses: ex = response(self.request.event) ex.form = ExporterForm( data=(self.request.POST if self.request.method == 'POST' else None) ) ex.form.fields = ex.export_form_fields exporters.append(ex) return exporters
def export(event: str, fileid: str, provider: str, form_data: Dict[str, Any]) -> None: event = Event.objects.get(id=event) file = CachedFile.objects.get(id=fileid) with language(event.settings.locale): responses = register_data_exporters.send(event) for receiver, response in responses: ex = response(event) if ex.identifier == provider: file.filename, file.type, data = ex.render(form_data) file.file.save(cachedfile_name(file, file.filename), ContentFile(data)) file.save()
def export(event: Event, fileid: str, provider: str, form_data: Dict[str, Any]) -> None: file = CachedFile.objects.get(id=fileid) with language(event.settings.locale), override(event.settings.timezone): responses = register_data_exporters.send(event) for receiver, response in responses: ex = response(event) if ex.identifier == provider: d = ex.render(form_data) if d is None: raise ExportError( ugettext('Your export did not contain any data.')) file.filename, file.type, data = d file.file.save(cachedfile_name(file, file.filename), ContentFile(data)) file.save() return file.pk
def handle(self, *args, **options): try: o = Organizer.objects.get(slug=options['organizer_slug'][0]) except Organizer.DoesNotExist: self.stderr.write(self.style.ERROR('Organizer not found.')) sys.exit(1) with scope(organizer=o): try: e = o.events.get(slug=options['event_slug'][0]) except Event.DoesNotExist: self.stderr.write(self.style.ERROR('Event not found.')) sys.exit(1) pbar = tqdm(total=100) def report_status(val): pbar.update(round(val, 2) - pbar.n) with language(e.settings.locale), override(e.settings.timezone): responses = register_data_exporters.send(e) for receiver, response in responses: ex = response(e, report_status) if ex.identifier == options['export_provider'][0]: params = json.loads(options.get('parameters') or '{}') with open(options['output_file'][0], 'wb') as f: try: ex.render(form_data=params, output_file=f) except TypeError: self.stderr.write( self.style.WARNING( 'Provider does not support direct file writing, need to buffer export in memory.' )) d = ex.render(form_data=params) if d is None: self.stderr.write( self.style.ERROR('Empty export.')) sys.exit(2) f.write(d[2]) sys.exit(0) pbar.close() self.stderr.write(self.style.ERROR('Export provider not found.')) sys.exit(1)
def export(self, event: Event, fileid: str, provider: str, form_data: Dict[str, Any]) -> None: def set_progress(val): if not self.request.called_directly: self.update_state(state='PROGRESS', meta={'value': val}) file = CachedFile.objects.get(id=fileid) with language(event.settings.locale), override(event.settings.timezone): responses = register_data_exporters.send(event) for receiver, response in responses: ex = response(event, set_progress) if ex.identifier == provider: d = ex.render(form_data) if d is None: raise ExportError( gettext('Your export did not contain any data.')) file.filename, file.type, data = d file.file.save(cachedfile_name(file, file.filename), ContentFile(data)) file.save() return file.pk
def handle(self, *args, **options): try: o = Organizer.objects.get(slug=options['organizer_slug']) except Organizer.DoesNotExist: self.stderr.write(self.style.ERROR('Organizer not found.')) sys.exit(1) locale = options.get("locale", None) timezone = pytz.timezone( options['timezone']) if options.get('timezone') else None with scope(organizer=o): if options['event_slug']: try: e = o.events.get(slug=options['event_slug']) except Event.DoesNotExist: self.stderr.write(self.style.ERROR('Event not found.')) sys.exit(1) if not locale: locale = e.settings.locale if not timezone: timezone = e.settings.timezone signal_result = register_data_exporters.send(e) else: e = o.events.all() if options['event_slugs']: e = e.filter(slug__in=options['event_slugs']) not_found = set(options['event_slugs']).difference( event.slug for event in e) if not_found: self.stderr.write( self.style.ERROR( 'The following events were not found: {}'. format(", ".join(not_found)))) sys.exit(1) if not e.exists(): self.stderr.write(self.style.ERROR('No events found.')) sys.exit(1) if not locale: locale = e.first().settings.locale self.stderr.write( self.style.WARNING( "Guessing locale '{}' based on event '{}'.".format( locale, e.first().slug))) if not timezone: timezone = e.first().settings.timezone self.stderr.write( self.style.WARNING( "Guessing timezone '{}' based on event '{}'.". format(timezone, e.first().slug))) signal_result = register_multievent_data_exporters.send(o) pbar = tqdm(total=100) def report_status(val): pbar.update(round(val, 2) - pbar.n) with language(locale), override(timezone): for receiver, response in signal_result: ex = response(e, o, report_status) if ex.identifier == options['export_provider']: params = json.loads(options.get('parameters') or '{}') with open(options['output_file'], 'wb') as f: try: ex.render(form_data=params, output_file=f) except TypeError: self.stderr.write( self.style.WARNING( 'Provider does not support direct file writing, need to buffer export in memory.' )) d = ex.render(form_data=params) if d is None: self.stderr.write( self.style.ERROR('Empty export.')) sys.exit(2) f.write(d[2]) sys.exit(0) pbar.close() self.stderr.write(self.style.ERROR('Export provider not found.')) sys.exit(1)