Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
    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)