示例#1
0
文件: cli.py 项目: ibigbug/liquidluck
def build(config_file):
    begin = time.time()
    if not os.path.exists(config_file):
        answer = raw_input('This is not a Felix Felicis repo, '
                           'would you like to create one?(Y/n) ')
        if answer.lower() == 'n':
            sys.exit(1)
            return
        return create()

    init_config(config_file)
    init_post()

    logger.info('Starting readers')
    for reader in ns.readers.values():
        if reader:
            import_module(reader)().start()

    logger.info('Starting writers')
    for writer in ns.writers.values():
        if writer:
            import_module(writer)().start()

    logger.info('Running writers')
    for writer in ns.writers.values():
        if writer:
            import_module(writer)().run()

    for error in ns.storage.errors:
        logger.error('Invalid Post: %s' % error)

    end = time.time()
    logger.info('Total time: %s' % (end - begin))
    return
示例#2
0
    def read(self):
        f = open(self.filepath)
        logger.info('read ' + self.filepath)
        content = f.read()
        f.close()

        meta_regex = re.compile(
            r"^\s*(?:-|=){3,}\s*\n((?:.|\n)+?)\n\s*(?:-|=){3,}\s*\n*",
            re.MULTILINE)
        match = re.match(meta_regex, content)
        if not match:
            logger.error("No metadata in: %s" % self.filepath)
            return None
        meta = match.group(1)
        meta = re.sub(r'\r\n|\r|\n', '\n', meta)
        dct = {}
        k = v = None
        for meta in meta.split('\n'):
            meta = meta.replace('\t', '    ')
            if meta.startswith('  ') and k:
                dct[k] = dct[k] + '\n' + meta.lstrip()
            if ':' in meta and not meta.startswith(' '):
                index = meta.find(':')
                k, v = meta[:index], meta[index + 1:]
                k, v = k.rstrip(), v.lstrip()
                dct[k] = to_unicode(v)
        text = to_unicode(content[match.end():])
        dct['content'] = markdown(text)
        return dct
示例#3
0
 def _parse_datetime(sef, value):
     supported_formats = [
         '%a %b %d %H:%M:%S %Y',
         '%Y-%m-%d %H:%M:%S',
         '%Y-%m-%d %H:%M',
         '%Y-%m-%dT%H:%M',
         '%Y%m%d %H:%M:%S',
         '%Y%m%d %H:%M',
         '%Y-%m-%d',
         '%Y%m%d',
     ]
     for format in supported_formats:
         try:
             return datetime.strptime(value, format)
         except ValueError:
             pass
     logger.error('Unrecognized date/time: %r' % value)
     raise ValueError('Unrecognized date/time: %r' % value)
示例#4
0
    def render(self):
        try:
            post = self.parse_post()
        except Exception as e:
            logger.error(e)
            ns.storage.errors.append(self.filepath)
            return None

        if not post or not post.get('date', None):
            ns.storage.errors.append(self.filepath)
            return None

        if not post.get('author', None):
            post.author = ns.context.get('author', 'admin')

        try:
            post.date = self._parse_datetime(post.get('date'))
        except ValueError as e:
            ns.storage.errors.append(self.filepath)
            return None

        for key in post.keys():
            if '_date' in key or '_time' in key:
                try:
                    post[key] = self._parse_datetime(post[key])
                except ValueError as e:
                    ns.storage.errors.append(self.filepath)
                    return None

        if post.get('public', 'true') == 'false':
            post.public = False
        else:
            post.public = True

        post.destination = self.get_resource_destination()
        post.slug = self.get_resource_slug()
        post.filepath = self.filepath
        return post