mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 08:24:40 +01:00
* detype untyped and path env-vars to ""; path_to_str("") == None * update env-var-tutorial, add news * update test_expandvars, test_expand_path, test_register_custom_var_str * trigger CI-rerun since unrelated osx test failed Co-authored-by: Alexander Firbas <alexander.firbas@gmail.com>
This commit is contained in:
parent
360933fb69
commit
1aefbf3b35
5 changed files with 43 additions and 13 deletions
|
@ -211,12 +211,20 @@ simple:
|
|||
|
||||
* ``\w*PATH``: any variable whose name ends in PATH is a list of strings.
|
||||
* ``\w*DIRS``: any variable whose name ends in DIRS is a list of strings.
|
||||
* ``XONSH_HISTORY_SIZE``: this variable is an int.
|
||||
* ``CASE_SENSITIVE_COMPLETIONS``: this variable is a boolean.
|
||||
|
||||
Futhermore, a number of predefined environment variables listed `here <envvars.html>`_ have a static type.
|
||||
For example,
|
||||
* ``XONSH_HISTORY_SIZE``: is an int, and
|
||||
* ``CASE_SENSITIVE_COMPLETIONS``: is a boolean.
|
||||
|
||||
xonsh will automatically convert back and forth to untyped (string-only)
|
||||
representations of the environment as needed (mostly by subprocess commands).
|
||||
When in xonsh, you'll always have the typed version. Here are a couple of
|
||||
When in xonsh, you'll always have the typed version.
|
||||
|
||||
Variables that do not match the rules above are converted to strings using ``str``,
|
||||
except they are ``None``. In this case the empty string is used.
|
||||
|
||||
Here are a couple of
|
||||
PATH examples:
|
||||
|
||||
.. code-block:: xonshcon
|
||||
|
|
23
news/fix_env_None.rst
Normal file
23
news/fix_env_None.rst
Normal file
|
@ -0,0 +1,23 @@
|
|||
**Added:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Changed:**
|
||||
|
||||
* Environment-variables of no predefined type or path environment variables are now represented as strings via the empty string.
|
||||
|
||||
**Deprecated:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Removed:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Fixed:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Security:**
|
||||
|
||||
* <news item>
|
|
@ -443,7 +443,7 @@ def test_register_custom_var_bool(val, converted):
|
|||
(32, "32"),
|
||||
(0, "0"),
|
||||
(27.0, "27.0"),
|
||||
(None, "None"),
|
||||
(None, ""),
|
||||
("lol", "lol"),
|
||||
("false", "false"),
|
||||
("no", "no"),
|
||||
|
|
|
@ -1627,8 +1627,8 @@ def test_expand_case_matching(inp, exp):
|
|||
("$unk $foo $unk $spam $unk", "$unk bar $unk eggs $unk"),
|
||||
("$an_int$spam$a_bool", "42eggsTrue"),
|
||||
("$unk$an_int$spam$a_bool", "$unk42eggsTrue"),
|
||||
("bar$foo$spam$foo $an_int $none", "barbareggsbar 42 None"),
|
||||
("$unk bar$foo$spam$foo $an_int $none", "$unk barbareggsbar 42 None"),
|
||||
("bar$foo$spam$foo $an_int $none", "barbareggsbar 42 "),
|
||||
("$unk bar$foo$spam$foo $an_int $none", "$unk barbareggsbar 42 "),
|
||||
("$foo/bar", "bar/bar"),
|
||||
("$unk/$foo/bar", "$unk/bar/bar"),
|
||||
("${'foo'} $spam", "bar eggs"),
|
||||
|
@ -1688,7 +1688,7 @@ def test_ensure_timestamp(inp, fmt, exp, xession):
|
|||
("~/$foo", True, "/bar"),
|
||||
("~/test/$a_bool", True, "/test/True"),
|
||||
("~/test/$an_int", True, "/test/42"),
|
||||
("~/test/$none", True, "/test/None"),
|
||||
("~/test/$none", True, "/test/"),
|
||||
("~/$foo", False, "/$foo"),
|
||||
],
|
||||
)
|
||||
|
|
|
@ -1226,8 +1226,8 @@ def always_none(x):
|
|||
|
||||
|
||||
def ensure_string(x):
|
||||
"""Returns a string if x is not a string, and x if it already is."""
|
||||
return str(x)
|
||||
"""Returns a string if x is not a string, and x if it already is. If x is None, the empty string is returned."""
|
||||
return str(x) if x is not None else ""
|
||||
|
||||
|
||||
def is_path(x):
|
||||
|
@ -1242,11 +1242,10 @@ def is_env_path(x):
|
|||
|
||||
def str_to_path(x):
|
||||
"""Converts a string to a path."""
|
||||
if x is None:
|
||||
if x is None or x == "":
|
||||
return None
|
||||
elif isinstance(x, str):
|
||||
# checking x is needed to avoid uncontrolled converting empty string to Path('.')
|
||||
return pathlib.Path(x) if x else None
|
||||
return pathlib.Path(x)
|
||||
elif isinstance(x, pathlib.Path):
|
||||
return x
|
||||
elif isinstance(x, EnvPath) and len(x) == 1:
|
||||
|
@ -1267,7 +1266,7 @@ def str_to_env_path(x):
|
|||
|
||||
def path_to_str(x):
|
||||
"""Converts a path to a string."""
|
||||
return str(x)
|
||||
return str(x) if x is not None else ""
|
||||
|
||||
|
||||
def env_path_to_str(x):
|
||||
|
|
Loading…
Add table
Reference in a new issue