web.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #!/usr/bin/env python3
  2. from constants import BASE_PATH,PORT
  3. import datetime
  4. import json
  5. import tasks
  6. from db import db
  7. from flask import Flask, jsonify, request
  8. from rq import Queue
  9. app = Flask(__name__)
  10. d=db()
  11. @app.route(BASE_PATH + '/')
  12. def index():
  13. return "Hello world"
  14. @app.route(BASE_PATH + '/list/uploaded/')
  15. @app.route(BASE_PATH + '/list/uploaded')
  16. def uploaded_list():
  17. ret={'list': d.uploaded()}
  18. return jsonify(ret)
  19. @app.route(BASE_PATH + '/list/raw/')
  20. @app.route(BASE_PATH + '/list/raw')
  21. def raw_list():
  22. ret={'list': d.raw() }
  23. return jsonify(ret)
  24. @app.route(BASE_PATH + '/list/processed/')
  25. @app.route(BASE_PATH + '/list/processed')
  26. def processed_list():
  27. ret={'list': d.processed() }
  28. return jsonify(ret)
  29. @app.route(BASE_PATH + '/list/jobs/')
  30. @app.route(BASE_PATH + '/list/jobs')
  31. def jobs():
  32. working = tasks.jobs()
  33. return json.dumps({"working":working})
  34. @app.route(BASE_PATH + '/raw/<video_id>')
  35. def raw_file(video_id):
  36. ret=d.raw(video_id)
  37. print(ret)
  38. if ret is not None:
  39. ret["file"]=ret["file"].split("front")[1] #FIXME, path relativo al webserver
  40. return jsonify(ret)
  41. return "{}"
  42. @app.route(BASE_PATH + '/processed/<video_id>')
  43. def processed_file(video_id):
  44. ret=d.processed(video_id)
  45. ret["out_fname"]=ret["out_fname"].split("front")[1] #FIXME, path relativo al webserver
  46. return jsonify(ret)
  47. @app.route(BASE_PATH + '/crop/', methods=["POST"])
  48. def crop():
  49. ret={"status":"Procesando"}
  50. today=datetime.date.today()
  51. data = request.get_json()
  52. video=d.raw(data["id"])
  53. if "censuras" not in data:
  54. data["censuras"] = []
  55. out_filename="%s_%s_%s.mp4" % (data["curso"],
  56. today.strftime('%Y%m%d'),
  57. data["desc"])
  58. job = tasks.crop_video.delay(
  59. video["file"],
  60. str(data["inicio"]),
  61. str(data["fin"]),
  62. data["censuras"],
  63. out_filename)
  64. job.meta["type"]="Cortar"
  65. job.meta["target"]=out_filename
  66. job.save()
  67. ret["job_id"]=job.get_id()
  68. return jsonify(ret)
  69. @app.route(BASE_PATH + '/upload/', methods=["POST"])
  70. def upload():
  71. ret={"status":"Procesando"}
  72. today=datetime.date.today()
  73. data = request.get_json()
  74. video=data["id"]
  75. prof=data["prof"]
  76. texto1=data["texto1"]
  77. texto2=data["texto2"]
  78. tasks.upload_video(video,prof,texto1,texto2)
  79. return jsonify(ret)
  80. @app.route(BASE_PATH + '/cargar/<video_id>')
  81. def cargar(video_id):
  82. return jsonify(tasks.cargar_plataforma(video_id))
  83. @app.route(BASE_PATH + '/reupload/<video_id>')
  84. def reupload(video_id):
  85. today=datetime.date.today()
  86. data = d.videoData(video_id)
  87. video=data["video"]
  88. tsplit=data["title"].split("-")
  89. prof=tsplit[0]
  90. texto1=tsplit[1]
  91. texto2=tsplit[2]
  92. cutid = d.findCutId(video)
  93. tasks.upload_video(cutid,prof,texto1,texto2)
  94. ret={"status":"Procesando"}
  95. return jsonify(ret)
  96. @app.route(BASE_PATH + '/job')
  97. def job():
  98. job = tasks.long_job.delay("test")
  99. ret = {"id":job.get_id()}
  100. return jsonify(ret)
  101. @app.route(BASE_PATH+"/results/<job_key>", methods=['GET'])
  102. def get_results(job_key):
  103. try:
  104. ret=tasks.result(job_key)
  105. except Exception as e:
  106. print(e)
  107. return "Error. Probablemente job_key es invalido", 400
  108. return ret
  109. if __name__ == '__main__':
  110. app.run(host="0.0.0.0",port=PORT, debug=True)