Example #1
0
def db_create():
    '''Create the db'''
    with app.app_context():
        db.create_all()
        # then, load the Alembic configuration and generate the
        # version table, "stamping" it with the most recent rev:
        setup_alembic_config()
        # finally, add a minimum set of categories: Volunteer Thinking, Volunteer Sensing, Published and Draft
        categories = []
        categories.append(Category(name="House Coalition",
                          short_name='housecoalition',
                          description="Members of the House of Representatives in the Liberal and National Parties",
                          id=0))
        categories.append(Category(name="House Labor",
                          short_name='houselabor',
                          description="Members of the House of Representatives in the Labor Party",
                          id=1))
        categories.append(Category(name="Senate Coalition",
                          short_name='senatecoalition',
                          description="Members of the Senate in the Liberal and National Parties",
                          id=2))
        categories.append(Category(name="Senate Labor",
                          short_name='senatelabor',
                          description="Members of the Senate in the Labor Party",
                          id=3))
        categories.append(Category(name="Crossbench",
                          short_name='crossbench',
                          description="Crossbenchers in both the House of Representatives and the Senate",
                          id=4))
        db.session.add_all(categories)
        db.session.commit()
Example #2
0
def home():
    """Render home page with the cached projects and users."""
    page = 1
    per_page = current_app.config.get('APPS_PER_PAGE')
    if per_page is None:  # pragma: no cover
        per_page = 5
    d = {'top_projects': cached_projects.get_top(), 'top_users': None}

    # Get all the categories with projects
    categories = cached_cat.get_used()
    d['categories'] = categories
    d['categories_projects'] = {}
    for c in categories:
        tmp_projects = cached_projects.get(c['short_name'], page, per_page)
        d['categories_projects'][c['short_name']] = tmp_projects

    # Add featured
    tmp_projects = cached_projects.get_featured('featured', page, per_page)
    if len(tmp_projects) > 0:
        featured = Category(name='Featured', short_name='featured')
        d['categories'].insert(0, featured)
        d['categories_projects']['featured'] = tmp_projects

    if (current_app.config['ENFORCE_PRIVACY']
            and current_user.is_authenticated()):
        if current_user.admin:
            d['top_users'] = cached_users.get_top()
    if not current_app.config['ENFORCE_PRIVACY']:
        d['top_users'] = cached_users.get_top()
    return render_template('/home/index.html', **d)
    def test_task_run_errors(self):
        """Test TASK_RUN model errors."""
        user = User(email_addr="*****@*****.**",
                    name="johndoe",
                    fullname="John Doe",
                    locale="en")
        db.session.add(user)
        db.session.commit()

        user = db.session.query(User).first()
        category = Category(name='cat', short_name='cat', description='cat')
        project = Project(name='Application',
                          short_name='app',
                          description='desc',
                          owner_id=user.id,
                          category=category)
        db.session.add(project)
        db.session.commit()

        task = Task(project_id=project.id)
        db.session.add(task)
        db.session.commit()

        task_run = TaskRun(project_id=None, task_id=task.id)
        db.session.add(task_run)
        assert_raises(IntegrityError, db.session.commit)
        db.session.rollback()

        task_run = TaskRun(project_id=project.id, task_id=None)
        db.session.add(task_run)
        assert_raises(IntegrityError, db.session.commit)
        db.session.rollback()
Example #4
0
def categories():
    """List Categories."""
    try:
        if request.method == 'GET':
            ensure_authorized_to('read', Category)
            form = CategoryForm()
        if request.method == 'POST':
            ensure_authorized_to('create', Category)
            form = CategoryForm(request.form)
            del form.id
            if form.validate():
                slug = form.name.data.lower().replace(" ", "")
                category = Category(name=form.name.data,
                                    short_name=slug,
                                    description=form.description.data)
                project_repo.save_category(category)
                cached_cat.reset()
                msg = gettext("Category added")
                flash(msg, 'success')
            else:
                flash(gettext('Please correct the errors'), 'error')
        categories = cached_cat.get_all()
        n_projects_per_category = dict()
        for c in categories:
            n_projects_per_category[c.short_name] = \
                cached_projects.n_count(c.short_name)

        return render_template('admin/categories.html',
                               title=gettext('Categories'),
                               categories=categories,
                               n_projects_per_category=n_projects_per_category,
                               form=form)
    except Exception as e:  # pragma: no cover
        current_app.logger.error(e)
        return abort(500)
