Example #1
0
    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
            )
Example #2
0
 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)
Example #3
0
    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)
Example #4
0
 def test_path_append(self):
     self.assertEqual(path_append("/path1", "/path2"), "/path1/path2")
Example #5
0
 def url(self, name, **kwargs):
     return path_append(
         settings.SITE_ROOT,
         self._routes[name].filename.format(**kwargs)
     )