Exemple #1
0
 def _update_config(self):
     self.config = deepcopy(self.defaults)
     
     logger.debug('>> Searching for config')
     
     for ext in ('.yml', '.yaml'):
         f = File(normpath(self.src.path, 'config' + ext))
         
         if f.exists:
             logger.debug('..  found: %s', f.path)
             
             try:
                 self.config.update(Config(f.content))
             except ConfigException as e:
                 raise ConfigException(e.message, 'src: {0}'.format(f.path))
             
             self.config['locale'] = self.opts.get('locale', self.config['locale'])
             
             self.config['assets_url'] = absurl(self.config['assets_url'], '')
             self.config['base_url'] = absurl(self.opts.get('base_url', self.config['base_url']), '')
             
             for setting in ('archives_url', 'posts_url', 'tags_url'):
                 self.config[setting] = absurl(self.config[setting])
             
             for setting in ('archives_url', 'assets_url', 'base_url', 'posts_url', 'tags_url'):
                 if re.search(r'(?:^\.{2}/|/\.{2}$|/\.{2}/)', self.config[setting]):
                     raise ConfigException('Invalid config setting.', 'setting: {0}'.format(setting), 'path traversal is not allowed')
             
             for pattern in self.config['include']:
                 if op.commonprefix((self.src.path, normpath(self.src.path, pattern))) != self.src.path:
                     raise ConfigException('Invalid include path.', 'path: {0}'.format(pattern), 'path traversal is not allowed')
             
             break
     else:
         logger.debug('..  no config file found')
Exemple #2
0
 def _get_url(self, url = '', absolute = False):
     parts = [self.globals['site']['base_url'], url]
     domain = self.globals['site']['domain']
     
     if absolute and domain:
         if not domain.startswith(('http://', 'https://')):
             domain = 'http://' + domain
         
         parts.insert(0, domain)
     
     return absurl(*parts)
Exemple #3
0
 def serve(self):
     self.src = Directory(self.opts['src'])
     base_url = absurl(self.opts['base_url'], '')
     
     if not self.src.exists:
         raise OptionException('Source must exist.')
     
     logger.info('>> Serving at 127.0.0.1:%s', self.opts['port'])
     logger.info('Press ctrl+c to stop.')
     
     cwd = getcwd()
     self.server = Server(('', self.opts['port']), base_url, RequestHandler)
     
     chdir(self.src.path)
     
     try:
         self.server.serve_forever()
         self.watch()
     except KeyboardInterrupt:
         self.server.shutdown()
         chdir(cwd)
         
         print('')
Exemple #4
0
 def _get_asset(self, asset):
     return absurl(self.globals['site']['base_url'], self.globals['site']['assets_url'], asset)