def test_get_my_tasks(self): dbStub.addResult(project_tasks_result) p = Projects() project_list = [ Project(1, "project1", "project1", "Project 1", 1, "2010-01-01"), Project(2, "project2", "project2", "Project 2", 2, "2010-01-02") ] tasks = p.get_all_user_tasks("username", project_list) self.assertEquals(len(tasks), 6) self.assertTrue(dbStub.closed)
def query_archived_projects(self, query): """ Returns a list of archived projects given with query """ projects = [] with admin_query() as cursor: try: cursor.execute(query) for project in cursor.fetchall(): # Create regular project prj = Project(id=project[1], env_name=project[3], project_name=project[2], description=None, author_id=project[4], created=project[5], parent_id=project[6]) # Add some archiving parameters prj.archive_folder_name = project[7] prj.archive_path = conf.archive_path + "/" + project[7] prj.archive_date = project[8] prj.remove_due = project[9] prj.removed_at = project[10] prj.project_archive_id = project[0] projects.append(prj) except: conf.log.exception( "Querying archived projects failed with query '''%s'''" % query) return projects
def createProject(self, req, projectid, projectname, description, project_visibility, serviceslist): """ Request to create a new project """ services = {} if str(projectid).strip() == '': e = exceptions.Exception raise e("Incorrect project identification name") if str(projectname).strip() == '': e = exceptions.Exception raise e("Incorrect project name") users = get_userstore() author = users.getUser(req.authname) if not author.can_create_project(): raise Exception("You are not allowed to create projects") public = False published = None if project_visibility == "on" or project_visibility == "true": public = True published = datetime.now() # Create project class project = Project(id=None, env_name=unicode(projectid), project_name=projectname, description=description, author_id=author.id, created=None, public=public, published=published) if project_visibility == "on" or project_visibility == "true": services['project_visibility'] = 'on' else: services['project_visibility'] = 'off' projects = Projects() projects.getServices(services, serviceslist) # Create project try: projects.create_project(project, services) return self.get_scm_repository_url(project.env_name) except ProjectValidationException as exc: raise Exception(exc.value) except: raise Exception("Creating project failed. Try again later.")
def test_validate(self): invalid_identifier = Project(1, u'testi_', u'testi_', u'Long name', 1, None) toolong_identifier = Project(1, u'asdfghjklqwertyuiopzxcvbnmasdfahg', u'asdfghjklqwertyuiopzxcvbnmasdfahg', u'Long name', 1, None) # Test invalid identifier msg = "" try: invalid_identifier.validate() except ProjectValidationException as exc: msg = exc.value self.assertTrue( msg.startswith("Identifier can not start or end with underscore")) # Test too long identifier msg = "" try: toolong_identifier.validate() except ProjectValidationException as exc: msg = exc.value self.assertTrue(msg.startswith("Too long project indentifier. L"))
def setUp(self): userObj = User() userObj.id = 30 userObj.username = '******' self.projectObj = Project(24, 'storageauthtest', 'Storage auth testing', 'Desc', userObj.id, None, author=userObj) conf.use_test_db(True) self.load_fixtures() self.store = CQDEUserGroupStore(self.projectObj.id) self.store.remove_group('Owners') self.store.remove_group('Public contributors') self.store.remove_group('Public viewers')
def create_project(self, req): """ Handler for creating project request """ req.perm.require("PROJECT_CREATE") if req.method != 'POST': return self.create_failure( req, 'POST request needed when creating a new project') author = get_context(req)['author'] # If agreement needed but not getting it, show failure if conf.project_requires_agreed_terms and not self._is_active_user( req): return self.create_failure( req, 'You need to approve legal text to create a project!') # Read and transform some variables vcs_type = req.args.get('vcstype') vcs_name = req.args.get('vcs_name') if not self.validate_repository_name(vcs_name): return self.create_failure(req, 'Check repository name.') parent_project = None if "_project_" in req.args: parent_project = Project.get(env_name=req.args.get('_project_')) self.__require_permissions_for_cloning(req.authname, parent_project) vcs_type = conf.getVersionControlType( parent_project.env_name ) # TODO: expensive call, probably needed # Read settings settings = {} if vcs_type: settings['vcs_type'] = vcs_type if vcs_name: settings['vcs_name'] = vcs_name identifier = req.args.get('prj_short_name') name = req.args.get('prj_long_name') project_visibility = 'prj_is_public' in req.args public = False published = None if project_visibility: public = True published = datetime.now() # Create project object project = Project( id=None, env_name=identifier, project_name=name, description=req.args.get('prj_description'), author_id=author.id, created=None, # Use default which is now() public=public, published=published) # Create project environment projects = Projects() try: projects.create_project(project, settings) except ProjectValidationException as exc: self.log.warning( 'Project creation failed due the validation: {0}'.format( exc.value)) return self.create_failure(req, exc.value) except: self.log.exception('Project creation failed') return self.create_failure( req, _("Creating project failed. Try again later.")) if public: projects.add_public_project_visibility(project.id) #Add author to follow project watch_store = CQDEWatchlistStore() watch_store.watch_project(author.id, project.id) #Change project trac.ini to support multiple repositories project_env_path = conf.getEnvironmentSysPath(project.env_name) repo_env_path = conf.getEnvironmentVcsPath(project.env_name, vcs_type, vcs_name) os.rename(project_env_path + '/conf/trac.ini', project_env_path + '/conf/trac.ini.bak') oldfile = open(project_env_path + '/conf/trac.ini.bak', 'r') newfile = open(project_env_path + '/conf/trac.ini', 'w') lines = oldfile.readlines() for line in lines: newfile.write(line) if line.startswith('database ='): break newfile.write( 'repository_dir =\nrepository_type = svn\n\n[repositories]\n') newfile.write('%s.dir = %s\n' % (vcs_name, repo_env_path)) newfile.write('%s.type = %s\n' % (vcs_name, vcs_type)) newfile.close() oldfile.close() os.remove(project_env_path + '/conf/trac.ini.bak') # Notify listeners. The project object still exists, but database does not for listener in self.project_change_listeners: try: listener.project_created(project) listener.project_watchers(project) if public: listener.project_set_public(project) except: pass return self.create_success(req, project)
def setUp(self): self.projectObj = Project(None, 'short_name', 'Long name', 'Desc', 1, None) dbStub.addResult([])