Browse Source

Minor fixes to server and sorter

main
Lakshmi Vyasarajan 14 years ago
parent
commit
dfe5fbbd75
7 changed files with 56 additions and 37 deletions
  1. +1
    -1
      LICENSE
  2. +15
    -12
      hyde/ext/plugins/sorter.py
  3. +2
    -3
      hyde/ext/templates/jinja.py
  4. +21
    -18
      hyde/server.py
  5. +5
    -0
      hyde/site.py
  6. +3
    -3
      hyde/tests/ext/test_sorter.py
  7. +9
    -0
      hyde/tests/test_site.py

+ 1
- 1
LICENSE View File

@@ -1,6 +1,6 @@
The MIT License

Copyright (c) 2009 - 2010 Lakshmi Vyasarajan, Ringce.com
Copyright (c) 2009 - 2011 Lakshmi Vyasarajan, Ringce.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal


+ 15
- 12
hyde/ext/plugins/sorter.py View File

@@ -21,18 +21,21 @@ def filter_method(item, settings=None):
Returns true if all the filters in the
given settings evaluate to True.
"""

all_match = item.is_processable
if all_match and settings and hasattr(settings, 'filters'):
filters = settings.filters
for field, value in filters.__dict__.items():
try:
res = attrgetter(field)(item)
except:
res = None
if res != value:
all_match = False
break
all_match = True
default_filters = {}
filters = {}
if hasattr(settings, 'filters'):
filters.update(default_filters)
filters.update(settings.filters.__dict__)

for field, value in filters.items():
try:
res = attrgetter(field)(item)
except:
res = None
if res != value:
all_match = False
break
return all_match

def sort_method(node, settings=None):


+ 2
- 3
hyde/ext/templates/jinja.py View File

@@ -5,7 +5,7 @@ Jinja template utilties

from hyde.fs import File, Folder
from hyde.template import HtmlWrap, Template
from hyde.util import getLoggerWithNullHandler
from hyde.util import getLoggerWithNullHandler, getLoggerWithConsoleHandler

from jinja2 import contextfunction, Environment, FileSystemLoader
from jinja2 import environmentfilter, Markup, Undefined, nodes
@@ -276,8 +276,7 @@ class HydeLoader(FileSystemLoader):
"""
Calls the plugins to preprocess prior to returning the source.
"""
hlogger = getLoggerWithNullHandler('HydeLoader')
hlogger.debug("Loading template [%s] and preprocessing" % template)
logger.debug("Loading template [%s] and preprocessing" % template)
(contents,
filename,
date) = super(HydeLoader, self).get_source(


+ 21
- 18
hyde/server.py View File

@@ -16,6 +16,8 @@ from hyde.exceptions import HydeException
from hyde.util import getLoggerWithNullHandler
logger = getLoggerWithNullHandler('hyde.server')

from datetime import datetime

class HydeRequestHandler(SimpleHTTPRequestHandler):
"""
Serves files by regenerating the resource (or)
@@ -24,11 +26,12 @@ class HydeRequestHandler(SimpleHTTPRequestHandler):

def do_GET(self):
"""
Idenitfy the requested path. If the query string
Identify the requested path. If the query string
contains `refresh`, regenerat the entire site.
Otherwise, regenerate only the requested resource
and serve.
"""
self.server.request_time = datetime.now()
logger.info("Processing request:[%s]" % self.path)
result = urlparse.urlparse(self.path)
query = urlparse.parse_qs(result.query)
@@ -41,10 +44,7 @@ class HydeRequestHandler(SimpleHTTPRequestHandler):
logger.info('Redirecting...[%s]' % new_url)
self.redirect(new_url)
else:
try:
SimpleHTTPRequestHandler.do_GET(self)
except HydeException:
self.do_404()
SimpleHTTPRequestHandler.do_GET(self)


