gopy.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env python3
  2. import flask
  3. from flask import make_response, request, redirect, jsonify, render_template, url_for
  4. from flask_sqlalchemy import SQLAlchemy
  5. from flask_marshmallow import Marshmallow
  6. db = SQLAlchemy()
  7. app = flask.Flask(__name__)
  8. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:m9Eb5OflQb@mysql.mysql.svc.cluster.local/gopy'
  9. db.init_app(app)
  10. ma = Marshmallow(app)
  11. class Link(db.Model):
  12. id = db.Column(db.Integer, primary_key=True)
  13. name = db.Column(db.String(255), unique=True)
  14. target = db.Column(db.String(255))
  15. def __repr__(self):
  16. return '<Link id=(id) name=(name) target=(target)>'.format(
  17. id=self.id, name=self.name, target=self.target
  18. )
  19. class LinkSchema(ma.Schema):
  20. class Meta:
  21. fields = ('id', 'name', 'target')
  22. def get_links():
  23. links = Link.query.all()
  24. schema = LinkSchema(many=True)
  25. link_json = schema.dump(links)
  26. return links
  27. @app.route('/<string:name>', strict_slashes=False, methods=['GET'])
  28. def redirect_to_link(name):
  29. try:
  30. link = Link.query.filter_by(name=name).first()
  31. except e:
  32. return redirect("/", code=302)
  33. if link is None:
  34. return redirect("/", code=302)
  35. return redirect(link.target, code=302)
  36. @app.post('/<string:link_name>/add', strict_slashes=False)
  37. def add_link(link_name):
  38. db.create_all()
  39. link = Link(name=link_name, target=request.form['target'])
  40. db.session.add(link)
  41. db.session.commit()
  42. return redirect("/", code=302)
  43. @app.route('/<string:link_name>/add', strict_slashes=False)
  44. def add_link_form(link_name):
  45. return render_template('add.html', link_name=link_name)
  46. @app.post('/<string:link_name>/edit', strict_slashes=False)
  47. def edit_link(link_name):
  48. db.create_all()
  49. link = Link(name=link_name, target=request.form['target'])
  50. db.session.update(link)
  51. db.session.commit()
  52. return redirect("/", code=302)
  53. @app.route('/<string:link_name>/edit', strict_slashes=False)
  54. def edit_link_form(link_name):
  55. link = Link.query.filter_by(name=link_name).first()
  56. return render_template('edit.html', link=link)
  57. @app.post('/<string:link_name>/delete', strict_slashes=False)
  58. def delete_link(link_name):
  59. link = Link.query.filter_by(name=link_name).first()
  60. db.session.delete(link)
  61. db.session.commit()
  62. return redirect(url_for('list_links'))
  63. @app.route('/<string:link_name>/delete', strict_slashes=False)
  64. def delete_link_form(link_name):
  65. link = Link.query.filter_by(name=link_name).first()
  66. return render_template('delete.html', link=link)
  67. @app.route('/')
  68. def list_links():
  69. links = get_links()
  70. return render_template('list.html', links=links)
  71. #@app.route('/links/<int:id>', methods=['GET'])
  72. if __name__ == "__main__":
  73. app.run(host='0.0.0.0')