def post(self): """ Handles building creation, editing and deletion. """ current_user = User.get(self.session['user']['id']) form = self.form try: if form.action == 'delete': if not current_user.super_admin: raise flask.redirect('',code=403) try: id = int(form.id) except ValueError: logger.warning('user %s tries to delete a building with invalid id (id = %s)', current_user.log_name, str(form.id)) raise ImmediateFeedback(form.action, 'invalid_id') try: screens = Screen.selectBy(building=id) if screens.count() > 0: logger.warning('user %s tries to delete a building with screens still present in this building (id = %s)', current_user.log_name, str(id)) raise ImmediateFeedback(form.action, 'delete_building_but_screens_present', [(s.id, s.name) for s in screens]) Building.delete(id) logger.info("building %s has been deleted by user %s", str(id), current_user.log_name) except SQLObjectNotFound as e: logger.warning("user %s tries to delete a building with an id that doesn't exist (id = %s)", current_user.log_name, str(form.id)) raise ImmediateFeedback(form.action, 'no_id_matching') else: name = form.name.strip() if name == "": raise ImmediateFeedback(form.action, 'empty_name') if len(form.name) > Building.sqlmeta.columns['name'].length: raise ImmediateFeedback(form.action, 'too_long_name') if form.action == 'create': try: Building(name=form.name, city=form.city) logger.info("building %s has been created by user %s", form.name, current_user.log_name) except DuplicateEntryError: logger.warning("user %s tries to create a building with a name that already exists (name = %s)", current_user.log_name, form.name) raise ImmediateFeedback(form.action, 'name_already_exists') elif form.action == 'edit': try: id = int(form.id) except ValueError: logger.warning('user %s tries to edit a building with invalid id (id = %s)', current_user.log_name, str(form.id)) raise ImmediateFeedback(form.action, 'invalid_building_id') try: building = Building.get(id) except SQLObjectNotFound as e: logger.warning("user %s tries to edit a building with an id that doesn't exist (id = %s)", current_user.log_name, str(form.id)) raise ImmediateFeedback(form.action, 'no_id_matching') try: building.name = form.name building.city = form.city except DuplicateEntryError: logger.warning("user %s tries to edit the building %s with a name already present (name = %d)", current_user.log_name, str(form.id), form.name) raise ImmediateFeedback(form.action, 'name_already_exists') logger.info("building %s has been edited by user %s (new name = %s)", str(id), current_user.log_name, form.name) add_feedback(form.action, 'ok') except ImmediateFeedback: store_form(form) return self.render_page()
def runTest(self): """ Tests the Screen object. """ try: b = Building(name="test") s = Screen(name='News Réaumur', building=b) assert_not_equal(None, s) s.set(name="testNew") assert_equal(s.name, "testNew") t = Screen.delete(s.id) Building.delete((b.id)) assert_equal(t, None) except DuplicateEntryError: assert_true(False) return
def tearDown(self): try: Building.delete(self.building_id) Building.delete(self.building2_id) except SQLObjectNotFound: pass for email in [ self.user_nothing_email, self.user_contributor_email, self.user_channel_admin_email, self.user_administrator_email, self.user_super_administrator_email ]: User.deleteBy(email=email) self.channel.destroySelf() Plugin.deleteBy(name="dummy") super().tearDown()
def runTest(self): """ Tests the Building object. """ try: Building(name="test") except DuplicateEntryError: assert_true(False) b = Building.selectBy(name="test").getOne() assert_not_equal(b, None) assert_equal(b.name, "test") try: b.set(name="newName") except DuplicateEntryError: assert_true(False) assert_equal(b.name, "newName") b.set(name="test") t = Building.delete(b.id) assert_equal(t, None) t = Building.selectBy(name="test").getOne(None) assert_equal(t, None)