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})
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)
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
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
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)
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())
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
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)
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)
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')]
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)
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)
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)
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)
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
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)
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
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)
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 })
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)
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)
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)
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
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'
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})
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)
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)
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)
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'
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():