示例#1
0
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
示例#2
0
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
示例#3
0
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)
示例#4
0
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)
示例#5
0
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()
示例#6
0
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()
示例#7
0
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()
示例#8
0
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()
示例#9
0
    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))
示例#10
0
    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))
示例#11
0
文件: api.py 项目: rkyymmt/pybossa
 def _refresh_cache(self, obj):
     cached_apps.delete_app(obj.short_name)
示例#12
0
 def _refresh_cache(self, obj):
     cached_apps.delete_app(obj.short_name)
示例#13
0
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
示例#14
0
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