Exemple #1
0
def v_document_create():
    document_id = -1
    lang_api = LangApi()
    languages = lang_api.list()
    return render_template('admin/document/create.html',
                           languages=languages,
                           document={'id': document_id})
Exemple #2
0
def v_register():
    if current_user.is_authenticated:
        # Force logout
        logout_user()
    form = RegistrationForm()
    a_user = UserApi()
    a_role = RoleApi()
    a_lang = LangApi()
    a_o_type = OrganisationTypeApi()
    a_org = OrganisationApi()
    form.language.choices = [(l.id, l.lang) for l in a_lang.list()]
    form.organisation_type.choices = [(t.id, t.type) for t in a_o_type.list()]
    if request.method == 'POST' and form.validate_on_submit():
        user_data = {
            'email': form.email.data,
            'password': form.password.data,
            'username': form.email.data,
            'lang_id': form.language.data
        }
        try:
            public_role = a_role.get_by_role('public')
        except DatabaseItemDoesNotExist:
            flash(_('An unexpected error occurred.'))
            return redirect(url_for('admin.v_register'))

        user_data['roles'] = [public_role.id]
        if form.organisation_name:
            # Add to organisation & create
            organisation_data = {
                'name': form.organisation_name.data,
                'size': form.organisation_size.data,
                'type_id': form.organisation_type.data
            }
            try:
                new_organisation = a_org.create(organisation_data)
            except Exception as e:
                flash(_('An unexpected error occurred.'))
                logger.exception(str(e))
                return redirect(url_for('admin.v_register'))
            user_data['organisation_id'] = new_organisation.id
        try:
            new_user = a_user.create(user_data)
        except DatabaseItemAlreadyExists:
            flash(_('This e-mail address is already in use.'))
        except RequiredAttributeMissing as e:
            flash(
                _('A required form element was not submitted: {0}').format(e))
        except Exception as e:  # Remove this after debugging
            #    flash('An unexpected error occurred: {0}'.format(e))
            flash(_('An unexpected error occurred.'))
            logger.exception(str(e))
            return redirect(url_for('admin.v_register'))
        else:
            flash(
                _('You have been successfully registered. Please log in using your username and password.'
                  ))
            return redirect(url_for('admin.v_login'))
    return render_template('admin/user/register.html', form=form)
Exemple #3
0
 def test_delete(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     s = SectionApi().create({'title': 'Test', 'report_id': r.id})
     q = QuestionApi().create({'question': 'Test', 'weight': 1, 'section_id': s.id})
     assert QuestionApi().delete(q.id) is True
     assert q not in scoremodel.db.session
Exemple #4
0
 def create(self, input_data):
     """
     Add a new user. See TagApi.create().
     :param input_data:
     :return:
     """
     cleaned_data = self.clean_input(input_data)
     try:
         existing_user = self.get_by_user(cleaned_data['email'])
     except DatabaseItemDoesNotExist:
         existing_user = None
     if existing_user:
         raise DatabaseItemAlreadyExists(_e['item_exists'].format(
             User, input_data['email']))
     new_user = User(email=cleaned_data['email'],
                     password=input_data['password'])
     db.session.add(new_user)
     db.session.commit()
     # Add the roles
     for role_id in cleaned_data['roles']:
         new_user.roles.append(self.a_role.read(role_id))
     # Locale
     if cleaned_data['lang_id']:
         existing_lang = LangApi().read(cleaned_data['lang_id'])
         new_user.lang = existing_lang
     # Organisation
     if cleaned_data['organisation_id']:
         existing_organisation = OrganisationApi().read(
             cleaned_data['organisation_id'])
         new_user.organisation = existing_organisation
     db.session.commit()
     return new_user
Exemple #5
0
def v_document_edit(document_id):
    document_api = DocumentApi()
    try:
        existing_document = document_api.read(document_id)
    except DatabaseItemDoesNotExist as e:
        flash(_('No document with id {0}').format(document_id))
        return redirect(url_for('admin.v_document_list'))
    except Exception as e:
        flash(_('An unexpected error occurred: {0}').format(e))
        # flash('An unexpected error occurred.')
        return redirect(url_for('admin.v_document_list'))
    lang_api = LangApi()
    languages = lang_api.list()
    return render_template('admin/document/create.html',
                           languages=languages,
                           document=existing_document)
Exemple #6
0
def v_report_edit(report_id):
    a_report = ReportApi()
    a_answer = AnswerApi()
    a_risk_factor = RiskFactorApi()
    a_lang = LangApi()
    try:
        existing_report = a_report.read(report_id)
    except DatabaseItemDoesNotExist:
        flash(_('No report with id {0} exists.').format(report_id))
        return redirect(url_for('admin.v_report_list'))
    # Do not use fallback_locale for the answers and risk_factor choices: if they don't exist, the administrator
    # must create them.
    report_lang = a_lang.read(existing_report.lang_id)
    return render_template('admin/report/edit.html', report=existing_report,
                           all_risk_factors=a_risk_factor.by_lang(report_lang.lang),
                           all_answers=a_answer.by_lang(report_lang.lang), languages=lang_api.list())
Exemple #7
0
 def update(self, user_id, input_data, update_password=True):
     """
     Update an existing user. See TagApi.update()
     If update_password is true, the password will be updated,
     even if it is empty. Otherwise, it will not be changed,
     even if it has changed from what we have in the DB.
     :param user_id:
     :param input_data:
     :param update_password:
     :return:
     """
     cleaned_data = self.clean_input(input_data)
     existing_user = self.read(user_id)
     # Update simple attributes
     existing_user = self.update_user(existing_user,
                                      cleaned_data,
                                      update_password=update_password)
     # Update roles
     existing_user = self.remove_roles(existing_user)
     for role_id in cleaned_data['roles']:
         existing_user.roles.append(self.a_role.read(role_id))
         # Locale
     if cleaned_data['lang_id']:
         existing_lang = LangApi().read(cleaned_data['lang_id'])
         existing_user.lang = existing_lang
         # Organisation
     if cleaned_data['organisation_id']:
         existing_organisation = OrganisationApi().read(
             cleaned_data['organisation_id'])
         existing_user.organisation = existing_organisation
     db.session.commit()
     return existing_user
Exemple #8
0
 def test_update(self):
     en = LangApi().by_lang('en')
     d = DocumentApi().create({'name': 'Foo', 'lang_id': en.id})
     d_u = DocumentApi().update(d.id, {'name': 'Bar', 'lang_id': en.id})
     assert d_u.name == 'Bar'
     assert d_u.id == d.id
     assert d_u == DocumentApi().read(d.id)
     self.assertIsInstance(d_u, Document)
Exemple #9
0
 def test_update(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     s = SectionApi().create({'title': 'Test', 'report_id': r.id})
     q = QuestionApi().create({'question': 'Test', 'weight': 1, 'section_id': s.id})
     q_d = QuestionApi().update(q.id, {'question': 'Foo', 'weight': 1, 'section_id': s.id})
     assert q_d == QuestionApi().read(q.id)
     assert QuestionApi().read(q.id).question == 'Foo'
     self.assertIsInstance(q_d, Question)
Exemple #10
0
 def test_read(self):
     en = LangApi().by_lang('en')
     d = DocumentApi().create({
         'name': 'Foo',
         'lang_id': en.id,
         'filename': 'foo.txt'
     })
     assert d == DocumentApi().read(d.id)
     assert d.id in [i.id for i in DocumentApi().by_filename('foo.txt')]
Exemple #11
0
 def test_create(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     s = SectionApi().create({'title': 'Test', 'report_id': r.id})
     q = QuestionApi().create({'question': 'Test', 'weight': 1, 'section_id': s.id})
     assert q in scoremodel.db.session
     # This only works in a context manager, and not with self.assertRaises() - I have no idea why.
     with self.assertRaises(DatabaseItemAlreadyExists):
         x = QuestionApi().create({'question': 'Test', 'weight': 1, 'section_id': s.id})
     self.assertIsInstance(q, Question)
Exemple #12
0
 def test_complex(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     s = SectionApi().create({'title': 'Test', 'report_id': r.id})
     ri = RiskFactorApi().create({'risk_factor': 'Test', 'lang_id': en.id})
     a = AnswerApi().create({'answer': 'Test', 'lang_id': en.id})
     q = QuestionApi().create({'question': 'Test', 'weight': 1, 'section_id': s.id, 'answers': [a.id],
                               'risk_factor_id': ri.id})
     assert q in scoremodel.db.session
     self.assertIsInstance(q, Question)
Exemple #13
0
 def test_create(self):
     en = LangApi().by_lang('en')
     d = DocumentApi().create({'name': 'Foo', 'lang_id': en.id})
     assert d in scoremodel.db.session
     self.assertRaises(DatabaseItemAlreadyExists,
                       DocumentApi().create, {
                           'name': 'Foo',
                           'lang_id': en.id
                       })
     self.assertIsInstance(d, Document)
Exemple #14
0
 def test_read(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     u = UserApi().create({'email': '*****@*****.**', 'password': '******'})
     o = UserReportApi().create({
         'name': 'Test',
         'user_id': u.id,
         'report_id': r.id
     })
     assert o == UserReportApi().read(o.id)
Exemple #15
0
 def test_read(self):
     en = LangApi().by_lang('en')
     a = AnswerApi().create({'answer': 'Nono', 'lang_id': en.id})
     a_b = AnswerApi().create({
         'answer': 'Yesyes',
         'lang_id': en.id,
         'value': 5
     })
     assert a == AnswerApi().read(a.id)
     assert len(AnswerApi().by_lang(en.lang)) == 2
Exemple #16
0
 def test_update(self):
     en = LangApi().by_lang('en')
     r = RiskFactorApi().create({'risk_factor': 'Test', 'lang_id': en.id})
     r_b = RiskFactorApi().update(r.id, {
         'risk_factor': 'Foobar',
         'lang_id': en.id
     })
     assert r_b.risk_factor == 'Foobar'
     assert r_b == RiskFactorApi().read(r.id)
     assert RiskFactorApi().read(r.id).risk_factor == 'Foobar'
     self.assertIsInstance(r_b, RiskFactor)
Exemple #17
0
 def test_delete(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     u = UserApi().create({'email': '*****@*****.**', 'password': '******'})
     o = UserReportApi().create({
         'name': 'Test',
         'user_id': u.id,
         'report_id': r.id
     })
     assert UserReportApi().delete(o.id) is True
     assert o not in scoremodel.db.session
Exemple #18
0
 def test_create(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     u = UserApi().create({'email': '*****@*****.**', 'password': '******'})
     o = UserReportApi().create({
         'name': 'Test',
         'user_id': u.id,
         'report_id': r.id
     })
     assert o in scoremodel.db.session
     # No checking for already_exists
     self.assertIsInstance(o, UserReport)
Exemple #19
0
 def test_create(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     s = SectionApi().create({'title': 'Test', 'report_id': r.id})
     assert s in scoremodel.db.session
     assert s.order_in_report == 0
     self.assertIsInstance(s, Section)
     self.assertRaises(DatabaseItemAlreadyExists,
                       SectionApi().create, {
                           'title': 'Test',
                           'report_id': r.id
                       })
Exemple #20
0
 def test_update(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     s = SectionApi().create({'title': 'Test', 'report_id': r.id})
     s_u = SectionApi().update(s.id, {
         'title': 'Toto',
         'report_id': r.id,
         'order_in_report': 1
     })
     assert s_u == SectionApi().read(s.id)
     assert SectionApi().read(s.id).title == 'Toto'
     assert SectionApi().read(s.id).order_in_report == 1
     self.assertIsInstance(s_u, Section)
Exemple #21
0
 def test_complex(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     s = SectionApi().create({
         'title': 'Test',
         'report_id': r.id,
         'order_in_report': 2,
         'weight': 5
     })
     assert s in scoremodel.db.session
     assert s.order_in_report == 2
     assert s.weight == 5
     self.assertIsInstance(s, Section)
Exemple #22
0
 def test_update(self):
     en = LangApi().by_lang('en')
     a = AnswerApi().create({
         'answer': 'Nono',
         'lang_id': en.id,
         'value': 5
     })
     a_b = AnswerApi().update(a.id, {'answer': 'Yesyes', 'lang_id': en.id})
     assert a_b.answer == 'Yesyes'
     assert a_b.lang_id == en.id
     assert a_b == AnswerApi().read(a.id)
     assert a_b.value == 1  # When updating, you have to provide all the values, including the unchanged ones
     self.assertIsInstance(a_b, Answer)
Exemple #23
0
 def test_delete(self):
     en = LangApi().by_lang('en')
     d = DocumentApi().create({'name': 'Foo', 'lang_id': en.id})
     r = self.client.post(url_for('admin.v_login'),
                          data={
                              'email': '*****@*****.**',
                              'password': '******'
                          })
     data = dict(input_file=((io.BytesIO(b'test')), 'test.png'))
     r = self.client.post(url_for('api.v_api_document_resource_upload',
                                  document_id=d.id),
                          content_type='multipart/form-data',
                          data=data)
     assert FileApi().delete('test.png') is True
Exemple #24
0
 def test_set_filenames(self):
     en = LangApi().by_lang('en')
     d = DocumentApi().create({
         'name': 'Foo',
         'lang_id': en.id,
         'filename': 'foo.txt',
         'original_filename': 'bar.txt'
     })
     d_x = DocumentApi().set_filenames(d.id,
                                       filename='renamed.txt',
                                       original_filename='notrenamed.txt')
     assert d_x.filename == 'renamed.txt'
     assert d_x.original_filename == 'notrenamed.txt'
     assert DocumentApi().read(d.id).filename == 'renamed.txt'
     assert DocumentApi().read(d.id).original_filename == 'notrenamed.txt'
Exemple #25
0
def add_lang():
    languages = app.config['LANGUAGES']
    lang_api = LangApi()
    if len(languages) == 0:
        languages.append('en')
    for lang in languages:
        try:
            lang_api.by_lang(lang)
        except DatabaseItemDoesNotExist:
            lang_api.create({'lang': lang})
Exemple #26
0
 def test_update(self):
     en = LangApi().by_lang('en')
     r = ReportApi().create({'title': 'Test', 'lang_id': en.id})
     u = UserApi().create({'email': '*****@*****.**', 'password': '******'})
     o = UserReportApi().create({
         'name': 'Test',
         'user_id': u.id,
         'report_id': r.id
     })
     o_x = UserReportApi().update(o.id, {
         'name': 'Foo',
         'user_id': u.id,
         'report_id': r.id
     })
     assert o_x == UserReportApi().read(o.id)
     assert UserReportApi().read(o.id).name == 'Foo'
     self.assertIsInstance(o_x, UserReport)
Exemple #27
0
 def test_create(self):
     en = LangApi().by_lang('en')
     r = RiskFactorApi().create({'risk_factor': 'Test', 'lang_id': en.id})
     assert r in scoremodel.db.session
     assert r.value == 1
     r_a = RiskFactorApi().create({
         'risk_factor': 'ValueTest',
         'lang_id': en.id,
         'value': 5
     })
     assert r_a.value == 5
     self.assertRaises(DatabaseItemAlreadyExists,
                       RiskFactorApi().create, {
                           'risk_factor': 'Test',
                           'lang_id': en.id
                       })
     self.assertIsInstance(r, RiskFactor)
Exemple #28
0
 def test_create(self):
     en = LangApi().by_lang('en')
     a = AnswerApi().create({'answer': 'Nono', 'lang_id': en.id})
     assert a in scoremodel.db.session
     assert a.value == 1
     a_b = AnswerApi().create({
         'answer': 'Yesyes',
         'lang_id': en.id,
         'value': 5
     })
     assert a_b in scoremodel.db.session
     assert a_b.value == 5
     self.assertRaises(DatabaseItemAlreadyExists,
                       AnswerApi().create, {
                           'answer': 'Nono',
                           'lang_id': en.id
                       })
     self.assertIsInstance(a, Answer)
Exemple #29
0
 def test_create(self):
     en = LangApi().by_lang('en')
     d = DocumentApi().create({'name': 'Foo', 'lang_id': en.id})
     r = self.client.post(url_for('admin.v_login'),
                          data={
                              'email': '*****@*****.**',
                              'password': '******'
                          })
     self.assert_redirects(r, url_for('site.v_index'))
     data = dict(input_file=((io.BytesIO(b'test')), 'test.png'))
     r = self.client.post(url_for('api.v_api_document_resource_upload',
                                  document_id=d.id),
                          content_type='multipart/form-data',
                          data=data)
     self.assert200(r)
     d_u = DocumentApi().read(d.id)
     assert d_u.filename == secure_filename('test.png')
     assert d_u.original_filename == 'test.png'
Exemple #30
0
from flask import request, render_template, url_for, redirect, flash
from flask_login import login_required
from flask_babel import gettext as _
from scoremodel.views.admin import admin
from scoremodel.modules.api.risk_factor import RiskFactorApi
from scoremodel.modules.api.lang import LangApi
from scoremodel.modules.error import RequiredAttributeMissing, DatabaseItemDoesNotExist, DatabaseItemAlreadyExists
from scoremodel.modules.forms.risk_factors import RiskFactorCreateForm
from scoremodel.modules.forms.generic import GenericCreateForm, GenericDeleteForm
from scoremodel.modules.user.authentication import must_be_admin

lang_api = LangApi()


@admin.route('/risk_factor/list')
@login_required
@must_be_admin
def v_risk_factor_list():
    a_api = RiskFactorApi()
    l_risk_factors = a_api.list()
    return render_template('admin/generic/list.html', items=l_risk_factors, item_type='risk_factor',
                           name='risk_factor', canonical_name=_('Risk Factor'))


@admin.route('/risk_factor/create', methods=['GET', 'POST'])
@login_required
@must_be_admin
def v_risk_factor_create():
    form = RiskFactorCreateForm()
    form.lang.choices = [(l.id, l.lang) for l in lang_api.list()]
    if request.method == 'POST' and form.validate_on_submit():