tasks.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import time
  2. from subprocess import Popen,PIPE
  3. from rq import get_current_job
  4. from rq.decorators import job
  5. from worker import conn
  6. import os.path
  7. @job('default',connection=conn, timeout=30)
  8. def long_job(arg):
  9. for i in range(20):
  10. time.sleep(1)
  11. job = get_current_job()
  12. job.meta['progress'] = i
  13. job.save()
  14. #push to db, return id if ok. return error if not ok
  15. return "37"
  16. @job('default',connection=conn, timeout=3600*2, result_ttl=3600*2)
  17. def upload_video(title,thumb_path,video_path):
  18. import youtube_upload.main
  19. j=get_current_job()
  20. return youtube_upload.main.main(title,thumb_path,video_path,job=j)
  21. @job('default',connection=conn, timeout=360*2, result_ttl=360*2)
  22. def cut_video(in_fname,start_time,end_time,out_fname):
  23. if not os.path.isfile(in_fname):
  24. return { "status":"error",
  25. "error": "El archivo %s no existe" % in_fname
  26. }
  27. if os.path.isfile(out_fname):
  28. return { "status":"error",
  29. "error": "El archivo %s existe" % out_fname
  30. }
  31. process = [ 'ffmpeg',
  32. '-loglevel', 'error',
  33. '-stats',
  34. '-i', in_fname,
  35. '-ss', start_time,
  36. '-t', end_time,
  37. '-c', 'copy',
  38. '-movflags', '+faststart',
  39. out_fname
  40. ]
  41. out = run_process(process)
  42. if out == "":
  43. out = { "status": "Proceso finalizado" }
  44. return out
  45. def run_process(process = None):
  46. if process is None or type(process) is not list:
  47. return { "status": "error",
  48. "error": "Argumento process invalido"
  49. }
  50. proc=Popen(process, stderr=PIPE, universal_newlines=True)
  51. while True:
  52. line = proc.stderr.readline()
  53. if line != '' and line !=b'':
  54. job = get_current_job()
  55. job.meta['progress'] = line.rstrip()
  56. job.save()
  57. else:
  58. break