示例#1
0
文件: loader.py 项目: zeraien/pypugjs
    def load_template(self, template_name, template_dirs=None):
        key = template_name
        if template_dirs:
            # If template directories were specified, use a hash to differentiate
            key = '-'.join([template_name, hashlib.sha1('|'.join(template_dirs)).hexdigest()])

        if settings.DEBUG or key not in self.template_cache:

            if os.path.splitext(template_name)[1] in ('.pug',):
                try:
                    source, display_name = self.load_template_source(template_name, template_dirs)
                    source = process(source,filename=template_name,compiler=Compiler)
                    origin = make_origin(display_name, self.load_template_source, template_name, template_dirs)
                    template = Template(source, origin, template_name)
                except NotImplementedError:
                    template, origin = self.find_template(template_name, template_dirs)
            else:
                template, origin = self.find_template(template_name, template_dirs)
            if not hasattr(template, 'render'):
                try:
                    template = Template(process(source,filename=template_name,compiler=Compiler), origin, template_name)
                except (TemplateDoesNotExist, UnboundLocalError):
                    # If compiling the template we found raises TemplateDoesNotExist,
                    # back off to returning he source and display name for the template
                    # we were asked to load. This allows for correct identification (later)
                    # of the actual template that does not exist.
                    return template, origin
            self.template_cache[key] = template
        return self.template_cache[key], None
示例#2
0
    def django_process(src, filename):
        compiled = process(src, filename=filename, compiler=DjangoCompiler)
        print(compiled)
        t = django.template.Template(compiled)

        ctx = django.template.Context()
        return t.render(ctx)
示例#3
0
 def templatize(src, origin=None):
     src = to_text(src, settings.FILE_CHARSET)
     if origin.endswith(".pug"):
         html = process(src, compiler=Compiler)
     else:
         html = src
     return func(html, origin)
示例#4
0
def convert_file():
    support_compilers_list = ['django', 'jinja', 'underscore', 'mako', 'tornado', 'html']
    available_compilers = {}
    for i in support_compilers_list:
        try:
            compiler_class = __import__('pypugjs.ext.%s' % i, fromlist=['pypugjs']).Compiler
        except ImportError as e:
            logging.warning(e)
        else:
            available_compilers[i] = compiler_class

    usage = "usage: %prog [options] [file [output]]"
    parser = OptionParser(usage)
    parser.add_option("-o", "--output", dest="output",
                    help="Write output to FILE", metavar="FILE")
    # use a default compiler here to sidestep making a particular
    # compiler absolutely necessary (ex. django)
    default_compiler = sorted(available_compilers.keys())[0]
    parser.add_option("-c", "--compiler", dest="compiler",
                    choices=list(available_compilers.keys()),
                    default=default_compiler,
                    type="choice",
                    help=("COMPILER must be one of %s, default is %s" %
                          (', '.join(list(available_compilers.keys())), default_compiler)))
    parser.add_option("-e", "--ext", dest="extension",
                      help="Set import/extends default file extension",
                      metavar="FILE")

    options, args = parser.parse_args()

    file_output = options.output or (args[1] if len(args) > 1 else None)
    compiler = options.compiler

    if options.extension:
        extension = '.%s' % options.extension
    elif options.output:
        extension = os.path.splitext(options.output)[1]
    else:
        extension = None

    if compiler in available_compilers:
        import six
        if len(args) >= 1:
            template = codecs.open(args[0], 'r', encoding='utf-8').read()
        elif six.PY3:
            template = sys.stdin.read()
        else:
            template = codecs.getreader('utf-8')(sys.stdin).read()
        output = process(template, compiler=available_compilers[compiler],
                         staticAttrs=True, extension=extension)
        if file_output:
            outfile = codecs.open(file_output, 'w', encoding='utf-8')
            outfile.write(output)
        elif six.PY3:
            sys.stdout.write(output)
        else:
            codecs.getwriter('utf-8')(sys.stdout).write(output)
    else:
        raise Exception('You must have %s installed!' % compiler)
示例#5
0
 def preprocess(self, source, name, filename=None):
     if (not name or
         (name and not os.path.splitext(name)[1] in self.file_extensions)):
         return source
     return process(source,
                    filename=name,
                    compiler=Compiler,
                    **self.options)
示例#6
0
文件: loader.py 项目: wwoods/pypugjs
 def get_contents(self, origin):
     contents = origin.loader.get_contents(origin)
     if os.path.splitext(origin.template_name)[1] in ('.pug', '.jade'):
         contents = self.include_pug_sources(contents)
         contents = process(contents,
                            filename=origin.template_name,
                            compiler=Compiler)
     return contents
示例#7
0
 def templatize(src, origin=None, charset=None):
     src = to_text(src, charset or settings.FILE_CHARSET)
     if origin.endswith(".pug"):
         html = process(src,
                        compiler=Compiler,
                        base_directory=os.path.basename(origin))
     else:
         html = src
     return func(html, origin)
示例#8
0
    def __init__(self, template_string, name="<string>", *args, **kwargs):
        is_pugjs = name.endswith(".pug")
        if is_pugjs:
            template_string = process(template_string, filename=name, compiler=Compiler)

        super(Template, self).__init__(template_string, name, *args, **kwargs)
        if is_pugjs:
            self.namespace.update(
                {ATTRS_FUNC: attrs, ESCAPE_FUNC: escape, ITER_FUNC: iteration}
            )
示例#9
0
    def preprocess(self, source, name, filename=None):
        loader = self.environment.loader
        try:
            # we're in a Flask app
            loader = loader.app.jinja_loader
        except AttributeError:
            pass
        if hasattr(loader, 'searchpath') and len(loader.searchpath):
            self.options["basedir"] = loader.searchpath[0]

        if not name or (name and not os.path.splitext(name)[1] in self.file_extensions):
            return source
        return process(source, filename=name, compiler=Compiler, **self.options)
示例#10
0
    def get_contents(self, origin):

        if os.path.splitext(origin.template_name)[1] in ('.pug', '.jade'):
            contents = origin.loader.get_contents(origin)
            contents = self.include_pug_sources(contents)
            contents = process(contents,
                               filename=origin.template_name,
                               compiler=Compiler,
                               base_directory=os.path.dirname(origin.name))
        else:
            contents = origin.loader.get_contents(origin)

        return contents
示例#11
0
文件: jinja.py 项目: akubera/pypugjs
    def preprocess(self, source, name, filename=None):
        loader = self.environment.loader
        try:
            # we're in a Flask app
            loader = loader.app.jinja_loader
        except AttributeError:
            pass
        if len(loader.searchpath):
            self.options["basedir"] = loader.searchpath[0]

        if not name or (name and not os.path.splitext(name)[1] in self.file_extensions):
            return source
        return process(source, filename=name, compiler=Compiler, **self.options)
示例#12
0
 def apps_mosaic(self, request, feed, profile):
     apps, source = [''], ''
     apps.extend(settings.EFFORIA_APPS)
     for app in apps:
         source += open('.%s%sgrid.jade' %
                        (settings.STATIC_URL, app)).read()
     compiled = process(src=source, compiler=Compiler)
     contexts = Context({
         'f': feed,
         'p': profile,
         'path': request.path,
         'apps': apps,
         'static_url': settings.STATIC_URL
     })
     return Template(compiled).render(contexts)
示例#13
0
    def get_contents(self, origin):

        contents = self.template_cache.get(origin.name)
        if settings.DEBUG or not contents:
            if os.path.splitext(origin.template_name)[1] in ('.pug', '.jade'):
                try:
                    contents = origin.loader.get_contents(origin)
                    contents = self.include_pug_sources(contents)
                    contents = process(contents,
                                       filename=origin.template_name,
                                       compiler=Compiler)
                except FileNotFoundError:
                    raise TemplateDoesNotExist(origin)
            else:
                contents = origin.loader.get_contents(origin)
            self.template_cache[origin.name] = contents

        return contents
示例#14
0
    def preprocess(self, source, name, filename=None):
        if 'include' in source:
            loader = self.environment.loader
            try:
                # we're in a Flask app
                loader = loader.app.jinja_loader
            except AttributeError:
                pass
            basedir = loader.searchpath[0]
            basedir = os.path.join(basedir, '')
            pattern = r'((^|\n)\s*include )(?!{})'.format(basedir)
            replace = '\\1{}'.format(basedir)
            source = re.sub(pattern, replace, source)

        if (not name or
            (name and not os.path.splitext(name)[1] in self.file_extensions)):
            return source
        return process(source,
                       filename=name,
                       compiler=Compiler,
                       **self.options)
示例#15
0
文件: mako.py 项目: akubera/pypugjs
def preprocessor(source):
    return process(source, compiler=Compiler)
示例#16
0
def convert_file():
    support_compilers_list = [
        'django',
        'jinja',
        'underscore',
        'mako',
        'tornado',
        'html',
    ]
    available_compilers = {}
    for i in support_compilers_list:
        try:
            compiler_class = __import__(
                'pypugjs.ext.%s' % i, fromlist=['pypugjs']
            ).Compiler
        except ImportError as e:
            logging.warning(e)
        else:
            available_compilers[i] = compiler_class

    usage = "usage: %prog [options] [file [output]]"
    parser = OptionParser(usage)
    parser.add_option(
        "-o", "--output", dest="output", help="Write output to FILE", metavar="FILE"
    )
    # use a default compiler here to sidestep making a particular
    # compiler absolutely necessary (ex. django)
    default_compiler = sorted(available_compilers.keys())[0]
    parser.add_option(
        "-c",
        "--compiler",
        dest="compiler",
        choices=list(available_compilers.keys()),
        default=default_compiler,
        type="choice",
        help=(
            "COMPILER must be one of %s, default is %s"
            % (', '.join(list(available_compilers.keys())), default_compiler)
        ),
    )
    parser.add_option(
        "-e",
        "--ext",
        dest="extension",
        help="Set import/extends default file extension",
        metavar="FILE",
    )

    options, args = parser.parse_args()

    file_output = options.output or (args[1] if len(args) > 1 else None)
    compiler = options.compiler

    if options.extension:
        extension = '.%s' % options.extension
    elif options.output:
        extension = os.path.splitext(options.output)[1]
    else:
        extension = None

    if compiler in available_compilers:
        import six

        if len(args) >= 1:
            template = codecs.open(args[0], 'r', encoding='utf-8').read()
        elif six.PY3:
            template = sys.stdin.read()
        else:
            template = codecs.getreader('utf-8')(sys.stdin).read()
        output = process(
            template,
            compiler=available_compilers[compiler],
            staticAttrs=True,
            extension=extension,
        )
        if file_output:
            outfile = codecs.open(file_output, 'w', encoding='utf-8')
            outfile.write(output)
        elif six.PY3:
            sys.stdout.write(output)
        else:
            codecs.getwriter('utf-8')(sys.stdout).write(output)
    else:
        raise Exception('You must have %s installed!' % compiler)
示例#17
0
def preprocessor(source):
    return process(source, compiler=Compiler)