subtitles.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. from flask_migrate import Migrate
  7. db = SQLAlchemy()
  8. app = flask.Flask(__name__)
  9. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:m9Eb5OflQb@mysql.mysql.svc.cluster.local/subtitles'
  10. db.init_app(app)
  11. migrate = Migrate(app, db)
  12. ma = Marshmallow(app)
  13. class SubtitleEntry(db.Model):
  14. id = db.Column(db.Integer, primary_key=True)
  15. movie_id = db.Column(db.String(255), db.ForeignKey('movie.id'))
  16. text = db.Column(db.String(255))
  17. lineNumber = db.Column(db.Integer)
  18. startTime = db.Column(db.String(255))
  19. endTime = db.Column(db.String(255))
  20. class SubtitleEntrySchema(ma.Schema):
  21. class Meta:
  22. fields = ('id', 'movie_id', 'text', 'lineNumber', 'startTime', 'endTime')
  23. class Movie(db.Model):
  24. id = db.Column(db.Integer, primary_key=True)
  25. movieName = db.Column(db.String(255))
  26. releaseYear = db.Column(db.String(255))
  27. srtPath = db.Column(db.String(255))
  28. moviePath = db.Column(db.String(255))
  29. runLength = db.Column(db.Integer)
  30. lastModified = db.Column(db.String(255))
  31. class MovieSchema(ma.Schema):
  32. class Meta:
  33. fields = ('id', 'movieName', 'releaseYear', 'srtPath', 'moviePath', 'runLength', 'lastModified')
  34. def get_links():
  35. links = Link.query.order_by(Link.name).all()
  36. schema = LinkSchema(many=True)
  37. link_json = schema.dump(links)
  38. return links
  39. def link_exists(link_name):
  40. try:
  41. link = Link.query.filter_by(name=link_name).first()
  42. except Exception as e:
  43. print(e)
  44. return e
  45. if link is None:
  46. return False
  47. else:
  48. return True
  49. @app.route('/<string:name>', strict_slashes=False, methods=['GET'])
  50. def redirect_to_link(name):
  51. try:
  52. link = Link.query.filter_by(name=name).first()
  53. except e:
  54. return redirect("/", code=302)
  55. if link is None:
  56. return redirect("/", code=302)
  57. try:
  58. link.hit_count += 1
  59. except TypeError:
  60. link.hit_count = 1
  61. db.session.commit()
  62. print("updating link hit count")
  63. return redirect(link.target, code=302)
  64. @app.post('/add', strict_slashes=False)
  65. def add_link():
  66. if link_exists(request.form['link_name']) is True:
  67. print("Link exists")
  68. else:
  69. print("Creating link")
  70. db.create_all()
  71. link = Link(name=request.form['link_name'], target=request.form['target'], hit_count=0, owner_name="unknown")
  72. db.session.add(link)
  73. db.session.commit()
  74. return redirect("/", code=302)
  75. @app.route('/<string:link_name>/add', strict_slashes=False)
  76. def add_link_form(link_name):
  77. return render_template('add.html', link_name=link_name)
  78. @app.post('/<string:link_name>/edit', strict_slashes=False)
  79. def edit_link(link_name):
  80. db.create_all()
  81. link = Link.query.filter_by(name=link_name).first()
  82. print("Setting link target to {}".format(request.form['target']))
  83. link.target = request.form['target']
  84. db.session.commit()
  85. return redirect("/", code=302)
  86. @app.route('/<string:link_name>/edit', strict_slashes=False)
  87. def edit_link_form(link_name):
  88. link = Link.query.filter_by(name=link_name).first()
  89. return render_template('edit.html', link=link)
  90. @app.post('/<int:link_id>/delete', strict_slashes=False)
  91. def delete_link(link_id):
  92. link = Link.query.filter_by(id=link_id).first()
  93. db.session.delete(link)
  94. db.session.commit()
  95. return redirect(url_for('list_links'))
  96. @app.route('/<int:link_id>/delete', strict_slashes=False)
  97. def delete_link_form(link_id):
  98. link = Link.query.filter_by(id=link_id).first()
  99. return render_template('delete.html', link=link)
  100. @app.route('/')
  101. def list_links():
  102. links = get_links()
  103. return render_template('list.html', links=links)
  104. #@app.route('/links/<int:id>', methods=['GET'])
  105. if __name__ == "__main__":
  106. app.run(host='0.0.0.0')