def with_append_on_nested_dataclass(expect):
        sample = SampleWithNesting(1)

        logbreak("Appending to nested list: 2")
        sample.nested.items.append(2)

        expect(read("tmp/sample.yml")) == dedent(
            """
            item: 1
            nested:
              items:
                - 2
            """
        )

        logbreak("Appending to nested list: 3")
        sample.nested.items.append(3)

        expect(read("tmp/sample.yml")) == dedent(
            """
            item: 1
            nested:
              items:
                - 2
                - 3
            """
        )
Пример #2
0
    def with_update(expect):
        sample = Sample()

        logbreak()
        sample.data.update({'b': 2})

        expect(read('tmp/sample.yml')) == dedent(
            """
            data:
              a: 1
              b: 2
            """
        )

        sample.datafile.load()

        logbreak()
        sample.data.update({'c': 3})

        expect(read('tmp/sample.yml')) == dedent(
            """
            data:
              a: 1
              b: 2
              c: 3
            """
        )
    def with_update(expect):
        sample = Sample()

        logbreak()
        sample.data.update({"b": 2})

        expect(read("tmp/sample.yml")) == dedent(
            """
            data:
              a: 1
              b: 2
            """
        )

        sample.datafile.load()

        logbreak()
        sample.data.update({"c": 3})

        expect(read("tmp/sample.yml")) == dedent(
            """
            data:
              a: 1
              b: 2
              c: 3
            """
        )
    def with_append(expect):
        sample = Sample()

        logbreak("Appending to list: 2")
        sample.items.append(2)

        expect(read("tmp/sample.yml")) == dedent(
            """
            items:
              - 1
              - 2
            """
        )

        sample.datafile.load()

        logbreak("Appending to list: 3")
        sample.items.append(3)

        expect(read("tmp/sample.yml")) == dedent(
            """
            items:
              - 1
              - 2
              - 3
            """
        )
    def with_setattr(expect):
        sample = Sample()

        logbreak("Setting attribute")
        sample.item = 'b'

        expect(read('tmp/sample.yml')) == dedent("""
            item: b
            """)
Пример #6
0
    def with_dataclasses(expect):
        sample = SampleWithListOfDataclasses([_NestedSample1("foobar", 42)])

        logbreak("Saving")
        sample.datafile.save()

        with open("tmp/sample.yml") as f:
            expect(f.read()) == dedent("""
                items:
                  - name: foobar
                    score: 42.0
                """)
    def with_setattr_on_nested_dataclass(expect):
        sample = SampleWithNesting(2)

        logbreak("Setting nested attribute")
        sample.nested.name = 'd'

        logbreak("Reading file")
        expect(read('tmp/sample.yml')) == dedent("""
            item: 2
            nested:
              name: d
            """)
    def with_getattribute(expect):
        sample = Sample()

        write(
            "tmp/sample.yml",
            """
            item: b
            """,
        )

        logbreak("Getting attribute")
        expect(sample.item) == "b"
Пример #9
0
    def with_conversion(expect):
        sample = SampleWithList([1, 2.3, "4.5"])

        logbreak("Saving")
        sample.datafile.save()

        with open("tmp/sample.yml") as f:
            expect(f.read()) == dedent("""
                items:
                  - 1.0
                  - 2.3
                  - 4.5
                """)
Пример #10
0
    def with_partial_list_value(expect):
        write(
            'tmp/sample.yml',
            """
            items:
            - name: abc
            """,
        )

        logbreak()
        sample = SampleWithListOfDataclasses()
        logbreak()

        expect(sample.items) == [_NestedSample1(name='abc', score=0.0)]
Пример #11
0
    def with_partial_set_value(expect):
        write(
            "tmp/sample.yml",
            """
            items:
            - name: abc
            """,
        )

        logbreak()
        sample = SampleWithSetOfDataclasses()
        logbreak()

        expect(sample.items) == {_FrozenNestedSample1(name="abc", score=0.0)}
Пример #12
0
def test_missing_optional_fields_are_loaded(expect):
    @datafile
    class Name:
        value: str

    @datafile("../tmp/samples/{self.key}.json")
    class Sample:

        key: int
        name: Optional[Name]
        value: float = 0.0

    sample = Sample(42, None)

    logbreak("get key=42")
    sample2 = Sample.objects.get(42)
    expect(sample2.name) == sample.name
