File: test_dynabox.py

package info (click to toggle)
python-dynaconf 3.2.12-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,900 kB
  • sloc: python: 21,464; sh: 9; makefile: 4
file content (103 lines) | stat: -rw-r--r-- 3,334 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from __future__ import annotations

from collections import namedtuple

from dynaconf.utils.boxing import DynaBox
from dynaconf.vendor.box import BoxList

DBDATA = namedtuple("DbData", ["server", "port"])


box = DynaBox(
    {
        "server": {
            "HOST": "server.com",
            "port": 8080,
            "PARAMS": {
                "username": "admin",
                "PASSWORD": "secret",
                "token": {"TYPE": 1, "value": 2},
            },
        },
        "database": DBDATA(server="db.com", port=3306),
    },
)


def test_named_tuple_is_not_transformed():
    """Issue: https://github.com/dynaconf/dynaconf/issues/595"""
    assert isinstance(box.database, DBDATA)
    assert isinstance(box.database, tuple)


def test_datatypes():
    assert isinstance(box.server, dict)
    assert isinstance(box.server, DynaBox)
    assert isinstance(box.server.host, str)
    assert isinstance(box.server.PORT, int)


def test_access_lowercase():
    assert box.server.host == "server.com"
    assert box.server.port == 8080
    assert box.server.params.username == "admin"
    assert box.server.params.password == "secret"
    assert box.server.params.token.type == 1
    assert box.server.params.token.value == 2


def test_access_uppercase():
    assert box.SERVER.HOST == "server.com"
    assert box.SERVER.PORT == 8080
    assert box.SERVER.PARAMS.USERNAME == "admin"
    assert box.SERVER.PARAMS.PASSWORD == "secret"
    assert box.SERVER.PARAMS.TOKEN.TYPE == 1
    assert box.SERVER.PARAMS.TOKEN.VALUE == 2


def test_access_items():
    assert box["SERVER"]["HOST"] == "server.com"
    assert box["SERVER"]["PORT"] == 8080
    assert box["SERVER"]["PARAMS"]["USERNAME"] == "admin"
    assert box["SERVER"]["PARAMS"]["PASSWORD"] == "secret"
    assert box["SERVER"]["PARAMS"]["TOKEN"]["TYPE"] == 1
    assert box["SERVER"]["PARAMS"]["TOKEN"]["VALUE"] == 2


def test_access_items_lower():
    assert box["server"]["HOST"] == "server.com"
    assert box["server"]["PORT"] == 8080
    assert box["server"]["params"]["USERNAME"] == "admin"
    assert box["server"]["params"]["PASSWORD"] == "secret"
    assert box["server"]["params"]["TOKEN"]["TYPE"] == 1
    assert box["server"]["params"]["TOKEN"]["VALUE"] == 2


def test_get():
    assert box.get("server").get("host") == "server.com"
    assert box.get("server").get("port") == 8080
    assert box.get("server").get("params").username == "admin"
    assert box.get("server").get("params").password == "secret"
    assert box.get("server").get("params").token.type == 1
    assert box.get("server").get("params").token.value == 2
    assert box.get("server").get("blabla") is None
    assert box.get("server").get("blabla", "foo") == "foo"


def test_copy_no_cause_inf_recursion():
    box.__copy__()
    box.copy()


def test_accessing_dynabox_inside_boxlist_inside_dynabox():
    data = DynaBox({"nested": [{"deeper": "nest"}]})
    assert data.nested[0].deeper == "nest"
    assert data.NESTED[0].deeper == "nest"
    assert data.NESTED[0].DEEPER == "nest"

    data = DynaBox({"nested": BoxList([DynaBox({"deeper": "nest"})])})
    assert data.nested[0].deeper == "nest"
    assert data.NESTED[0].deeper == "nest"
    assert isinstance(data.NESTED, BoxList)
    assert isinstance(data.NESTED[0], DynaBox)
    assert data.NESTED[0].DEEPER == "nest"