[PATCH 7/7] gnu: Add dynaconf.

  • Done
  • quality assurance status badge
Details
2 participants
  • Giacomo Leidi
  • Sarah Morgensen
Owner
unassigned
Submitted by
Giacomo Leidi
Severity
normal
Merged with
G
G
Giacomo Leidi wrote on 2 Aug 2021 20:13
(address . guix-patches@gnu.org)(name . Giacomo Leidi)(address . goodoldpaul@autistici.org)
20210802181359.10695-7-goodoldpaul@autistici.org
* gnu/packages/python-xyz.scm (python-colorama-0.4.1): New variable,
(python-dotenv-0.13.0): New variable,
(dynaconf): New variable.
* gnu/packages/patches/dynaconf-Unvendor-dependencies.patch: New file.
* local.mk (dist_patch_DATA): Register it.
---
gnu/local.mk | 1 +
.../dynaconf-Unvendor-dependencies.patch | 161 ++++++++++++++++++
gnu/packages/python-xyz.scm | 95 +++++++++++
3 files changed, 257 insertions(+)
create mode 100644 gnu/packages/patches/dynaconf-Unvendor-dependencies.patch

Toggle diff (305 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 9e8f2d702d..847137b77c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -972,6 +972,7 @@ dist_patch_DATA = \
%D%/packages/patches/dstat-skip-devices-without-io.patch \
%D%/packages/patches/dune-istl-2.7-fix-non-mpi-tests.patch \
%D%/packages/patches/dvd+rw-tools-add-include.patch \
+ %D%/packages/patches/dynaconf-Unvendor-dependencies.patch \
%D%/packages/patches/ecl-16-format-directive-limit.patch \
%D%/packages/patches/ecl-16-ignore-stderr-write-error.patch \
%D%/packages/patches/ecl-16-libffi.patch \
diff --git a/gnu/packages/patches/dynaconf-Unvendor-dependencies.patch b/gnu/packages/patches/dynaconf-Unvendor-dependencies.patch
new file mode 100644
index 0000000000..10b72d5013
--- /dev/null
+++ b/gnu/packages/patches/dynaconf-Unvendor-dependencies.patch
@@ -0,0 +1,161 @@
+From 3558d30d5916ec6a91ce0d9c201ff9a11675d7c3 Mon Sep 17 00:00:00 2001
+From: Giacomo Leidi <goodoldpaul@autistici.org>
+Date: Mon, 2 Aug 2021 19:29:07 +0200
+Subject: [PATCH] Use system dependencies.
+
+Box was not unvendored because it appears to be heavily patched.
+---
+ dynaconf/cli.py | 4 ++--
+ dynaconf/default_settings.py | 2 +-
+ dynaconf/loaders/env_loader.py | 2 +-
+ dynaconf/loaders/toml_loader.py | 2 +-
+ dynaconf/loaders/yaml_loader.py | 2 +-
+ dynaconf/utils/parse_conf.py | 2 +-
+ dynaconf/vendor/box/converters.py | 6 +++---
+ dynaconf/vendor/box/from_file.py | 6 +++---
+ tests/test_cli.py | 2 +-
+ 9 files changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/dynaconf/cli.py b/dynaconf/cli.py
+index 2d45e52..7df767a 100644
+--- a/dynaconf/cli.py
++++ b/dynaconf/cli.py
+@@ -20,8 +20,8 @@ from dynaconf.utils.functional import empty
+ from dynaconf.utils.parse_conf import parse_conf_data
+ from dynaconf.validator import ValidationError
+ from dynaconf.validator import Validator
+-from dynaconf.vendor import click
+-from dynaconf.vendor import toml
++import click
++import toml
+
+
+ CWD = Path.cwd()
+diff --git a/dynaconf/default_settings.py b/dynaconf/default_settings.py
+index 66601b0..9605fc5 100644
+--- a/dynaconf/default_settings.py
++++ b/dynaconf/default_settings.py
+@@ -8,7 +8,7 @@ from dynaconf.utils import upperfy
+ from dynaconf.utils import warn_deprecations
+ from dynaconf.utils.files import find_file
+ from dynaconf.utils.parse_conf import parse_conf_data
+-from dynaconf.vendor.dotenv import load_dotenv
++from dotenv import load_dotenv
+
+
+ def try_renamed(key, value, older_key, current_key):
+diff --git a/dynaconf/loaders/env_loader.py b/dynaconf/loaders/env_loader.py
+index e7b13bd..b034c8a 100644
+--- a/dynaconf/loaders/env_loader.py
++++ b/dynaconf/loaders/env_loader.py
+@@ -2,7 +2,7 @@ from os import environ
+
+ from dynaconf.utils import upperfy
+ from dynaconf.utils.parse_conf import parse_conf_data
+-from dynaconf.vendor.dotenv import cli as dotenv_cli
++from dotenv import cli as dotenv_cli
+
+
+ IDENTIFIER = "env"
+diff --git a/dynaconf/loaders/toml_loader.py b/dynaconf/loaders/toml_loader.py
+index 07b973f..d81d675 100644
+--- a/dynaconf/loaders/toml_loader.py
++++ b/dynaconf/loaders/toml_loader.py
+@@ -5,7 +5,7 @@ from dynaconf import default_settings
+ from dynaconf.constants import TOML_EXTENSIONS
+ from dynaconf.loaders.base import BaseLoader
+ from dynaconf.utils import object_merge
+-from dynaconf.vendor import toml
++import toml
+
+
+ def load(obj, env=None, silent=True, key=None, filename=None):
+diff --git a/dynaconf/loaders/yaml_loader.py b/dynaconf/loaders/yaml_loader.py
+index 33c6532..3ef419a 100644
+--- a/dynaconf/loaders/yaml_loader.py
++++ b/dynaconf/loaders/yaml_loader.py
+@@ -7,7 +7,7 @@ from dynaconf.constants import YAML_EXTENSIONS
+ from dynaconf.loaders.base import BaseLoader
+ from dynaconf.utils import object_merge
+ from dynaconf.utils.parse_conf import try_to_encode
+-from dynaconf.vendor.ruamel import yaml
++from ruamel import yaml
+
+ # Add support for Dynaconf Lazy values to YAML dumper
+ yaml.SafeDumper.yaml_representers[
+diff --git a/dynaconf/utils/parse_conf.py b/dynaconf/utils/parse_conf.py
+index 5fc8234..6509c35 100644
+--- a/dynaconf/utils/parse_conf.py
++++ b/dynaconf/utils/parse_conf.py
+@@ -8,7 +8,7 @@ from dynaconf.utils import extract_json_objects
+ from dynaconf.utils import multi_replace
+ from dynaconf.utils import recursively_evaluate_lazy_format
+ from dynaconf.utils.boxing import DynaBox
+-from dynaconf.vendor import toml
++import toml
+
+ try:
+ from jinja2 import Environment
+diff --git a/dynaconf/vendor/box/converters.py b/dynaconf/vendor/box/converters.py
+index 93cdcfb..c81877a 100644
+--- a/dynaconf/vendor/box/converters.py
++++ b/dynaconf/vendor/box/converters.py
+@@ -7,9 +7,9 @@ _B='utf-8'
+ _A=None
+ import csv,json,sys,warnings
+ from pathlib import Path
+-import dynaconf.vendor.ruamel.yaml as yaml
++import ruamel.yaml as yaml
+ from dynaconf.vendor.box.exceptions import BoxError,BoxWarning
+-from dynaconf.vendor import toml
++import toml
+ BOX_PARAMETERS='default_box','default_box_attr','conversion_box','frozen_box','camel_killer_box','box_safe_prefix','box_duplicates','ordered_box','default_box_none_transform','box_dots','modify_tuples_box','box_intact_types','box_recast'
+ def _exists(filename,create=_E):
+ A=filename;B=Path(A)
+@@ -75,4 +75,4 @@ def _to_csv(box_list,filename,encoding=_B,errors=_C):
+ for G in A:D.writerow(G)
+ def _from_csv(filename,encoding=_B,errors=_C):
+ A=filename;_exists(A)
+- with open(A,_G,encoding=encoding,errors=errors,newline='')as B:C=csv.DictReader(B);return[A for A in C]
+\ No newline at end of file
++ with open(A,_G,encoding=encoding,errors=errors,newline='')as B:C=csv.DictReader(B);return[A for A in C]
+diff --git a/dynaconf/vendor/box/from_file.py b/dynaconf/vendor/box/from_file.py
+index daa1137..4a2739d 100644
+--- a/dynaconf/vendor/box/from_file.py
++++ b/dynaconf/vendor/box/from_file.py
+@@ -1,8 +1,8 @@
+ from json import JSONDecodeError
+ from pathlib import Path
+ from typing import Union
+-from dynaconf.vendor.toml import TomlDecodeError
+-from dynaconf.vendor.ruamel.yaml import YAMLError
++from toml import TomlDecodeError
++from ruamel.yaml import YAMLError
+ from .exceptions import BoxError
+ from .box import Box
+ from .box_list import BoxList
+@@ -31,4 +31,4 @@ def box_from_file(file,file_type=None,encoding='utf-8',errors='strict'):
+ if A.suffix in('.json','.jsn'):return _to_json(B)
+ if A.suffix in('.yaml','.yml'):return _to_yaml(B)
+ if A.suffix in('.tml','.toml'):return _to_toml(B)
+- raise BoxError(f"Could not determine file type based off extension, please provide file_type")
+\ No newline at end of file
++ raise BoxError(f"Could not determine file type based off extension, please provide file_type")
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index 9338851..726b009 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -11,7 +11,7 @@ from dynaconf.cli import main
+ from dynaconf.cli import read_file_in_root_directory
+ from dynaconf.cli import WRITERS
+ from dynaconf.utils.files import read_file
+-from dynaconf.vendor.click.testing import CliRunner
++from click.testing import CliRunner
+
+
+ runner = CliRunner()
+
+base-commit: 952e713353356ea701196ac5ad204c72fd097e58
+--
+2.32.0
+
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index b7e20d8358..f4f3b7fb3f 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -137,6 +137,7 @@
#:use-module (gnu packages crypto)
#:use-module (gnu packages databases)
#:use-module (gnu packages dbm)
+ #:use-module (gnu packages django)
#:use-module (gnu packages djvu)
#:use-module (gnu packages docker)
#:use-module (gnu packages enchant)
@@ -12473,6 +12474,16 @@ text.")
(home-page "https://pypi.org/project/colorama/")
(license license:bsd-3)))
+(define-public python-colorama-0.4.1
+ (package (inherit python-colorama)
+ (version "0.4.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "colorama" version))
+ (sha256
+ (base32 "0ba247bx5pc60hcpbf3rjsqk0whilg241i9qdfnlcwij5qgdgvh5"))))))
+
(define-public python2-colorama
(package-with-python2 python-colorama))
@@ -26292,6 +26303,18 @@ Voronoi diagram.")
read key-value pairs from a .env file and set them as environment variables")
(license license:bsd-3)))
+(define-public python-dotenv-0.13.0
+ (package (inherit python-dotenv)
+ (name "python-dotenv")
+ (version "0.13.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "python-dotenv" version))
+ (sha256
+ (base32
+ "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))))
+
(define-public python-box
(package
(name "python-box")
@@ -26315,3 +26338,75 @@ read key-value pairs from a .env file and set them as environment variables")
"This package provides the @code{python-box} Python module.
It implements advanced Python dictionaries with dot notation access.")
(license license:expat)))
+
+(define-public dynaconf
+ (package
+ (name "dynaconf")
+ (version "3.1.4")
+ (source
+ (origin
+ (method git-fetch)
+ (uri
+ (git-reference
+ (url "https://github.com/rochacbruno/dynaconf")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0dafd7hb691g6s3yjfvl5gph5md73n6g9j44kjpbnbbilr5pc85g"))
+ (patches (search-patches "dynaconf-Unvendor-dependencies.patch"))
+ (modules '((guix build utils)))
+ (snippet '(begin
+ ;; Remove vendored dependencies
+ (let ((unvendor '("click" "dotenv" "ruamel" "toml")))
+ (with-directory-excursion "dynaconf/vendor"
+ (for-each delete-file-recursively unvendor))
+ (with-directory-excursion "dynaconf/vendor_src"
+ (for-each delete-file-recursively unvendor)))))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key tests? outputs #:allow-other-keys)
+ (when tests?
+ (setenv "PATH"
+ (string-append (assoc-ref outputs "out") "/bin:"
+ (getenv "PATH")))
+ ;; These tests depend on hvac and a
+ ;; live Vault process.
+ (delete-file "tests/test_vault.py")
+ (invoke "make" "test_only"))
+ #t)))))
+ (propagated-inputs
+ `(("python-click" ,python-click)
+ ("python-dotenv" ,python-dotenv-0.13.0)
+ ("python-ruamel.yaml" ,python-ruamel.yaml)
+ ("python-toml" ,python-toml)))
+ (native-inputs
+ `(("make" ,gnu-make)
+ ("python-codecov" ,python-codecov)
+ ("python-configobj" ,python-configobj)
+ ("python-colorama" ,python-colorama-0.4.1)
+ ("python-django" ,python-django)
+ ("python-flake8" ,python-flake8)
+ ("python-flake8-debugger" ,python-flake8-debugger)
+ ("python-flake8-print" ,python-flake8-print)
+ ("python-flake8-todo" ,python-flake8-todo)
+ ("python-flask" ,python-flask)
+ ("python-future" ,python-future)
+ ("python-pep8-naming" ,python-pep8-naming)
+ ("python-pytest" ,python-pytest-6)
+ ("python-pytest-cov" ,python-pytest-cov)
+ ("python-pytest-forked" ,python-pytest-forked)
+ ("python-pytest-mock" ,python-pytest-mock)
+ ("python-pytest-xdist" ,python-pytest-xdist)
+ ("python-radon" ,python-radon)))
+ (home-page
+ "https://github.com/rochacbruno/dynaconf")
+ (synopsis
+ "The dynamic configurator for your Python Project")
+ (description
+ "This package provides @code{dynaconf} the dynamic configurator for
+your Python Project.")
+ (license license:expat)))
--
2.32.0
S
S
Sarah Morgensen wrote on 2 Aug 2021 23:13
control message for bug #49281
(address . control@debbugs.gnu.org)
86pmuv4kjq.fsf@mgsn.dev
merge 49281 49835 49834 49833 49832 49831 49830 49829
thanks
S
S
Sarah Morgensen wrote on 4 Aug 2021 21:13
Re: bug#49281: Add dynaconf
(name . Giacomo Leidi)(address . goodoldpaul@autistici.org)
86czqt2fce.fsf_-_@mgsn.dev
Hi,

Thanks again for your work on packaging this!

Giacomo Leidi <goodoldpaul@autistici.org> writes:

Toggle quote (4 lines)
> * gnu/packages/python-xyz.scm (python-colorama-0.4.1): New variable,
> (python-dotenv-0.13.0): New variable,
> (dynaconf): New variable.

Packages typically get one commit per package (so this would be three
commits).

Toggle quote (1 lines)
> * gnu/packages/patches/dynaconf-Unvendor-dependencies.patch: New file.
^ an extra space slipped in here.
Toggle quote (279 lines)
> * local.mk (dist_patch_DATA): Register it.
> ---
> gnu/local.mk | 1 +
> .../dynaconf-Unvendor-dependencies.patch | 161 ++++++++++++++++++
> gnu/packages/python-xyz.scm | 95 +++++++++++
> 3 files changed, 257 insertions(+)
> create mode 100644 gnu/packages/patches/dynaconf-Unvendor-dependencies.patch
>
> diff --git a/gnu/local.mk b/gnu/local.mk
> index 9e8f2d702d..847137b77c 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -972,6 +972,7 @@ dist_patch_DATA = \
> %D%/packages/patches/dstat-skip-devices-without-io.patch \
> %D%/packages/patches/dune-istl-2.7-fix-non-mpi-tests.patch \
> %D%/packages/patches/dvd+rw-tools-add-include.patch \
> + %D%/packages/patches/dynaconf-Unvendor-dependencies.patch \
> %D%/packages/patches/ecl-16-format-directive-limit.patch \
> %D%/packages/patches/ecl-16-ignore-stderr-write-error.patch \
> %D%/packages/patches/ecl-16-libffi.patch \
> diff --git a/gnu/packages/patches/dynaconf-Unvendor-dependencies.patch b/gnu/packages/patches/dynaconf-Unvendor-dependencies.patch
> new file mode 100644
> index 0000000000..10b72d5013
> --- /dev/null
> +++ b/gnu/packages/patches/dynaconf-Unvendor-dependencies.patch
> @@ -0,0 +1,161 @@
> +From 3558d30d5916ec6a91ce0d9c201ff9a11675d7c3 Mon Sep 17 00:00:00 2001
> +From: Giacomo Leidi <goodoldpaul@autistici.org>
> +Date: Mon, 2 Aug 2021 19:29:07 +0200
> +Subject: [PATCH] Use system dependencies.
> +
> +Box was not unvendored because it appears to be heavily patched.
> +---
> + dynaconf/cli.py | 4 ++--
> + dynaconf/default_settings.py | 2 +-
> + dynaconf/loaders/env_loader.py | 2 +-
> + dynaconf/loaders/toml_loader.py | 2 +-
> + dynaconf/loaders/yaml_loader.py | 2 +-
> + dynaconf/utils/parse_conf.py | 2 +-
> + dynaconf/vendor/box/converters.py | 6 +++---
> + dynaconf/vendor/box/from_file.py | 6 +++---
> + tests/test_cli.py | 2 +-
> + 9 files changed, 14 insertions(+), 14 deletions(-)
> +
> +diff --git a/dynaconf/cli.py b/dynaconf/cli.py
> +index 2d45e52..7df767a 100644
> +--- a/dynaconf/cli.py
> ++++ b/dynaconf/cli.py
> +@@ -20,8 +20,8 @@ from dynaconf.utils.functional import empty
> + from dynaconf.utils.parse_conf import parse_conf_data
> + from dynaconf.validator import ValidationError
> + from dynaconf.validator import Validator
> +-from dynaconf.vendor import click
> +-from dynaconf.vendor import toml
> ++import click
> ++import toml
> +
> +
> + CWD = Path.cwd()
> +diff --git a/dynaconf/default_settings.py b/dynaconf/default_settings.py
> +index 66601b0..9605fc5 100644
> +--- a/dynaconf/default_settings.py
> ++++ b/dynaconf/default_settings.py
> +@@ -8,7 +8,7 @@ from dynaconf.utils import upperfy
> + from dynaconf.utils import warn_deprecations
> + from dynaconf.utils.files import find_file
> + from dynaconf.utils.parse_conf import parse_conf_data
> +-from dynaconf.vendor.dotenv import load_dotenv
> ++from dotenv import load_dotenv
> +
> +
> + def try_renamed(key, value, older_key, current_key):
> +diff --git a/dynaconf/loaders/env_loader.py b/dynaconf/loaders/env_loader.py
> +index e7b13bd..b034c8a 100644
> +--- a/dynaconf/loaders/env_loader.py
> ++++ b/dynaconf/loaders/env_loader.py
> +@@ -2,7 +2,7 @@ from os import environ
> +
> + from dynaconf.utils import upperfy
> + from dynaconf.utils.parse_conf import parse_conf_data
> +-from dynaconf.vendor.dotenv import cli as dotenv_cli
> ++from dotenv import cli as dotenv_cli
> +
> +
> + IDENTIFIER = "env"
> +diff --git a/dynaconf/loaders/toml_loader.py b/dynaconf/loaders/toml_loader.py
> +index 07b973f..d81d675 100644
> +--- a/dynaconf/loaders/toml_loader.py
> ++++ b/dynaconf/loaders/toml_loader.py
> +@@ -5,7 +5,7 @@ from dynaconf import default_settings
> + from dynaconf.constants import TOML_EXTENSIONS
> + from dynaconf.loaders.base import BaseLoader
> + from dynaconf.utils import object_merge
> +-from dynaconf.vendor import toml
> ++import toml
> +
> +
> + def load(obj, env=None, silent=True, key=None, filename=None):
> +diff --git a/dynaconf/loaders/yaml_loader.py b/dynaconf/loaders/yaml_loader.py
> +index 33c6532..3ef419a 100644
> +--- a/dynaconf/loaders/yaml_loader.py
> ++++ b/dynaconf/loaders/yaml_loader.py
> +@@ -7,7 +7,7 @@ from dynaconf.constants import YAML_EXTENSIONS
> + from dynaconf.loaders.base import BaseLoader
> + from dynaconf.utils import object_merge
> + from dynaconf.utils.parse_conf import try_to_encode
> +-from dynaconf.vendor.ruamel import yaml
> ++from ruamel import yaml
> +
> + # Add support for Dynaconf Lazy values to YAML dumper
> + yaml.SafeDumper.yaml_representers[
> +diff --git a/dynaconf/utils/parse_conf.py b/dynaconf/utils/parse_conf.py
> +index 5fc8234..6509c35 100644
> +--- a/dynaconf/utils/parse_conf.py
> ++++ b/dynaconf/utils/parse_conf.py
> +@@ -8,7 +8,7 @@ from dynaconf.utils import extract_json_objects
> + from dynaconf.utils import multi_replace
> + from dynaconf.utils import recursively_evaluate_lazy_format
> + from dynaconf.utils.boxing import DynaBox
> +-from dynaconf.vendor import toml
> ++import toml
> +
> + try:
> + from jinja2 import Environment
> +diff --git a/dynaconf/vendor/box/converters.py b/dynaconf/vendor/box/converters.py
> +index 93cdcfb..c81877a 100644
> +--- a/dynaconf/vendor/box/converters.py
> ++++ b/dynaconf/vendor/box/converters.py
> +@@ -7,9 +7,9 @@ _B='utf-8'
> + _A=None
> + import csv,json,sys,warnings
> + from pathlib import Path
> +-import dynaconf.vendor.ruamel.yaml as yaml
> ++import ruamel.yaml as yaml
> + from dynaconf.vendor.box.exceptions import BoxError,BoxWarning
> +-from dynaconf.vendor import toml
> ++import toml
> + BOX_PARAMETERS='default_box','default_box_attr','conversion_box','frozen_box','camel_killer_box','box_safe_prefix','box_duplicates','ordered_box','default_box_none_transform','box_dots','modify_tuples_box','box_intact_types','box_recast'
> + def _exists(filename,create=_E):
> + A=filename;B=Path(A)
> +@@ -75,4 +75,4 @@ def _to_csv(box_list,filename,encoding=_B,errors=_C):
> + for G in A:D.writerow(G)
> + def _from_csv(filename,encoding=_B,errors=_C):
> + A=filename;_exists(A)
> +- with open(A,_G,encoding=encoding,errors=errors,newline='')as B:C=csv.DictReader(B);return[A for A in C]
> +\ No newline at end of file
> ++ with open(A,_G,encoding=encoding,errors=errors,newline='')as B:C=csv.DictReader(B);return[A for A in C]
> +diff --git a/dynaconf/vendor/box/from_file.py b/dynaconf/vendor/box/from_file.py
> +index daa1137..4a2739d 100644
> +--- a/dynaconf/vendor/box/from_file.py
> ++++ b/dynaconf/vendor/box/from_file.py
> +@@ -1,8 +1,8 @@
> + from json import JSONDecodeError
> + from pathlib import Path
> + from typing import Union
> +-from dynaconf.vendor.toml import TomlDecodeError
> +-from dynaconf.vendor.ruamel.yaml import YAMLError
> ++from toml import TomlDecodeError
> ++from ruamel.yaml import YAMLError
> + from .exceptions import BoxError
> + from .box import Box
> + from .box_list import BoxList
> +@@ -31,4 +31,4 @@ def box_from_file(file,file_type=None,encoding='utf-8',errors='strict'):
> + if A.suffix in('.json','.jsn'):return _to_json(B)
> + if A.suffix in('.yaml','.yml'):return _to_yaml(B)
> + if A.suffix in('.tml','.toml'):return _to_toml(B)
> +- raise BoxError(f"Could not determine file type based off extension, please provide file_type")
> +\ No newline at end of file
> ++ raise BoxError(f"Could not determine file type based off extension, please provide file_type")
> +diff --git a/tests/test_cli.py b/tests/test_cli.py
> +index 9338851..726b009 100644
> +--- a/tests/test_cli.py
> ++++ b/tests/test_cli.py
> +@@ -11,7 +11,7 @@ from dynaconf.cli import main
> + from dynaconf.cli import read_file_in_root_directory
> + from dynaconf.cli import WRITERS
> + from dynaconf.utils.files import read_file
> +-from dynaconf.vendor.click.testing import CliRunner
> ++from click.testing import CliRunner
> +
> +
> + runner = CliRunner()
> +
> +base-commit: 952e713353356ea701196ac5ad204c72fd097e58
> +--
> +2.32.0
> +
> diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
> index b7e20d8358..f4f3b7fb3f 100644
> --- a/gnu/packages/python-xyz.scm
> +++ b/gnu/packages/python-xyz.scm
> @@ -137,6 +137,7 @@
> #:use-module (gnu packages crypto)
> #:use-module (gnu packages databases)
> #:use-module (gnu packages dbm)
> + #:use-module (gnu packages django)
> #:use-module (gnu packages djvu)
> #:use-module (gnu packages docker)
> #:use-module (gnu packages enchant)
> @@ -12473,6 +12474,16 @@ text.")
> (home-page "https://pypi.org/project/colorama/")
> (license license:bsd-3)))
>
> +(define-public python-colorama-0.4.1
> + (package (inherit python-colorama)
> + (version "0.4.1")
> + (source
> + (origin
> + (method url-fetch)
> + (uri (pypi-uri "colorama" version))
> + (sha256
> + (base32 "0ba247bx5pc60hcpbf3rjsqk0whilg241i9qdfnlcwij5qgdgvh5"))))))
> +
> (define-public python2-colorama
> (package-with-python2 python-colorama))
>
> @@ -26292,6 +26303,18 @@ Voronoi diagram.")
> read key-value pairs from a .env file and set them as environment variables")
> (license license:bsd-3)))
>
> +(define-public python-dotenv-0.13.0
> + (package (inherit python-dotenv)
> + (name "python-dotenv")
> + (version "0.13.0")
> + (source
> + (origin
> + (method url-fetch)
> + (uri (pypi-uri "python-dotenv" version))
> + (sha256
> + (base32
> + "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))))
> +
> (define-public python-box
> (package
> (name "python-box")
> @@ -26315,3 +26338,75 @@ read key-value pairs from a .env file and set them as environment variables")
> "This package provides the @code{python-box} Python module.
> It implements advanced Python dictionaries with dot notation access.")
> (license license:expat)))
> +
> +(define-public dynaconf
> + (package
> + (name "dynaconf")
> + (version "3.1.4")
> + (source
> + (origin
> + (method git-fetch)
> + (uri
> + (git-reference
> + (url "https://github.com/rochacbruno/dynaconf")
> + (commit version)))
> + (file-name (git-file-name name version))
> + (sha256
> + (base32
> + "0dafd7hb691g6s3yjfvl5gph5md73n6g9j44kjpbnbbilr5pc85g"))
> + (patches (search-patches "dynaconf-Unvendor-dependencies.patch"))
> + (modules '((guix build utils)))
> + (snippet '(begin
> + ;; Remove vendored dependencies
> + (let ((unvendor '("click" "dotenv" "ruamel" "toml")))
> + (with-directory-excursion "dynaconf/vendor"
> + (for-each delete-file-recursively unvendor))
> + (with-directory-excursion "dynaconf/vendor_src"
> + (for-each delete-file-recursively unvendor)))))))
> + (build-system python-build-system)
> + (arguments
> + `(#:phases
> + (modify-phases %standard-phases
> + (replace 'check
> + (lambda* (#:key tests? outputs #:allow-other-keys)
> + (when tests?
> + (setenv "PATH"
> + (string-append (assoc-ref outputs "out") "/bin:"
> + (getenv "PATH")))
> + ;; These tests depend on hvac and a
> + ;; live Vault process.
> + (delete-file "tests/test_vault.py")
> + (invoke "make" "test_only"))
> + #t)))))
^ Nitpick: phases no longer have to end in #t, though it
doesn't hurt.

Toggle quote (25 lines)
> + (propagated-inputs
> + `(("python-click" ,python-click)
> + ("python-dotenv" ,python-dotenv-0.13.0)
> + ("python-ruamel.yaml" ,python-ruamel.yaml)
> + ("python-toml" ,python-toml)))
> + (native-inputs
> + `(("make" ,gnu-make)
> + ("python-codecov" ,python-codecov)
> + ("python-configobj" ,python-configobj)
> + ("python-colorama" ,python-colorama-0.4.1)
> + ("python-django" ,python-django)
> + ("python-flake8" ,python-flake8)
> + ("python-flake8-debugger" ,python-flake8-debugger)
> + ("python-flake8-print" ,python-flake8-print)
> + ("python-flake8-todo" ,python-flake8-todo)
> + ("python-flask" ,python-flask)
> + ("python-future" ,python-future)
> + ("python-pep8-naming" ,python-pep8-naming)
> + ("python-pytest" ,python-pytest-6)
> + ("python-pytest-cov" ,python-pytest-cov)
> + ("python-pytest-forked" ,python-pytest-forked)
> + ("python-pytest-mock" ,python-pytest-mock)
> + ("python-pytest-xdist" ,python-pytest-xdist)
> + ("python-radon" ,python-radon)))

With the test_only target, I think only a few of these are actually
required. Also, configobj should probably be a propagated input as
dynaconf uses it for ini files. I've attached a patch below.

Notably, this seems to make python-flake8-debugger, python-flake8-todo,
python-pep8-naming and python-colorama-0.4.1 unneccessary (I think
because they are used for code linting, and the test_only target doesn't
do linting). WDYT?

(Even if they aren't necessary for packaging dynaconf, you're still
welcome to send them as separate patches :)

Toggle quote (2 lines)
> + (home-page
> + "https://github.com/rochacbruno/dynaconf")
^ Nitpick: this can go on one line
Toggle quote (2 lines)
> + (synopsis
> + "The dynamic configurator for your Python Project")
^ Likewise
Toggle quote (4 lines)
> + (description
> + "This package provides @code{dynaconf} the dynamic configurator for
> +your Python Project.")

Even as someone who has used python a lot before, this doesn't tell me
anything about what dynaconf actually does or why I might want to
install it. (Or, is it even an end-user package?) For examples, take a
look at pretty much any package which has more than two lines in its
description (like, say, python-seaborn). I know writing a good
description can be difficult, but they tend to stick around and read by
lots of people, so getting it right the first time is important!

Toggle quote (1 lines)
> + (license license:expat)))
Toggle diff (36 lines)
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index f4f3b7fb3f..58defd9fcc 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -26380,28 +26380,16 @@ It implements advanced Python dictionaries with dot notation access.")
#t)))))
(propagated-inputs
`(("python-click" ,python-click)
+ ("python-configobj" ,python-configobj)
("python-dotenv" ,python-dotenv-0.13.0)
("python-ruamel.yaml" ,python-ruamel.yaml)
("python-toml" ,python-toml)))
(native-inputs
- `(("make" ,gnu-make)
- ("python-codecov" ,python-codecov)
- ("python-configobj" ,python-configobj)
- ("python-colorama" ,python-colorama-0.4.1)
- ("python-django" ,python-django)
- ("python-flake8" ,python-flake8)
- ("python-flake8-debugger" ,python-flake8-debugger)
- ("python-flake8-print" ,python-flake8-print)
- ("python-flake8-todo" ,python-flake8-todo)
+ `(("python-django" ,python-django)
("python-flask" ,python-flask)
- ("python-future" ,python-future)
- ("python-pep8-naming" ,python-pep8-naming)
("python-pytest" ,python-pytest-6)
("python-pytest-cov" ,python-pytest-cov)
- ("python-pytest-forked" ,python-pytest-forked)
- ("python-pytest-mock" ,python-pytest-mock)
- ("python-pytest-xdist" ,python-pytest-xdist)
- ("python-radon" ,python-radon)))
+ ("python-pytest-mock" ,python-pytest-mock)))
(home-page
"https://github.com/rochacbruno/dynaconf")
(synopsis
--
Sarah
?
Your comment

This issue is archived.

To comment on this conversation send an email to 49835@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 49835
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch