def resolve(self, include_file: str, fpname: str) -> t.TextIO:
"""Resolve include_file and return a readable file like object.
:param include_file: File to be include.
:param fpname: Main configuration filename.
:return: Return a readable file-like object for the specified resource.
"""
parts = urlparse(include_file)
if parts.scheme not in _VALID_SCHEMAS_:
raise exc.InvalidResourceScheme(
"Supported resources: {resources}. Got {include} in {fpname}".format(
resources=', '.join(_VALID_SCHEMAS_),
include=include_file,
fpname=fpname
)
)
package = parts.netloc
args = package.split('.') + [parts.path.lstrip('/')]
path = os.path.join(*args)
req = pkg_resources.Requirement.parse(package)
if not _resource_manager.resource_exists(req, path):
raise exc.NonExistingInclude(
"Could not find {include}".format(include=include_file)
)
config_source = _resource_manager.resource_stream(req, path)
return config_source
评论列表
文章目录