Esempio n. 1
0
def new():
    if require.app.create():
        form = AppForm(request.form)
        if request.method == 'POST' and form.validate():
            application = model.App(
                name=form.name.data,
                short_name=form.short_name.data,
                description=form.description.data,
                long_description=form.long_description.data,
                hidden=int(form.hidden.data),
                owner_id=current_user.id,
            )
            db.session.add(application)
            db.session.commit()
            flash('<i class="icon-ok"></i> Application created!', 'success')
            flash(
                '<i class="icon-bullhorn"></i> You can check the '
                '<strong><a href="https://docs.pybossa.com">Guide and '
                ' Documentation</a></strong> for adding tasks, '
                ' a thumbnail, using PyBossa.JS, etc.', 'info')
            return redirect('/app/' + application.short_name)
        if request.method == 'POST' and not form.validate():
            flash('Please correct the errors', 'error')
        return render_template('applications/new.html',
                               title="New Application",
                               form=form)
    else:
        abort(403)
Esempio n. 2
0
    def handle_valid_form(form):
        hidden = int(form.hidden.data)

        new_info = {}
        # Add the info items
        app = 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
        )

        app = app_by_shortname(short_name)
        db.session.merge(new_application)
        db.session.commit()
        flash(lazy_gettext('Application updated!'), 'success')
        return redirect(
            url_for('.details', short_name=new_application.short_name))
Esempio n. 3
0
 def create_app(cls, info):
     app = model.App(name=u'My New App',
                     short_name=cls.app_name,
                     description=u'description',
                     hidden=0,
                     info=info)
     return app
Esempio n. 4
0
File: base.py Progetto: jun9/pybossa
    def create(cls):
        user = model.User(
                email_addr = cls.email_addr, 
                name = cls.name, 
                fullname = cls.fullname, 
                api_key = cls.api_key)

        user2 = model.User(
                email_addr = cls.email_addr2, 
                name = cls.name2, 
                fullname = cls.fullname2, 
                api_key=cls.api_key_2)

        info = {
            'total': 150,
            'long_description': 'hello world'
            }

        app = model.App(
                name = u'My New App',
                short_name = cls.app_name,
                description = u'description',
                hidden = 0,
                info = info
            )

        app.owner = user
        task_info = {
            'question': 'My random question',
            'url': 'my url'
            }
        task_run_info = {
            'answer': u'annakarenina'
            }

        model.Session.add_all([user, user2, app])

        # Create the task and taskruns for the first app
        for i in range (0,10):
            task = model.Task(app_id = 1, state = '0', info = task_info)
            task.app = app
            # Taskruns will be assigned randomly to a signed user or an anonymous one
            if random.randint(0,1) == 1:
                task_run = model.TaskRun(
                        app_id = 1, 
                        task_id = 1, 
                        user_id = 1, 
                        info = task_run_info)
                task_run.user = user
            else:
                task_run = model.TaskRun(
                        app_id = 1, 
                        task_id = 1, 
                        user_ip = '127.0.0.1', 
                        info = task_run_info)
            task_run.task = task
            model.Session.add_all([task, task_run])
        model.Session.commit()
        model.Session.remove()
Esempio n. 5
0
 def create_app(cls, info):
     category = db.session.query(model.Category).first()
     if category is None:
         cls.create_categories()
         category = db.session.query(model.Category).first()
     app = model.App(name=cls.app_name,
                     short_name=cls.app_short_name,
                     description=u'description',
                     hidden=0,
                     category_id=category.id,
                     info=info)
     return app
Esempio n. 6
0
def new():
    if not require.app.create():  # pragma: no cover
        abort(403)
    form = AppForm(request.form)
    categories = db.session.query(model.Category).all()
    form.category_id.choices = [(c.id, c.name) for c in categories]

    def respond(errors):
        return render_template('applications/new.html',
                               title=gettext("Create an Application"),
                               form=form,
                               errors=errors)

    if request.method != 'POST':
        return respond(False)

    if not form.validate():
        flash(gettext('Please correct the errors'), 'error')
        return respond(True)

    info = {}
    # Add the info items
    if form.thumbnail.data:
        info['thumbnail'] = form.thumbnail.data

    app = model.App(
        name=form.name.data,
        short_name=form.short_name.data,
        description=form.description.data,
        long_description=form.long_description.data,
        category_id=form.category_id.data,
        allow_anonymous_contributors=form.allow_anonymous_contributors.data,
        hidden=int(form.hidden.data),
        owner_id=current_user.id,
        info=info,
    )

    #cached_apps.reset()
    db.session.add(app)
    db.session.commit()
    # Clean cache
    msg_1 = gettext('Application created!')
    flash('<i class="icon-ok"></i> ' + msg_1, 'success')
    flash(
        '<i class="icon-bullhorn"></i> ' + gettext('You can check the ') +
        '<strong><a href="https://docs.pybossa.com">' +
        gettext('Guide and Documentation') + '</a></strong> ' +
        gettext('for adding tasks, a thumbnail, using PyBossa.JS, etc.'),
        'info')
    return redirect(url_for('.settings', short_name=app.short_name))
Esempio n. 7
0
def update(short_name):
    try:
        app = App.query.filter_by(short_name=short_name)\
                .first_or_404()
        if require.app.update(app):
            if request.method == 'GET':
                form = AppForm(obj=app)
                form.populate_obj(app)
                return render_template('/applications/update.html',
                                       title="Update the application: %s" %
                                       app.name,
                                       form=form,
                                       app=app)

            if request.method == 'POST':
                form = AppForm(request.form)
                if form.validate():
                    if form.hidden.data:
                        hidden = 1
                    else:
                        hidden = 0
                    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,
                        owner_id=current_user.id,
                    )
                    app = App.query.filter_by(short_name=short_name)\
                            .first_or_404()
                    db.session.merge(new_application)
                    db.session.commit()
                    flash('Application updated!', 'success')
                    return redirect(
                        url_for('.details',
                                short_name=new_application.short_name))
                else:
                    flash('Please correct the errors', 'error')
                    return render_template('/applications/update.html',
                                           form=form,
                                           title="Edit the application",
                                           app=app)
        else:
            abort(403)
    except UnboundExecutionError:
        pass
Esempio n. 8
0
def home():
    # in case we have not set up database yet
    try:
        app_count = db.session.query(model.App)\
                .filter(model.App.hidden == 0)\
                .count()
        task_count = db.session.query(model.Task).count()
        taskrun_count = db.session.query(model.TaskRun).count()
        user_count = db.session.query(model.User).count()
        stats = {
            'app': app_count,
            'task': task_count,
            'taskrun': taskrun_count,
            'user': user_count
        }

        featured = db.session.query(model.Featured).all()

        apps = []
        for f in featured:
            apps.append(db.session.query(model.App).get(f.app_id))

        threeApps = False
        if (len(apps) > 0):
            if (len(apps) == 1 or len(apps) == 2):
                frontPageApps = apps
                tmp = model.App(name="Your application",
                                description="Could be here!")
                frontPageApps.append(tmp)
            else:
                frontPageApps = []
                for i in range(0, 3):
                    app = random.choice(apps)
                    apps.pop(apps.index(app))
                    frontPageApps.append(app)
                    threeApps = True
        else:
            frontPageApps = []

    except UnboundExecutionError:
        stats = {'app': 0, 'task': 0, 'taskrun': 0, 'user': 0}
    return render_template('/home/index.html',
                           stats=stats,
                           frontPageApps=frontPageApps,
                           threeApps=threeApps)
Esempio n. 9
0
File: web.py Progetto: jun9/pybossa
def home():
    try:  # in case we have not set up database yet
        app_count = model.Session.query(
            model.App).filter(model.App.hidden == 0).count()
        task_count = model.Session.query(model.Task).count()
        taskrun_count = model.Session.query(model.TaskRun).count()
        user_count = model.Session.query(model.User).count()
        stats = {
            'app': app_count,
            'task': task_count,
            'taskrun': taskrun_count,
            'user': user_count
        }
        apps = model.Session.query(model.App).filter(
            model.App.hidden == 0).filter(model.App.tasks != None).all()
        threeApps = False
        if (len(apps) > 0):
            if (len(apps) == 1 or len(apps) == 2):
                frontPageApps = apps
                tmp = model.App(name="Your application",
                                description="Could be here!")
                frontPageApps.append(tmp)
            else:
                frontPageApps = []
                for i in range(0, 3):
                    app = random.choice(apps)
                    apps.pop(apps.index(app))
                    frontPageApps.append(app)
                    threeApps = True
        else:
            frontPageApps = []

    except UnboundExecutionError:
        stats = {'app': 0, 'task': 0, 'taskrun': 0, 'user': 0}
    if current_user.is_authenticated() and current_user.email_addr == "None":
        flash(
            "Please update your e-mail address in your profile page, right now it is empty!"
        )
    return render_template('/home/index.html',
                           stats=stats,
                           frontPageApps=frontPageApps,
                           threeApps=threeApps)
Esempio n. 10
0
def new():
    if require.app.create():
        form = AppForm(request.form, csrf_enabled=False)
        if request.method == 'POST' and form.validate():
            application = model.App(
                name=form.name.data,
                short_name=form.short_name.data,
                description=form.description.data,
                hidden=int(form.hidden.data),
                owner_id=current_user.id,
            )
            model.Session.add(application)
            model.Session.commit()
            flash('Application created!', 'success')
            return redirect('/app/' + application.short_name)
        if request.method == 'POST' and not form.validate():
            flash('Please correct the errors', 'error')
        return render_template('applications/new.html',
                               title="New Application",
                               form=form)
    else:
        abort(403)
Esempio n. 11
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))