-
- ERROR:
-
- Traceback (most recent call last):
- File "/cue/TonePy_AWSLambda/toneEmbedder_flask/env/lib/python3.6/site-packages/kombu/serialization.py", line 50, in _reraise_errors
- yield
- File "/cue/TonePy_AWSLambda/toneEmbedder_flask/env/lib/python3.6/site-packages/kombu/serialization.py", line 221, in dumps
- payload = encoder(data)
- File "/cue/TonePy_AWSLambda/toneEmbedder_flask/env/lib/python3.6/site-packages/kombu/utils/json.py", line 69, in dumps
- **dict(default_kwargs, **kwargs))
- File "/Users/pi/anaconda/lib/python3.6/json/__init__.py", line 238, in dumps
- **kw).encode(obj)
- File "/Users/pi/anaconda/lib/python3.6/json/encoder.py", line 199, in encode
- chunks = self.iterencode(o, _one_shot=True)
- File "/Users/pi/anaconda/lib/python3.6/json/encoder.py", line 257, in iterencode
- return _iterencode(o, 0)
- File "/cue/TonePy_AWSLambda/toneEmbedder_flask/env/lib/python3.6/site-packages/kombu/utils/json.py", line 59, in default
- return super(JSONEncoder, self).default(o)
- File "/Users/pi/anaconda/lib/python3.6/json/encoder.py", line 180, in default
- o.__class__.__name__)
- TypeError: Object of type 'Embed' is not JSON serializable
-
-
- # app.py
-
- @flaskApp.route('/embed-async', methods=['POST'] )
- def embedtone_async_handler():
- try:
- j = request.get_json(force=True)
-
- E = Embed.Embed(j)
-
- # Start Asyncronous tasks
- E.pipeline_async_start()
-
- # Send task to Celery worker
- tasks.embed_tone.delay(E) # <-- THIS IS CAUSING IT
-
- return jsonify( E.make_triggers() )
- :
-
-
- #tasks.py
-
- from theApp import flaskApp
- from celery import Celery
- from celery.result import AsyncResult
-
-
- def make_celery(app):
- celery = Celery(
- app.import_name,
- backend=app.config['CELERY_RESULT_BACKEND'],
- broker=app.config['CELERY_BROKER_URL']
- )
- celery.conf.update(app.config)
-
- class ContextTask(celery.Task):
- def __call__(self, *args, **kwargs):
- with app.app_context():
- return self.run(*args, **kwargs)
-
- celery.Task = ContextTask
- return celery
-
-
- celery = make_celery(flaskApp)
-
-
- def make_result(id, celery_app=celery):
- return AsyncResult(id, app=celery_app)
-
-
- @celery.task() # can specify timeouts: time_limit = 1000
- def add_together(a, b):
- return a + b
-
-
- @celery.task()
- def embed_tone(embedObject):
- # TODO: If you want exceptions caught and stored as results, this is where to do it
- return embedObject.pipeline_async_finish()
-