Example #1
0
    def setUp(self):


        # Setting up Testpool and TestAppEnsemble
        a = AssetResolver()
        path = a.resolve(aof.tests.settings["app_pool_path"]).abspath()
        ap = AppPool.Instance()
        ap.load(source=path,format="turtle")

        self.aeTests=AppEnsembleTests()
        aof.tests._create_test_AppEnsemble()

        #Set up Test-HTML for Documentation
        aof.tests._create_test_html_file()

        # Creating app with parameter
        META=aof.tests.settings["META"]

        app = main({},app_pool_path=aof.tests.settings["app_pool_path"],
                    app_ensemble_folder=aof.tests.settings["app_ensemble_folder"],
                    documentation_docs_path=aof.tests.settings["documentation_docs_path"],
                    META=META)

        self.testapp = TestApp(app)


        self.meta=ast.literal_eval(META)
Example #2
0
def add_layer(cfg, layer, name='', path='', description=''):
    """ add new layer

    :param layer: layer id
    :param name: name
    :param path: asset path
    :param description: module description
    """
    if not path:
        raise ConfigurationError('Path is required')

    discr = (ID_LAYER, name, layer)

    resolver = AssetResolver()
    directory = resolver.resolve(path).abspath()

    intr = Introspectable(ID_LAYER, discr, name, ID_LAYER)
    intr['name'] = name
    intr['layer'] = layer
    intr['path'] = directory
    intr['asset'] = path
    intr['description'] = description
    intr['filters'] = {}

    storage = cfg.registry.setdefault(ID_LAYER, {})
    layers = storage.setdefault(layer, [])
    layers.insert(0, intr)

    cfg.action(discr, introspectables=(intr,))
    log.info("Add layer: %s path:%s"%(layer, path))
Example #3
0
def create_app(settings):
    from pyramid.config import Configurator
    from pyramid.authorization import ACLAuthorizationPolicy
    from pyramid.path import AssetResolver
    from pyramid.response import FileResponse

    from h.auth import HybridAuthenticationPolicy
    from h.models import groupfinder

    authn_policy = HybridAuthenticationPolicy(callback=groupfinder)
    authz_policy = ACLAuthorizationPolicy()

    config = Configurator(
        settings=settings,
        authentication_policy=authn_policy,
        authorization_policy=authz_policy,
    )

    favicon = AssetResolver().resolve('h:favicon.ico')
    config.add_route('favicon', '/favicon.ico')
    config.add_view(
        lambda request: FileResponse(favicon.abspath(), request=request),
        route_name='favicon'
    )

    config.add_route('ok', '/ruok')
    config.add_view(lambda request: 'imok', renderer='string', route_name='ok')

    # Include all the pyramid subcomponents
    config.include(includeme)

    return config.make_wsgi_app()
Example #4
0
    def get_template(self, uri):
        """Fetch a template from the cache, or check the filesystem
        for it

        In addition to the basic filesystem lookup, this subclass will
        use pkg_resource to load a file using the asset
        specification syntax.

        """
        isabs = os.path.isabs(uri)
        if (not isabs) and (':' in uri):
            # Windows can't cope with colons in filenames, so we replace the
            # colon with a dollar sign in the filename mako uses to actually
            # store the generated python code in the mako module_directory or
            # in the temporary location of mako's modules
            adjusted = uri.replace(':', '$')
            try:
                if self.filesystem_checks:
                    return self._check(adjusted, self._collection[adjusted])
                else:
                    return self._collection[adjusted]
            except KeyError:
                asset = AssetResolver().resolve(uri)
                if asset.exists():
                    srcfile = asset.abspath()
                    return self._load(srcfile, adjusted)
                raise TopLevelLookupException(
                    "Can not locate template for uri %r" % uri)
        try:
            return TemplateLookup.get_template(self, uri)
        except TemplateLookupException:
            if isabs:
                return self._load(uri, uri)
            else:
                raise
Example #5
0
 def __init__(self, request):
     super(NodeAppView, self).__init__(request)
     view = request.view_name
     subpath = request.subpath
     if not len(subpath):
         raise HTTPNotFound()
     appname = subpath[0]
     if len(subpath) == 1:
         # check for existence
         asset = 'haberdashery:apps/%s' % appname
         resolver = AssetResolver()
         descriptor = resolver.resolve(asset)
         if not descriptor.exists():
             raise HTTPNotFound()
         # send back index to start load app
         settings = self.get_app_settings()
         basecolor = settings['default.css.basecolor']
         template = 'trumpet:templates/webview-app.mako'
         env = dict(appname=appname, basecolor=basecolor)
         content = render(template, env)
         self.response = Response(body=content)
     else:
         #asset = 'haberdashery:apps/%s' % appname
         asset = os.path.join('haberdashery:apps', *subpath)
         self.response = static_asset_response(request, asset)
Example #6
0
def generate_random_filename(path=None, extension='pdf'):
    r = AssetResolver('erp')
    path = path or r.resolve('static/temp').abspath()
    if not os.path.exists(path):
        os.mkdir(path)
    filename = generate_random_digest()
    return '/'.join([path, '{filename}.{extension}'.format(filename=filename, extension=extension)])
Example #7
0
def view_file(request):
    form = get_form(AddSchema)
    if request.POST:
        if 'simpan' in request.POST:
            settings = get_settings()
            input_file = request.POST['upload'].file
            filename = request.POST['upload'].filename
            ext = get_ext(filename)
            
            if ext.lower()!='.png':
                request.session.flash('File harus format png','error')
                return dict(form=form.render())	

            resolver = AssetResolver()
            static_path = resolver.resolve('reklame:static').abspath()
            fullpath = os.path.join( static_path, 'img/logo.png')
            print '------------------>',fullpath
            output_file = open(fullpath, 'wb')
            input_file.seek(0)
            while True:
                data = input_file.read(2<<16)
                if not data:
                    break
                output_file.write(data)
        
        return route_list(request)
    return dict(form=form.render())        
Example #8
0
def register_less_bundle(cfg, name, path, description='', watchdir=None):
    """ Register less bundle;

    :param name: module name
    :param path: asset path
    :param description:
    """
    resolver = AssetResolver()
    abs_path = resolver.resolve(path).abspath()

    if not os.path.isfile(abs_path):
        raise ConfigurationError("less file is required: %s" % path)

    discr = (ID_BUNDLE, name)

    intr = Introspectable(ID_BUNDLE, discr, name, ID_BUNDLE)
    intr['name'] = name
    intr['path'] = path
    intr['abs_path'] = abs_path
    intr['watchdir'] = watchdir or os.path.dirname(abs_path)
    intr['description'] = description

    storage = cfg.registry.setdefault(ID_BUNDLE, {})
    storage[name] = intr

    cfg.action(discr, introspectables=(intr,))
