Skip to content

Commit

Permalink
feat: update API to convert video
Browse files Browse the repository at this point in the history
  • Loading branch information
TheJoin95 committed Jul 26, 2023
1 parent 0823073 commit bc93ead
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 15 deletions.
26 changes: 16 additions & 10 deletions src/ign-api/convert_image.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
from flask import Flask
from flask import jsonify, abort
from flask import request, send_file
from flask_cors import CORS, cross_origin
from flask import abort
from flask import request
from flask_cors import cross_origin
from flask import Blueprint

from ImageGoNord import GoNord, NordPaletteFile
from ImageGoNord import GoNord

from rq import Queue
from rq.job import Job
from worker import conn
import os
from datetime import datetime


q = Queue(connection=conn)
API_VERSION = '/v1'
Expand Down Expand Up @@ -42,8 +42,10 @@ def convert_queue():
image = go_nord.open_image(request.files.get('file').stream)
job = q.enqueue(f=convert_image, ttl=900, failure_ttl=900, job_timeout='180s', args=(go_nord, image, output_path, request.form.get('b64_output'), response))
elif is_video(file.filename):
path_to_video = os.path.join('/tmp', file.filename)
#file.save(path_to_video)
now = datetime.now() # current date and time
filename = now.strftime("%m%d%Y-%H%M%S")
path_to_video = os.path.join('/tmp', 'ign-video-' + filename + '.' + file.filename.rsplit('.', 1)[1])
file.save(path_to_video)
job = q.enqueue(f=convert_video, ttl=900, failure_ttl=900, job_timeout='180s', args=(go_nord, path_to_video))
else:
abort(400, 'No valid file: you can upload video in mp4, avi, webp and mov and images (up to 16MB)')
Expand All @@ -68,8 +70,12 @@ def convert_image(go_nord, image, save_path, b64_output, response):
return response

def convert_video(go_nord, path_to_video):
output_papth = go_nord.convert_video(path_to_video, 'custom_palette', save_path='/tmp')
return send_file(output_papth)
try:
output_path = go_nord.convert_video(path_to_video, 'custom_palette', save_path='/tmp')
finally:
os.remove(path_to_video)

return {'output_path': output_path}

def setup_instance(req):
go_nord = GoNord()
Expand Down
13 changes: 8 additions & 5 deletions src/ign-api/run.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
from ImageGoNord import GoNord, NordPaletteFile
from ImageGoNord import GoNord
from flask import Flask
from flask import jsonify, abort
from flask import request
from flask import request, send_file
from flask_cors import CORS, cross_origin
from flask_restx import Api, Resource, fields
from werkzeug.datastructures import FileStorage

from rq import Queue
from rq.job import Job
from worker import conn

from convert_image import convert_async_api
import os

q = Queue(connection=conn)
API_VERSION = '/v1'
Expand Down Expand Up @@ -97,10 +96,14 @@ def convert():
def get_job_result():
job = Job.fetch(request.args.get('job_id'), connection=conn)
result = job.result
f = None
if result == None:
result = False
elif 'output_path' in result:
f = send_file(result['output_path'], as_attachment=True, cache_timeout=0)
os.remove(result['output_path'])

return jsonify({'status': job.get_status(), 'result': result})
return jsonify({'status': job.get_status(), 'result': result}) if f == None else f

def setup_instance(req):
go_nord = GoNord()
Expand Down

0 comments on commit bc93ead

Please sign in to comment.