def extend(self, path, prefix=None): module = import_path(path) mapper = module.mapper() for name, route in mapper: filename = route.filename if prefix is not None: filename = path_append(prefix, filename) self.add( name, filename, route.controller, route.permutations, route.kwargs )
def copy_public_dir(self): for src_dir, dirnames, filenames in os.walk(settings.PUBLIC_DIR): dest_dir = path_append( settings.BUILD_DIR, src_dir[len(settings.PUBLIC_DIR):] ) try: os.mkdir(dest_dir) except OSError as err: if err.errno != errno.EEXIST: raise for filename in filenames: dest_path = os.path.join(dest_dir, filename) src_path = os.path.join(src_dir, filename) if file_updated(dest_path, src_path): self.logger.info("[copy] %(src)s %(dest)s", { 'src': src_path, 'dest': dest_path, }) shutil.copy(src_path, dest_dir)
def __call__(self): self.copy_public_dir() for name, route in routes.mapper: filename = path_append(settings.BUILD_DIR, route.filename) module, controller = route.controller.rsplit('.', 1) module = import_path(module) controller = getattr(module, controller) permutations = route.permutations \ if route.permutations is not None else [{}] for permutation in permutations: fmt_filename = filename.format(**permutation) try: os.makedirs(os.path.dirname(fmt_filename)) except OSError as err: if err.errno != errno.EEXIST: raise uri = 'http://{domain}{path}'.format( domain=settings.SITE_DOMAIN, path=route.filename ) static_file = StaticFile(fmt_filename, uri) kwargs = {} if route.kwargs: kwargs.update(route.kwargs) kwargs.update(permutation) try: controller(static_file, **kwargs) except AlreadyUpdatedError: pass else: self.logger.info("[%(controller)s] %(filename)s", { 'controller': route.controller, 'filename': fmt_filename, }) static_file.save(fmt_filename)
def test_path_append(self): self.assertEqual(path_append("/path1", "/path2"), "/path1/path2")
def url(self, name, **kwargs): return path_append( settings.SITE_ROOT, self._routes[name].filename.format(**kwargs) )