def delete(short_name): app, n_tasks, n_task_runs, overall_progress, last_activity = app_by_shortname(short_name) try: title = app_title(app, "Delete") require.app.read(app) require.app.delete(app) if request.method == 'GET': return render_template('/applications/delete.html', title=title, app=app, n_tasks=n_tasks, overall_progress=overall_progress, last_activity=last_activity) # Clean cache cached_apps.delete_app(app.short_name) cached_apps.clean(app.id) app = App.query.get(app.id) db.session.delete(app) db.session.commit() flash(gettext('Application deleted!'), 'success') return redirect(url_for('account.profile')) except HTTPException: if app.hidden: raise abort(403) else: raise
def delete(short_name): app, n_tasks, n_task_runs, overall_progress, last_activity = app_by_shortname( short_name) try: title = app_title(app, "Delete") require.app.read(app) require.app.delete(app) if request.method == 'GET': return render_template('/applications/delete.html', title=title, app=app, n_tasks=n_tasks, overall_progress=overall_progress, last_activity=last_activity) # Clean cache cached_apps.delete_app(app.short_name) cached_apps.clean(app.id) app = App.query.get(app.id) db.session.delete(app) db.session.commit() flash(gettext('Application deleted!'), 'success') return redirect(url_for('account.profile')) except HTTPException: # pragma: no cover if app.hidden: raise abort(403) else: raise
def app_by_shortname(short_name): app = cached_apps.get_app(short_name) if app.id: # Populate CACHE with the data of the app return (app, cached_apps.n_tasks(app.id), cached_apps.n_task_runs(app.id), cached_apps.overall_progress(app.id), cached_apps.last_activity(app.id)) else: cached_apps.delete_app(short_name) return abort(404)
def task_priority(short_name): app, n_tasks, n_task_runs, overall_progress, last_activity = app_by_shortname( short_name) title = app_title(app, gettext('Task Priority')) form = TaskPriorityForm() def respond(): return render_template('/applications/task_priority.html', title=title, form=form, app=app) try: require.app.read(app) require.app.update(app) except HTTPException: if app.hidden: raise abort(403) else: raise if request.method == 'GET': return respond() if request.method == 'POST' and form.validate(): tasks = [] for task_id in form.task_ids.data.split(","): if task_id != '': t = db.session.query(model.Task).filter_by(app_id=app.id)\ .filter_by(id=int(task_id)).first() if t: t.priority_0 = form.priority_0.data tasks.append(t) else: # pragma: no cover flash( gettext( ("Ooops, Task.id=%s does not belong to the app" % task_id)), 'danger') db.session.add_all(tasks) db.session.commit() cached_apps.delete_app(app.short_name) flash(gettext("Task priority has been changed"), 'success') return respond() else: flash(gettext('Please correct the errors'), 'error') return respond()
def task_scheduler(short_name): app, n_tasks, n_task_runs, overall_progress, last_activity = app_by_shortname( short_name) title = app_title(app, gettext('Task Scheduler')) form = TaskSchedulerForm() def respond(): return render_template('/applications/task_scheduler.html', title=title, form=form, app=app) try: require.app.read(app) require.app.update(app) except HTTPException: if app.hidden: raise abort(403) else: # pragma: no cover raise if request.method == 'GET': if app.info.get('sched'): for s in form.sched.choices: if app.info['sched'] == s[0]: form.sched.data = s[0] break return respond() if request.method == 'POST' and form.validate(): app = App.query.filter_by(short_name=app.short_name).first() if form.sched.data: app.info['sched'] = form.sched.data db.session.add(app) db.session.commit() cached_apps.delete_app(app.short_name) msg = gettext("Application Task Scheduler updated!") flash(msg, 'success') return redirect(url_for('.tasks', short_name=app.short_name)) else: # pragma: no cover flash(gettext('Please correct the errors'), 'error') return respond()
def task_priority(short_name): app, n_tasks, n_task_runs, overall_progress, last_activity = app_by_shortname(short_name) title = app_title(app, gettext('Task Priority')) form = TaskPriorityForm() def respond(): return render_template('/applications/task_priority.html', title=title, form=form, app=app) try: require.app.read(app) require.app.update(app) except HTTPException: if app.hidden: raise abort(403) else: raise if request.method == 'GET': return respond() if request.method == 'POST' and form.validate(): tasks = [] for task_id in form.task_ids.data.split(","): if task_id != '': t = db.session.query(model.Task).filter_by(app_id=app.id)\ .filter_by(id=int(task_id)).first() if t: t.priority_0 = form.priority_0.data tasks.append(t) else: flash(gettext(("Ooops, Task.id=%s does not belong to the app" % task_id)), 'danger') db.session.add_all(tasks) db.session.commit() cached_apps.delete_app(app.short_name) flash(gettext("Task priority has been changed"), 'success') return respond() else: flash(gettext('Please correct the errors'), 'error') return respond()
def task_scheduler(short_name): app, n_tasks, n_task_runs, overall_progress, last_activity = app_by_shortname(short_name) title = app_title(app, gettext('Task Scheduler')) form = TaskSchedulerForm() def respond(): return render_template('/applications/task_scheduler.html', title=title, form=form, app=app) try: require.app.read(app) require.app.update(app) except HTTPException: if app.hidden: raise abort(403) else: raise if request.method == 'GET': if app.info.get('sched'): for s in form.sched.choices: if app.info['sched'] == s[0]: form.sched.data = s[0] break return respond() if request.method == 'POST' and form.validate(): app = App.query.filter_by(short_name=app.short_name).first() if form.sched.data: app.info['sched'] = form.sched.data db.session.add(app) db.session.commit() cached_apps.delete_app(app.short_name) msg = gettext("Application Task Scheduler updated!") flash(msg, 'success') return redirect(url_for('.tasks', short_name=app.short_name)) flash(gettext('Please correct the errors'), 'error') return respond()
def handle_valid_form(form): hidden = int(form.hidden.data) new_info = {} # Add the info items app, n_tasks, n_task_runs, overall_progress, last_activity = app_by_shortname( short_name) if form.thumbnail.data: new_info['thumbnail'] = form.thumbnail.data #if form.sched.data: # new_info['sched'] = form.sched.data # Merge info object info = dict(app.info.items() + new_info.items()) new_application = model.App( id=form.id.data, name=form.name.data, short_name=form.short_name.data, description=form.description.data, long_description=form.long_description.data, hidden=hidden, info=info, owner_id=app.owner_id, allow_anonymous_contributors=form.allow_anonymous_contributors. data, category_id=form.category_id.data) app, n_tasks, n_task_runs, overall_progress, last_activity = app_by_shortname( short_name) db.session.merge(new_application) db.session.commit() cached_apps.delete_app(short_name) cached_apps.reset() cached_cat.reset() cached_apps.get_app(new_application.short_name) flash(gettext('Application updated!'), 'success') return redirect( url_for('.details', short_name=new_application.short_name))
def handle_valid_form(form): hidden = int(form.hidden.data) new_info = {} # Add the info items app, n_tasks, n_task_runs, overall_progress, last_activity = app_by_shortname(short_name) if form.thumbnail.data: new_info['thumbnail'] = form.thumbnail.data #if form.sched.data: # new_info['sched'] = form.sched.data # Merge info object info = dict(app.info.items() + new_info.items()) new_application = model.App( id=form.id.data, name=form.name.data, short_name=form.short_name.data, description=form.description.data, long_description=form.long_description.data, hidden=hidden, info=info, owner_id=app.owner_id, allow_anonymous_contributors=form.allow_anonymous_contributors.data, category_id=form.category_id.data) app, n_tasks, n_task_runs, overall_progress, last_activity = app_by_shortname(short_name) db.session.merge(new_application) db.session.commit() cached_apps.delete_app(short_name) cached_apps.reset() cached_cat.reset() cached_apps.get_app(new_application.short_name) flash(gettext('Application updated!'), 'success') return redirect(url_for('.details', short_name=new_application.short_name))
def _refresh_cache(self, obj): cached_apps.delete_app(obj.short_name)
def task_presenter_editor(short_name): try: errors = False app, n_tasks, n_task_runs, overall_progress, last_activty = app_by_shortname(short_name) title = app_title(app, "Task Presenter Editor") require.app.read(app) require.app.update(app) form = TaskPresenterForm(request.form) if request.method == 'POST' and form.validate(): db_app = db.session.query(model.App).filter_by(id=app.id).first() db_app.info['task_presenter'] = form.editor.data db.session.add(db_app) db.session.commit() cached_apps.delete_app(app.short_name) msg_1 = gettext('Task presenter added!') flash('<i class="icon-ok"></i> ' + msg_1, 'success') return redirect(url_for('.tasks', short_name=app.short_name)) if request.method == 'POST' and not form.validate(): flash(gettext('Please correct the errors'), 'error') errors = True if request.method != 'GET': return if app.info.get('task_presenter'): form.editor.data = app.info['task_presenter'] else: if not request.args.get('template'): msg_1 = gettext('<strong>Note</strong> You will need to upload the' ' tasks using the') msg_2 = gettext('CSV importer') msg_3 = gettext(' or download the app bundle and run the' ' <strong>createTasks.py</strong> script in your' ' computer') url = '<a href="%s"> %s</a>' % (url_for('app.import_task', short_name=app.short_name), msg_2) msg = msg_1 + url + msg_3 flash(msg, 'info') wrap = lambda i: "applications/presenters/%s.html" % i pres_tmpls = map(wrap, presenter_module.presenters) return render_template( 'applications/task_presenter_options.html', title=title, app=app, presenters=pres_tmpls) tmpl_uri = "applications/snippets/%s.html" \ % request.args.get('template') tmpl = render_template(tmpl_uri, app=app) form.editor.data = tmpl msg = 'Your code will be <em>automagically</em> rendered in \ the <strong>preview section</strong>. Click in the \ preview button!' flash(gettext(msg), 'info') return render_template('applications/task_presenter_editor.html', title=title, form=form, app=app, errors=errors) except HTTPException as e: if app.hidden: raise abort(403) else: raise e
def task_presenter_editor(short_name): try: errors = False app, n_tasks, n_task_runs, overall_progress, last_activty = app_by_shortname( short_name) title = app_title(app, "Task Presenter Editor") require.app.read(app) require.app.update(app) form = TaskPresenterForm(request.form) if request.method == 'POST' and form.validate(): db_app = db.session.query(model.App).filter_by(id=app.id).first() db_app.info['task_presenter'] = form.editor.data db.session.add(db_app) db.session.commit() cached_apps.delete_app(app.short_name) msg_1 = gettext('Task presenter added!') flash('<i class="icon-ok"></i> ' + msg_1, 'success') return redirect(url_for('.tasks', short_name=app.short_name)) # It does not have a validation if request.method == 'POST' and not form.validate( ): # pragma: no cover flash(gettext('Please correct the errors'), 'error') errors = True if app.info.get('task_presenter'): form.editor.data = app.info['task_presenter'] else: if not request.args.get('template'): msg_1 = gettext( '<strong>Note</strong> You will need to upload the' ' tasks using the') msg_2 = gettext('CSV importer') msg_3 = gettext( ' or download the app bundle and run the' ' <strong>createTasks.py</strong> script in your' ' computer') url = '<a href="%s"> %s</a>' % (url_for( 'app.import_task', short_name=app.short_name), msg_2) msg = msg_1 + url + msg_3 flash(msg, 'info') wrap = lambda i: "applications/presenters/%s.html" % i pres_tmpls = map(wrap, presenter_module.presenters) return render_template( 'applications/task_presenter_options.html', title=title, app=app, presenters=pres_tmpls) tmpl_uri = "applications/snippets/%s.html" \ % request.args.get('template') tmpl = render_template(tmpl_uri, app=app) form.editor.data = tmpl msg = 'Your code will be <em>automagically</em> rendered in \ the <strong>preview section</strong>. Click in the \ preview button!' flash(gettext(msg), 'info') return render_template('applications/task_presenter_editor.html', title=title, form=form, app=app, errors=errors) except HTTPException as e: if app.hidden: raise abort(403) else: # pragma: no cover raise e