diff --git a/hyde/fs.py b/hyde/fs.py index 31cbf98..d7ca3cd 100644 --- a/hyde/fs.py +++ b/hyde/fs.py @@ -236,7 +236,7 @@ class File(FS): determine age. """ - return another_file.last_modified > self.last_modified + return File(str(another_file)).last_modified > self.last_modified @staticmethod def make_temp(text): diff --git a/hyde/server.py b/hyde/server.py index b0292cd..b850835 100644 --- a/hyde/server.py +++ b/hyde/server.py @@ -61,19 +61,22 @@ class HydeRequestHandler(SimpleHTTPRequestHandler): logger.info("Trying to load file based on request:[%s]" % result.path) path = result.path.lstrip('/') res = site.content.resource_from_relative_deploy_path(path) + if not res: + # Cannot find the source file using the given path. # Check if the target file exists in the deploy folder. - deployed = File(site.config.deploy_root_path.child(path)) - if deployed.exists: - # this file is probably being generated by a plugin. - # lets not try too hard, just regenerate - self.server.regenerate() - return deployed.path - else: - logger.info("Cannot load file:[%s]" % path) - raise Exception("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: self.server.generate_resource(res) new_path = site.config.deploy_root_path.child( @@ -105,6 +108,7 @@ class HydeWebServer(HTTPServer): HydeRequestHandler) def __reinit__(self): + self.site.load() self.generator = Generator(self.site) self.regenerate() @@ -115,6 +119,7 @@ class HydeWebServer(HTTPServer): try: logger.info('Regenerating the entire site') self.generator.generate_all() + self.exception_count = 0 except Exception, exception: self.exception_count += 1 logger.error('Error occured when regenerating the site [%s]' @@ -125,12 +130,16 @@ class HydeWebServer(HTTPServer): def generate_resource(self, resource): """ - Regenerates the entire site. + Regenerates the given resource. """ - try: - logger.info('Generating resource [%s]' % resource) - self.generator.generate_resource(resource) - except Exception, exception: - logger.error('Error [%s] occured when generating the resource [%s]' + target = self.site.config.deploy_root_path.child( + resource.relative_deploy_path) + if File(target).older_than(resource.source_file): + try: + logger.info('Generating resource [%s]' % resource) + self.generator.generate_resource(resource) + self.exception_count = 0 + except Exception, exception: + logger.error( + 'Error [%s] occured when generating the resource [%s]' % (repr(exception), resource)) - raise