Exemple #1
0
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'))
Exemple #2
0
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
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)