import os import pkg_resources from pyramid.compat import string_types from pyramid.path import package_path, package_name def resolve_asset_spec(spec, pname='__main__'): if pname and not isinstance(pname, string_types): pname = pname.__name__ # as package if os.path.isabs(spec): return None, spec filename = spec if ':' in spec: pname, filename = spec.split(':', 1) elif pname is None: pname, filename = None, spec return pname, filename def asset_spec_from_abspath(abspath, package): """ Try to convert an absolute path to a resource in a package to a resource specification if possible; otherwise return the absolute path. """ if getattr(package, '__name__', None) == '__main__': return abspath pp = package_path(package) + os.path.sep if abspath.startswith(pp): relpath = abspath[len(pp) :] return '%s:%s' % ( package_name(package), relpath.replace(os.path.sep, '/'), ) return abspath # bw compat only; use pyramid.path.AssetResolver().resolve(spec).abspath() def abspath_from_asset_spec(spec, pname='__main__'): if pname is None: return spec pname, filename = resolve_asset_spec(spec, pname) if pname is None: return filename return pkg_resources.resource_filename(pname, filename)