Hello community,
here is the log from the commit of package python-python-dotenv for
openSUSE:Factory checked in at 2019-07-22 17:20:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-dotenv (Old)
and /work/SRC/openSUSE:Factory/.python-python-dotenv.new.4126 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-dotenv"
Mon Jul 22 17:20:14 2019 rev:4 rq:717596 version:0.10.3
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-python-dotenv/python-python-dotenv.changes
2019-05-27 08:39:27.623045830 +0200
+++
/work/SRC/openSUSE:Factory/.python-python-dotenv.new.4126/python-python-dotenv.changes
2019-07-22 17:20:15.481896644 +0200
@@ -1,0 +2,6 @@
+Mon Jul 22 13:18:03 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 0.10.3:
+ * Small cleanups
+
+-------------------------------------------------------------------
Old:
----
python-dotenv-0.10.2.tar.gz
New:
----
python-dotenv-0.10.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-python-dotenv.spec ++++++
--- /var/tmp/diff_new_pack.6L2VEG/_old 2019-07-22 17:20:16.081896480 +0200
+++ /var/tmp/diff_new_pack.6L2VEG/_new 2019-07-22 17:20:16.085896479 +0200
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-python-dotenv
-Version: 0.10.2
+Version: 0.10.3
Release: 0
Summary: Python library for .env support
License: BSD-3-Clause
@@ -49,9 +49,11 @@
%setup -q -n python-dotenv-%{version}
%build
+export LANG=C.UTF-8
%python_build
%install
+export LANG=C.UTF-8
%python_install
%python_clone -a %{buildroot}%{_bindir}/dotenv
%python_expand %fdupes %{buildroot}%{$python_sitelib}
++++++ python-dotenv-0.10.2.tar.gz -> python-dotenv-0.10.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/.bumpversion.cfg
new/python-dotenv-0.10.3/.bumpversion.cfg
--- old/python-dotenv-0.10.2/.bumpversion.cfg 2019-05-12 12:53:28.000000000
+0200
+++ new/python-dotenv-0.10.3/.bumpversion.cfg 2019-06-02 19:17:32.000000000
+0200
@@ -1,5 +1,5 @@
[bumpversion]
-current_version = 0.10.2
+current_version = 0.10.3
commit = True
tag = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/Makefile
new/python-dotenv-0.10.3/Makefile
--- old/python-dotenv-0.10.2/Makefile 2019-05-12 12:53:28.000000000 +0200
+++ new/python-dotenv-0.10.3/Makefile 2019-06-02 19:17:32.000000000 +0200
@@ -5,19 +5,22 @@
clean-build:
rm -fr build/
rm -fr dist/
- rm -fr *.egg-info
+ rm -fr src/*.egg-info
clean-pyc:
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
-release: clean
- python setup.py sdist upload
- python setup.py bdist_wheel upload
+release: sdist
+ twine check dist/*
+ twine upload dist/*
+
+release-test: sdist
+ twine upload --repository-url https://test.pypi.org/legacy/ dist/*
sdist: clean
- python setup.py sdist
+ python setup.py sdist bdist_wheel
ls -l dist
test:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/README.md
new/python-dotenv-0.10.3/README.md
--- old/python-dotenv-0.10.2/README.md 2019-05-12 12:53:28.000000000 +0200
+++ new/python-dotenv-0.10.3/README.md 2019-06-02 19:17:32.000000000 +0200
@@ -44,7 +44,7 @@
MULTILINE_VAR="hello\nworld"
```
-You can optionally prefix each line with the word `export`, which is totally
ignore by this library, but might allow you to
[`source`](https://bash.cyberciti.biz/guide/Source_command) the file in bash.
+You can optionally prefix each line with the word `export`, which is totally
ignored by this library, but might allow you to
[`source`](https://bash.cyberciti.biz/guide/Source_command) the file in bash.
```
export S3_BUCKET=YOURS3BUCKET
@@ -299,8 +299,10 @@
Unreleased
-----
-- ...
-
+- Improve interactive mode detection ([@andrewsmith])([#183]).
+- Refactor parser to fix parsing inconsistencies ([@bbc2])([#170]).
+ - Interpret escapes as control characters only in double-quoted strings.
+ - Interpret `#` as start of comment only if preceded by whitespace.
0.10.2
-----
@@ -428,7 +430,10 @@
[#172]: https://github.com/theskumar/python-dotenv/issues/172
[#121]: https://github.com/theskumar/python-dotenv/issues/121
[#176]: https://github.com/theskumar/python-dotenv/issues/176
+[#170]: https://github.com/theskumar/python-dotenv/issues/170
+[#183]: https://github.com/theskumar/python-dotenv/issues/183
+[@andrewsmith]: https://github.com/andrewsmith
[@asyncee]: https://github.com/asyncee
[@greyli]: https://github.com/greyli
[@venthur]: https://github.com/venthur
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/requirements.txt
new/python-dotenv-0.10.3/requirements.txt
--- old/python-dotenv-0.10.2/requirements.txt 2019-05-12 12:53:28.000000000
+0200
+++ new/python-dotenv-0.10.3/requirements.txt 2019-06-02 19:17:32.000000000
+0200
@@ -3,9 +3,9 @@
click
flake8>=2.2.3
ipython
-pypandoc
pytest-cov
pytest>=3.9
sh>=1.09
tox
wheel
+twine
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/setup.cfg
new/python-dotenv-0.10.3/setup.cfg
--- old/python-dotenv-0.10.2/setup.cfg 2019-05-12 12:53:28.000000000 +0200
+++ new/python-dotenv-0.10.3/setup.cfg 2019-06-02 19:17:32.000000000 +0200
@@ -5,6 +5,9 @@
max-line-length = 120
exclude = .tox,.git,docs,venv,.venv
+[mypy]
+ignore_missing_imports = true
+
[metadata]
description-file = README.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/setup.py
new/python-dotenv-0.10.3/setup.py
--- old/python-dotenv-0.10.2/setup.py 2019-05-12 12:53:28.000000000 +0200
+++ new/python-dotenv-0.10.3/setup.py 2019-06-02 19:17:32.000000000 +0200
@@ -1,17 +1,8 @@
# -*- coding: utf-8 -*-
from setuptools import setup
-# https://github.com/theskumar/python-dotenv/issues/45#issuecomment-277135416
-try:
- import pypandoc
- long_description = pypandoc.convert('README.md', 'rst')
- long_description = long_description.replace("\r", "") # YOU NEED THIS
LINE
-except (OSError, ImportError):
- print("Pandoc not found. Long_description conversion failure.")
- import io
- # pandoc is not installed, fallback to using raw contents
- with io.open('README.md', encoding="utf-8") as f:
- long_description = f.read()
+with open('README.md') as f:
+ long_description = f.read()
meta = {}
with open('./src/dotenv/version.py') as f:
@@ -21,6 +12,7 @@
name="python-dotenv",
description="Add .env support to your django/flask apps in development and
deployments",
long_description=long_description,
+ long_description_content_type='text/markdown',
version=meta['__version__'],
author="Saurabh Kumar",
author_email="[email protected]",
@@ -52,20 +44,21 @@
# 'Development Status :: 6 - Mature',
# 'Development Status :: 7 - Inactive',
'Programming Language :: Python',
- 'Programming Language :: Python :: 2',
+ # 'Programming Language :: Python :: 2',
# 'Programming Language :: Python :: 2.3',
# 'Programming Language :: Python :: 2.4',
# 'Programming Language :: Python :: 2.5',
# 'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
- 'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.0',
- 'Programming Language :: Python :: 3.1',
- 'Programming Language :: Python :: 3.2',
- 'Programming Language :: Python :: 3.3',
+ # 'Programming Language :: Python :: 3',
+ # 'Programming Language :: Python :: 3.0',
+ # 'Programming Language :: Python :: 3.1',
+ # 'Programming Language :: Python :: 3.2',
+ # 'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
+ 'Programming Language :: Python :: 3.7',
'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.10.2/src/dotenv/__init__.py
new/python-dotenv-0.10.3/src/dotenv/__init__.py
--- old/python-dotenv-0.10.2/src/dotenv/__init__.py 2019-05-12
12:53:28.000000000 +0200
+++ new/python-dotenv-0.10.3/src/dotenv/__init__.py 2019-06-02
19:17:32.000000000 +0200
@@ -1,4 +1,4 @@
-from typing import Any, Optional
+from typing import Any, Optional # noqa
from .main import load_dotenv, get_key, set_key, unset_key, find_dotenv,
dotenv_values
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/src/dotenv/cli.py
new/python-dotenv-0.10.3/src/dotenv/cli.py
--- old/python-dotenv-0.10.2/src/dotenv/cli.py 2019-05-12 12:53:28.000000000
+0200
+++ new/python-dotenv-0.10.3/src/dotenv/cli.py 2019-06-02 19:17:32.000000000
+0200
@@ -1,6 +1,7 @@
import os
import sys
-from typing import Any, List
+from subprocess import Popen
+from typing import Any, Dict, List # noqa
try:
import click
@@ -9,7 +10,7 @@
'Run pip install "python-dotenv[cli]" to fix this.')
sys.exit(1)
-from .main import dotenv_values, get_key, set_key, unset_key, run_command
+from .main import dotenv_values, get_key, set_key, unset_key
from .version import __version__
@@ -101,5 +102,40 @@
exit(ret)
+def run_command(command, env):
+ # type: (List[str], Dict[str, str]) -> int
+ """Run command in sub process.
+
+ Runs the command in a sub process with the variables from `env`
+ added in the current environment variables.
+
+ Parameters
+ ----------
+ command: List[str]
+ The command and it's parameters
+ env: Dict
+ The additional environment variables
+
+ Returns
+ -------
+ int
+ The return code of the command
+
+ """
+ # copy the current environment variables and add the vales from
+ # `env`
+ cmd_env = os.environ.copy()
+ cmd_env.update(env)
+
+ p = Popen(command,
+ universal_newlines=True,
+ bufsize=0,
+ shell=False,
+ env=cmd_env)
+ _, _ = p.communicate()
+
+ return p.returncode
+
+
if __name__ == "__main__":
cli()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/src/dotenv/compat.py
new/python-dotenv-0.10.3/src/dotenv/compat.py
--- old/python-dotenv-0.10.2/src/dotenv/compat.py 2019-05-12
12:53:28.000000000 +0200
+++ new/python-dotenv-0.10.3/src/dotenv/compat.py 2019-06-02
19:17:32.000000000 +0200
@@ -1,8 +1,34 @@
import sys
+from typing import Text # noqa
-if sys.version_info >= (3, 0):
- from io import StringIO # noqa
-else:
+PY2 = sys.version_info[0] == 2 # type: bool
+
+if PY2:
from StringIO import StringIO # noqa
+else:
+ from io import StringIO # noqa
-PY2 = sys.version_info[0] == 2 # type: bool
+
+def to_env(text):
+ # type: (Text) -> str
+ """
+ Encode a string the same way whether it comes from the environment or a
`.env` file.
+ """
+ if PY2:
+ return text.encode(sys.getfilesystemencoding() or "utf-8")
+ else:
+ return text
+
+
+def to_text(string):
+ # type: (str) -> Text
+ """
+ Make a string Unicode if it isn't already.
+
+ This is useful for defining raw unicode strings because `ur"foo"` isn't
valid in
+ Python 3.
+ """
+ if PY2:
+ return string.decode("utf-8")
+ else:
+ return string
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/src/dotenv/main.py
new/python-dotenv-0.10.3/src/dotenv/main.py
--- old/python-dotenv-0.10.2/src/dotenv/main.py 2019-05-12 12:53:28.000000000
+0200
+++ new/python-dotenv-0.10.3/src/dotenv/main.py 2019-06-02 19:17:32.000000000
+0200
@@ -1,21 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
-import codecs
import io
import os
import re
import shutil
import sys
-from subprocess import Popen
import tempfile
-from typing import (Any, Dict, Iterator, List, Match, NamedTuple, Optional, #
noqa
- Pattern, Union, TYPE_CHECKING, Text, IO, Tuple) # noqa
+from typing import (Dict, Iterator, List, Match, Optional, # noqa
+ Pattern, Union, TYPE_CHECKING, Text, IO, Tuple)
import warnings
from collections import OrderedDict
from contextlib import contextmanager
-from .compat import StringIO, PY2
+from .compat import StringIO, PY2, to_env
+from .parser import parse_stream
if TYPE_CHECKING: # pragma: no cover
if sys.version_info >= (3, 6):
@@ -30,95 +29,6 @@
__posix_variable = re.compile(r'\$\{[^\}]*\}') # type: Pattern[Text]
-_binding = re.compile(
- r"""
- (
- \s* # leading whitespace
- (?:export{0}+)? # export
-
- ( '[^']+' # single-quoted key
- | [^=\#\s]+ # or unquoted key
- )?
-
- (?:
- (?:{0}*={0}*) # equal sign
-
- ( '(?:\\'|[^'])*' # single-quoted value
- | "(?:\\"|[^"])*" # or double-quoted value
- | [^\#\r\n]* # or unquoted value
- )
- )?
-
- \s* # trailing whitespace
- (?:\#[^\r\n]*)? # comment
- (?:\r|\n|\r\n)? # newline
- )
- """.format(r'[^\S\r\n]'),
- re.MULTILINE | re.VERBOSE,
-) # type: Pattern[Text]
-
-_escape_sequence = re.compile(r"\\[\\'\"abfnrtv]") # type: Pattern[Text]
-
-
-Binding = NamedTuple("Binding", [("key", Optional[Text]),
- ("value", Optional[Text]),
- ("original", Text)])
-
-
-def decode_escapes(string):
- # type: (Text) -> Text
- def decode_match(match):
- # type: (Match[Text]) -> Text
- return codecs.decode(match.group(0), 'unicode-escape') # type: ignore
-
- return _escape_sequence.sub(decode_match, string)
-
-
-def is_surrounded_by(string, char):
- # type: (Text, Text) -> bool
- return (
- len(string) > 1
- and string[0] == string[-1] == char
- )
-
-
-def parse_binding(string, position):
- # type: (Text, int) -> Tuple[Binding, int]
- match = _binding.match(string, position)
- assert match is not None
- (matched, key, value) = match.groups()
- if key is None or value is None:
- key = None
- value = None
- else:
- value_quoted = is_surrounded_by(value, "'") or is_surrounded_by(value,
'"')
- if value_quoted:
- value = decode_escapes(value[1:-1])
- else:
- value = value.strip()
- return (Binding(key=key, value=value, original=matched), match.end())
-
-
-def parse_stream(stream):
- # type:(IO[Text]) -> Iterator[Binding]
- string = stream.read()
- position = 0
- length = len(string)
- while position < length:
- (binding, position) = parse_binding(string, position)
- yield binding
-
-
-def to_env(text):
- # type: (Text) -> str
- """
- Encode a string the same way whether it comes from the environment or a
`.env` file.
- """
- if PY2:
- return text.encode(sys.getfilesystemencoding() or "utf-8")
- else:
- return text
-
class DotEnv():
@@ -325,8 +235,14 @@
Returns path to the file if found, or an empty string otherwise
"""
- if usecwd or '__file__' not in globals():
- # should work without __file__, e.g. in REPL or IPython notebook
+
+ def _is_interactive():
+ """ Decide whether this is running in a REPL or IPython notebook """
+ main = __import__('__main__', None, None, fromlist=['__file__'])
+ return not hasattr(main, '__file__')
+
+ if usecwd or _is_interactive():
+ # Should work without __file__, e.g. in REPL or IPython notebook.
path = os.getcwd()
else:
# will work for .py files
@@ -365,38 +281,3 @@
# type: (Union[Text, _PathLike, None], Optional[_StringIO], bool,
Union[None, Text]) -> Dict[Text, Text]
f = dotenv_path or stream or find_dotenv()
return DotEnv(f, verbose=verbose, **kwargs).dict()
-
-
-def run_command(command, env):
- # type: (List[str], Dict[str, str]) -> int
- """Run command in sub process.
-
- Runs the command in a sub process with the variables from `env`
- added in the current environment variables.
-
- Parameters
- ----------
- command: List[str]
- The command and it's parameters
- env: Dict
- The additional environment variables
-
- Returns
- -------
- int
- The return code of the command
-
- """
- # copy the current environment variables and add the vales from
- # `env`
- cmd_env = os.environ.copy()
- cmd_env.update(env)
-
- p = Popen(command,
- universal_newlines=True,
- bufsize=0,
- shell=False,
- env=cmd_env)
- _, _ = p.communicate()
-
- return p.returncode
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/src/dotenv/parser.py
new/python-dotenv-0.10.3/src/dotenv/parser.py
--- old/python-dotenv-0.10.2/src/dotenv/parser.py 1970-01-01
01:00:00.000000000 +0100
+++ new/python-dotenv-0.10.3/src/dotenv/parser.py 2019-06-02
19:17:32.000000000 +0200
@@ -0,0 +1,147 @@
+import codecs
+import re
+from typing import (IO, Iterator, Match, NamedTuple, Optional, Pattern, # noqa
+ Sequence, Text)
+
+from .compat import to_text
+
+
+def make_regex(string, extra_flags=0):
+ # type: (str, int) -> Pattern[Text]
+ return re.compile(to_text(string), re.UNICODE | extra_flags)
+
+
+_whitespace = make_regex(r"\s*", extra_flags=re.MULTILINE)
+_export = make_regex(r"(?:export[^\S\r\n]+)?")
+_single_quoted_key = make_regex(r"'([^']+)'")
+_unquoted_key = make_regex(r"([^=\#\s]+)")
+_equal_sign = make_regex(r"[^\S\r\n]*=[^\S\r\n]*")
+_single_quoted_value = make_regex(r"'((?:\\'|[^'])*)'")
+_double_quoted_value = make_regex(r'"((?:\\"|[^"])*)"')
+_unquoted_value_part = make_regex(r"([^ \r\n]*)")
+_comment = make_regex(r"(?:\s*#[^\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)?")
+_double_quote_escapes = make_regex(r"\\[\\'\"abfnrtv]")
+_single_quote_escapes = make_regex(r"\\[\\']")
+
+Binding = NamedTuple("Binding", [("key", Optional[Text]),
+ ("value", Optional[Text]),
+ ("original", Text)])
+
+
+class Error(Exception):
+ pass
+
+
+class Reader:
+ def __init__(self, stream):
+ # type: (IO[Text]) -> None
+ self.string = stream.read()
+ self.position = 0
+ self.mark = 0
+
+ def has_next(self):
+ # type: () -> bool
+ return self.position < len(self.string)
+
+ def set_mark(self):
+ # type: () -> None
+ self.mark = self.position
+
+ def get_marked(self):
+ # type: () -> Text
+ return self.string[self.mark:self.position]
+
+ def peek(self, count):
+ # type: (int) -> Text
+ return self.string[self.position:self.position + count]
+
+ def read(self, count):
+ # type: (int) -> Text
+ result = self.string[self.position:self.position + count]
+ if len(result) < count:
+ raise Error("read: End of string")
+ self.position += count
+ return result
+
+ def read_regex(self, regex):
+ # type: (Pattern[Text]) -> Sequence[Text]
+ match = regex.match(self.string, self.position)
+ if match is None:
+ raise Error("read_regex: Pattern not found")
+ self.position = match.end()
+ return match.groups()
+
+
+def decode_escapes(regex, string):
+ # type: (Pattern[Text], Text) -> Text
+ def decode_match(match):
+ # type: (Match[Text]) -> Text
+ return codecs.decode(match.group(0), 'unicode-escape') # type: ignore
+
+ return regex.sub(decode_match, string)
+
+
+def parse_key(reader):
+ # type: (Reader) -> Text
+ char = reader.peek(1)
+ if char == "'":
+ (key,) = reader.read_regex(_single_quoted_key)
+ else:
+ (key,) = reader.read_regex(_unquoted_key)
+ return key
+
+
+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)
+
+
+def parse_value(reader):
+ # type: (Reader) -> Text
+ char = reader.peek(1)
+ if char == u"'":
+ (value,) = reader.read_regex(_single_quoted_value)
+ return decode_escapes(_single_quote_escapes, value)
+ elif char == u'"':
+ (value,) = reader.read_regex(_double_quoted_value)
+ return decode_escapes(_double_quote_escapes, value)
+ elif char in (u"", u"\n", u"\r"):
+ return u""
+ else:
+ return parse_unquoted_value(reader)
+
+
+def parse_binding(reader):
+ # type: (Reader) -> Binding
+ reader.set_mark()
+ try:
+ reader.read_regex(_whitespace)
+ reader.read_regex(_export)
+ key = parse_key(reader)
+ reader.read_regex(_equal_sign)
+ value = parse_value(reader)
+ reader.read_regex(_comment)
+ reader.read_regex(_end_of_line)
+ return Binding(key=key, value=value, original=reader.get_marked())
+ except Error:
+ reader.read_regex(_rest_of_line)
+ return Binding(key=None, value=None, original=reader.get_marked())
+
+
+def parse_stream(stream):
+ # type:(IO[Text]) -> Iterator[Binding]
+ reader = Reader(stream)
+ while reader.has_next():
+ try:
+ yield parse_binding(reader)
+ except Error:
+ return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/src/dotenv/version.py
new/python-dotenv-0.10.3/src/dotenv/version.py
--- old/python-dotenv-0.10.2/src/dotenv/version.py 2019-05-12
12:53:28.000000000 +0200
+++ new/python-dotenv-0.10.3/src/dotenv/version.py 2019-06-02
19:17:32.000000000 +0200
@@ -1 +1 @@
-__version__ = "0.10.2"
+__version__ = "0.10.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/tests/test_core.py
new/python-dotenv-0.10.3/tests/test_core.py
--- old/python-dotenv-0.10.2/tests/test_core.py 2019-05-12 12:53:28.000000000
+0200
+++ new/python-dotenv-0.10.3/tests/test_core.py 2019-06-02 19:17:32.000000000
+0200
@@ -13,7 +13,6 @@
from dotenv import dotenv_values, find_dotenv, load_dotenv, set_key
from dotenv.compat import PY2, StringIO
-from dotenv.main import Binding, parse_stream
@contextlib.contextmanager
@@ -26,81 +25,6 @@
os.environ.update(environ)
[email protected]("test_input,expected", [
- ("", []),
- ("a=b", [Binding(key="a", value="b", original="a=b")]),
- ("'a'=b", [Binding(key="'a'", value="b", original="'a'=b")]),
- ("[=b", [Binding(key="[", value="b", original="[=b")]),
- (" a = b ", [Binding(key="a", value="b", original=" a = b ")]),
- ("export a=b", [Binding(key="a", value="b", original="export a=b")]),
- (" export 'a'=b", [Binding(key="'a'", value="b", original=" export
'a'=b")]),
- (" export 'a'=b", [Binding(key="'a'", value="b", original=" export
'a'=b")]),
- ("# a=b", [Binding(key=None, value=None, original="# a=b")]),
- ('a=b # comment', [Binding(key="a", value="b", original="a=b # comment")]),
- ("a=b space ", [Binding(key="a", value="b space", original="a=b space ")]),
- ("a='b space '", [Binding(key="a", value="b space ", original="a='b space
'")]),
- ('a="b space "', [Binding(key="a", value="b space ", original='a="b space
"')]),
- ("export export_a=1", [Binding(key="export_a", value="1", original="export
export_a=1")]),
- ("export port=8000", [Binding(key="port", value="8000", original="export
port=8000")]),
- ('a="b\nc"', [Binding(key="a", value="b\nc", original='a="b\nc"')]),
- ("a='b\nc'", [Binding(key="a", value="b\nc", original="a='b\nc'")]),
- ('a="b\nc"', [Binding(key="a", value="b\nc", original='a="b\nc"')]),
- ('a="b\\nc"', [Binding(key="a", value='b\nc', original='a="b\\nc"')]),
- ('a="b\\"c"', [Binding(key="a", value='b"c', original='a="b\\"c"')]),
- ("a='b\\'c'", [Binding(key="a", value="b'c", original="a='b\\'c'")]),
- ("a=à", [Binding(key="a", value="à", original="a=à")]),
- ('a="à"', [Binding(key="a", value="à", original='a="à"')]),
- ('garbage', [Binding(key=None, value=None, original="garbage")]),
- (
- "a=b\nc=d",
- [
- Binding(key="a", value="b", original="a=b\n"),
- Binding(key="c", value="d", original="c=d"),
- ],
- ),
- (
- "a=b\r\nc=d",
- [
- Binding(key="a", value="b", original="a=b\r\n"),
- Binding(key="c", value="d", original="c=d"),
- ],
- ),
- (
- 'a=\nb=c',
- [
- Binding(key="a", value='', original='a=\n'),
- Binding(key="b", value='c', original="b=c"),
- ]
- ),
- (
- 'a="\nb=c',
- [
- Binding(key="a", value='"', original='a="\n'),
- Binding(key="b", value='c', original="b=c"),
- ]
- ),
- (
- '# comment\na="b\nc"\nd=e\n',
- [
- Binding(key=None, value=None, original="# comment\n"),
- Binding(key="a", value="b\nc", original='a="b\nc"\n'),
- Binding(key="d", value="e", original="d=e\n"),
- ],
- ),
- (
- 'garbage[%$#\na=b',
- [
- Binding(key=None, value=None, original="garbage[%$#\n"),
- Binding(key="a", value="b", original='a=b'),
- ],
- ),
-])
-def test_parse_stream(test_input, expected):
- result = parse_stream(StringIO(test_input))
-
- assert list(result) == expected
-
-
def test_warns_if_file_does_not_exist():
with warnings.catch_warnings(record=True) as w:
load_dotenv('.does_not_exist', verbose=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/tests/test_parser.py
new/python-dotenv-0.10.3/tests/test_parser.py
--- old/python-dotenv-0.10.2/tests/test_parser.py 1970-01-01
01:00:00.000000000 +0100
+++ new/python-dotenv-0.10.3/tests/test_parser.py 2019-06-02
19:17:32.000000000 +0200
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+import pytest
+
+from dotenv.compat import StringIO
+from dotenv.parser import Binding, parse_stream
+
+
[email protected]("test_input,expected", [
+ (u"", []),
+ (u"a=b", [Binding(key=u"a", value=u"b", original=u"a=b")]),
+ (u"'a'=b", [Binding(key=u"a", value=u"b", original=u"'a'=b")]),
+ (u"[=b", [Binding(key=u"[", value=u"b", original=u"[=b")]),
+ (u" a = b ", [Binding(key=u"a", value=u"b", original=u" a = b ")]),
+ (u"export a=b", [Binding(key=u"a", value=u"b", original=u"export a=b")]),
+ (u" export 'a'=b", [Binding(key=u"a", value=u"b", original=u" export
'a'=b")]),
+ (u"# a=b", [Binding(key=None, value=None, original=u"# a=b")]),
+ (u"a=b#c", [Binding(key=u"a", value=u"b#c", original=u"a=b#c")]),
+ (u'a=b # comment', [Binding(key=u"a", value=u"b", original=u"a=b #
comment")]),
+ (u"a=b space ", [Binding(key=u"a", value=u"b space", original=u"a=b space
")]),
+ (u"a='b space '", [Binding(key=u"a", value=u"b space ", original=u"a='b
space '")]),
+ (u'a="b space "', [Binding(key=u"a", value=u"b space ", original=u'a="b
space "')]),
+ (u"export export_a=1", [Binding(key=u"export_a", value=u"1",
original=u"export export_a=1")]),
+ (u"export port=8000", [Binding(key=u"port", value=u"8000",
original=u"export port=8000")]),
+ (u'a="b\nc"', [Binding(key=u"a", value=u"b\nc", original=u'a="b\nc"')]),
+ (u"a='b\nc'", [Binding(key=u"a", value=u"b\nc", original=u"a='b\nc'")]),
+ (u'a="b\nc"', [Binding(key=u"a", value=u"b\nc", original=u'a="b\nc"')]),
+ (u'a="b\\nc"', [Binding(key=u"a", value=u'b\nc', original=u'a="b\\nc"')]),
+ (u"a='b\\nc'", [Binding(key=u"a", value=u'b\\nc', original=u"a='b\\nc'")]),
+ (u'a="b\\"c"', [Binding(key=u"a", value=u'b"c', original=u'a="b\\"c"')]),
+ (u"a='b\\'c'", [Binding(key=u"a", value=u"b'c", original=u"a='b\\'c'")]),
+ (u"a=à", [Binding(key=u"a", value=u"à", original=u"a=à")]),
+ (u'a="à"', [Binding(key=u"a", value=u"à", original=u'a="à"')]),
+ (u'garbage', [Binding(key=None, value=None, original=u"garbage")]),
+ (
+ u"a=b\nc=d",
+ [
+ Binding(key=u"a", value=u"b", original=u"a=b\n"),
+ Binding(key=u"c", value=u"d", original=u"c=d"),
+ ],
+ ),
+ (
+ u"a=b\r\nc=d",
+ [
+ Binding(key=u"a", value=u"b", original=u"a=b\r\n"),
+ Binding(key=u"c", value=u"d", original=u"c=d"),
+ ],
+ ),
+ (
+ u'a=\nb=c',
+ [
+ Binding(key=u"a", value=u'', original=u'a=\n'),
+ Binding(key=u"b", value=u'c', original=u"b=c"),
+ ]
+ ),
+ (
+ u'a=b\n\nc=d',
+ [
+ Binding(key=u"a", value=u"b", original=u"a=b\n"),
+ Binding(key=u"c", value=u"d", original=u"\nc=d"),
+ ]
+ ),
+ (
+ u'a="\nb=c',
+ [
+ Binding(key=None, value=None, original=u'a="\n'),
+ Binding(key=u"b", value=u"c", original=u"b=c"),
+ ]
+ ),
+ (
+ u'# comment\na="b\nc"\nd=e\n',
+ [
+ Binding(key=None, value=None, original=u"# comment\n"),
+ Binding(key=u"a", value=u"b\nc", original=u'a="b\nc"\n'),
+ Binding(key=u"d", value=u"e", original=u"d=e\n"),
+ ],
+ ),
+ (
+ u'garbage[%$#\na=b',
+ [
+ Binding(key=None, value=None, original=u"garbage[%$#\n"),
+ Binding(key=u"a", value=u"b", original=u'a=b'),
+ ],
+ ),
+])
+def test_parse_stream(test_input, expected):
+ result = parse_stream(StringIO(test_input))
+
+ assert list(result) == expected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-dotenv-0.10.2/tox.ini
new/python-dotenv-0.10.3/tox.ini
--- old/python-dotenv-0.10.2/tox.ini 2019-05-12 12:53:28.000000000 +0200
+++ new/python-dotenv-0.10.3/tox.ini 2019-06-02 19:17:32.000000000 +0200
@@ -19,11 +19,11 @@
mypy
commands =
flake8 src tests
- mypy --python-version=3.7 src
- mypy --python-version=3.6 src
- mypy --python-version=3.5 src
- mypy --python-version=3.4 src
- mypy --python-version=2.7 src
+ mypy --python-version=3.7 src tests
+ mypy --python-version=3.6 src tests
+ mypy --python-version=3.5 src tests
+ mypy --python-version=3.4 src tests
+ mypy --python-version=2.7 src tests
[testenv:manifest]
deps = check-manifest