File: test_typed_env.py

package info (click to toggle)
python-plumbum 1.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,300 kB
  • sloc: python: 10,016; makefile: 130; sh: 8
file content (61 lines) | stat: -rw-r--r-- 1,580 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
from __future__ import annotations

import pytest

from plumbum.typed_env import TypedEnv


class TestTypedEnv:
    def test_env(self):
        class E(TypedEnv):
            terminal = TypedEnv.Str("TERM")
            B = TypedEnv.Bool("BOOL", default=True)
            I = TypedEnv.Int("INT INTEGER".split())  # noqa: E741  # noqa: E741
            INTS = TypedEnv.CSV("CS_INTS", type=int)

        raw_env = {"TERM": "xterm", "CS_INTS": "1,2,3,4"}
        e = E(raw_env)

        assert e.terminal == "xterm"
        e.terminal = "foo"
        assert e.terminal == "foo"
        assert raw_env["TERM"] == "foo"
        assert "terminal" not in raw_env

        # check default
        assert e.B is True

        raw_env["BOOL"] = "no"
        assert e.B is False

        raw_env["BOOL"] = "0"
        assert e.B is False

        e.B = True
        assert raw_env["BOOL"] == "yes"

        e.B = False
        assert raw_env["BOOL"] == "no"

        assert [1, 2, 3, 4] == e.INTS
        e.INTS = [1, 2]
        assert [1, 2] == e.INTS
        e.INTS = [1, 2, 3, 4]

        with pytest.raises(KeyError):
            e.I  # noqa: B018

        raw_env["INTEGER"] = "4"
        assert e.I == 4
        assert e["I"] == 4

        e.I = "5"
        assert raw_env["INT"] == "5"
        assert e.I == 5
        assert e["I"] == 5

        assert "{I} {B} {terminal}".format(**e) == "5 False foo"
        assert dict(e) == {"I": 5, "B": False, "terminal": "foo", "INTS": [1, 2, 3, 4]}

        r = TypedEnv(raw_env)
        assert "{INT} {BOOL} {TERM}".format(**r) == "5 no foo"