def add_dataset(): dataset = db.Dataset() dataset.name = request.form.get("name") dataset.location = request.form.get("location") dataset.save() job = dataset_queue.enqueue_call(func=calc, args=(unicode(dataset['_id']),)) dataset.task_id = unicode(job.id) dataset.save() flash("Dataset created", 'success') return redirect(url_for('datasets'))
def schedule_dataset(dataset_id, format=None): if format is None: format = 'html' dataset = db.Dataset.find_one( { '_id' : dataset_id } ) # Enqueue job = dataset_queue.enqueue_call(func=calc, args=(unicode(dataset['_id']),)) dataset.task_id = unicode(job.id) dataset.save() if format == 'json': return jsonify( { 'status' : "success" }) else: flash("Dataset scheduled for periodic update") return redirect(url_for('datasets'))
def calc(dataset_id): with app.app_context(): # Save results back to Run dataset = db.Dataset.find_one( { '_id' : ObjectId(dataset_id) } ) if dataset is None: return "No Dataset exists to update, aborting update process for ID %s" % dataset_id dataset.calc() dataset.updated = datetime.utcnow() # Poor man's scheduler, until rq supports scheduling # Sleep for 5 minutes to prevent crashing the DAP servers time.sleep(300) # And then do it again job = dataset_queue.enqueue_call(func=calc, args=(dataset_id,)) dataset.task_id = unicode(job.id) dataset.save() return "Scheduled %s (%s)" % (dataset_id, dataset.name)