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()
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()
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)
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()
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()
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())
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()
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
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()
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
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)
"""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()