Exemplo n.º 1
0
 def load_renderer(self):
     templates_path = [
         g.public_templates_path,
         os.path.join(g.theme.path, 'templates')
     ]
     self.renderer = Renderer(
         templates_path=templates_path,
         generator=self
     )
Exemplo n.º 2
0
class Generator(object):
    def __init__(self, config_path, local=False, base_url=None):
        self.config_path = config_path
        self.local = local

        self.base_url = base_url
        g.generator = self

        self.posts = []
        self.pages = []
        self.non_post_files = []
        self.archives = []
        self.tags = []
        self.caches = []
        self.config = {}
        self.renderer = None
        self.reset()

    def reset(self):
        self.posts = []
        self.pages = []
        self.non_post_files = []
        self.archives = g.archives = Archives()
        self.tags = g.tags = Tags()
        self.load_config()
        self.load_posts()
        self.load_renderer()
        self.caches = {"static_url": {}, "url_for": {}}

    def load_config(self):
        self.config = g.config = catsup.parser.config(self.config_path,
                                                      local=self.local,
                                                      base_url=self.base_url)

    def load_posts(self):
        for f in os.listdir(g.source):
            if f.startswith("."):  # hidden file
                continue
            filename, ext = os.path.splitext(f)
            ext = ext.lower()[1:]
            reader = get_reader(ext)
            if reader is not None:
                logger.info('Loading file %s' % filename)
                path = os.path.join(g.source, f)
                post = reader(path)
                if post.type == "page":
                    self.pages.append(post)
                else:
                    self.posts.append(post)
            else:
                self.non_post_files.append(f)
        self.posts.sort(key=lambda x: x.datetime, reverse=True)

    def load_renderer(self):
        templates_path = [
            g.public_templates_path,
            os.path.join(g.theme.path, 'templates')
        ]
        self.renderer = Renderer(templates_path=templates_path, generator=self)

    def generate_feed(self):
        feed = Feed(self.posts)
        feed.render(self.renderer)

    def generate_pages(self):
        page = Page(self.posts)
        page.render_all(self.renderer)

    def generate_posts(self):
        for post in self.posts:
            post.add_archive_and_tags()
            post.render(self.renderer)
        for page in self.pages:
            page.render(self.renderer)

    def generate_tags(self):
        self.tags.render(self.renderer)

    def generate_archives(self):
        self.archives.render(self.renderer)

    def generate_other_pages(self):
        NotFound().render(self.renderer)

    def copy_static_files(self):
        static_path = self.config.config.static_output

        smart_copy(os.path.join(g.theme.path, 'static'), static_path)
        smart_copy(self.config.config.static_source, static_path)
        for f in self.non_post_files:
            smart_copy(os.path.join(g.source, f),
                       os.path.join(self.config.config.output, f))

    def generate(self):
        started_loading = time.time()
        self.reset()
        finish_loading = time.time()
        logger.info("Loaded config and %s posts in %.3fs" %
                    (len(self.posts), finish_loading - started_loading))
        if self.posts:
            self.generate_posts()
            self.generate_tags()
            self.generate_archives()
            self.generate_feed()
            self.generate_pages()
        else:
            logger.warning("Can't find any post.")
        self.generate_other_pages()
        self.copy_static_files()
        self.renderer.render_sitemap()
        finish_generating = time.time()
        logger.info("Generated %s posts in %.3fs" %
                    (len(self.posts), finish_generating - finish_loading))
        logger.info("Generating finished in %.3fs" %
                    (finish_generating - started_loading))
Exemplo n.º 3
0
class Generator(object):
    def __init__(self, config_path, local=False, base_url=None):
        self.config_path = config_path
        self.local = local

        self.base_url = base_url
        g.generator = self

        self.posts = []
        self.pages = []
        self.non_post_files = []
        self.archives = []
        self.tags = []
        self.caches = []
        self.config = {}
        self.renderer = None
        self.reset()

    def reset(self):
        self.posts = []
        self.pages = []
        self.non_post_files = []
        self.archives = g.archives = Archives()
        self.tags = g.tags = Tags()
        self.load_config()
        self.load_posts()
        self.load_renderer()
        self.caches = {
            "static_url": {},
            "url_for": {}
        }

    def load_config(self):
        self.config = g.config = catsup.parser.config(
            self.config_path,
            local=self.local,
            base_url=self.base_url
        )

    def load_posts(self):
        for f in os.listdir(g.source):
            if f.startswith("."):  # hidden file
                continue
            filename, ext = os.path.splitext(f)
            ext = ext.lower()[1:]
            reader = get_reader(ext)
            if reader is not None:
                logger.info('Loading file %s' % filename)
                path = os.path.join(g.source, f)
                post = reader(path)
                if post.type == "page":
                    self.pages.append(post)
                else:
                    self.posts.append(post)
            else:
                self.non_post_files.append(f)
        self.posts.sort(
            key=lambda x: x.datetime,
            reverse=True
        )

    def load_renderer(self):
        templates_path = [
            g.public_templates_path,
            os.path.join(g.theme.path, 'templates')
        ]
        self.renderer = Renderer(
            templates_path=templates_path,
            generator=self
        )

    def add_archives_and_tags(self):
        for post in self.posts:
            post.add_archive_and_tags()

    def generate_feed(self):
        feed = Feed(self.posts)
        feed.render(self.renderer)

    def generate_pages(self):
        page = Page(self.posts)
        page.render_all(self.renderer)

    def generate_posts(self):
        for post in self.posts:
            post.render(self.renderer)
        for page in self.pages:
            page.render(self.renderer)

    def generate_tags(self):
        self.tags.render(self.renderer)

    def generate_archives(self):
        self.archives.render(self.renderer)

    def generate_other_pages(self):
        NotFound().render(self.renderer)

    def copy_static_files(self):
        static_path = self.config.config.static_output

        smart_copy(
            os.path.join(g.theme.path, 'static'),
            static_path
        )
        smart_copy(
            self.config.config.static_source,
            static_path
        )
        for f in self.non_post_files:
            smart_copy(
                os.path.join(g.source, f),
                os.path.join(self.config.config.output, f)
            )

    def generate(self):
        started_loading = time.time()
        self.reset()
        self.add_archives_and_tags()
        finish_loading = time.time()
        logger.info(
            "Loaded config and %s posts in %.3fs" %
            (len(self.posts), finish_loading - started_loading)
        )
        if self.posts:
            self.generate_posts()
            self.generate_tags()
            self.generate_archives()
            self.generate_feed()
            self.generate_pages()
        else:
            logger.warning("Can't find any post.")
        self.generate_other_pages()
        self.copy_static_files()
        self.renderer.render_sitemap()
        finish_generating = time.time()
        logger.info(
            "Generated %s posts in %.3fs" %
            (len(self.posts), finish_generating - finish_loading)
        )
        logger.info(
            "Generating finished in %.3fs" %
            (finish_generating - started_loading)
        )