aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/modules/python.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/modules/python.py')
-rw-r--r--mesonbuild/modules/python.py52
1 files changed, 39 insertions, 13 deletions
diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py
index 16bdfd6..afcae8f 100644
--- a/mesonbuild/modules/python.py
+++ b/mesonbuild/modules/python.py
@@ -313,32 +313,58 @@ class PythonInstallation(ExternalProgramHolder, InterpreterObject):
return ModuleReturnValue(True, [])
@noKwargs
- def get_path(self, node, args, kwargs):
+ def has_path(self, node, args, kwargs):
if len(args) != 1:
- raise InvalidArguments('get_path takes exactly one positional argument.')
+ raise InvalidArguments('has_path takes exactly one positional argument.')
path_name = args[0]
if not isinstance(path_name, str):
- raise InvalidArguments('get_path argument must be a string.')
+ raise InvalidArguments('has_path argument must be a string.')
+
+ return ModuleReturnValue(path_name in self.paths, [])
- path = self.paths.get(path_name)
+ @noKwargs
+ def get_path(self, node, args, kwargs):
+ if len(args) not in (1, 2):
+ raise InvalidArguments('get_path must have one or two arguments.')
+ path_name = args[0]
+ if not isinstance(path_name, str):
+ raise InvalidArguments('get_path argument must be a string.')
- if path is None:
- raise InvalidArguments('{} is not a valid path name'.format(path_name))
+ try:
+ path = self.paths[path_name]
+ except KeyError:
+ if len(args) == 2:
+ path = args[1]
+ else:
+ raise InvalidArguments('{} is not a valid path name'.format(path_name))
return ModuleReturnValue(path, [])
@noKwargs
- def get_variable(self, node, args, kwargs):
+ def has_variable(self, node, args, kwargs):
if len(args) != 1:
- raise InvalidArguments('get_variable takes exactly one positional argument.')
+ raise InvalidArguments('has_variable takes exactly one positional argument.')
var_name = args[0]
if not isinstance(var_name, str):
- raise InvalidArguments('get_variable argument must be a string.')
+ raise InvalidArguments('has_variable argument must be a string.')
+
+ return ModuleReturnValue(var_name in self.variables, [])
- var = self.variables.get(var_name)
+ @noKwargs
+ def get_variable(self, node, args, kwargs):
+ if len(args) not in (1, 2):
+ raise InvalidArguments('get_variable must have one or two arguments.')
+ var_name = args[0]
+ if not isinstance(var_name, str):
+ raise InvalidArguments('get_variable argument must be a string.')
- if var is None:
- raise InvalidArguments('{} is not a valid path name'.format(var_name))
+ try:
+ var = self.variables[var_name]
+ except KeyError:
+ if len(args) == 2:
+ var = args[1]
+ else:
+ raise InvalidArguments('{} is not a valid variable name'.format(var_name))
return ModuleReturnValue(var, [])
@@ -351,7 +377,7 @@ class PythonInstallation(ExternalProgramHolder, InterpreterObject):
if method_name in ['extension_module', 'dependency', 'install_sources']:
value = fn(self.interpreter, None, args, kwargs)
return self.interpreter.holderify(value)
- elif method_name in ['get_variable', 'get_path', 'found', 'language_version', 'get_install_dir']:
+ elif method_name in ['has_variable', 'get_variable', 'has_path', 'get_path', 'found', 'language_version', 'get_install_dir']:
value = fn(None, args, kwargs)
return self.interpreter.module_method_callback(value)
else: