Browse Source

Added flattener plugin

main
Lakshmi Vyasarajan 14 years ago
parent
commit
ed92dc3925
5 changed files with 90 additions and 7 deletions
  1. +43
    -0
      hyde/ext/plugins/folders.py
  2. +0
    -7
      hyde/plugin.py
  3. +1
    -0
      hyde/site.py
  4. +45
    -0
      hyde/tests/ext/test_flattener.py
  5. +1
    -0
      hyde/tests/test_site.py

+ 43
- 0
hyde/ext/plugins/folders.py View File

@@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
"""
Plugins related to folders and paths
"""

from hyde.plugin import Plugin
from hyde.fs import Folder

class FlattenerPlugin(Plugin):
"""
The plugin class for syntax text replacement.
"""
def __init__(self, site):
super(FlattenerPlugin, self).__init__(site)

def begin_site(self):
"""
Finds all the folders that need flattening and changes the
relative deploy path of all resources in those folders.
"""
items = []
try:
items = self.site.config.flattener.items
except AttributeError:
pass

for item in items:
node = None
target = ''
try:
node = self.site.content.node_from_relative_path(item.source)
target = Folder(item.target)
except AttributeError:
continue
if node:
for resource in node.walk_resources():
target_path = target.child(resource.name)
self.logger.debug(
'Flattening resource path[%s] to [%s]' %
(resource, target_path))
resource.relative_deploy_path = target_path



+ 0
- 7
hyde/plugin.py View File

@@ -126,13 +126,6 @@ class Plugin(object):
"""
pass

def site_complete(self):
"""
Called when the generation process is complete. This method is called
only when the entire site is generated.
"""
pass

def generation_complete(self):
"""
Called when generation is completed.


+ 1
- 0
hyde/site.py View File

@@ -88,6 +88,7 @@ class Resource(Processable):
self.site.content.resource_deploy_path_changed(self)

relative_deploy_path = property(get_relative_deploy_path, set_relative_deploy_path)
url = relative_deploy_path

class Node(Processable):
"""


+ 45
- 0
hyde/tests/ext/test_flattener.py View File

@@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
"""
Use nose
`$ pip install nose`
`$ nosetests`
"""
from hyde.fs import File, Folder
from hyde.generator import Generator
from hyde.site import Site
from hyde.model import Expando, Config


TEST_SITE = File(__file__).parent.parent.child_folder('_test')


class TestFlattner(object):

def setUp(self):
TEST_SITE.make()
TEST_SITE.parent.child_folder(
'sites/test_jinja').copy_contents_to(TEST_SITE)

def tearDown(self):
TEST_SITE.delete()

def test_can_flattener(self):
s = Site(TEST_SITE)
cfg = """
plugins:
- hyde.ext.plugins.folders.FlattenerPlugin
flattener:
items:
-
source: blog
target: ''
"""
import yaml
s.config = Config(TEST_SITE, config_dict=yaml.load(cfg))
s.load()
gen = Generator(s)
gen.generate_all()

assert not s.config.deploy_root_path.child_folder('blog').exists
assert File(s.config.deploy_root_path.child('merry-christmas.html')).exists


+ 1
- 0
hyde/tests/test_site.py View File

@@ -148,6 +148,7 @@ def test_relative_deploy_path():
s.load()
for page in s.content.walk_resources():
assert page.relative_deploy_path == Folder(page.relative_path)
assert page.url == page.relative_deploy_path

def test_relative_deploy_path_override():
s = Site(TEST_SITE_ROOT)


Loading…
Cancel
Save