Example #9
0
class CloudMaker(object):

    def __init__(self, context, request):
        self.context = context
        self.request = request
        self.resolver = AssetResolver()
        self.minsize = int(request.registry.settings.get('jcu.words.minsize', 10))
        self.maxsize = int(request.registry.settings.get('jcu.words.maxsize', 100))

    @view_config(name="keyword-cloud.png")
    def keyword_cloud_png(self):
        asset = self.resolver.resolve('jcuwords:keyword-cloud.png')
        _cloud = open(asset.abspath()).read()
        return Response(content_type='image/png',
                        body=_cloud)

    @view_config(name="keyword-cloud")
    def keyword_cloud(self):
        return self.make_cloud(True)

    @view_config(name="keyword-cloud-image")
    def keyword_cloud_image(self):
        image_url = self.request.resource_url(None, 'keyword-cloud.png')
        return {'image': image_url}

    def invalidate(self):
        cache.region_invalidate(self.make_cloud, None, False)
        cache.region_invalidate(self.make_cloud, None, True)

    def make_cloud(self, output_html):
        keywords = KeywordManager().all()
        text = ' '.join([kw.keyword for kw in keywords])

        if output_html:
            max_tags = 30
            max_size = 42
        else:
            max_tags = 100
            max_size = self.maxsize

        tags = make_tags(get_tag_counts(text)[:max_tags], minsize=self.minsize,
                         maxsize=max_size)

        if output_html:
            size = (900, 300)
            result = create_html_data(tags, size=size,
                                      layout=LAYOUT_HORIZONTAL)
        else:
            #now = datetime.utcnow()
            #filename = 'jcuwords/static/clouds/keyword-cloud-%s.png' % now.isoformat()
            cloud = self.resolver.resolve('jcuwords:keyword-cloud.png')
            filename = cloud.abspath()
            size = (1024, 500)
            create_tag_image(tags, filename, size=size,
                             fontname='IM Fell DW Pica',
                             layout=LAYOUT_MIX)
            image_url = self.request.resource_url(None, 'keyword-cloud.png')
            result = {'image': image_url}

        return result
Example #10
0
def extract_static_assets_from_components(compo_list):
    ar = AssetResolver()

    js_paths = []
    js_name = []
    css_paths = []
    css_name = []

    # The Page needs to be in the webassets first, then all other pages, then all components.
    for cls in compo_list:
        for js in cls.js_name:
            if type(js) is not tuple:
                js = (cls.asset_spec, js)
            if js in js_name:
                continue
            js_name.append(js)
            js_paths.append(ar.resolve('/'.join(js)).abspath())
        cls.js_name = cls.js_name + getattr(cls, 'js_name_no_bundle', [])

        for css in cls.css_name:
            if type(css) is not tuple:
                css = (cls.asset_spec, css)
            if css in css_name:
                continue
            css_name.append(css)
            css_paths.append(ar.resolve('/'.join(css)).abspath())
        cls.css_name = cls.css_name + getattr(cls, 'css_name_no_bundle', [])

    return js_paths, js_name, css_paths, css_name
Example #11
0
def getabspath(fpath):
    from pyramid.path import AssetResolver
    a = AssetResolver('mypyramid')
    resolver = a.resolve(fpath)
    abspath = resolver.abspath()
    logging.debug(abspath)
    return abspath
Example #12
0
    def pserve_file_config(self, filename, global_conf=None):
        here = os.path.abspath(os.path.dirname(filename))
        defaults = {}
        if global_conf:
            defaults.update(global_conf)
        defaults['here'] = here

        config = self.ConfigParser(defaults=defaults)
        config.optionxform = str
        config.read(filename)
        try:
            items = dict(config.items('pserve'))
        except configparser.NoSectionError:
            return

        watch_files = aslist(items.get('watch_files', ''), flatten=False)

        # track file paths relative to the ini file
        resolver = AssetResolver(package=None)
        for file in watch_files:
            if ':' in file:
                file = resolver.resolve(file).abspath()
            elif not os.path.isabs(file):
                file = os.path.join(here, file)
            self.watch_files.append(os.path.abspath(file))
Example #13
0
def _generate_md5(spec):
    asset = AssetResolver(None).resolve(spec)
    md5 = hashlib.md5()
    with asset.stream() as stream:
        for block in iter(lambda: stream.read(4096), b''):
            md5.update(block)
    return md5.hexdigest()
Example #14
0
def add_bower_component(config, path, components_name=None):
    """
    """
    registry = config.registry
    resolver = AssetResolver()
    directory = resolver.resolve(path).abspath()

    if not os.path.isfile(os.path.join(directory, 'bower.json')):
        raise ConfigurationError(
            "Directory '{0}' does not contain 'bower.json' file"
            .format(directory)
        )

    bower = get_bower(registry)

    if components_name is None:
        components_name = bower.components_name

    discr = ('djed:static', directory, components_name)

    def register():
        info = BowerComponentInfo(directory, components_name)
        registry.registerUtility(info, IBowerComponent, name='-'.join(discr))

    config.action(discr, register)
Example #15
0
def normalize_path(config, keyname):
    try:
        resolver = AssetResolver()
        path = config.registry.settings[keyname]
        return resolver.resolve(path).abspath()
    except KeyError:
        raise ConfigurationError("{} is not found in settings".format(keyname))
Example #16
0
    def __call__(self, info):
        defname = None
        asset, ext = info.name.rsplit('.', 1)
        if '#' in asset:
            asset, defname = asset.rsplit('#', 1)

        spec = '%s.%s' % (asset, ext)

        isabspath = os.path.isabs(spec)
        colon_in_name = ':' in spec
        isabsspec = colon_in_name and (not isabspath)
        isrelspec = (not isabsspec) and (not isabspath)

        try:
            # try to find the template using default search paths
            self.lookup.get_template(spec)
        except TemplateLookupException:
            if isrelspec:
                # convert relative asset spec to absolute asset spec
                resolver = AssetResolver(info.package)
                asset = resolver.resolve(spec)
                spec = asset.absspec()
            else:
                raise

        return self.renderer_factory(spec, defname, self.lookup)