Пример #13
0
    def when_dataclass(expect):
        @dataclass
        class Name:
            value: str

        @datafile("../tmp/samples/{self.key}.yml")
        @dataclass
        class Sample:

            key: int
            name: Name
            value: float = 0.0

        sample = Sample(42, Name("Widget"))

        logbreak("Loading missing 'name' dataclass")

        sample2 = Sample(42, Missing)  # type: ignore

        expect(sample2.name.value) == "Widget"
Пример #14
0
    def with_floats(expect):
        write(
            "tmp/sample.yml",
            """
            language: python
            python:
              - 3.7
              - 3.8
            """,
        )

        logbreak("Inferring object")
        sample = auto("tmp/sample.yml")

        logbreak("Updating attribute")
        sample.python.append(4)

        logbreak("Reading file")
        expect(read("tmp/sample.yml")) == dedent("""
            language: python
            python:
              - 3.7
              - 3.8
              - 4.0
            """)
Пример #15
0
def test_float_inference(expect):
    write(
        'tmp/sample.yml',
        """
        language: python
        python:
          - 3.7
          - 3.8
        """,
    )

    logbreak("Inferring object")
    sample = auto('tmp/sample.yml')

    logbreak("Updating attribute")
    sample.python.append(4)

    logbreak("Reading file")
    expect(read('tmp/sample.yml')) == dedent("""
        language: python
        python:
          - 3.7
          - 3.8
          - 4.0
        """)
Пример #16
0
    def with_nested_mutables(expect):
        write(
            "tmp/sample.yml",
            """
            name: Test
            roles:
              category1:
                - value1
                - value2
              category2:
                - something
                - else
            """,
        )

        logbreak("Inferring object")
        sample = auto("tmp/sample.yml")

        logbreak("Updating attributes")
        sample.roles["category1"].append("value3")

        logbreak("Reading file")
        expect(read("tmp/sample.yml")) == dedent("""
            name: Test
            roles:
              category1:
                - value1
                - value2
                - value3
              category2:
                - something
                - else
            """)
Пример #17
0
def test_classes_can_share_a_nested_dataclass(expect):
    @dataclass
    class Nested:
        value: int

    @datafile('../tmp/sample.json')
    class Foo:
        nested: Nested

    logbreak("Initialize Foo")
    foo = Foo(Nested(1))

    expect(foo.nested.value) == 1

    @datafile('../tmp/sample.toml')
    class Bar:
        nested: Nested

    logbreak("Initialize Bar")
    bar = Bar(Nested(2))

    expect(bar.nested.value) == 2
Пример #18
0
    def with_dict(expect):
        sample = Sample('abc')

        sample.datafile.text = "data: {'a': 1}"

        logbreak("Getting attribute")
        expect(sample.data) == {'a': 1}

        logbreak("Setting attribute")
        sample.data['b'] = 2.3

        logbreak("Getting attribute")
        expect(sample.data) == {'a': 1, 'b': 2.3}
Пример #19
0
    def with_heterogeneous_list(expect):
        sample = Sample('abc')

        sample.datafile.text = "mixed_items: [1, 'abc']"

        logbreak("Getting attribute")
        expect(sample.mixed_items) == [1, "abc"]

        logbreak("Setting attribute")
        sample.mixed_items.append(3.2)

        logbreak("Getting attribute")
        expect(sample.mixed_items) == [1, "abc", 3.2]
Пример #20
0
    def with_homogeneous_list(expect):
        sample = Sample('abc')

        sample.datafile.text = "same_items: [1, 2]"

        logbreak("Getting attribute")
        expect(sample.same_items) == [1, 2]

        logbreak("Setting attribute")
        sample.same_items.append(3.2)

        logbreak("Getting attribute")
        expect(sample.same_items) == [1, 2, 3]
Пример #21
0
    def with_builtin(expect):
        sample = Sample('abc')

        sample.datafile.text = "count: 1"

        logbreak("Getting attribute")
        expect(sample.count) == 1

        logbreak("Setting attribute")
        sample.count = 4.2

        logbreak("Getting attribute")
        expect(sample.count) == 4
    def with_dict(expect):
        sample = Sample("abc")

        sample.datafile.text = "data: {'a': 1}"

        logbreak("Getting attribute")
        expect(sample.data) == {"a": 1}

        logbreak("Setting attribute")
        sample.data["b"] = 2.3

        logbreak("Getting attribute")
        expect(sample.data) == {"a": 1, "b": 2.3}
