| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | #!/usr/bin/env python3import flaskfrom flask import make_response, request, redirect, jsonify, render_template, url_forfrom flask_sqlalchemy import SQLAlchemyfrom flask_marshmallow import Marshmallowfrom flask_migrate import Migratedb = SQLAlchemy()app = flask.Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:m9Eb5OflQb@mysql.mysql.svc.cluster.local/gopy'db.init_app(app)migrate = Migrate(app, db)ma = Marshmallow(app)class Link(db.Model):    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(255), unique=True)    target = db.Column(db.String(255))    hit_count = db.Column(db.Integer)    owner_name = db.Column(db.String(255))    def __repr__(self):        return '<Link id=(id) name=(name) target=(target)>'.format(            id=self.id, name=self.name, target=self.target, hit_count=self.hit_count, owner_name=self.owner_name        )class LinkSchema(ma.Schema):    class Meta:        fields = ('id', 'name', 'target', 'hit_count', 'owner_name')def get_links():    links = Link.query.all()    schema = LinkSchema(many=True)    link_json = schema.dump(links)    return linksdef link_exists(link_name):    try:        link = Link.query.filter_by(name=link_name).first()    except Exception as e:        print(e)        return e    if link is None:        return False    else:        return True@app.route('/<string:name>', strict_slashes=False, methods=['GET'])def redirect_to_link(name):    try:        link = Link.query.filter_by(name=name).first()    except e:        return redirect("/", code=302)    if link is None:        return redirect("/", code=302)    return redirect(link.target, code=302)@app.post('/<string:link_name>/add', strict_slashes=False)def add_link(link_name):    if link_exists(link_name) is True:        print("Link exists")    else:        print("Creating link")        db.create_all()        link = Link(name=link_name, target=request.form['target'], hit_count=0, owner_name="unknown")        db.session.add(link)        db.session.commit()    return redirect("/", code=302)@app.route('/<string:link_name>/add', strict_slashes=False)def add_link_form(link_name):    return render_template('add.html', link_name=link_name)@app.post('/<string:link_name>/edit', strict_slashes=False)def edit_link(link_name):    db.create_all()    link = Link(name=link_name, target=request.form['target'])    db.session.merge(link)    db.session.commit()    return redirect("/", code=302)@app.route('/<string:link_name>/edit', strict_slashes=False)def edit_link_form(link_name):    link = Link.query.filter_by(name=link_name).first()    return render_template('edit.html', link=link)@app.post('/<int:link_id>/delete', strict_slashes=False)def delete_link(link_id):    link = Link.query.filter_by(id=link_id).first()    db.session.delete(link)    db.session.commit()    return redirect(url_for('list_links'))@app.route('/<int:link_id>/delete', strict_slashes=False)def delete_link_form(link_id):    link = Link.query.filter_by(id=link_id).first()    return render_template('delete.html', link=link)@app.route('/')def list_links():    links = get_links()    return render_template('list.html', links=links)#@app.route('/links/<int:id>', methods=['GET'])if __name__ == "__main__":    app.run(host='0.0.0.0')
 |