Ejemplo n.º 1
0
def edit(slug):
    if request.method == 'GET':
        return render_template('edit.j2', page=Document.get(slug))

    current_revision = Document.get(slug=slug)

    if not request.form['revision'] == str(current_revision.id):
        return render_template('error.j2', error=_('This page has been '
            'modified while you were working on it.')), 400

    if not current_revision.id:
        current_revision.body = ''  # For byte delta computation

    edition_policy = param('edition_policy', '')

    if edition_policy == 'users':
        if not current_user.is_authenticated:
            return render_template('error.j2', error=_('Edition is limited to '
                'registered users only')), 403

    if edition_policy == 'admins':
        if not current_user.admin:
            return render_template('error.j2', error=_('Edition is limited to '
                'administrators only')), 403

    Metadata.deactivate(slug)
    Document.deactivate(slug)

    parsed = parse(request.form['body'])

    for key, values in parsed['meta'].items():
        for value in values:
            Metadata(slug=slug, key=key, value=value) \
                    .save()

    title = parsed['title'] or slug
    body = request.form['body']
    comment = request.form['comment'] or None

    bytes_delta = len(body) - len(current_revision.body)

    page = Document(slug=slug, title=title, body=body, comment=comment,
            bytes_delta=bytes_delta)

    if current_user.is_authenticated:
        page.user_id = current_user.id

    page.save()

    if not current_user.is_anonymous:
        Notification.add(slug, current_user, 'automatic')

    db.session.commit()

    Notification.send(page, current_user)

    flash(_('Thank you for your changes. Your attention to detail '
            'is appreciated.'))

    return redirect(url_for('read', slug=slug))
Ejemplo n.º 2
0
def deactivate(slug):
    if request.method == 'GET':
        return render_template('deactivate.j2')

    if not current_user.admin:
        return render_template('error.j2', error=_('You are not allowed to '
            'deactivate this page')), 403

    Document.deactivate(slug)
    Metadata.deactivate(slug)

    db.session.commit()

    return redirect(url_for('read', slug=slug))
Ejemplo n.º 3
0
def load_fixtures():
    '''Load fixtures into the database.'''
    cwd = getcwd()
    dir = path.join(cwd, FIXTURES_DIR)

    for filename in listdir(dir):
        file = path.join(dir, filename)

        if not path.isfile(file) or not file.endswith('.md'):
            continue

        print(' * Loading %s' % filename)

        slug = filename[:-3]

        page = Document.get(slug=slug)

        if page.id:
            print(' * Document exists, skipping')
            continue

        body = codecs.open(file, 'r', 'utf-8') \
                .read()

        parsed = parse(body)

        title = parsed['title'] or slug

        Metadata.deactivate(slug)
        Document.deactivate(slug)

        for key, values in parsed['meta'].items():
            for value in values:
                Metadata(slug=slug, key=key, value=value) \
                        .save()

        Document(slug=slug, title=title, body=body) \
                        .save()

        db.session.commit()
Ejemplo n.º 4
0
def database():
    db.drop_all()
    db.create_all()

    Document(slug='a', title='A', body='111').save()

    db.session.commit()

    Document.deactivate('a')

    db.session.commit()

    Document(slug='a', title='A', body='222').save()
    Document(slug='b', title='B', body='111').save()
    Document(slug='c', title='C', body='111').save()

    Metadata(slug='a', key='x', value='1').save()
    Metadata(slug='a', key='y', value='2').save()
    Metadata(slug='b', key='x', value='1').save()
    Metadata(slug='b', key='x', value='2').save()

    db.session.commit()