Пример #23
0
    def with_empty_list(expect):
        sample = Sample('abc')

        sample.datafile.text = "empty_items: []"

        logbreak("Getting attribute")
        expect(sample.empty_items) == []

        logbreak("Setting attribute")
        sample.empty_items.append(4.2)
        sample.empty_items.append("abc")

        logbreak("Getting attribute")
        expect(sample.empty_items) == [4.2, "abc"]
Пример #24
0
def test_auto_with_sample_file(expect):
    write(
        'tmp/sample.yml',
        """
        homogeneous_list:
          - 1
          - 2
        heterogeneous_list:
          - 1
          - 'abc'
        empty_list: []
        """,
    )

    logbreak("Inferring object")
    sample = auto('tmp/sample.yml')

    logbreak("Reading attributes")
    expect(sample.homogeneous_list) == [1, 2]
    expect(sample.heterogeneous_list) == [1, 'abc']
    expect(sample.empty_list) == []

    logbreak("Updating attribute")
    sample.homogeneous_list.append(3.4)
    sample.heterogeneous_list.append(5.6)
    sample.empty_list.append(7.8)

    logbreak("Reading file")
    expect(read('tmp/sample.yml')) == dedent("""
        homogeneous_list:
          - 1
          - 2
          - 3
        heterogeneous_list:
          - 1
          - 'abc'
          - 5.6
        empty_list:
          - 7.8
        """)
Пример #25
0
    def with_comments_in_nested_objects(expect):
        sample = SampleWithNestingAndDefaults(None)

        write(
            'tmp/sample.yml',
            """
            # Heading
            name: a
            score: 1.0  # Line

            nested:
              # Nested heading
              name: n
              score: 2
            """,
        )

        logbreak("Loading")
        sample.datafile.load()

        logbreak("Modifying")
        sample.score = 3
        sample.nested.score = 4

        logbreak("Saving")
        sample.datafile.save()

        expect(read('tmp/sample.yml')) == dedent("""
            # Heading
            name: a
            score: 3.0  # Line

            nested:
              # Nested heading
              name: n
              score: 4.0
            """)
Пример #26
0
def test_save():
    sample = get_sample()
    logbreak("Saving")
    sample.datafile.save()  # pylint: disable=no-member
Пример #27
0
def test_load():
    sample = get_sample()
    logbreak("Loading")
    sample.datafile.load()  # pylint: disable=no-member
Пример #28
0
    def with_real_file(expect, filename, count):
        logbreak("Inferring object")
        sample = auto(filename)

        logbreak("Reading attributes")
        expect(len(sample.datafile.data)) == count
Пример #29
0
    def with_multiple_levels(expect):
        @dataclass
        class Bottom:
            level: int = 4

        @dataclass
        class C:
            level: int = 3
            d: Bottom = Bottom()

        @dataclass
        class B:
            level: int = 2
            c: C = C()

        @dataclass
        class A:
            level: int = 1
            b: B = B()

        @datafile('../tmp/sample.toml', defaults=True, auto_save=False)
        class Top:
            level: int = 0
            a: A = A()

        sample = Top()

        expect(read('tmp/sample.toml')) == dedent("""
            level = 0

            [a]
            level = 1

            [a.b]
            level = 2

            [a.b.c]
            level = 3

            [a.b.c.d]
            level = 4
            """)

        logbreak("Modifying attribute")
        sample.a.b.c.d.level = 99

        expect(read('tmp/sample.toml')) == dedent("""
            level = 0

            [a]
            level = 1

            [a.b]
            level = 2

            [a.b.c]
            level = 3

            [a.b.c.d]
            level = 99
            """)

        write(
            'tmp/sample.toml',
            """
            level = 0

            [a]
            level = 10

            [a.b]
            level = 20

            [a.b.c]
            level = 30

            [a.b.c.d]
            level = 40
            """,
        )

        logbreak("Reading attribute")
        expect(sample.a.level) == 10
        expect(sample.a.b.level) == 20
        expect(sample.a.b.c.level) == 30

        expect(sample.a.b.c.d.level) == 40