Hello community, here is the log from the commit of package python-python-dotenv for openSUSE:Factory checked in at 2020-12-12 20:28:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-python-dotenv (Old) and /work/SRC/openSUSE:Factory/.python-python-dotenv.new.2328 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-dotenv" Sat Dec 12 20:28:58 2020 rev:9 rq:853582 version:0.15.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-python-dotenv/python-python-dotenv.changes 2020-08-05 20:30:07.883121547 +0200 +++ /work/SRC/openSUSE:Factory/.python-python-dotenv.new.2328/python-python-dotenv.changes 2020-12-12 20:31:16.233783567 +0100 @@ -1,0 +2,17 @@ +Mon Dec 7 00:42:19 UTC 2020 - Benjamin Greiner <c...@bnavigator.de> + +- Skip testing with optional jupyter_ipython. Jupyter is only + available for Python >= 3.7 + gh#openSUSE/python-rpm-macros#66 + +------------------------------------------------------------------- +Wed Dec 2 17:16:41 UTC 2020 - Michael Ströder <mich...@stroeder.com> + +- Update to 0.15.0 + * Add --export option to set to make it prepend the binding with export (#270 by @jadutter). + * Make set command create the .env file in the current directory if no .env file was found (#270 by @jadutter). + * Fix potentially empty expanded value for duplicate key (#260 by @bbc2). + * Fix import error on Python 3.5.0 and 3.5.1 (#267 by @gongqingkui). + * Fix parsing of unquoted values containing several adjacent space or tab characters (#277 by @bbc2, review by @x-yuri). + +------------------------------------------------------------------- Old: ---- python-dotenv-0.14.0.tar.gz New: ---- python-dotenv-0.15.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-python-dotenv.spec ++++++ --- /var/tmp/diff_new_pack.FH4Pde/_old 2020-12-12 20:31:16.865784226 +0100 +++ /var/tmp/diff_new_pack.FH4Pde/_new 2020-12-12 20:31:16.869784230 +0100 @@ -18,14 +18,13 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-python-dotenv -Version: 0.14.0 +Version: 0.15.0 Release: 0 Summary: Python library for .env support License: BSD-3-Clause URL: https://github.com/theskumar/python-dotenv Source: https://github.com/theskumar/python-dotenv/archive/v%{version}.tar.gz#/python-dotenv-%{version}.tar.gz BuildRequires: %{python_module click >= 5.0} -BuildRequires: %{python_module jupyter_ipython} BuildRequires: %{python_module mock} BuildRequires: %{python_module pytest >= 3.0.5} BuildRequires: %{python_module setuptools} @@ -65,7 +64,8 @@ export PATH=%{buildroot}%{_bindir}:$PATH %{python_expand export PYTHONPATH=%{buildroot}%{$python_sitelib} cp %{buildroot}%{_bindir}/dotenv-%{$python_bin_suffix} %{buildroot}%{_bindir}/dotenv -$python -m pytest -v +# ipython is optional and only available for python >= 3.7 in Tumbleweed +$python -m pytest -v -k "not ipython" } mv %{buildroot}%{_bindir}/dotenv.orig %{buildroot}%{_bindir}/dotenv ++++++ python-dotenv-0.14.0.tar.gz -> python-dotenv-0.15.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/.travis.yml new/python-dotenv-0.15.0/.travis.yml --- old/python-dotenv-0.14.0/.travis.yml 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/.travis.yml 2020-10-28 17:59:29.000000000 +0100 @@ -19,6 +19,8 @@ env: TOXENV=py37 - python: "3.8" env: TOXENV=py38 + - python: "3.9-dev" + env: TOXENV=py39 - python: "pypy" env: TOXENV=pypy - python: "pypy3" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/CHANGELOG.md new/python-dotenv-0.15.0/CHANGELOG.md --- old/python-dotenv-0.14.0/CHANGELOG.md 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/CHANGELOG.md 2020-10-28 17:59:29.000000000 +0100 @@ -7,7 +7,26 @@ ## [Unreleased] -*No unreleased change at this time.* +_There are no unreleased changes at this time._ + +## [0.15.0] - 2020-10-28 + +### Added + +- Add `--export` option to `set` to make it prepend the binding with `export` (#270 by + [@jadutter]). + +### Changed + +- Make `set` command create the `.env` file in the current directory if no `.env` file was + found (#270 by [@jadutter]). + +### Fixed + +- Fix potentially empty expanded value for duplicate key (#260 by [@bbc2]). +- Fix import error on Python 3.5.0 and 3.5.1 (#267 by [@gongqingkui]). +- Fix parsing of unquoted values containing several adjacent space or tab characters + (#277 by [@bbc2], review by [@x-yuri]). ## [0.14.0] - 2020-07-03 @@ -204,16 +223,20 @@ [@ekohl]: https://github.com/ekohl [@elbehery95]: https://github.com/elbehery95 [@gergelyk]: https://github.com/gergelyk +[@gongqingkui]: https://github.com/gongqingkui [@greyli]: https://github.com/greyli +[@jadutter]: https://github.com/jadutter [@qnighy]: https://github.com/qnighy [@snobu]: https://github.com/snobu [@techalchemy]: https://github.com/techalchemy [@theskumar]: https://github.com/theskumar [@ulyssessouza]: https://github.com/ulyssessouza [@venthur]: https://github.com/venthur +[@x-yuri]: https://github.com/x-yuri [@yannham]: https://github.com/yannham -[Unreleased]: https://github.com/theskumar/python-dotenv/compare/v0.14.0...HEAD +[Unreleased]: https://github.com/theskumar/python-dotenv/compare/v0.15.0...HEAD +[0.15.0]: https://github.com/theskumar/python-dotenv/compare/v0.14.0...v0.15.0 [0.14.0]: https://github.com/theskumar/python-dotenv/compare/v0.13.0...v0.14.0 [0.13.0]: https://github.com/theskumar/python-dotenv/compare/v0.12.0...v0.13.0 [0.12.0]: https://github.com/theskumar/python-dotenv/compare/v0.11.0...v0.12.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/README.md new/python-dotenv-0.15.0/README.md --- old/python-dotenv-0.14.0/README.md 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/README.md 2020-10-28 17:59:29.000000000 +0100 @@ -6,7 +6,7 @@ __ | |____ | |\ | \ / (__)|_______||__| \__| \__/ ``` -python-dotenv | [](https://travis-ci.org/theskumar/python-dotenv) [](https://coveralls.io/r/theskumar/python-dotenv?branch=master) [](http://badge.fury.io/py/python-dotenv) [](https://saythanks.io/to/theskumar) +python-dotenv | [](https://travis-ci.com/theskumar/python-dotenv) [](https://coveralls.io/r/theskumar/python-dotenv?branch=master) [](http://badge.fury.io/py/python-dotenv) [](https://saythanks.io/to/theskumar) =============================================================================== Reads the key-value pair from `.env` file and adds them to environment @@ -43,12 +43,12 @@ The value of a variable is the first of the values defined in the following list: -- Value of that variable in the environment. - Value of that variable in the `.env` file. +- Value of that variable in the environment. - Default value, if provided. - Empty string. -Ensure that variables are surrounded with `{}` like `${HOME}` as bare +Ensure that variables are surrounded with `{}` like `${HOME}` as bare variables such as `$HOME` are not expanded. ```shell @@ -186,16 +186,23 @@ Options: -f, --file PATH Location of the .env file, defaults to .env file in current working directory. + -q, --quote [always|never|auto] Whether to quote or not the variable values. Default mode is always. This does not affect parsing. + + -e, --export BOOLEAN + Whether to write the dot file as an + executable bash script. + + --version Show the version and exit. --help Show this message and exit. Commands: - get Retrive the value for the given key. + get Retrieve the value for the given key. list Display all the stored key/value. - run Run command with environment variables from .env file present + run Run command with environment variables present. set Store the given key/value. unset Removes the given key. ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/setup.cfg new/python-dotenv-0.15.0/setup.cfg --- old/python-dotenv-0.14.0/setup.cfg 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/setup.cfg 2020-10-28 17:59:29.000000000 +0100 @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.14.0 +current_version = 0.15.0 commit = True tag = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/setup.py new/python-dotenv-0.15.0/setup.py --- old/python-dotenv-0.14.0/setup.py 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/setup.py 2020-10-28 17:59:29.000000000 +0100 @@ -53,6 +53,7 @@ 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: Implementation :: PyPy', 'Intended Audience :: Developers', 'Intended Audience :: System Administrators', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/src/dotenv/cli.py new/python-dotenv-0.15.0/src/dotenv/cli.py --- old/python-dotenv-0.14.0/src/dotenv/cli.py 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/src/dotenv/cli.py 2020-10-28 17:59:29.000000000 +0100 @@ -19,19 +19,23 @@ @click.group() @click.option('-f', '--file', default=os.path.join(os.getcwd(), '.env'), - type=click.Path(exists=True), + type=click.Path(file_okay=True), help="Location of the .env file, defaults to .env file in current working directory.") @click.option('-q', '--quote', default='always', type=click.Choice(['always', 'never', 'auto']), help="Whether to quote or not the variable values. Default mode is always. This does not affect parsing.") +@click.option('-e', '--export', default=False, + type=click.BOOL, + help="Whether to write the dot file as an executable bash script.") @click.version_option(version=__version__) @click.pass_context -def cli(ctx, file, quote): - # type: (click.Context, Any, Any) -> None +def cli(ctx, file, quote, export): + # type: (click.Context, Any, Any, Any) -> None '''This script is used to set, get or unset values from a .env file.''' ctx.obj = {} - ctx.obj['FILE'] = file ctx.obj['QUOTE'] = quote + ctx.obj['EXPORT'] = export + ctx.obj['FILE'] = file @cli.command() @@ -40,6 +44,11 @@ # type: (click.Context) -> None '''Display all the stored key/value.''' file = ctx.obj['FILE'] + if not os.path.isfile(file): + raise click.BadParameter( + 'Path "%s" does not exist.' % (file), + ctx=ctx + ) dotenv_as_dict = dotenv_values(file) for k, v in dotenv_as_dict.items(): click.echo('%s=%s' % (k, v)) @@ -54,7 +63,8 @@ '''Store the given key/value.''' file = ctx.obj['FILE'] quote = ctx.obj['QUOTE'] - success, key, value = set_key(file, key, value, quote) + export = ctx.obj['EXPORT'] + success, key, value = set_key(file, key, value, quote, export) if success: click.echo('%s=%s' % (key, value)) else: @@ -68,6 +78,11 @@ # type: (click.Context, Any) -> None '''Retrieve the value for the given key.''' file = ctx.obj['FILE'] + if not os.path.isfile(file): + raise click.BadParameter( + 'Path "%s" does not exist.' % (file), + ctx=ctx + ) stored_value = get_key(file, key) if stored_value: click.echo('%s=%s' % (key, stored_value)) @@ -97,6 +112,11 @@ # type: (click.Context, List[str]) -> None """Run command with environment variables present.""" file = ctx.obj['FILE'] + if not os.path.isfile(file): + raise click.BadParameter( + 'Invalid value for \'-f\' "%s" does not exist.' % (file), + ctx=ctx + ) dotenv_as_dict = {to_env(k): to_env(v) for (k, v) in dotenv_values(file).items() if v is not None} if not commandline: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/src/dotenv/main.py new/python-dotenv-0.15.0/src/dotenv/main.py --- old/python-dotenv-0.14.0/src/dotenv/main.py 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/src/dotenv/main.py 2020-10-28 17:59:29.000000000 +0100 @@ -18,7 +18,7 @@ if IS_TYPE_CHECKING: from typing import ( - Dict, Iterator, Match, Optional, Pattern, Union, Text, IO, Tuple + Dict, Iterable, Iterator, Match, Optional, Pattern, Union, Text, IO, Tuple ) if sys.version_info >= (3, 6): _PathLike = os.PathLike @@ -83,9 +83,13 @@ if self._dict: return self._dict - values = OrderedDict(self.parse()) - self._dict = resolve_nested_variables(values) if self.interpolate else values - return self._dict + if self.interpolate: + values = resolve_nested_variables(self.parse()) + else: + values = OrderedDict(self.parse()) + + self._dict = values + return values def parse(self): # type: () -> Iterator[Tuple[Text, Optional[Text]]] @@ -136,6 +140,9 @@ def rewrite(path): # type: (_PathLike) -> Iterator[Tuple[IO[Text], IO[Text]]] try: + if not os.path.isfile(path): + with io.open(path, "w+") as source: + source.write("") with tempfile.NamedTemporaryFile(mode="w+", delete=False) as dest: with io.open(path) as source: yield (source, dest) # type: ignore @@ -147,8 +154,8 @@ shutil.move(dest.name, path) -def set_key(dotenv_path, key_to_set, value_to_set, quote_mode="always"): - # type: (_PathLike, Text, Text, Text) -> Tuple[Optional[bool], Text, Text] +def set_key(dotenv_path, key_to_set, value_to_set, quote_mode="always", export=False): + # type: (_PathLike, Text, Text, Text, bool) -> Tuple[Optional[bool], Text, Text] """ Adds or Updates a key/value to the given .env @@ -156,9 +163,6 @@ an orphan .env somewhere in the filesystem """ value_to_set = value_to_set.strip("'").strip('"') - if not os.path.exists(dotenv_path): - logger.warning("Can't write to %s - it doesn't exist.", dotenv_path) - return None, key_to_set, value_to_set if " " in value_to_set: quote_mode = "always" @@ -167,7 +171,10 @@ value_out = '"{}"'.format(value_to_set.replace('"', '\\"')) else: value_out = value_to_set - line_out = "{}={}\n".format(key_to_set, value_out) + if export: + line_out = 'export {}={}\n'.format(key_to_set, value_out) + else: + line_out = "{}={}\n".format(key_to_set, value_out) with rewrite(dotenv_path) as (source, dest): replaced = False @@ -211,7 +218,7 @@ def resolve_nested_variables(values): - # type: (Dict[Text, Optional[Text]]) -> Dict[Text, Optional[Text]] + # type: (Iterable[Tuple[Text, Optional[Text]]]) -> Dict[Text, Optional[Text]] def _replacement(name, default): # type: (Text, Optional[Text]) -> Text default = default if default is not None else "" @@ -229,7 +236,7 @@ new_values = {} - for k, v in values.items(): + for (k, v) in values: new_values[k] = __posix_variable.sub(_re_sub_callback, v) if v is not None else None return new_values diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/src/dotenv/parser.py new/python-dotenv-0.15.0/src/dotenv/parser.py --- old/python-dotenv-0.14.0/src/dotenv/parser.py 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/src/dotenv/parser.py 2020-10-28 17:59:29.000000000 +0100 @@ -24,7 +24,7 @@ _equal_sign = make_regex(r"(=[^\S\r\n]*)") _single_quoted_value = make_regex(r"'((?:\\'|[^'])*)'") _double_quoted_value = make_regex(r'"((?:\\"|[^"])*)"') -_unquoted_value_part = make_regex(r"([^ \r\n]*)") +_unquoted_value = make_regex(r"([^\r\n]*)") _comment = make_regex(r"(?:[^\S\r\n]*#[^\r\n]*)?") _end_of_line = make_regex(r"[^\S\r\n]*(?:\r\n|\n|\r|$)") _rest_of_line = make_regex(r"[^\r\n]*(?:\r|\n|\r\n)?") @@ -55,7 +55,7 @@ ("error", bool), ], ) -except ImportError: +except (ImportError, AttributeError): from collections import namedtuple Original = namedtuple( # type: ignore "Original", @@ -167,14 +167,8 @@ def parse_unquoted_value(reader): # type: (Reader) -> Text - value = u"" - while True: - (part,) = reader.read_regex(_unquoted_value_part) - value += part - after = reader.peek(2) - if len(after) < 2 or after[0] in u"\r\n" or after[1] in u" #\r\n": - return value - value += reader.read(2) + (part,) = reader.read_regex(_unquoted_value) + return re.sub(r"\s+#.*", "", part).rstrip() def parse_value(reader): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/src/dotenv/version.py new/python-dotenv-0.15.0/src/dotenv/version.py --- old/python-dotenv-0.14.0/src/dotenv/version.py 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/src/dotenv/version.py 2020-10-28 17:59:29.000000000 +0100 @@ -1 +1 @@ -__version__ = "0.14.0" +__version__ = "0.15.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/tests/test_cli.py new/python-dotenv-0.15.0/tests/test_cli.py --- old/python-dotenv-0.14.0/tests/test_cli.py 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/tests/test_cli.py 2020-10-28 17:59:29.000000000 +0100 @@ -20,7 +20,7 @@ result = cli.invoke(dotenv_cli, ['--file', 'nx_file', 'list']) assert result.exit_code == 2, result.output - assert "Invalid value for '-f'" in result.output + assert "does not exist" in result.output def test_list_no_file(cli): @@ -48,7 +48,7 @@ result = cli.invoke(dotenv_cli, ['--file', 'nx_file', 'get', 'a']) assert result.exit_code == 2 - assert "Invalid value for '-f'" in result.output + assert "does not exist" in result.output def test_unset_existing_value(cli, dotenv_file): @@ -77,10 +77,27 @@ ("auto", "HELLO", "HELLO WORLD", 'HELLO="HELLO WORLD"\n'), ) ) -def test_set_options(cli, dotenv_file, quote_mode, variable, value, expected): +def test_set_quote_options(cli, dotenv_file, quote_mode, variable, value, expected): result = cli.invoke( dotenv_cli, - ["--file", dotenv_file, "--quote", quote_mode, "set", variable, value] + ["--file", dotenv_file, "--export", "false", "--quote", quote_mode, "set", variable, value] + ) + + assert (result.exit_code, result.output) == (0, "{}={}\n".format(variable, value)) + assert open(dotenv_file, "r").read() == expected + + +@pytest.mark.parametrize( + "dotenv_file,export_mode,variable,value,expected", + ( + (".nx_file", "true", "HELLO", "WORLD", "export HELLO=\"WORLD\"\n"), + (".nx_file", "false", "HELLO", "WORLD", "HELLO=\"WORLD\"\n"), + ) +) +def test_set_export(cli, dotenv_file, export_mode, variable, value, expected): + result = cli.invoke( + dotenv_cli, + ["--file", dotenv_file, "--quote", "always", "--export", export_mode, "set", variable, value] ) assert (result.exit_code, result.output) == (0, "{}={}\n".format(variable, value)) @@ -97,7 +114,7 @@ result = cli.invoke(dotenv_cli, ["--file", "nx_file", "set"]) assert result.exit_code == 2 - assert "Invalid value for '-f'" in result.output + assert "Missing argument" in result.output def test_get_default_path(tmp_path): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/tests/test_main.py new/python-dotenv-0.15.0/tests/test_main.py --- old/python-dotenv-0.14.0/tests/test_main.py 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/tests/test_main.py 2020-10-28 17:59:29.000000000 +0100 @@ -18,15 +18,11 @@ nx_file = str(tmp_path / "nx") logger = logging.getLogger("dotenv.main") - with mock.patch.object(logger, "warning") as mock_warning: + with mock.patch.object(logger, "warning"): result = dotenv.set_key(nx_file, "foo", "bar") - assert result == (None, "foo", "bar") - assert not os.path.exists(nx_file) - mock_warning.assert_called_once_with( - "Can't write to %s - it doesn't exist.", - nx_file, - ) + assert result == (True, "foo", "bar") + assert os.path.exists(nx_file) @pytest.mark.parametrize( @@ -337,6 +333,8 @@ # Re-defined and used in file ({"b": "c"}, "b=d\na=${b}", True, {"a": "d", "b": "d"}), + ({}, "a=b\na=c\nd=${a}", True, {"a": "c", "d": "c"}), + ({}, "a=b\nc=${a}\nd=e\nc=${d}", True, {"a": "b", "c": "e", "d": "e"}), ], ) def test_dotenv_values_stream(env, string, interpolate, expected): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/tests/test_parser.py new/python-dotenv-0.15.0/tests/test_parser.py --- old/python-dotenv-0.14.0/tests/test_parser.py 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/tests/test_parser.py 2020-10-28 17:59:29.000000000 +0100 @@ -19,20 +19,40 @@ (u"# a=b", [Binding(key=None, value=None, original=Original(string=u"# a=b", line=1), error=False)]), (u"a=b#c", [Binding(key=u"a", value=u"b#c", original=Original(string=u"a=b#c", line=1), error=False)]), ( - u'a=b # comment', - [Binding(key=u"a", value=u"b", original=Original(string=u"a=b # comment", line=1), error=False)], + u'a=b #c', + [Binding(key=u"a", value=u"b", original=Original(string=u"a=b #c", line=1), error=False)], ), ( - u"a=b space ", - [Binding(key=u"a", value=u"b space", original=Original(string=u"a=b space ", line=1), error=False)], + u'a=b\t#c', + [Binding(key=u"a", value=u"b", original=Original(string=u"a=b\t#c", line=1), error=False)], ), ( - u"a='b space '", - [Binding(key=u"a", value=u"b space ", original=Original(string=u"a='b space '", line=1), error=False)], + u"a=b c", + [Binding(key=u"a", value=u"b c", original=Original(string=u"a=b c", line=1), error=False)], ), ( - u'a="b space "', - [Binding(key=u"a", value=u"b space ", original=Original(string=u'a="b space "', line=1), error=False)], + u"a=b\tc", + [Binding(key=u"a", value=u"b\tc", original=Original(string=u"a=b\tc", line=1), error=False)], + ), + ( + u"a=b c", + [Binding(key=u"a", value=u"b c", original=Original(string=u"a=b c", line=1), error=False)], + ), + ( + u"a=b\u00a0 c", + [Binding(key=u"a", value=u"b\u00a0 c", original=Original(string=u"a=b\u00a0 c", line=1), error=False)], + ), + ( + u"a=b c ", + [Binding(key=u"a", value=u"b c", original=Original(string=u"a=b c ", line=1), error=False)], + ), + ( + u"a='b c '", + [Binding(key=u"a", value=u"b c ", original=Original(string=u"a='b c '", line=1), error=False)], + ), + ( + u'a="b c "', + [Binding(key=u"a", value=u"b c ", original=Original(string=u'a="b c "', line=1), error=False)], ), ( u"export export_a=1", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-dotenv-0.14.0/tox.ini new/python-dotenv-0.15.0/tox.ini --- old/python-dotenv-0.14.0/tox.ini 2020-07-03 11:17:51.000000000 +0200 +++ new/python-dotenv-0.15.0/tox.ini 2020-10-28 17:59:29.000000000 +0100 @@ -1,5 +1,5 @@ [tox] -envlist = lint,py{27,34,35,36,37,38,34-no-typing},pypy,pypy3,manifest,coverage-report +envlist = lint,py{27,34,35,36,37,38,39,34-no-typing},pypy,pypy3,manifest,coverage-report [testenv] deps = @@ -10,7 +10,7 @@ click py{27,py}: ipython<6.0.0 py34{,-no-typing}: ipython<7.0.0 - py{35,36,37,38,py3}: ipython + py{35,36,37,38,39,py3}: ipython commands = coverage run --parallel -m pytest {posargs} [testenv:py34-no-typing] @@ -25,6 +25,7 @@ mypy commands = flake8 src tests + mypy --python-version=3.9 src tests mypy --python-version=3.8 src tests mypy --python-version=3.7 src tests mypy --python-version=3.6 src tests _______________________________________________ openSUSE Commits mailing list -- commit@lists.opensuse.org To unsubscribe, email commit-le...@lists.opensuse.org List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette List Archives: https://lists.opensuse.org/archives/list/commit@lists.opensuse.org