Example #17
0
def generate_webasset_bundles(config):
    compo_bundles = extract_static_assets_from_components(epflutil.Discover.discovered_components)

    page_bundles = []
    pages = [epflpage.Page] + epflutil.Discover.discovered_pages

    for cls in pages:
        page_bundles.append(extract_static_assets_from_components([cls]))

    if not asbool(config.registry.settings.get('epfl.webassets.active', False)):
        return

    ar = AssetResolver()
    epfl_static = ar.resolve('solute.epfl:static')

    my_env = Environment('%s/bundles' % epfl_static.abspath(), 'bundles')

    for i, page in enumerate(pages):
        js_paths, js_name, css_paths, css_name = page_bundles[i]

        js_paths += compo_bundles[0]
        js_name += compo_bundles[1]
        css_paths += compo_bundles[2]
        css_name += compo_bundles[3]

        my_env.register('js%s' % i, Bundle(js_paths, filters='rjsmin', output='epfl.%(version)s.js'))
        my_env.register('css%s' % i, Bundle(css_paths, output='epfl.%(version)s.css'))

        page.js_name += [("solute.epfl:static", url) for url in my_env['js%s' % i].urls()]
        page.css_name += [("solute.epfl:static", url) for url in my_env['css%s' % i].urls()]

        page.bundled_names = js_name + css_name
Example #18
0
def view_file(request):
    form = get_form(AddSchema)
    if request.POST:
        if "simpan" in request.POST:
            settings = get_settings()
            input_file = request.POST["upload"].file
            filename = request.POST["upload"].filename
            ext = get_ext(filename)

            if ext.lower() != ".png":
                request.session.flash("File harus format png", "error")
                return dict(form=form.render())

            resolver = AssetResolver()
            static_path = resolver.resolve("sipkd:static").abspath()
            fullpath = os.path.join(static_path, "img/logo.png")
            print "------------------>", fullpath
            output_file = open(fullpath, "wb")
            input_file.seek(0)
            while True:
                data = input_file.read(2 << 16)
                if not data:
                    break
                output_file.write(data)

        return route_list(request)
    return dict(form=form.render())
Example #19
0
def main(argv=sys.argv):
    global settings
    global resolver
    
    if len(argv) < 2:
        usage(argv)
        sys.exit(1)

    config_uri = argv[1]
    setup_logging(config_uri)
    settings = get_appsettings(config_uri)
    resolver = AssetResolver('digital_ale')
    dest_prefix = resolver.resolve(settings['scans.prefix']).abspath()
    engine = engine_from_config(settings, 'sqlalchemy.')
    
    DBSession.configure(bind=engine)
    user = User.get_by_username(u'frank')
    userid = user and user.id or None
    #Base.metadata.create_all(engine)
    with transaction.manager:
        for filename in sys.argv[2:]:
            if filename[-3:] == 'jpg':
                import_jpg(filename, dest_prefix, userid)
            elif filename[-3:] == 'txt':
                import_txt(filename, userid)
            else:
                print >> sys.stderr, "Warning: (%s) Unknown filetype. Not importing.  " % filename
Example #20
0
File: __init__.py Project: 3divs/h
def create_app(settings):
    from horus import groupfinder
    from pyramid.config import Configurator
    from pyramid.authentication import AuthTktAuthenticationPolicy
    from pyramid.authorization import ACLAuthorizationPolicy
    from pyramid.path import AssetResolver
    from pyramid.response import FileResponse

    authn_policy = AuthTktAuthenticationPolicy(
        settings['auth.secret'],
        callback=groupfinder
    )
    authz_policy = ACLAuthorizationPolicy()

    config = Configurator(
        settings=settings,
        authentication_policy=authn_policy,
        authorization_policy=authz_policy,
        root_factory='h.resources.RootFactory'
    )

    favicon = AssetResolver().resolve('h:favicon.ico')
    config.add_route('favicon', '/favicon.ico')
    config.add_view(
        lambda request: FileResponse(favicon.abspath(), request=request),
        route_name='favicon'
    )

    config.include(includeme)
    return config.make_wsgi_app()
Example #21
0
    def collect_static(self):
        """Collect all static files from all static views for the manifest."""

        def recurse(collector, path):

            for entry in scandir(path):

                if entry.name.startswith("."):
                    # Dot files are usually backups or other no no files
                    continue

                # Don't process our internal cache folder
                if MARKER_FOLDER in entry.path:
                    continue

                relative = os.path.relpath(entry.path, collector.root)

                if entry.is_file():
                    collector.collect(path, name, entry, relative)
                elif entry.is_dir():
                    recurse(collector, entry.path)

        r = AssetResolver()
        for name, asset_spec in self.views.items():

            root = r.resolve(asset_spec).abspath()
            collector = CopyAndHashCollector(root, self.settings)
            recurse(collector, root)
            results = collector.finish()

        # Expose for testing
        return results
Example #22
0
def template_exists(config, relpath):
    asset_resolver = AssetResolver()
    for md in config.registry.settings['mako.directories']:
        asset_descriptor = asset_resolver.resolve('/'.join([md, relpath]))
        if os.path.exists(asset_descriptor.abspath()):
            return True
    return False
Example #23
0
def register_handlebars_bundle(
        cfg, name, path='', description='', i18n_domain=''):
    """ Register handlebars bundle;

    :param name: module name
    :param path: asset path
    :param description:
    :param i18n_domain: i18n domain

    """
    resolver = AssetResolver()
    abs_path = resolver.resolve(path).abspath()

    if not path or not os.path.isdir(abs_path):
        raise ConfigurationError("Directory is required: %s" % path)

    discr = (ID_AMD_MODULE, name)

    intr = Introspectable(ID_AMD_MODULE, discr, name, ID_AMD_MODULE)
    intr['name'] = name
    intr['path'] = path
    intr['abs_path'] = abs_path
    intr['description'] = description
    intr['i18n_domain'] = i18n_domain

    storage = cfg.registry.setdefault(ID_BUNDLE, {})
    storage[name] = intr

    cfg.action(discr, introspectables=(intr,))
Example #24
0
        def register():
            directories = []
            resolver = AssetResolver(self.package_name)

            # defer spec resolution until register to allow for asset
            # overrides to take place in an earlier config phase
            for spec in specs:
                # the trailing slash helps match asset overrides for folders
                if not spec.endswith('/'):
                    spec += '/'
                asset = resolver.resolve(spec)
                directory = asset.abspath()
                if not asset.isdir():
                    raise ConfigurationError('"%s" is not a directory' %
                                            directory)
                intr = self.introspectable('translation directories', directory,
                                        spec, 'translation directory')
                intr['directory'] = directory
                intr['spec'] = spec
                introspectables.append(intr)
                directories.append(directory)

            tdirs = self.registry.queryUtility(ITranslationDirectories)
            if tdirs is None:
                tdirs = []
                self.registry.registerUtility(tdirs, ITranslationDirectories)
            if override:
                tdirs.extend(directories)
            else:
                for directory in reversed(directories):
                    tdirs.insert(0, directory)
Example #25
0
 def __init__(self, virtpath=None, abspath=None, type="file", mount_point=None):
     """ mount_point: (virtual_path, absolute_path)
     """
     self.mount_point = None
     if mount_point:
         ar = AssetResolver()
         self.mount_point = (mount_point[0], ar.resolve(mount_point[1]).abspath())
     if virtpath and abspath:
         raise RuntimeError("ERR - need only virtpath nor abspath")
     if virtpath:
         self.virtpath = os.path.normpath(virtpath)
         if mount_point is None:
             self.mount_point = get_absmount(self.virtpath)
         self.abspath = get_abspath(self.virtpath, self.mount_point)
     elif abspath:
         self.abspath = os.path.normpath(abspath)
         if mount_point is None:
             self.mount_point = get_virtmount(self.abspath)
         self.virtpath = get_virtpath(self.abspath, self.mount_point)
     else:
         raise RuntimeERror("ERR - need either virtpath or abspath")
     self.parent = None
     self._meta = None
     self.type = type
     self.mimetype = None
Example #26
0
 def __call__(self, info):
     resolver = AssetResolver(info.package)
     tmpl_path = resolver.resolve(info.name).abspath()
     return GenshiTemplateRenderer(
         path=tmpl_path,
         settings=info.settings,
         package=info.package,
     )
Example #27
0
 def get_parser(self, ini_filename='test.ini'):
     medici = AssetResolver('pyramid_analytics')
     app_path = medici.resolve('').abspath()
     project_path = path.split(app_path)[0]
     ini_path = path.join(project_path, 'pyramid_analytics', ini_filename)
     parser = configparser.SafeConfigParser()
     parser.read(ini_path)
     return parser
Example #28
0
def _get_asset_mtime(path):
    if ':' in path:
        package, path = path.split(':')
        resolver = AssetResolver(package)
    else:
        resolver = AssetResolver()
    fullpath = resolver.resolve(path).abspath()
    return int(os.path.getmtime(fullpath))
Example #29
0
def add_amd_dir(cfg, path):
    data = cfg.get_settings()['amd.debug.data']
    paths = data.setdefault('paths', [])

    resolver = AssetResolver()
    directory = resolver.resolve(path).abspath()

    paths.append((path, directory))
    log.info("Add resource dir: %s" % path)
Example #30
0
 def setUp(self):
     # Sets up the AppPool for Testing with two apps (one with maximum attributes one with minimum attributes)
     self.config = testing.setUp(settings=aof.tests.settings)
     a = AssetResolver()
     self.path = a.resolve(aof.tests.settings["app_pool_path"]).abspath()
     self.ap=AppPool.Instance()
     self.ap.load(source=self.path, format="turtle")
     self.maxApp=URIRef("http://mustermann.de/maxApp")
     self.minApp=URIRef("http://mustermann.de/minApp")
def get_rpath(filename):
    a = AssetResolver('inventory')
    resolver = a.resolve(''.join(['reports/',filename]))
    return resolver.abspath()
Example #32
0
class LayersCommand(object):

    parser = argparse.ArgumentParser(description="player management")
    parser.add_argument('config', metavar='config', help='ini config file')

    # layers/templates
    parser.add_argument('-l',
                        action="store",
                        nargs="*",
                        dest='layers',
                        help='List layers')

    parser.add_argument('-lt',
                        action="store",
                        nargs="*",
                        dest='templates',
                        help='List templates')

    parser.add_argument('-c',
                        action="store",
                        nargs=2,
                        dest='customize',
                        help='Customize template')

    def __init__(self, args):
        self.options = args
        self.env = bootstrap(args.config)
        self.registry = self.env['registry']
        self.resolver = AssetResolver()

    def run(self):
        if self.options.layers is not None:
            self.list_layers()
        elif self.options.templates is not None:
            self.list_templates()
        elif self.options.customize is not None:
            self.customize()
        else:
            self.parser.print_help()

    def customize(self):
        storage = self.registry.get(ID_LAYER, {})

        tmpl, dest = self.options.customize

        # find template
        if ':' not in tmpl:
            print('Template format is wrong.')
            return

        layer, tname = tmpl.split(':', 1)
        if tname.endswith('.lt'):
            tname = tname[:-3]

        if layer not in storage:
            print('Layer "%s" could not be found.' % layer)
            return

        extensions = [
            name for name, factory in self.registry.getUtilitiesFor(
                IRendererFactory) if name.startswith('.')
        ]

        template_path = None

        layer_data = storage[layer]
        for intr in layer_data:
            for ext in extensions:
                fname = os.path.join(intr['path'], '%s%s' % (tname, ext))
                if os.path.exists(fname):
                    template_path = fname
                    break

        if template_path is None:
            print('Template "%s" could not be found.' % tmpl)
            return

        # get destination directory
        dest_path = os.path.abspath(dest)
        if not os.path.isdir(dest_path):
            dest_path = self.resolver.resolve(dest).abspath()

        if not os.path.isdir(dest_path):
            print('Destination directory is not found.')
            return

        shutil.copy(template_path, dest_path)

        print('Source: "%s"' % template_path)
        print('Destination: "%s"' %
              os.path.join(dest_path,
                           os.path.split(template_path)[-1]))

    def list_layers(self):
        storage = self.registry.get(ID_LAYER)
        if not storage:
            print('No layers are found.')
            return

        storage = sorted(storage.items())
        filter = [s.strip().split(':', 1)[0] for s in self.options.layers]

        for name, layers in storage:
            if filter and name not in filter:
                continue

            print(grpTitleWrap.fill('Layer: %s' % name))

            for layer in layers:
                print(grpDescriptionWrap.fill('name: %s' % layer['name']))
                print(grpDescriptionWrap.fill('path: %s' % layer['asset']))

            print()

    def list_templates(self):
        storage = self.registry.get(ID_LAYER)
        if not storage:
            print('No layers are found.')
            return

        print()

        storage = sorted(storage.items())
        f_layers = [s.strip().split(':', 1)[0] for s in self.options.templates]

        factories = dict((name, factory) for name, factory in
                         self.registry.getUtilitiesFor(IRendererFactory)
                         if name.startswith('.'))

        for name, layers in storage:
            if f_layers and name not in f_layers:
                continue

            print(grpTitleWrap.fill('Layer: %s' % name))

            tmpls = {}
            for layer in layers:
                if os.path.isdir(layer['path']):
                    for name in os.listdir(layer['path']):
                        if '.' in name:
                            rname, rtype = os.path.splitext(name)
                            key = (layer['asset'], rname)
                            if rtype in factories and key not in tmpls:
                                tmpls[key] = rtype

                curr_asset = None
                for (asset, rname), rtype in sorted(tmpls.items()):
                    if curr_asset != asset:
                        curr_asset = asset
                        print('')
                        print(grpDescriptionWrap.fill(asset))

                    if rname in layer['filters']:
                        f = layer['filters'][rname]
                        sinfo = ('%s.py: %s' %
                                 (f.__module__.replace('.', '/'), f.__name__))
                        print(
                            grpThirdLevelWrap.fill('%s: %s (%s)' %
                                                   (rname, rtype, sinfo)))
                    else:
                        print(grpThirdLevelWrap.fill('%s: %s' %
                                                     (rname, rtype)))

            print()