Example #5
0
 def create_categories(cls):
     names = [cls.cat_1, cls.cat_2]
     db.session.add_all([Category(name=c_name,
                                  short_name=c_name.lower().replace(" ", ""),
                                  description=c_name)
                         for c_name in names])
     db.session.commit()
Example #6
0
def db_create():
    '''Create the db'''
    with app.app_context():
        db.create_all()
        # then, load the Alembic configuration and generate the
        # version table, "stamping" it with the most recent rev:
        setup_alembic_config()
        # finally, add a minimum set of categories: Volunteer Thinking, Volunteer Sensing, Published and Draft
        categories = []
        categories.append(Category(name="Thinking",
                          short_name='thinking',
                          description='Volunteer Thinking projects'))
        categories.append(Category(name="Volunteer Sensing",
                          short_name='sensing',
                          description='Volunteer Sensing projects'))
        db.session.add_all(categories)
        db.session.commit()
Example #7
0
 def test_blogpost_public_json(self):
     """Test CATEGORY to_public_json method works with extra fields."""
     cat = CategoryFactory.create()
     cat.info = {'secret': 'mysecret', 'public': 'hello'}
     err_msg = "There should be info keys"
     with patch.dict(self.flask_app.config,
                     {'CATEGORY_INFO_PUBLIC_FIELDS': ['public']}):
         json = cat.to_public_json()
         assert list(json['info'].keys()).sort() == Category(
         ).public_info_keys().sort(), err_msg
         assert 'public' in list(json['info'].keys())
         assert 'secret' not in list(json['info'].keys())
Example #8
0
 def setUp(self):
     super(TestBlogpostModel, self).setUp()
     with self.flask_app.app_context():
         user = User(email_addr="*****@*****.**",
                     name="johndoe",
                     fullname="John Doe",
                     locale="en")
         category = Category(name=u'cat', short_name=u'cat', description=u'cat')
         project = Project(name='Application', short_name='app', description='desc',
                   owner=user, category=category)
         db.session.add(user)
         db.session.add(project)
         db.session.commit()
Example #9
0
    def test_all(self):
        """Test MODEL works"""
        username = u'test-user-1'
        user = User(name=username, fullname=username, email_addr=username)
        info = {'total': 150, 'long_description': 'hello world'}
        app = App(name=u'My New Project',
                  short_name=u'my-new-app',
                  description=u'description',
                  info=info)
        category = Category(name=u'cat', short_name=u'cat', description=u'cat')
        app.category = category
        app.owner = user
        task_info = {'question': 'My random question', 'url': 'my url'}
        task = Task(info=task_info)
        task_run_info = {'answer': u'annakarenina'}
        task_run = TaskRun(info=task_run_info)
        task.app = app
        task_run.task = task
        task_run.app = app
        task_run.user = user
        db.session.add_all([user, app, task, task_run])
        db.session.commit()
        app_id = app.id

        db.session.remove()

        app = db.session.query(App).get(app_id)
        assert app.name == u'My New Project', app
        # year would start with 201...
        assert app.created.startswith('201'), app.created
        assert app.long_tasks == 0, app.long_tasks
        assert app.hidden == 0, app.hidden
        assert app.time_estimate == 0, app
        assert app.time_limit == 0, app
        assert app.calibration_frac == 0, app
        assert app.bolt_course_id == 0
        assert len(app.tasks) == 1, app
        assert app.owner.name == username, app
        out_task = app.tasks[0]
        assert out_task.info['question'] == task_info['question'], out_task
        assert out_task.quorum == 0, out_task
        assert out_task.state == "ongoing", out_task
        assert out_task.calibration == 0, out_task
        assert out_task.priority_0 == 0, out_task
        assert len(out_task.task_runs) == 1, out_task
        outrun = out_task.task_runs[0]
        assert outrun.info['answer'] == task_run_info['answer'], outrun
        assert outrun.user.name == username, outrun

        user = User.by_name(username)
        assert user.apps[0].id == app_id, user
