Browse Source

Issue #78, Issue #79: Added ability to import plugins from site path

main
Lakshmi Vyasarajan 13 years ago
parent
commit
15675d531f
8 changed files with 70 additions and 20 deletions
  1. +8
    -2
      CHANGELOG.rst
  2. +1
    -1
      README.rst
  3. +10
    -9
      hyde/engine.py
  4. +15
    -5
      hyde/fs.py
  5. +5
    -0
      hyde/site.py
  6. +3
    -2
      hyde/tests/test_jinja2template.py
  7. +27
    -0
      hyde/tests/test_loader.py
  8. +1
    -1
      hyde/version.py

+ 8
- 2
CHANGELOG.rst View File

@@ -1,16 +1,22 @@
Version 0.8.4c8
===============

* Added support for loading modules from the site path. Thanks to
@theomega for the idea (Issue #78 & #79)

Version 0.8.4c7 Version 0.8.4c7
=============== ===============


Thanks to @tcheneau Thanks to @tcheneau


* Added support for AsciiDoc. * Added support for AsciiDoc.


Version 0.8.4c6 Version 0.8.4c6
=============== ===============


Thanks to @gr3dman Thanks to @gr3dman


* Added paginator plugin and tests * Added paginator plugin and tests


Version 0.8.4c5 Version 0.8.4c5
=============== ===============


+ 1
- 1
README.rst View File

@@ -1,4 +1,4 @@
Version 0.8.4c7 Version 0.8.4c8


A brand new **hyde** A brand new **hyde**
==================== ====================


+ 10
- 9
hyde/engine.py View File

@@ -13,6 +13,7 @@ from hyde.util import getLoggerWithConsoleHandler


import codecs import codecs
import os import os
import sys
import yaml import yaml


HYDE_LAYOUTS = "HYDE_LAYOUTS" HYDE_LAYOUTS = "HYDE_LAYOUTS"
@@ -61,6 +62,9 @@ class Engine(Application):
import logging import logging
logger.setLevel(logging.DEBUG) logger.setLevel(logging.DEBUG)


sitepath = Folder(args.sitepath).fully_expanded_path
return Folder(sitepath)

@subcommand('create', help='Create a new hyde site.') @subcommand('create', help='Create a new hyde site.')
@store('-l', '--layout', default='basic', help='Layout for the new site') @store('-l', '--layout', default='basic', help='Layout for the new site')
@true('-f', '--force', default=False, dest='overwrite', @true('-f', '--force', default=False, dest='overwrite',
@@ -70,8 +74,7 @@ class Engine(Application):
The create command. Creates a new site from the template at the given The create command. Creates a new site from the template at the given
sitepath. sitepath.
""" """
self.main(args) sitepath = self.main(args)
sitepath = Folder(Folder(args.sitepath).fully_expanded_path)
markers = ['content', 'layout', 'site.yaml'] markers = ['content', 'layout', 'site.yaml']
exists = any((FS(sitepath.child(item)).exists for item in markers)) exists = any((FS(sitepath.child(item)).exists for item in markers))


@@ -103,8 +106,8 @@ class Engine(Application):
The generate command. Generates the site at the given The generate command. Generates the site at the given
deployment directory. deployment directory.
""" """
self.main(args) sitepath = self.main(args)
site = self.make_site(args.sitepath, args.config, args.deploy) site = self.make_site(sitepath, args.config, args.deploy)
from hyde.generator import Generator from hyde.generator import Generator
gen = Generator(site) gen = Generator(site)
incremental = True incremental = True
@@ -130,8 +133,7 @@ class Engine(Application):
deployment directory, address and port. Regenerates deployment directory, address and port. Regenerates
the entire site or specific files based on ths request. the entire site or specific files based on ths request.
""" """
self.main(args) sitepath = self.main(args)
sitepath = Folder(Folder(args.sitepath).fully_expanded_path)
config_file = sitepath.child(args.config) config_file = sitepath.child(args.config)
site = self.make_site(args.sitepath, args.config, args.deploy) site = self.make_site(args.sitepath, args.config, args.deploy)
from hyde.server import HydeWebServer from hyde.server import HydeWebServer
@@ -157,8 +159,8 @@ class Engine(Application):
Publishes the site based on the configuration from the `target` Publishes the site based on the configuration from the `target`
parameter. parameter.
""" """
self.main(args) sitepath = self.main(args)
site = self.make_site(args.sitepath, args.config) site = self.make_site(sitepath, args.config)
from hyde.publisher import Publisher from hyde.publisher import Publisher
publisher = Publisher.load_publisher(site, publisher = Publisher.load_publisher(site,
args.publisher, args.publisher,
@@ -171,7 +173,6 @@ class Engine(Application):
""" """
Creates a site object from the given sitepath and the config file. Creates a site object from the given sitepath and the config file.
""" """
sitepath = Folder(Folder(sitepath).fully_expanded_path)
config = Config(sitepath, config_file=config) config = Config(sitepath, config_file=config)
if deploy: if deploy:
config.deploy_root = deploy config.deploy_root = deploy


+ 15
- 5
hyde/fs.py View File

@@ -591,18 +591,28 @@ class Folder(FS):
dir_util.copy_tree(self.path, str(target)) dir_util.copy_tree(self.path, str(target))
return target return target


def get_walker(self, pattern=None):
"""
Return a `FolderWalker` object with a set pattern.
"""
return FolderWalker(self, pattern)

@property @property
def walker(self, pattern=None): def walker(self):
""" """
Return a `FolderWalker` object Return a `FolderWalker` object
""" """
return FolderWalker(self)


return FolderWalker(self, pattern) def get_lister(self, pattern=None):
"""
Return a `FolderLister` object with a set pattern.
"""
return FolderLister(self, pattern)


@property @property
def lister(self, pattern=None): def lister(self):
""" """
Return a `FolderLister` object Return a `FolderLister` object
""" """

return FolderLister(self)
return FolderLister(self, pattern)

+ 5
- 0
hyde/site.py View File

@@ -4,6 +4,7 @@ Parses & holds information about the site to be generated.
""" """
import os import os
import fnmatch import fnmatch
import sys
import urlparse import urlparse
from functools import wraps from functools import wraps


@@ -368,6 +369,10 @@ class Site(object):
def __init__(self, sitepath=None, config=None): def __init__(self, sitepath=None, config=None):
super(Site, self).__init__() super(Site, self).__init__()
self.sitepath = Folder(Folder(sitepath).fully_expanded_path) self.sitepath = Folder(Folder(sitepath).fully_expanded_path)
# Add sitepath to the list of module search paths so that
# local plugins can be included.
sys.path.insert(0, self.sitepath.fully_expanded_path)

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)
self.plugins = [] self.plugins = []


+ 3
- 2
hyde/tests/test_jinja2template.py View File

@@ -4,7 +4,7 @@ Use nose
`$ pip install nose` `$ pip install nose`
`$ nosetests` `$ nosetests`


Code borrowed from rwbench.py from the jinja2 examples Some code borrowed from rwbench.py from the jinja2 examples
""" """
from datetime import datetime from datetime import datetime
from hyde.ext.templates.jinja import Jinja2Template from hyde.ext.templates.jinja import Jinja2Template
@@ -33,7 +33,8 @@ class Article(object):
self.title = generate_lorem_ipsum(1, False, 5, 10) self.title = generate_lorem_ipsum(1, False, 5, 10)
self.user = choice(users) self.user = choice(users)
self.body = generate_lorem_ipsum() self.body = generate_lorem_ipsum()
self.pub_date = datetime.utcfromtimestamp(randrange(10 ** 9, 2 * 10 ** 9)) self.pub_date = datetime.utcfromtimestamp(
randrange(10 ** 9, 2 * 10 ** 9))
self.published = True self.published = True


def dateformat(x): def dateformat(x):


+ 27
- 0
hyde/tests/test_loader.py View File

@@ -10,6 +10,10 @@ from nose.tools import raises
import os import os


from hyde.exceptions import HydeException from hyde.exceptions import HydeException
from hyde.fs import File, Folder
from hyde.generator import Generator
from hyde.site import Site





def test_can_load_locals(): def test_can_load_locals():
@@ -42,6 +46,29 @@ def test_can_load_module_without_dot():
assert abc['d'] == 'efg' assert abc['d'] == 'efg'
assert abc['l'] == 'mno' assert abc['l'] == 'mno'


def test_can_load_site_specific_plugins():
TEST_SITE = File(__file__).parent.child_folder('_test')
TEST_SITE.make()
TEST_SITE.parent.child_folder(
'sites/test_jinja').copy_contents_to(TEST_SITE)
TEST_SITE.parent.child_folder(
'ssp').copy_contents_to(TEST_SITE)
s = Site(TEST_SITE)
gen = Generator(s)
gen.generate_all()
banner = """
<!--
This file was produced with infinite love, care & sweat.
Please dont copy. If you have to, please drop me a note.
-->
"""
with TEST_SITE.child_folder('deploy').get_walker('*.html') as walker:
@walker.file_visitor
def visit_file(f):
text = f.read_all()
assert text.strip().startswith(banner.strip())


@raises(HydeException) @raises(HydeException)
def test_exception_raised_for_invalid_module(): def test_exception_raised_for_invalid_module():


+ 1
- 1
hyde/version.py View File

@@ -3,4 +3,4 @@
Handles hyde version Handles hyde version
TODO: Use fabric like versioning scheme TODO: Use fabric like versioning scheme
""" """
__version__ = '0.8.4c2' __version__ = '0.8.4c8'

||||||
x
 
000:0
Loading…
Cancel
Save