def create_project(config_file, course, project): """ Create the project 'project'. @type config_file: string @param config_file: path to the configuration file @type course: string @param course: course name @type project: string @param project project name @rtype: None """ project_obj = ProjectProject(config_file, course, project) user = project_obj.course['user'] group = project_obj.course['group'] directory = project_obj.project['directory'] os.makedirs(directory) if project_obj.course['group_managed']: chmod(directory, 0773) chgrp(directory, group) else: chmod(directory, 0733) chown(directory, user, group) description = raw_input("[Optional] Project description: ") project_obj.write(True, description) project_obj.add_manager(whoami)
def compress_project(config_file, course, project): """ Compress the project 'project'. @type config_file: string @param config_file: path to the configuration file @type course: string @param course: course name @type project: string @param project: project name @rtype: None @raise ValueError: The project is enabled / accepting submissions @raise ValueError: The project is already compressed @raise ValueError: The project doesn't exist. """ if ProjectCourse(config_file, course).course.has_key(project): project_obj = ProjectProject(config_file, course, project) if project_obj.project['enabled']: raise ValueError("Project %s is enabled, please disable it first." % project) # We need to check that it has a key before checking if it's Null or # not. If we skipped straight to checking if Null, and the key didn't # exist, we would get a KeyError. elif (project_obj.project.has_key('tarball') and project_obj.project['tarball']): raise ValueError("Project %s is already compressed." % project) archive_name = os.path.join(project_obj.course['directory'], project_obj.name + '.tar.gz') tar = tarfile.open(archive_name, 'w:gz') tar.add(project_obj.project['directory'], project_obj.name) tar.close() # This writes the tarball project_obj.project['tarball'] = archive_name if project_obj.course['group_managed']: chmod(archive_name, 0660) chgrp(archive_name, project_obj.course['group']) else: chmod(archive_name, 0600) project_obj.config.write() project_obj.add_manager(whoami) shutil.rmtree(project_obj.project['directory'], ignore_errors=True) else: raise ValueError("%s is not an existing project in the course %s" % (project, course))