Example #10
0
def db_create():
    '''Create the db'''
    with app.app_context():
        db.create_all()
        # then, load the Alembic configuration and generate the
        # version table, "stamping" it with the most recent rev:
        setup_alembic_config()
        categories = []
        categories.append(
            Category(name="Collection",
                     short_name='collection',
                     description='Projects for data collection'))
        db.session.add_all(categories)
        db.session.commit()
Example #11
0
    def test_all(self):
        """Test MODEL works"""
        username = u'test-user-1'
        user = User(name=username, fullname=username, email_addr=username)
        info = {
            'total': 150,
            'long_description': 'hello world'}
        project = Project(
            name=u'My New Project',
            short_name=u'my-new-app',
            description=u'description',
            info=info)
        category = Category(name=u'cat', short_name=u'cat', description=u'cat')
        project.category = category
        project.owner = user
        task_info = {
            'question': 'My random question',
            'url': 'my url'}
        task = Task(info=task_info)
        task_run_info = {'answer': u'annakarenina'}
        task_run = TaskRun(info=task_run_info)
        task.project = project
        task_run.task = task
        task_run.project = project
        task_run.user = user
        db.session.add_all([user, project, task, task_run])
        db.session.commit()
        project_id = project.id

        db.session.remove()

        project = db.session.query(Project).get(project_id)
        assert project.name == u'My New Project', project
        # year would start with 201...
        assert project.created.startswith('201'), project.created
        assert len(project.tasks) == 1, project
        assert project.owner.name == username, project
        out_task = project.tasks[0]
        assert out_task.info['question'] == task_info['question'], out_task
        assert out_task.quorum == 0, out_task
        assert out_task.state == "ongoing", out_task
        assert out_task.calibration == 0, out_task
        assert out_task.priority_0 == 0, out_task
        assert len(out_task.task_runs) == 1, out_task
        outrun = out_task.task_runs[0]
        assert outrun.info['answer'] == task_run_info['answer'], outrun
        assert outrun.user.name == username, outrun
Example #12
0
def update_category(id):
    """Update a category."""
    try:
        category = project_repo.get_category(id)
        if category:
            ensure_authorized_to('update', category)
            form = CategoryForm(obj=category)
            form.populate_obj(category)
            if request.method == 'GET':
                response = dict(template='admin/update_category.html',
                                title=gettext('Update Category'),
                                category=category,
                                form=form)
                return handle_content_type(response)
            if request.method == 'POST':
                form = CategoryForm(request.body)
                if form.validate():
                    slug = form.name.data.lower().replace(" ", "")
                    new_category = Category(id=form.id.data,
                                            name=form.name.data,
                                            short_name=slug)
                    project_repo.update_category(new_category)
                    cached_cat.reset()
                    msg = gettext("Category updated")
                    flash(msg, 'success')
                    return redirect_content_type(url_for(".categories"))
                else:
                    msg = gettext("Please correct the errors")
                    flash(msg, 'success')
                    response = dict(template='admin/update_category.html',
                                    title=gettext('Update Category'),
                                    category=category,
                                    form=form)
                    return handle_content_type(response)
        else:
            abort(404)
    except HTTPException:
        raise
    except Exception as e:  # pragma: no cover
        current_app.logger.error(e)
        return abort(500)
Example #13
0
"""Initial database configuration.

Note:
    This file does roughly the same as running ``python cli.py db_create``, but
    does't require reconfiguring the connection credentials for alembic
"""
from pybossa.core import create_app, db
from pybossa.model.category import Category

with create_app(run_as_server=False).app_context():
    category = Category(name="Main", short_name="main", description="")
    db.create_all()
    if not db.session.query(Category).count():
        db.session.add(category)
    db.session.commit()