resource : fetch strategy constructed from kwargs instead or hardcoded URLFetchStrategy
This commit is contained in:
parent
a173ab1e31
commit
a075d581ef
2 changed files with 18 additions and 3 deletions
|
@ -62,7 +62,7 @@ class OpenMpi(Package):
|
||||||
from spack.variant import Variant
|
from spack.variant import Variant
|
||||||
from spack.spec import Spec, parse_anonymous_spec
|
from spack.spec import Spec, parse_anonymous_spec
|
||||||
from spack.resource import Resource
|
from spack.resource import Resource
|
||||||
from spack.fetch_strategy import URLFetchStrategy
|
from spack.fetch_strategy import from_kwargs
|
||||||
|
|
||||||
#
|
#
|
||||||
# This is a list of all directives, built up as they are defined in
|
# This is a list of all directives, built up as they are defined in
|
||||||
|
@ -279,8 +279,7 @@ def resource(pkg, **kwargs):
|
||||||
destination = kwargs.get('destination', "")
|
destination = kwargs.get('destination', "")
|
||||||
when_spec = parse_anonymous_spec(when, pkg.name)
|
when_spec = parse_anonymous_spec(when, pkg.name)
|
||||||
resources = pkg.resources.setdefault(when_spec, [])
|
resources = pkg.resources.setdefault(when_spec, [])
|
||||||
# FIXME : change URLFetchStrategy with a factory that selects based on kwargs
|
fetcher = from_kwargs(**kwargs)
|
||||||
fetcher = URLFetchStrategy(**kwargs)
|
|
||||||
# FIXME : should we infer the name somehow if not passed ?
|
# FIXME : should we infer the name somehow if not passed ?
|
||||||
name = kwargs.get('name')
|
name = kwargs.get('name')
|
||||||
resources.append(Resource(name, fetcher, destination))
|
resources.append(Resource(name, fetcher, destination))
|
||||||
|
|
|
@ -634,6 +634,22 @@ def from_url(url):
|
||||||
return URLFetchStrategy(url)
|
return URLFetchStrategy(url)
|
||||||
|
|
||||||
|
|
||||||
|
def from_kwargs(**kwargs):
|
||||||
|
"""
|
||||||
|
Construct the appropriate FetchStrategy from the given keyword arguments.
|
||||||
|
|
||||||
|
:param kwargs: dictionary of keyword arguments
|
||||||
|
:return: fetcher or raise a FetchError exception
|
||||||
|
"""
|
||||||
|
for fetcher in all_strategies:
|
||||||
|
if fetcher.matches(kwargs):
|
||||||
|
return fetcher(**kwargs)
|
||||||
|
# Raise an error in case we can't instantiate any known strategy
|
||||||
|
message = "Cannot instantiate any FetchStrategy"
|
||||||
|
long_message = message + " from the given arguments : {arguments}".format(srguments=kwargs)
|
||||||
|
raise FetchError(message, long_message)
|
||||||
|
|
||||||
|
|
||||||
def args_are_for(args, fetcher):
|
def args_are_for(args, fetcher):
|
||||||
fetcher.matches(args)
|
fetcher.matches(args)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue