Example #1
0
    def undo(self):
        if not self.success:
            return True

        query_get = """
        SELECT trac_environment_key
        FROM projects
        WHERE environment_name = %s
        """
        query_str = """
        DELETE FROM trac_environment
        WHERE identifier = %s
        """
        cache = ProjectCache.instance()

        with admin_transaction() as cursor:
            try:
                cursor.execute(query_get, self.short_name)
                row = cursor.fetchone()
                cursor.execute(query_str, self.short_name)
                if row:
                    cache.clearProject(row[0])

                cache.clearProjectId(self.short_name)
            except Exception:
                conf.log.exception('Failed to removed project {0} from database'.format(self.short_name))
                return False

        return True
Example #2
0
    def save(self):
        """
        Saves the changes set to properties into database

        >>> p = Project()
        >>> p.author = newauthor
        >>> p.save()

        """
        # Ensure the data is validated
        self.validate()

        # Construct SQL update statement using db fields and setting %s placeholder for values
        sql = '''
        UPDATE projects
        SET {0}
        WHERE project_id = %s
        '''.format(', '.join(['{0}=%s'.format(field) for field in self.FIELDS.values()]))

        with admin_transaction() as cursor:
            cursor.execute(sql, ([getattr(self, pro) for pro in self.FIELDS.keys()] + [self.id]))

        # Clear the project cache
        cache = ProjectCache.instance()
        cache.clear_project(self)

        conf.log.info('Saved project {0} changes into database'.format(self))
Example #3
0
    def save(self):
        """
        Saves the changes set to properties into database

        >>> p = Project()
        >>> p.author = newauthor
        >>> p.save()

        """
        # Ensure the data is validated
        self.validate()

        # Construct SQL update statement using db fields and setting %s placeholder for values
        sql = '''
        UPDATE projects
        SET {0}
        WHERE project_id = %s
        '''.format(', '.join(
            ['{0}=%s'.format(field) for field in self.FIELDS.values()]))

        with admin_transaction() as cursor:
            cursor.execute(sql,
                           ([getattr(self, pro)
                             for pro in self.FIELDS.keys()] + [self.id]))

        # Clear the project cache
        cache = ProjectCache.instance()
        cache.clear_project(self)

        conf.log.info('Saved project {0} changes into database'.format(self))
Example #4
0
    def undo(self):
        if not self.success:
            return True

        query_get = """
        SELECT trac_environment_key
        FROM projects
        WHERE environment_name = %s
        """
        query_str = """
        DELETE FROM trac_environment
        WHERE identifier = %s
        """
        cache = ProjectCache.instance()

        with admin_transaction() as cursor:
            try:
                cursor.execute(query_get, self.short_name)
                row = cursor.fetchone()
                cursor.execute(query_str, self.short_name)
                if row:
                    cache.clearProject(row[0])

                cache.clearProjectId(self.short_name)
            except Exception:
                conf.log.exception('Failed to removed project {0} from database'.format(self.short_name))
                return False

        return True
Example #5
0
    def do(self):
        visibility = True
        published = datetime.now()
        store = CQDEUserGroupStore(self.project.trac_environment_key)

        try:
            # Create anon group and give permissions
            anon_group_name, anon_priv = conf.public_anon_group
            store.add_user_to_group('anonymous', anon_group_name)
            for priv in anon_priv:
                store.grant_permission_to_group(anon_group_name, priv)

            # Create auth group and give permissions
            auth_group_name, auth_priv = conf.public_auth_group
            store.add_user_to_group('authenticated', auth_group_name)
            for priv in auth_priv:
                store.grant_permission_to_group(auth_group_name, priv)

            #set project visibility#public = True
            store.update_project_visibility(visibility,str(published))

            # Clear project cache
            pc = ProjectCache.instance()
            pc.clearProject(self.project.id)

        except Exception:
            conf.log.exception("Could not make project public")
            return False
        return True
