def approvals_import(): if request.method == 'POST': fp = request.files['file_name'] if fp: mime = mime_from_filepointer(fp) if mime == 'text/plain': try: priority = bool(request.form.getlist("priority")) approvals = extract_approvals(fp, priority) num_deleted = 0 if request.form.getlist("delete_old"): # only remove sticky entries because num_deleted = models.Approval.query.filter(and_( models.Approval.sticky == True, models.Approval.priority == priority )).delete() # NOQA # add approvals db.session.add_all(approvals) db.session.commit() flash('Import OK: {0} Einträge gelöscht, {1} Eintrage hinzugefügt' .format(num_deleted, len(approvals)), 'success') except Exception as e: # csv, index or db could go wrong here.. db.session.rollback() flash('Konnte Einträge nicht speichern, bitte neu einlesen: {0}'.format(e), 'negative') return dict(form=forms.TagForm()) flash('Falscher Dateitype {0}, bitte nur Text oder CSV Dateien verwenden'.format(mime), 'danger') return redirect(url_for('approvals')) flash('Datei konnte nicht gelesen werden', 'negative') return redirect(url_for('approvals'))
def approvals_import(): if request.method == 'POST': fp = request.files['file_name'] if fp: mime = mime_from_filepointer(fp) if mime == 'text/plain': try: # strip all known endings ('\r', '\n', '\r\n') and remove empty lines # and duplicates stripped_lines = ( line.decode('utf-8', 'ignore').rstrip('\r').rstrip('\n').rstrip('\r').strip() for line in fp.readlines() ) filtered_lines = ( line for line in stripped_lines if line ) filecontent = csv.reader(filtered_lines, delimiter=';') # XXX: hardcoded? priority = bool(request.form.getlist("priority")) num_deleted = 0 if request.form.getlist("delete_old"): # only remove sticky entries because num_deleted = models.Approval.query.filter(and_( models.Approval.sticky == True, models.Approval.priority == priority )).delete() # NOQA # create list of sticky Approvals, so that background jobs don't remove them approvals = [ models.Approval( tag=line[0], percent=int(line[1]), sticky=True, priority=priority ) for line in filecontent ] db.session.add_all(approvals) db.session.commit() flash('Import OK: {0} Einträge gelöscht, {1} Eintrage hinzugefügt' .format(num_deleted, len(approvals)), 'success') except Exception as e: # csv, index or db could go wrong here.. db.session.rollback() flash('Konnte Einträge nicht speichern, bitte neu einlesen: {0}'.format(e), 'negative') return redirect(url_for('approvals')) flash('Falscher Dateitype {0}, bitte nur Text oder CSV Dateien verwenden'.format(mime), 'danger') return None flash('Datei konnte nicht gelesen werden', 'negative') return None
def send(): """Send last backup to admins via email.""" files = get_all_backups() if files: last = list(sorted(files, reverse=True))[0] with open(last, "rb") as fp: msg = Message( sender=app.config["PRIMARY_MAIL"], recipients=app.config["ADMIN_MAILS"], subject="[Sprachenzentrum] Backup {}".format(last), charset="utf-8", ) mime = mime_from_filepointer(fp) data = fp.read() msg.attach(last, mime, data) mail.send(msg)
def notifications(): form = forms.NotificationForm() if form.validate_on_submit(): # get attachement data once at_mime = '' at_data = None at_name = '' if form.get_attachments(): # detect MIME data since browser tend to send messy data, # e.g. https://bugzilla.mozilla.org/show_bug.cgi?id=373621 at_mime = [] at_data = [] at_name = [] for att in form.get_attachments(): if att: at_mime.append(mime_from_filepointer(att)) at_data.append(att.read()) at_name.append(att.filename) try: for recipient in form.get_recipients(): msg = Message( sender=form.get_sender(), recipients=[recipient], subject=form.get_subject(), body=form.get_body(), cc=form.get_cc(), bcc=form.get_bcc(), charset='utf-8' ) if form.get_attachments(): for (mime, data, name) in zip(at_mime, at_data, at_name): msg.attach(name, mime, data) tasks.send_slow.delay(msg) flash('Mail erfolgreich verschickt', 'success') return redirect(url_for('internal')) except (AssertionError, socket.error) as e: flash('Mail wurde nicht verschickt: {0}'.format(e), 'negative') return dict(form=form)
def registrations_import(): form = forms.TagForm() if request.method == 'POST': fp = request.files['file_name'] if fp: mime = mime_from_filepointer(fp) if mime == 'text/plain': # strip all known endings ('\r', '\n', '\r\n') and remove empty lines # and duplicates stripped_lines = ( line.decode('utf-8', 'ignore').rstrip('\r').rstrip('\n').rstrip('\r').strip() for line in fp.readlines() ) filtered_lines = ( line for line in stripped_lines if line ) unique_registrations = { models.Registration.from_cleartext(line) for line in filtered_lines } try: num_deleted = models.Registration.query.delete() db.session.add_all(unique_registrations) db.session.commit() flash('Import OK: {0} Einträge gelöscht, {1} Eintrage hinzugefügt' .format(num_deleted, len(unique_registrations)), 'success') except Exception as e: db.session.rollback() flash('Konnte Einträge nicht speichern, bitte neu einlesen: {0}'.format(e), 'negative') return redirect(url_for('registrations')) flash('Falscher Dateitype {0}, bitte nur Text oder CSV Dateien verwenden'.format(mime), 'danger') return None flash('Datei konnte nicht gelesen werden', 'negative') return dict(form=form)