Skip to content

Commit

Permalink
.example.env command
Browse files Browse the repository at this point in the history
fixed issue with windows directories

removed debug echo statements

Removed old try accept that is no longer needed

Should be the end of my after the fact website commits

Add missing trailing newline when adding new value

Sometimes, the source file doesn't have a trailing newline.  If we add a
new binding in such a case, we need to add a newline before the new
binding.

Release version 0.19.2

updated to remove file error with broken file

fixed minor bug

tests and minor changes
  • Loading branch information
ethsanders committed Dec 14, 2021
1 parent fc138ce commit 4b76b26
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 5 deletions.
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this
project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.19.2] - 2021-11-11

### Fixed

- In `set_key`, add missing newline character before new entry if necessary. (#361 by
[@bbc2])

## [0.19.1] - 2021-08-09

### Added
Expand Down Expand Up @@ -292,7 +299,8 @@ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
[@yannham]: https://github.com/yannham
[@zueve]: https://github.com/zueve

[Unreleased]: https://github.com/theskumar/python-dotenv/compare/v0.19.1...HEAD
[Unreleased]: https://github.com/theskumar/python-dotenv/compare/v0.19.2...HEAD
[0.19.2]: https://github.com/theskumar/python-dotenv/compare/v0.19.1...v0.19.2
[0.19.1]: https://github.com/theskumar/python-dotenv/compare/v0.19.0...v0.19.1
[0.19.0]: https://github.com/theskumar/python-dotenv/compare/v0.18.0...v0.19.0
[0.18.0]: https://github.com/theskumar/python-dotenv/compare/v0.17.1...v0.18.0
Expand Down
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[bumpversion]
current_version = 0.19.1
current_version = 0.19.2
commit = True
tag = True

Expand Down
29 changes: 27 additions & 2 deletions src/dotenv/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ def get(ctx: click.Context, key: Any) -> None:
else:
exit(1)


@cli.command()
@click.pass_context
@click.argument('key', required=True)
Expand Down Expand Up @@ -125,6 +124,32 @@ def run(ctx: click.Context, override: bool, commandline: List[str]) -> None:
ret = run_command(commandline, dotenv_as_dict)
exit(ret)

@cli.command()
@click.pass_context
def example_file(ctx: click.Context) -> None:
'''Generates a .example.env file without values.'''
filedir = ctx.obj['FILE'].replace("\\", "/")
if not os.path.isfile(filedir):
raise click.BadParameter(
'Path "%s" does not exist.' % (filedir),
ctx=ctx
)
newFileList = []
with open(filedir,'r') as file:
for line in file:
line = line.strip()
if line[0] != "#":
line = line.split("=", 1)[0] + "="
newFileList.append(line + "\n")

while newFileList[-1] == "\n":
newFileList.pop(-1)

newFileName = f"{os.path.basename(file.name).split('.', 1)[0]}.example.env"
with open(newFileName, "w") as newFile:
for line in newFileList:
newFile.write(line)
click.echo(f"{newFileName} exported.")

def run_command(command: List[str], env: Dict[str, str]) -> int:
"""Run command in sub process.
Expand Down Expand Up @@ -161,4 +186,4 @@ def run_command(command: List[str], env: Dict[str, str]) -> int:


if __name__ == "__main__":
cli()
cli()
4 changes: 4 additions & 0 deletions src/dotenv/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,13 +167,17 @@ def set_key(

with rewrite(dotenv_path) as (source, dest):
replaced = False
missing_newline = False
for mapping in with_warn_for_invalid_lines(parse_stream(source)):
if mapping.key == key_to_set:
dest.write(line_out)
replaced = True
else:
dest.write(mapping.original.string)
missing_newline = not mapping.original.string.endswith("\n")
if not replaced:
if missing_newline:
dest.write("\n")
dest.write(line_out)

return True, key_to_set, value_to_set
Expand Down
2 changes: 1 addition & 1 deletion src/dotenv/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.19.1"
__version__ = "0.19.2"
6 changes: 6 additions & 0 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,3 +205,9 @@ def test_run_with_version(cli):

assert result.exit_code == 0
assert result.output.strip().endswith(__version__)

def test_example_file_non_existent_file(cli):
result = cli.invoke(dotenv_cli, ['--file', 'nx_file', 'example_file'])

assert result.exit_code == 2, result.output
assert "does not exist" in result.output
1 change: 1 addition & 0 deletions tests/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ def test_set_key_no_file(tmp_path):
("a=b\nc=d", "a", "e", (True, "a", "e"), "a='e'\nc=d"),
("a=b\nc=d\ne=f", "c", "g", (True, "c", "g"), "a=b\nc='g'\ne=f"),
("a=b\n", "c", "d", (True, "c", "d"), "a=b\nc='d'\n"),
("a=b", "c", "d", (True, "c", "d"), "a=b\nc='d'\n"),
],
)
def test_set_key(dotenv_file, before, key, value, expected, after):
Expand Down

0 comments on commit 4b76b26

Please sign in to comment.