Example #6
0
    def _get_project(project_id=None, env_name=None, use_cache=True):
        by_env = False
        if env_name:
            if env_name == conf.sys_home_project_name:
                # TODO: eventually we want to have home project in projects table ...
                raise NotImplementedError('home project not supported')
            by_env = True
            param = env_name
        elif project_id:
            if not project_id:
                return None
            param = project_id
        else:
            return None

        cache = ProjectCache.instance()
        # Try cache
        if use_cache:
            if by_env:
                project = cache.get_project_by_env_name(env_name)
            else:
                project = cache.getProject(project_id)
            if project:
                return project

        query = ("SELECT project_id, environment_name, project_name, description, author, created, updated, "
                 "published, parent_id, icon_name, trac_environment_key "
                 "FROM projects WHERE {0} = %s".format('environment_name' if by_env else 'project_id'))

        try:
            with admin_query() as cursor:
                cursor.execute(query, param)
                row = cursor.fetchone()
                if not row:
                    return None
                project = Project(
                    id=row[0],
                    env_name=row[1],
                    project_name=row[2],
                    description=row[3],
                    author_id=row[4],
                    created=row[5],
                    updated=row[6],
                    published=row[7],
                    parent_id=row[8],
                    icon_name=row[9],
                    trac_environment_key=row[10],
                )
            if use_cache:
                if by_env:
                    cache.set_project_by_env_name(env_name, project)
                else:
                    cache.setProject(project)

            return project
        except Exception as e:
            conf.log.exception("Exception occurred while running query: '''%s'''" % query)
            return None
Example #7
0
    def _get_project(project_id=None, env_name=None, use_cache=True):
        by_env = False
        if env_name:
            by_env = True
            param = env_name
        elif project_id:
            if not project_id:
                return None
            param = project_id
        else:
            return None

        cache = ProjectCache.instance()
        # Try cache
        if use_cache:
            if by_env:
                project = cache.get_project_by_env_name(env_name)
            else:
                project = cache.getProject(project_id)
            if project:
                return project

        query = (
            "SELECT project_id, environment_name, project_name, description, author, created, updated, "
            "published, parent_id, icon_name, trac_environment_key, public "
            "FROM projects WHERE {0} = %s".format(
                'environment_name' if by_env else 'project_id'))

        try:
            with admin_query() as cursor:
                cursor.execute(query, param)
                row = cursor.fetchone()
                if not row:
                    return None
                project = Project(id=row[0],
                                  env_name=row[1],
                                  project_name=row[2],
                                  description=row[3],
                                  author_id=row[4],
                                  created=row[5],
                                  updated=row[6],
                                  published=row[7],
                                  parent_id=row[8],
                                  icon_name=row[9],
                                  trac_environment_key=row[10],
                                  public=row[11])
            if use_cache:
                if by_env:
                    cache.set_project_by_env_name(env_name, project)
                else:
                    cache.setProject(project)

            return project
        except Exception as e:
            conf.log.exception(
                "Exception occurred while running query: '''%s'''" % query)
            return None
 def testProjectNameIdCaching(self):
     env_name = "someenvnamethatwontactuallyexist"
     prj_id = 2314
     cache = ProjectCache.instance()
     
     cache.setProjectId(env_name, prj_id)
     self.assertEquals(cache.getProjectId(env_name), prj_id)
     
     cache.clearProjectId(env_name)
     self.assertEquals(cache.getProjectId(env_name), None)
Example #9
0
    def testProjectNameIdCaching(self):
        env_name = "someenvnamethatwontactuallyexist"
        prj_id = 2314
        cache = ProjectCache.instance()

        cache.setProjectId(env_name, prj_id)
        self.assertEquals(cache.getProjectId(env_name), prj_id)

        cache.clearProjectId(env_name)
        self.assertEquals(cache.getProjectId(env_name), None)
Example #10
0
    def test_check_permission(self):
        conf.use_test_db(True)
        self.load_fixtures()

        cache = ProjectCache.instance()
        cache.clearProjectId('storageauthtest')
        g = multiproject.common.permissions.GlobalPermissionPolicy(self.cm)
        g.env = self; g.env.log = self
        self.assertTrue(g.check_permission('VERSION_CONTROL_VIEW', 'kenny', None, None))
        self.assertTrue(g.check_permission('VERSION_CONTROL', 'kenny', None, None))
        self.assertFalse(g.check_permission('VERSION_CONTROL', 'cartman', None, None))
 def setUp(self):
     dbStub.addResult([[1]]) # project id
     dbStub.addResult([])
     self.cm = trac.core.ComponentManager()
     self.req = DummyReq()
     self.path = 'path' # dummy env.path
     self.project_name = "path"
     self.project_description = "description"
     trac.admin.web_ui.BasicsAdminPanel.render_admin_panel = render
     cache = ProjectCache.instance()
     cache.clearProjectId("path")
     cache.clearProject("path")
 def testProjectObjectCaching(self):
     cache = ProjectCache.instance()
     
     prj_id = 2345
     
     project = DummyProject(prj_id)
     
     cache.setProject(project)
     self.assertEquals(cache.getProject(prj_id).id, prj_id)
     
     cache.clearProject(prj_id)
     self.assertEquals(cache.getProject(prj_id), None)
