Esempio n. 1
0
    def validate(self):
        if not Form.validate(self):
            return False

        if Rant.title_exists(self.title.data, self.id.data):
            self.title.errors.append("That title is already used.")
            return False

        return True
Esempio n. 2
0
def rants():
    form = RantForm(request.form)
    error = ''

    if not is_json(request):
        #Rant updated from browser form POST (or deleted from browser)
        if form.validate() == False:
            return render_template('write_rant.html', form=form)

        title_in = request.form.get('title')
        content_in = request.form.get('content')
        category_list = []

        if request.form['id'] is not u'':
            rant = Rant.query.filter_by(id = request.form.get('id')).first()
            action = "updated"
            if rant is None:
                form.id.errors.append("Could not update rant with id {0}".format(id))
                return render_template('write_rant.html', form=form)
            else:
                if form.delete.data == True:
                    if rant.user_id != g.user.id:
                        return render_template('error_page.html',
                                               error="Unauthorized to edit this rant.")
                    rant_id = rant.id
                    db.session.delete(rant)
                    db.session.commit()

                    message = "Rant(ID: {0}) successfully deleted.".format(rant_id)
                    return render_template('rant_posted.html', form=form, message=message)

                rant.title = title_in
                rant.content = content_in
        else:
            rant = Rant(title_in, content_in, g.user.id, datetime.utcnow())
            action = "created"

        if rant.user_id != g.user.id:
            return render_template('error_page.html',
                                   error="Unauthorized to edit this rant.")

        # Delete all rant-categories before re-adding them
        RantCategory.query.filter_by(rant_id = rant.id).delete()
        db.session.add(rant)
        db.session.commit()

        rant = Rant.query.filter_by(id = rant.id).first()

        for key in request.form.keys():
            for value in request.form.getlist(key):
                if key == 'categories':
                    category_list.append(value)

        save_rant_categories(category_list, rant)

        message="Rant(ID: {0}) successfully {1}.".format(rant.id, action)
        return render_template('rant_posted.html', form=form, message=message)
    else:
        # New Rant POSTed from curl
        category_list = []
        title_in, content_in = None, None

        if 'title' in request.json:
            title_in = request.json['title']
        elif error is '':
            error = 'Title is required.'

        if 'content' in request.json:
            content_in = request.json['content']
        elif error is '':
            error = 'Content is required.'

        if 'categories' in request.json:
            category_list = request.json['categories']
        elif error is '':
            error = 'A list containing at least one valid category id is required.'

        if Rant.title_exists(title_in, None):
            error = "That title is already used."

        if error is not '':
            return jsonify(status="error", data={},
                           message=error,
                           code=400), 400

        rant = Rant(title_in, content_in, g.user.id, datetime.utcnow())

        db.session.add(rant)
        db.session.commit()
        save_rant_categories(category_list, rant)

        return jsonify(status="success", data={'rant': rant.to_json()},
                       message="Rant successfully created.", code=200), 200