Michael Merickel
2018-10-26 4149922e64aecf2a213f8efb120cd2d61fed3eb7
commit | author | age
c0c7b5 1 import os
CM 2 import pkg_resources
3
e6c2d2 4 from pyramid.compat import string_types
CM 5
0c29cf 6 from pyramid.path import package_path, package_name
MM 7
c0c7b5 8
CM 9 def resolve_asset_spec(spec, pname='__main__'):
e6c2d2 10     if pname and not isinstance(pname, string_types):
0c29cf 11         pname = pname.__name__  # as package
c0c7b5 12     if os.path.isabs(spec):
CM 13         return None, spec
14     filename = spec
15     if ':' in spec:
16         pname, filename = spec.split(':', 1)
17     elif pname is None:
18         pname, filename = None, spec
19     return pname, filename
20
0c29cf 21
c0c7b5 22 def asset_spec_from_abspath(abspath, package):
CM 23     """ Try to convert an absolute path to a resource in a package to
24     a resource specification if possible; otherwise return the
25     absolute path.  """
26     if getattr(package, '__name__', None) == '__main__':
27         return abspath
28     pp = package_path(package) + os.path.sep
29     if abspath.startswith(pp):
0c29cf 30         relpath = abspath[len(pp) :]
MM 31         return '%s:%s' % (
32             package_name(package),
33             relpath.replace(os.path.sep, '/'),
34         )
c0c7b5 35     return abspath
0c29cf 36
cdc6d4 37
732c74 38 # bw compat only; use pyramid.path.AssetResolver().resolve(spec).abspath()
c0c7b5 39 def abspath_from_asset_spec(spec, pname='__main__'):
CM 40     if pname is None:
41         return spec
42     pname, filename = resolve_asset_spec(spec, pname)
43     if pname is None:
44         return filename
45     return pkg_resources.resource_filename(pname, filename)