@@ -50,15 +50,15 @@ class Generator(object): | |||||
logger.info("Configuring the template environment") | logger.info("Configuring the template environment") | ||||
self.template.configure(self.site.config) | self.template.configure(self.site.config) | ||||
def rebuild_if_needed(self): | |||||
def reload_if_needed(self): | |||||
""" | """ | ||||
Checks if the site requries a rebuild and builds if | |||||
Checks if the site requries a reload and loads if | |||||
necessary. | necessary. | ||||
""" | """ | ||||
#TODO: Perhaps this is better suited in Site | #TODO: Perhaps this is better suited in Site | ||||
if not len(self.site.content.child_nodes): | if not len(self.site.content.child_nodes): | ||||
logger.info("Reading site contents") | logger.info("Reading site contents") | ||||
self.site.build() | |||||
self.site.load() | |||||
def generate_all(self): | def generate_all(self): | ||||
""" | """ | ||||
@@ -66,7 +66,7 @@ class Generator(object): | |||||
""" | """ | ||||
logger.info("Reading site contents") | logger.info("Reading site contents") | ||||
self.initialize_template_if_needed() | self.initialize_template_if_needed() | ||||
self.rebuild_if_needed() | |||||
self.reload_if_needed() | |||||
logger.info("Generating site to [%s]" % | logger.info("Generating site to [%s]" % | ||||
self.site.config.deploy_root_path) | self.site.config.deploy_root_path) | ||||
@@ -78,7 +78,7 @@ class Generator(object): | |||||
generates the entire site. | generates the entire site. | ||||
""" | """ | ||||
self.initialize_template_if_needed() | self.initialize_template_if_needed() | ||||
self.rebuild_if_needed() | |||||
self.reload_if_needed() | |||||
node = None | node = None | ||||
if node_path: | if node_path: | ||||
node = self.site.content.node_from_path(node_path) | node = self.site.content.node_from_path(node_path) | ||||
@@ -90,7 +90,7 @@ class Generator(object): | |||||
non-existent, generates the entire website. | non-existent, generates the entire website. | ||||
""" | """ | ||||
self.initialize_template_if_needed() | self.initialize_template_if_needed() | ||||
self.rebuild_if_needed() | |||||
self.reload_if_needed() | |||||
if not node: | if not node: | ||||
return self.generate_all() | return self.generate_all() | ||||
try: | try: | ||||
@@ -104,7 +104,7 @@ class Generator(object): | |||||
generats the entire website. | generats the entire website. | ||||
""" | """ | ||||
self.initialize_template_if_needed() | self.initialize_template_if_needed() | ||||
self.rebuild_if_needed() | |||||
self.reload_if_needed() | |||||
resource = None | resource = None | ||||
if resource_path: | if resource_path: | ||||
resource = self.site.content.resource_from_path(resource_path) | resource = self.site.content.resource_from_path(resource_path) | ||||
@@ -116,7 +116,7 @@ class Generator(object): | |||||
non-existent, generates the entire website. | non-existent, generates the entire website. | ||||
""" | """ | ||||
self.initialize_template_if_needed() | self.initialize_template_if_needed() | ||||
self.rebuild_if_needed() | |||||
self.reload_if_needed() | |||||
if not resource: | if not resource: | ||||
return self.generate_all() | return self.generate_all() | ||||
try: | try: | ||||
@@ -16,7 +16,7 @@ class Layout(object): | |||||
""" | """ | ||||
@staticmethod | @staticmethod | ||||
def find_layout(layout_name="basic"): | |||||
def find_layout(layout_name='basic'): | |||||
""" | """ | ||||
Find the layout with a given name. | Find the layout with a given name. | ||||
Search order: | Search order: | ||||
@@ -33,7 +33,7 @@ class Layout(object): | |||||
return layout_folder | return layout_folder | ||||
@staticmethod | @staticmethod | ||||
def _get_layout_folder(root, layout_name="basic"): | |||||
def _get_layout_folder(root, layout_name='basic'): | |||||
""" | """ | ||||
Finds the layout folder from the given root folder. | Finds the layout folder from the given root folder. | ||||
If it does not exist, return None | If it does not exist, return None | ||||
@@ -1,5 +1,78 @@ | |||||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||
# 1. start_node | |||||
# 2. start_resource | |||||
# 3. end_resource | |||||
# 4. end_node | |||||
""" | |||||
Contains definition for a plugin protocol and other utiltities. | |||||
""" | |||||
class Plugin(object): | |||||
""" | |||||
The plugin protocol | |||||
""" | |||||
def __init__(self, site): | |||||
super(Plugin, self).__init__() | |||||
self.site = site | |||||
def template_loaded(self, template): | |||||
""" | |||||
Called when the template for the site has been identified. | |||||
""" | |||||
pass | |||||
def prepare_site(self): | |||||
""" | |||||
Called when generation is about to take place. | |||||
""" | |||||
pass | |||||
def site_load_complete(self): | |||||
""" | |||||
Called when the site is built complete. This implies that all the | |||||
nodes and resources have been identified and are accessible in the | |||||
site variable. | |||||
""" | |||||
pass | |||||
def prepare_node(self, node): | |||||
""" | |||||
Called when a node is about to be processed for generation. | |||||
""" | |||||
pass | |||||
def prepare_resource(self, resource, text): | |||||
""" | |||||
Called when a resource is about to be processed for generation. | |||||
The `text` parameter contains the, resource text at this point | |||||
in its lifecycle. It is the text that has been loaded and any | |||||
plugins that are higher in the order may have tampered with it. | |||||
But the text has not been processed by the template yet. | |||||
If this function returns a value, it is used as the text for further | |||||
processing. | |||||
""" | |||||
return text | |||||
def process_resource(self, resource, text): | |||||
""" | |||||
Called when a resource has been processed by the template. | |||||
The `text` parameter contains the, resource text at this point | |||||
in its lifecycle. It is the text that has been processed by the | |||||
template and any plugins that are higher in the order may have | |||||
tampered with it. | |||||
If this function returns a value, it is used as the text for further | |||||
processing. | |||||
""" | |||||
return text | |||||
def node_complete(self, node): | |||||
""" | |||||
Called when all the resources in the node have been processed. | |||||
""" | |||||
pass | |||||
def site_complete(self): | |||||
""" | |||||
Called when the entire site has been processed. | |||||
""" | |||||
pass |
@@ -243,9 +243,9 @@ class RootNode(Node): | |||||
(resource.relative_path, self.source_folder)) | (resource.relative_path, self.source_folder)) | ||||
return resource | return resource | ||||
def build(self): | |||||
def load(self): | |||||
""" | """ | ||||
Walks the `source_folder` and builds the sitemap. | |||||
Walks the `source_folder` and loads the sitemap. | |||||
Creates nodes and resources, reads metadata and injects attributes. | Creates nodes and resources, reads metadata and injects attributes. | ||||
This is the model for hyde. | This is the model for hyde. | ||||
""" | """ | ||||
@@ -276,9 +276,9 @@ class Site(object): | |||||
self.config = config if config else Config(self.sitepath) | self.config = config if config else Config(self.sitepath) | ||||
self.content = RootNode(self.config.content_root_path, self) | self.content = RootNode(self.config.content_root_path, self) | ||||
def build(self): | |||||
def load(self): | |||||
""" | """ | ||||
Walks the content and media folders to build up the sitemap. | |||||
Walks the content and media folders to load up the sitemap. | |||||
""" | """ | ||||
self.content.build() | |||||
self.content.load() |
@@ -27,7 +27,7 @@ def delete_test_site(): | |||||
@with_setup(create_test_site, delete_test_site) | @with_setup(create_test_site, delete_test_site) | ||||
def test_generate_resource_from_path(): | def test_generate_resource_from_path(): | ||||
site = Site(TEST_SITE) | site = Site(TEST_SITE) | ||||
site.build() | |||||
site.load() | |||||
gen = Generator(site) | gen = Generator(site) | ||||
gen.generate_resource_at_path(TEST_SITE.child('content/about.html')) | gen.generate_resource_at_path(TEST_SITE.child('content/about.html')) | ||||
about = File(Folder(site.config.deploy_root_path).child('about.html')) | about = File(Folder(site.config.deploy_root_path).child('about.html')) | ||||
@@ -52,9 +52,9 @@ def test_node_relative_path(): | |||||
c = r.add_node(TEST_SITE_ROOT.child_folder('content/blog/2010/december')) | c = r.add_node(TEST_SITE_ROOT.child_folder('content/blog/2010/december')) | ||||
assert c.relative_path == 'blog/2010/december' | assert c.relative_path == 'blog/2010/december' | ||||
def test_build(): | |||||
def test_load(): | |||||
s = Site(TEST_SITE_ROOT) | s = Site(TEST_SITE_ROOT) | ||||
s.build() | |||||
s.load() | |||||
path = 'blog/2010/december' | path = 'blog/2010/december' | ||||
node = s.content.node_from_relative_path(path) | node = s.content.node_from_relative_path(path) | ||||
assert node | assert node | ||||
@@ -67,7 +67,7 @@ def test_build(): | |||||
def test_walk_resources(): | def test_walk_resources(): | ||||
s = Site(TEST_SITE_ROOT) | s = Site(TEST_SITE_ROOT) | ||||
s.build() | |||||
s.load() | |||||
pages = [page.name for page in s.content.walk_resources()] | pages = [page.name for page in s.content.walk_resources()] | ||||
expected = ["404.html", | expected = ["404.html", | ||||
"about.html", | "about.html", | ||||
@@ -98,9 +98,9 @@ class TestSiteWithConfig(object): | |||||
def teardown_class(cls): | def teardown_class(cls): | ||||
cls.SITE_PATH.delete() | cls.SITE_PATH.delete() | ||||
def test_build_with_config(self): | |||||
def test_load_with_config(self): | |||||
s = Site(self.SITE_PATH, config = self.config) | s = Site(self.SITE_PATH, config = self.config) | ||||
s.build() | |||||
s.load() | |||||
path = 'blog/2010/december' | path = 'blog/2010/december' | ||||
node = s.content.node_from_relative_path(path) | node = s.content.node_from_relative_path(path) | ||||
assert node | assert node | ||||