Example #13
0
 def setUp(self):
     dbStub.addResult([[1]])  # project id
     dbStub.addResult([])
     self.cm = trac.core.ComponentManager()
     self.req = DummyReq()
     self.path = 'path'  # dummy env.path
     self.project_name = "path"
     self.project_description = "description"
     trac.admin.web_ui.BasicsAdminPanel.render_admin_panel = render
     cache = ProjectCache.instance()
     cache.clearProjectId("path")
     cache.clearProject("path")
Example #14
0
    def testProjectObjectCaching(self):
        cache = ProjectCache.instance()

        prj_id = 2345

        project = DummyProject(prj_id)

        cache.setProject(project)
        self.assertEquals(cache.getProject(prj_id).id, prj_id)

        cache.clearProject(prj_id)
        self.assertEquals(cache.getProject(prj_id), None)
Example #15
0
    def test_check_permission(self):
        conf.use_test_db(True)
        self.load_fixtures()

        cache = ProjectCache.instance()
        cache.clearProjectId('storageauthtest')
        g = multiproject.common.permissions.GlobalPermissionPolicy(self.cm)
        g.env = self
        g.env.log = self
        self.assertTrue(
            g.check_permission('VERSION_CONTROL_VIEW', 'kenny', None, None))
        self.assertTrue(
            g.check_permission('VERSION_CONTROL', 'kenny', None, None))
        self.assertFalse(
            g.check_permission('VERSION_CONTROL', 'cartman', None, None))
Example #16
0
 def setUp(self):
     dbStub.addResult([[1]])
     dbStub.addResult([])
     self.cm = trac.core.ComponentManager()
     self.req = DummyReq()
     self.path = '/trac/tmp'  # dummy env.path
     self.add_called = False
     self.remove_called = False
     self.orig_add = Tags.add  #@UndefinedVariable
     self.orig_remove = Tags.remove  #@UndefinedVariable
     Tags.add = self.add
     Tags.remove = self.remove
     cache = ProjectCache.instance()
     cache.clearProjectId("tmp")
     cache.clearProject("tmp")
 def setUp(self):
     dbStub.addResult([[1]])
     dbStub.addResult([])
     self.cm = trac.core.ComponentManager()
     self.req = DummyReq()
     self.path = '/trac/tmp' # dummy env.path
     self.add_called = False
     self.remove_called = False
     self.orig_add = Tags.add #@UndefinedVariable
     self.orig_remove = Tags.remove #@UndefinedVariable
     Tags.add = self.add
     Tags.remove = self.remove
     cache = ProjectCache.instance()
     cache.clearProjectId("tmp")
     cache.clearProject("tmp")
Example #18
0
    def undo(self):
        store = CQDEUserGroupStore(self.project.trac_environment_key)

        try:
            anon_group_name, anon_priv = conf.public_anon_group
            auth_group_name, auth_priv = conf.public_auth_group

            store.remove_group(anon_group_name)
            store.remove_group(auth_group_name)

            # Clear project cache
            pc = ProjectCache.instance()
            pc.clearProject(self.project.id)

        except Exception, e:
            conf.log.exception("Could not make project private")
Example #19
0
    def undo(self):
        visibility = False # make public false
        store = CQDEUserGroupStore(self.project.trac_environment_key)

        try:
            anon_group_name, anon_priv = conf.public_anon_group
            auth_group_name, auth_priv = conf.public_auth_group

            store.remove_group(anon_group_name)
            store.remove_group(auth_group_name)

            #set project visibility#public = False
            store.update_project_visibility(visibility)

            # Clear project cache
            pc = ProjectCache.instance()
            pc.clearProject(self.project.id)

        except Exception, e:
            conf.log.exception("Could not make project private")