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) |