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
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))
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))
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
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
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)
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)
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]]) 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 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")
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")