def do_build(self, arguments): # If no course arguments are given, build all the courses. if arguments['<course>']: try: courses = [self.library.courses[c] for c in arguments['<course>']] except KeyError: raise CLIError("No such course:", c) else: courses = self.library.courses.values() for course in courses: self.out.write(u'Building %s\n' % course.title) # Make the dest directory. dest = self.library.build_path.child(course.slug) if dest.exists(): dest.rmtree() dest.mkdir(parents=True) # Create the sphinx support directories (_static, _templates) by # merging directories from the internal chucks-support directory # and from the library's theme if it exists. This has to happen # before building the handounts and Sphinx docs because both those # steps uses these components. for subdir in ('_static', '_templates'): chucksdir = self.support_path.child(subdir) themedir = self.library.theme_path.child(subdir) sources = [d for d in (chucksdir, themedir) if d.exists()] if not dest.child(subdir).exists(): dest.child(subdir).mkdir() fileutils.merge_trees(sources, dest.child(subdir)) # Write out an auth.json for the deployment step. This should # probably actually become part of the deployment step at some point. if hasattr(course, 'auth'): json.dump(course.auth, open(dest.child('auth.json'), 'w')) # Handouts have to go first: Sphinx links to the handouts. self._build_handouts(course) self._build_sphinx(course) # Copy over any extra files to be downloaded. FIXME: This is a nasty # hack. Inject these into toc.html as download links? for fname in getattr(course, 'downloads', []): p = Path(fname) if p.isabsolute(): src = p else: src = self.library.path.child(*p.components()) shutil.copy(src, dest.child('html'))
def _fget(self): d = Path(getattr(self, config_name, default)) return self.path.child(*d.components())