Example #33
0
def resolvecss(data, spec):
    if ':' in spec:
        pkg, name = spec.split(':', 1)
        return AssetResolver(pkg).resolve(name).stream().read()
    return resolve(spec)(data)
Example #34
0
from .handlebars import list_bundles

log = logging.getLogger('pyramid_amdjs')

ID_AMD_SPEC = 'pyramid_amdjs:amd-spec'
ID_AMD_SPEC_ = 'pyramid_amdsj:amd-spec_'
ID_AMD_MODULE = 'pyramid_amdjs:amd-module'
ID_AMD_BUILD = 'pyramid_amdjs:build-init'
ID_AMD_MD5 = 'pyramid_amdjs:md5-init'
ID_AMD_BUILD_MD5 = 'pyramid_amdjs:build-md5-init'

JS_MOD = 1
CSS_MOD = 2

RESOLVER = AssetResolver()
CURL_PATH = RESOLVER.resolve('pyramid_amdjs:static/lib/curl.js').abspath()


def init_amd_spec(config, cache_max_age=None):
    cfg = config.get_settings()
    if not cfg['amd.spec']:
        return

    if not cfg['amd.spec-dir']:
        raise ConfigurationError("amd.spec-dir is required.")

    directory = RESOLVER.resolve(cfg['amd.spec-dir']).abspath()

    # register static view
    config.add_static_view('_amdjs/bundles/', directory)