def translate_path(self, path):
@@ -55,7 +55,7 @@ class HydeRequestHandler(SimpleHTTPRequestHandler):
path = SimpleHTTPRequestHandler.translate_path(self, path)
site = self.server.site
result = urlparse.urlparse(self.path)
logger.info("Trying to load file based on request:[%s]" % result.path)
logger.debug("Trying to load file based on request:[%s]" % result.path)
path = result.path.lstrip('/')
if path.strip() == "" or File(path).kind.strip() == "":
return site.config.deploy_root_path.child(path)
@@ -64,18 +64,19 @@ class HydeRequestHandler(SimpleHTTPRequestHandler):

if not res:

# Cannot find the source file using the given path.
# Check if the target file exists in the deploy folder.
# Check if its a new request
if self.server.request_time > self.server.regeneration_time:
# Cannot find the source file using the given path.
# Check if the target file exists in the deploy folder.

# this file is probably new or being generated by a plugin.
# lets not try too hard, just regenerate
logger.info("Attempting regeneration for:[%s]" % path)
self.server.regenerate()
res = site.content.resource_from_relative_deploy_path(path)
if not res:
# Nothing much we can do.
logger.error("Cannot load file:[%s]" % path)
raise HydeException("Cannot load file: [%s]" % path)
# this file is probably new or being generated by a plugin.
# lets not try too hard, just regenerate
logger.info("Attempting regeneration for:[%s]" % path)
self.server.regenerate()
res = site.content.resource_from_relative_deploy_path(path)
if not res:
# Nothing much we can do.
logger.error("Cannot load file:[%s]" % path)

return site.config.deploy_root_path.child(path)
else:
@@ -125,7 +126,8 @@ class HydeWebServer(HTTPServer):
self.site = site
self.site.load()
self.generator = Generator(self.site)

self.request_time = datetime.strptime('1-1-1999', '%m-%d-%Y')
self.regeneration_time = datetime.strptime('1-1-1998', '%m-%d-%Y')
HTTPServer.__init__(self, (address, port),
HydeRequestHandler)

@@ -135,6 +137,7 @@ class HydeWebServer(HTTPServer):
"""
try:
logger.info('Regenerating the entire site')
self.regeneration_time = datetime.now()
self.site.load()
self.generator.generate_all()
except Exception, exception:


+ 5
- 0
hyde/site.py View File

@@ -65,6 +65,11 @@ class Resource(Processable):
"""
return self.source_file.get_relative_path(self.node.root.source_folder)

@property
def slug(self):
#TODO: Add a more sophisticated slugify method
return self.source.name_without_extension

def get_relative_deploy_path(self):
"""
Gets the path where the file will be created


+ 3
- 3
hyde/tests/ext/test_sorter.py View File

@@ -16,7 +16,7 @@ from operator import attrgetter
TEST_SITE = File(__file__).parent.parent.child_folder('_test')


class TestMeta(object):
class TestSorter(object):

def setUp(self):
TEST_SITE.make()
@@ -136,7 +136,7 @@ class TestMeta(object):
File(p).parent.name]))]
assert pages == expected_sorted

def test_walk_resources_sorted_default_is_processable(self):
def test_walk_resources_sorted_no_default_is_processable(self):
s = Site(TEST_SITE)
cfg = """
plugins:
@@ -153,7 +153,7 @@ class TestMeta(object):
SorterPlugin(s).begin_site()

assert hasattr(s.content, 'walk_resources_sorted_by_kind2')
expected = ["about.html", "merry-christmas.html"]
expected = ["404.html", "about.html", "merry-christmas.html"]

pages = [page.name for page in s.content.walk_resources_sorted_by_kind2()]



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

@@ -118,6 +118,15 @@ def test_get_resource():
resource = node.get_resource('merry-christmas.html')
assert resource == s.content.resource_from_relative_path(Folder(path).child('merry-christmas.html'))

def test_resource_slug():
s = Site(TEST_SITE_ROOT)
s.load()
path = 'blog/2010/december'
node = s.content.node_from_relative_path(path)
resource = node.get_resource('merry-christmas.html')
assert resource.slug == 'merry-christmas'


def test_get_resource_from_relative_deploy_path():
s = Site(TEST_SITE_ROOT)
s.load()


Loading…
Cancel
Save