class Site(object): def __init__(self, root, dest): self.root = root if op.exists(dest): shutil.rmtree(dest) self.settings = Settings(parent_tmpl='_base.html') conf = op.join(self.root, 'settings.cfg') if op.exists(conf): self.settings.read(file(conf).read().decode('utf-8')) site_base_path = base_path(self.url) self.dest = op.join(dest, url2path(site_base_path[1:])) self.env = initialize_env(root) self.env.globals['site'] = self self.entries = [] if self.settings.get('sitecallback'): callback = impcallback(self.settings.sitecallback, self.root) callback(self) self._traverse() @property def url(self): return getattr(self.settings, 'url', '/') def __repr__(self): return '<Site: %r>' % self.root def __getitem__(self, name): return self.settings[name] def __getattr__(self, name): try: return self.settings[name] except KeyError, e: raise AttributeError(str(e))
class Site(object): def __init__(self, root, dest): self.root = root if op.exists(dest): shutil.rmtree(dest) self.settings = Settings(parent_tmpl='_base.html') conf = op.join(self.root, '.cyrax.cfg') if not op.exists(conf): conf = op.join(self.root, 'settings.cfg') if op.exists(conf): logger.warn('settings.cfg is deprecated, please rename to .cyrax.cfg') if op.exists(conf): self.settings.read(open(conf, 'rt').read()) site_base_path = base_path(self.url) self.dest = op.join(dest, url2path(site_base_path[1:])) self.env = initialize_env(root) self.env.globals['site'] = self self.entries = [] if self.settings.get('sitecallback'): callback = impcallback(self.settings.sitecallback, self.root) callback(self) self._traverse() @property def url(self): return getattr(self.settings, 'url', '/') def __repr__(self): return '<Site: %r>' % self.root def __getitem__(self, name): return self.settings[name] def __getattr__(self, name): try: return self.settings[name] except KeyError as e: raise AttributeError(str(e)) def _traverse(self): events.emit('traverse-started', site=self) exclude = self.settings.get('exclude', []) for path, _, files in os.walk(self.root): relative = path[len(self.root):].lstrip(os.sep) if (not relative.startswith('static') and not relative.startswith('utils') and not any(map(ishidden, relative.split(op.sep)))): for f in files: full = op.join(relative, f) if (f != 'settings.cfg' and not ishidden(f) and not any(map(lambda x: fnmatch(full, x), exclude))): self.add_page(op.join(relative, f).replace('\\', '/')) events.emit('site-traversed', site=self) def add_page(self, path): self.entries.append(get_entry(self, path)) def render(self): for entry in self.entries: entry.render() events.emit('site-rendered', site=self) self._copy_static() def _copy_static(self): if op.exists(op.join(self.root, 'static')): logger.info('Copying static files') shutil.copytree(op.join(self.root, 'static'), op.join(self.dest, 'static'))