Example #35
0
"""

command = App(
    'hypothesis',
    version=version,
    description=description,
    opts=pserve.PServeCommand.parser.option_list[1:],
    args_callback=get_config,
)

# Teach urlparse about extension schemes
uses_netloc.append('chrome-extension')
uses_relative.append('chrome-extension')

# Fetch an asset spec resolver
resolve = AssetResolver().resolve


def add_base_url(event):
    request = event['request']

    assets_env = request.webassets_env
    view_name = getattr(request, 'view_name', None)

    if view_name == 'embed.js' and not assets_env.debug:
        base_url = join(request.webassets_env.url, 'app.html')
    else:
        base_url = request.resource_url(request.context, 'app')

    event['base_url'] = base_url
Example #36
0
def abspath(asset_spec):
    return Path(AssetResolver().resolve(asset_spec).abspath())
Example #37
0
class PyramidResolver(Resolver):
    def __init__(self, env):
        super(PyramidResolver, self).__init__(env)
        self.resolver = AssetResolver(None)

    def search_for_source(self, item):
        try:
            item = self.resolver.resolve(item).abspath()
        except ImportError as e:
            raise BundleError(e)
        except ValueError as e:
            return super(PyramidResolver, self).search_for_source(item)

        # Take care of globs
        if glob.has_magic(item):
            return [
                filename for filename in glob.iglob(item)
                if not path.isdir(item)
            ]
        else:
            return item

    def resolve_source_to_url(self, filepath, item):
        request = get_current_request()

        if ':' in item:
            # webassets gives us an absolute path to the source file
            # If the input item that generate this path was an asset spec
            # try to resolve the package and recreate the asset spec to use
            # for the static route generation.
            package = item[:item.find(':')]
            package_path = self.resolver.resolve('%s:' % package).abspath()
            filepath = filepath.replace(package_path, '').strip('/')
            spec = '%s:%s' % (package, filepath)
        else:
            spec = filepath

        return request.static_url(spec)

    def resolve_output_to_url(self, item):
        if not path.isabs(item):
            item = path.join(self.env.directory, item)

        try:
            request = get_current_request()

            url = request.static_url(self.search_for_source(item))

            return url
        except ValueError as e:
            if ':' in item:
                e.message += '(%s)' % item
            raise BundleError(e)
        except AttributeError as e:  # pragma: no cover
            if e.message == "'NoneType' object has no attribute 'static_url'":
                # render() has been called outside of a request
                # e.g., to compile assets before handling requests
                # and so failure is acceptable
                pass
            else:
                raise
Example #38
0
def json_asset(spec, **kw):
    utf8 = codecs.getreader("utf-8")
    asset = AssetResolver(caller_package()).resolve(spec)
    return json.load(utf8(asset.stream()), **kw)
Example #39
0
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from pyramid.httpexceptions import HTTPMethodNotAllowed
from pyramid.path import AssetResolver
from pyramid.tweens import INGRESS, EXCVIEW
from pyramid.response import FileResponse
from webob.multidict import MultiDict
from whitenoise import WhiteNoise

resolver = AssetResolver()


def whitenoise_tween_factory(handler, registry):
    def whitenoise_tween(request):
        whn = request.registry.whitenoise

        if whn.autorefresh:
            static_file = whn.find_file(request.path_info)
        else:
            static_file = whn.files.get(request.path_info)

        # We could not find a static file, so we'll just continue processing
        # this as normal.
        if static_file is None:
            return handler(request)
Example #40
0
class PyramidResolver(Resolver):
    def __init__(self):
        super(PyramidResolver, self).__init__()
        self.resolver = AssetResolver(None)

    def _split_spec(self, item):
        if ':' in item:
            package, subpath = item.split(':', 1)
            return (package, subpath)
        else:
            return (None, item)

    def _resolve_spec(self, spec):
        package, subpath = self._split_spec(spec)

        try:
            pkgpath = self.resolver.resolve(package + ':').abspath()
        except ImportError as e:
            raise BundleError(e)
        else:
            return path.join(pkgpath, subpath)

    def search_for_source(self, ctx, item):
        package, subpath = self._split_spec(item)
        if package is None:
            if USING_WEBASSETS_CONTEXT:
                return super(PyramidResolver,
                             self).search_for_source(ctx, item)
            else:  # pragma: no cover
                return super(PyramidResolver, self).search_for_source(item)
        else:
            pkgpath = self._resolve_spec(package + ':')
            return self.consider_single_directory(pkgpath, subpath)

    def resolve_source_to_url(self, ctx, filepath, item):
        request = get_current_request()

        # Use the filepath to reconstruct the item without globs
        package, _ = self._split_spec(item)
        if package is not None:
            pkgdir = self._resolve_spec(package + ':')
            if filepath.startswith(pkgdir):
                item = '{}:{}'.format(package, filepath[len(pkgdir):])

        # Attempt to resolve the filepath as passed (but after versioning).
        # If this fails, it may be because the static route was registered
        # with an asset spec. In this case, the original item may also be
        # an asset spec contained therein, so try to resolve that.
        if request is not None:
            for attempt in (filepath, item):
                try:
                    return request.static_url(attempt)
                except ValueError:
                    pass

        if USING_WEBASSETS_CONTEXT:
            return super(PyramidResolver,
                         self).resolve_source_to_url(ctx, filepath, item)
        else:  # pragma: no cover
            return super(PyramidResolver,
                         self).resolve_source_to_url(filepath, item)

    def resolve_output_to_path(self, ctx, target, bundle):
        package, filepath = self._split_spec(target)
        if package is not None:
            pkgpath = self._resolve_spec(package + ':')
            target = path.join(pkgpath, filepath)

        if USING_WEBASSETS_CONTEXT:
            return super(PyramidResolver,
                         self).resolve_output_to_path(ctx, target, bundle)
        else:  # pragma: no cover
            return super(PyramidResolver,
                         self).resolve_output_to_path(target, bundle)

    def resolve_output_to_url(self, ctx, item):
        request = get_current_request()

        if not path.isabs(item):
            if ':' not in item:
                if 'asset_base' in ctx.config:
                    if ctx.config['asset_base'].endswith(':'):
                        item = ctx.config['asset_base'] + item
                    else:
                        item = path.join(ctx.config['asset_base'], item)
                else:
                    item = path.join(ctx.directory, item)

        if ':' in item:
            filepath = self._resolve_spec(item)
        else:
            filepath = item

        if request is not None:
            for attempt in (filepath, item):
                try:
                    return request.static_url(item)
                except ValueError:
                    pass

        if USING_WEBASSETS_CONTEXT:
            return super(PyramidResolver,
                         self).resolve_output_to_url(ctx, filepath)
        else:  # pragma: no cover
            return super(PyramidResolver, self).resolve_output_to_url(filepath)
Example #41
0
 def __init__(self, info):
     del info  # unused
     self.resolver = AssetResolver('c2cgeoportal_geoportal')
Example #42
0
 def __init__(self, package: str, base_path: str, param: str = "x") -> None:
     super().__init__(param=param)
     self.asset_resolver = AssetResolver(package)
     self.base_path = base_path
     self.token_cache: Dict[str, str] = {}
Example #43
0
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from pyramid.security import remember, forget
from pyramid.response import Response
from pyramid.path import AssetResolver

from ..services.user import UserService
from ..services.blog_record import BlogRecordService
from ..forms import RegistrationForm, LoginForm
from ..models.user import User

resolver = AssetResolver()

# _robots = /static/robots.txt

_robots = open(
    resolver.resolve('nadamusic:static/robots.txt').abspath()).read()
_robots_response = Response(content_type='text/plain', body=_robots)


@view_config(name='robots.txt')
def robotstxt_view(context, request):
    return _robots_response


@view_config(route_name='index', renderer='nadamusic:templates/index.jinja2')
def index_page(request):
    page = int(request.params.get('page', 1))
    paginator = BlogRecordService.get_paginator(request, page)
    return {'paginator': paginator}
Example #44
0
 def __init__(self, static_view_name, path, settings: dict):
     self.settings = settings
     self.static_view_name = static_view_name
     r = AssetResolver()
     self.root = r.resolve(path).abspath()
Example #45
0
def includeme(cfg):
    cfg.include('pyramid_chameleon')

    import os
    from pyramid.path import AssetResolver
    from pyramid.settings import aslist
    from pyramid.exceptions import ConfigurationError

    from ptah.renderer.renderer import lt_renderer_factory
    from ptah.renderer.layer import add_layer, add_layers, change_layers_order
    from ptah.renderer.layer import add_tmpl_filter
    from ptah.renderer.layout_impl import add_layout, set_layout_data

    # config directives
    cfg.add_directive('add_layer', add_layer)
    cfg.add_directive('add_layers', add_layers)
    cfg.add_directive('add_layout', add_layout)
    cfg.add_directive('add_tmpl_filter', add_tmpl_filter)

    # request.render_tmpl
    cfg.add_request_method(render, 'render_tmpl')

    # request.set_layout_data
    cfg.add_request_method(set_layout_data, 'set_layout_data')

    def get_layout_data(request):
        return {}
    cfg.add_request_method(get_layout_data, 'layout_data', True, True)

    # renderer factory
    cfg.add_renderer('.lt', lt_renderer_factory)

    # layout renderer
    cfg.add_renderer('ptah.renderer:layout', layout)

    # order
    settings = cfg.get_settings()

    order = {}
    for key, val in settings.items():
        if key.startswith('layer.order.'):
            layer = key[12:]
            order[layer] = [s.strip() for s in aslist(val)]

    if order:
        cfg.action(
            'ptah.renderer.order',
            change_layers_order, (cfg, order), order=999999+1)

    # global custom layer
    custom = settings.get('layer.custom', '').strip()
    if custom:
        resolver = AssetResolver()
        directory = resolver.resolve(custom).abspath()
        if not os.path.isdir(directory):
            raise ConfigurationError(
                "Directory is required for layer.custom setting: %s"%custom)

        cfg.action(
            'ptah.renderer.custom',
            add_layers, (cfg, 'layer_custom', custom), order=999999+2)

    # formatters
    from ptah.renderer import formatter
    cfg.add_directive('add_formatter', formatter.add_formatter)
    cfg.add_request_method(formatter.formatters, 'fmt', True, True)

    # messages layer and request helpers
    from ptah.renderer.message import render_messages

    cfg.add_layer('message', path='ptah.renderer:templates/message/')

    cfg.add_request_method(add_message, 'add_message')
    cfg.add_request_method(render_messages, 'render_messages')
Example #46
0
 def spec_stream(self):
     return AssetResolver().resolve(self.spec_path).stream()
Example #47
0
File: script.py Project: shepazu/h
def extension(args, console):
    """Build the browser extensions.

    Accepts one (optional) argument which is the base URL of an h server."""

    if len(args) == 0:
        console.error('You must supply a paste configuration file.')
        return 2

    if len(args) < 2:
        console.error('You must supply a url to the hosted backend.')
        return 2

    from codecs import open
    from os import makedirs
    from os.path import abspath, exists, join
    from shutil import copyfile, copytree, rmtree
    from urlparse import (
        urljoin,
        urlparse,
        urlunparse,
        uses_netloc,
        uses_relative,
    )

    from chameleon.zpt.template import PageTextTemplateFile
    from pyramid.path import AssetResolver
    from pyramid.renderers import get_renderer, render
    from pyramid.settings import asbool
    from pyramid_webassets import IWebAssetsEnvironment

    from h import bootstrap, layouts

    resolve = AssetResolver().resolve

    def make_relative(request, url):
        assets_url = request.webassets_env.url
        if url.startswith(assets_url):
            return url[len(assets_url):].strip('/')
        return url

    def app(env, base_url=None):
        asset_env = env['registry'].queryUtility(IWebAssetsEnvironment)
        request = env['request']
        context = request.context

        base_template = get_renderer('h:templates/base.pt').implementation()

        api_url = request.registry.settings.get('api.url', None)
        api_url = api_url or urljoin(request.host_url, '/api/')

        app_layout = layouts.SidebarLayout(context, request)
        app_page = render(
            'h:templates/app.pt', {
                'base_url': base_url,
                'layout': {
                    'css_links': app_layout.css_links,
                    'js_links': app_layout.js_links,
                    'csp': '',
                    'inline_webfont': False,
                },
                'main_template': base_template,
                'request': request,
                'service_url': api_url,
            })

        app_html_file = join(asset_env.directory, 'app.html')
        with open(app_html_file, 'w', 'utf-8-sig') as f:
            f.write(app_page)

    def chrome(env):
        registry = env['registry']
        request = env['request']
        asset_env = registry.queryUtility(IWebAssetsEnvironment)
        settings = registry.settings
        develop = asbool(settings.get('webassets.debug', False))

        # Root the request at the app url
        app_url = urlparse(args[1])
        request.host = app_url.netloc
        request.scheme = app_url.scheme
        app_url = urlunparse(app_url)

        # Fully-qualify the static asset url
        asset_url = urlparse(asset_env.url)
        if not asset_url.netloc:
            asset_url = (
                request.scheme,
                request.host,
                asset_url.path,
                asset_url.params,
                asset_url.query,
                asset_url.fragment,
            )
        asset_url = urlunparse(asset_url)

        # Configure the load path and output url
        asset_env.append_path(resolve('h:').abspath(), asset_url)
        asset_env.url = asset_url

        def getUrl(url):
            if not develop:
                rel = make_relative(request, url)
                if rel != url:
                    return "chrome.extension.getURL('public/%s')" % rel
            return '"%s"' % url

        if develop:
            # Load the app from the development server.
            app_expr = json.dumps(app_url)
        else:
            # Load the app from the extension bundle.
            app_expr = "chrome.extension.getURL('public/app.html')"
            # Build the app html
            app(env, base_url=app_url)

        embed = render(
            'h:templates/embed.txt',
            {
                'app':
                app_expr,
                'options':
                json.dumps({
                    'Heatmap': {
                        "container": '.annotator-frame',
                    },
                    'Toolbar': {
                        'container': '.annotator-frame',
                    },
                }),
                'role':
                json.dumps('host'),
                'inject':
                '[%s]' %
                ', '.join([getUrl(url) for url in asset_env['inject'].urls()]),
                'jquery':
                getUrl(asset_env['jquery'].urls()[0]),
                'raf':
                getUrl(asset_env['raf'].urls()[0]),
            },
            request=request,
        )

        embed_js_file = join(asset_env.directory, 'js/embed.js')
        with open(embed_js_file, 'w', 'utf-8-sig') as f:
            f.write(embed)

        # Chrome is strict about the format of the version string
        ext_version = '.'.join(version.replace('-', '.').split('.')[:4])

        manifest_file = resolve('h:browser/chrome/manifest.json').abspath()
        manifest_renderer = PageTextTemplateFile(manifest_file)
        manifest = manifest_renderer(src=asset_url, version=ext_version)

        manifest_json_file = join('./build/chrome', 'manifest.json')
        with open(manifest_json_file, 'w', 'utf-8-sig') as f:
            f.write(manifest)

        # Due to Content Security Policy, the web font script cannot be inline.
        webfont = resolve('h:templates/webfont.js').abspath()
        copyfile(webfont, join(asset_env.directory, 'webfont.js'))

    # Make sure the common build dir exists
    if not exists('./build'): makedirs('./build')

    # Build the chrome extension
    if exists('./build/chrome'): rmtree('./build/chrome')
    copytree(resolve('h:browser/chrome').abspath(), './build/chrome')
    copytree(resolve('h:images').abspath(), './build/chrome/public/images')
    copytree(resolve('h:lib').abspath(), './build/chrome/public/lib')

    settings = {'webassets.base_dir': abspath('./build/chrome/public')}

    # Override static asset route generation with the STATIC_URL argument
    if len(args) > 2:
        settings.update({
            'webassets.base_url': args[2],
        })

    # Make sure urlparse understands chrome-extension:// URLs
    uses_netloc.append('chrome-extension')
    uses_relative.append('chrome-extension')

    bootstrap(args[0], options=settings, config_fn=chrome)
Example #48
0
 def __init__(self, env):
     Resolver.__init__(self, env)
     self.resolver = AssetResolver(None)
Example #49
0
 def __init__(self, args):
     self.options = args
     self.env = bootstrap(args.config)
     self.registry = self.env['registry']
     self.resolver = AssetResolver()
Example #50
0
from pyramid.i18n import TranslationStringFactory, get_localizer
from pyramid.path import AssetResolver
from pyramid.response import Response
from pyramid.security import effective_principals
from pyramid.threadlocal import get_current_request
from pyramid.view import view_config
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound

from lokp.config.files import upload_directory_path, upload_max_file_size
from lokp.models import File, DBSession, Activity, A_Tag_Group, A_Tag, A_Key, \
    A_Value
from lokp.utils.files import get_valid_file_extension, get_file_size, \
    clean_filename, get_file_hash, get_folders_from_identifier
from lokp.utils.views import validate_uuid

lokpAssetResolver = AssetResolver('lokp')
log = logging.getLogger(__name__)
_ = TranslationStringFactory('lokp')


@view_config(route_name='file_upload_form_embedded',
             permission='edit',
             renderer='lokp:templates/form/fileupload_embedded.mak')
def file_upload_form_embedded(request):
    class MemoryTmpStore(dict):
        def preview_url(self, uid):
            return None

    tmpStore = MemoryTmpStore()

    class Schema(colander.Schema):
Example #51
0
 def _getHash(self, package, path):
     import hashlib
     from pyramid.path import AssetResolver
     abspath = AssetResolver(package).resolve(path).abspath()
     with open(abspath, 'rb') as f:
         return hashlib.md5(f.read()).hexdigest()[:8]
Example #52
0
 def _normalize_source_path(self, spath):
     # spath might be an asset spec
     try:
         spath = AssetResolver(None).resolve(spath).abspath()
     except ImportError, e:
         raise BundleError(e)
Example #53
0
def get_webassets_env_from_settings(settings, prefix='webassets'):
    """This function will take all webassets.* parameters, and
    call the ``Environment()`` constructor with kwargs passed in.

    The only two parameters that are not passed as keywords are:

    * base_dir
    * base_url

    which are passed in positionally.

    Read the ``WebAssets`` docs for ``Environment`` for more details.
    """
    # Make a dictionary of the webassets.* elements...
    kwargs = {}  # assets settings
    cut_prefix = len(prefix) + 1
    for k in settings:
        if k.startswith(prefix):
            val = settings[k]
            if isinstance(val, six.string_types):
                if val.lower() in auto_booly:
                    val = asbool(val)
                elif val.lower().startswith(
                        'json:') and k[cut_prefix:] != 'manifest':
                    val = json.loads(val[5:])
            kwargs[k[cut_prefix:]] = val

    if 'base_dir' not in kwargs:
        raise Exception(
            "You need to provide webassets.base_dir in your configuration")
    if 'base_url' not in kwargs:
        raise Exception(
            "You need to provide webassets.base_url in your configuration")

    asset_dir = kwargs.pop('base_dir')
    asset_url = kwargs.pop('base_url')

    if ':' in asset_dir:
        try:
            asset_dir = AssetResolver(None).resolve(asset_dir).abspath()
        except ImportError:
            pass

    if 'debug' in kwargs:
        kwargs['debug'] = maybebool(kwargs['debug'])

    if 'cache' in kwargs:
        cache = kwargs['cache'] = maybebool(kwargs['cache'])

        if cache and isinstance(cache,
                                six.string_types) and not path.isdir(cache):
            makedirs(cache)

    # 'updater' is just passed in...

    if 'auto_build' in kwargs:
        kwargs['auto_build'] = maybebool(kwargs['auto_build'])

    if 'jst_compiler' in kwargs:
        kwargs['JST_COMPILER'] = kwargs.pop('jst_compiler')

    if 'jst_namespace' in kwargs:
        kwargs['JST_NAMESPACE'] = kwargs.pop('jst_namespace')

    if 'manifest' in kwargs:
        kwargs['manifest'] = maybebool(kwargs['manifest'])

    if 'url_expire' in kwargs:
        kwargs['url_expire'] = maybebool(kwargs['url_expire'])

    if 'static_view' in kwargs:
        kwargs['static_view'] = asbool(kwargs['static_view'])
    else:
        kwargs['static_view'] = False

    if 'cache_max_age' in kwargs:
        kwargs['cache_max_age'] = int(kwargs.pop('cache_max_age'))
    else:
        kwargs['cache_max_age'] = None

    if 'load_path' in kwargs:
        # force load_path to be an array and split on whitespace
        if not isinstance(kwargs['load_path'], list):
            kwargs['load_path'] = kwargs['load_path'].split()

    paths = kwargs.pop('paths', None)

    if 'bundles' in kwargs:
        if isinstance(kwargs['bundles'], six.string_types):
            kwargs['bundles'] = kwargs['bundles'].split()

    bundles = kwargs.pop('bundles', None)

    assets_env = Environment(asset_dir, asset_url, **kwargs)

    if paths is not None:
        for map_path, map_url in json.loads(paths).items():
            assets_env.append_path(map_path, map_url)

    def yaml_stream(fname):
        if path.exists(fname):
            return open(fname, 'rb')
        else:
            return assets_env.resolver.resolver.resolve(fname).stream()

    if isinstance(bundles, list):
        loaded = {}
        for bpath in bundles:
            with closing(yaml_stream(bpath)) as s:
                loader = YAMLLoader(s)
                loaded.update(loader.load_bundles())
        assets_env.register(loaded)
    elif isinstance(bundles, dict):
        assets_env.register(bundles)

    return assets_env
Example #54
0
class PyramidResolver(Resolver):
    def __init__(self, env):
        super(PyramidResolver, self).__init__(env)
        self.resolver = AssetResolver(None)

    def _split_asset_spec(self, item):
        if ':' in item:
            package, filepath = item.split(':', 1)
            try:
                package = self.resolver.resolve('%s:' % package).abspath()
            except ImportError as e:
                raise BundleError(e)
            return (package, filepath)
        else:
            return (None, item)

    def search_for_source(self, item):
        package, filepath = self._split_asset_spec(item)
        if package is None:
            return super(PyramidResolver, self).search_for_source(filepath)
        else:
            return self.consider_single_directory(package, filepath)

    def resolve_source_to_url(self, filepath, item):
        request = get_current_request()
        env = self.env

        # Attempt to resolve the filepath as passed (but after versioning).
        # If this fails, it may be because the static route was registered
        # with an asset spec. In this case, the original item may also be
        # an asset spec contained therein, so try to resolve that.
        if request is not None:
            for attempt in (filepath, item):
                try:
                    return request.static_url(attempt)
                except:
                    pass

        return super(PyramidResolver,
                     self).resolve_source_to_url(filepath, item)

    def resolve_output_to_path(self, target, bundle):
        package, filepath = self._split_asset_spec(target)
        if package is not None:
            target = path.join(package, filepath)
        return super(PyramidResolver,
                     self).resolve_output_to_path(target, bundle)

    def resolve_output_to_url(self, item):
        request = get_current_request()

        # Attempt to resolve the output item. First, resolve the item if its
        # an asset spec. If it's a relative path, construct a url from the
        # environment base url, which may be an asset spec that the base class
        # cannot handle. Try to resolve this url and the item against the
        # `static_url` method.
        url = None
        package, filepath = self._split_asset_spec(item)
        if package is None:
            if not path.isabs(filepath):
                item = path.join(self.env.directory, filepath)
                url = path.join(self.env.url, filepath)
        else:
            item = path.join(package, filepath)

        if url is None:
            url = super(PyramidResolver, self).resolve_output_to_url(item)

        for attempt in (url, item):
            try:
                return request.static_url(attempt)
            except:
                pass

        return url
Example #55
0
    "d": polygon((20, 2), (38, 20), (20, 38), (2, 20)),  # diamond
}


def pyxColor(string):
    """
    :param string: RGB color name like 'ffffff'
    :return: pyx color.

    >>> assert pyxColor('ffffff')
    """
    assert len(string) == 6
    colorTuple = tuple(
        int('0x' + c, 16) for c in [string[i:i + 2] for i in range(0, 6, 2)])
    return color.rgb(*[i / 255.0 for i in colorTuple])


if __name__ == '__main__':  # pragma: no cover
    if not pyx:
        sys.exit(1)
    asset_resolver = AssetResolver()
    for icon in ICONS:
        c = canvas.canvas()
        c.draw(
            shapes[icon.name[0]],
            [deco.stroked([linewidth]), deco.filled([pyxColor(icon.name[1:])])])
        stream = c.pipeGS("pngalpha", resolution=20, bbox=bbox.bbox(0, 0, 40, 40))
        with open(asset_resolver.resolve(icon.asset_spec).abspath(), 'wb') as fp:
            fp.write(stream.read())
    sys.exit(0)
Example #56
0
 def __init__(self, env):
     super(PyramidResolver, self).__init__(env)
     self.resolver = AssetResolver(None)
Example #57
0
 def __init__(self, info: Any):
     del info  # unused
     self.resolver = AssetResolver("c2cgeoportal_geoportal")