Become a
Sponsor or follow @15r10nk on
or
for updates

# Code generation

You can use almost any python data type and also complex values like `datetime.date`, because `repr()` is used to convert the values to source code. The default `__repr__()` behaviour can be customized. It might be necessary to import the right modules to match the `repr()` output.

original code--inline-snapshot=create

    from inline_snapshot import snapshot
    import datetime

    def something():
        return {
            "name": "hello",
            "one number": 5,
            "numbers": list(range(10)),
            "sets": {1, 2, 15},
            "datetime": datetime.date(1, 2, 22),
            "complex stuff": 5j + 3,
            "bytes": b"byte abc\n\x16",
        }

    def test_something():
        assert something() == snapshot()

    from inline_snapshot import snapshot
    import datetime

    def something():
        return {
            "name": "hello",
            "one number": 5,
            "numbers": list(range(10)),
            "sets": {1, 2, 15},
            "datetime": datetime.date(1, 2, 22),
            "complex stuff": 5j + 3,
            "bytes": b"byte abc\n\x16",
        }

    def test_something():
        assert something() == snapshot(
            {
                "name": "hello",
                "one number": 5,
                "numbers": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
                "sets": {1, 2, 15},
                "datetime": datetime.date(1, 2, 22),
                "complex stuff": (3 + 5j),
                "bytes": b"byte abc\n\x16",
            }
        )

The code is generated in the following way:

1. The value is copied with `value = copy.deepcopy(value)` and it is checked if the copied value is equal to the original value.
2. The code is generated with:
   - `repr(value)` (which can be customized)
   - or a special internal implementation for container types to support unmanaged snapshot values. This can currently not be customized.

3. Strings which contain newlines are converted to triple quoted strings.

   Note

   Missing newlines at start or end are escaped (since 0.4.0).

   original code--inline-snapshot=update

       from inline_snapshot import snapshot

       def test_something():
           assert "first line\nsecond line" == snapshot(
               """first line
       second line"""
           )

       from inline_snapshot import snapshot

       def test_something():
           assert "first line\nsecond line" == snapshot(
               """\
       first line
       second line\
       """
           )

4. The new code fragments are formatted with black if it is installed.

   Note

   Black is an optional dependency since inline-snapshot v0.19.0. You can install it with:

       pip install inline-snapshot[black]

5. The whole file is formatted

   - with black if it was formatted with black before.

     Note

     The black formatting of the whole file could not work for the following reasons:

     1. black is configured with cli arguments and not in a configuration file.
        Solution: configure black in a configuration file
     2. inline-snapshot uses a different black version.
        Solution: specify which black version inline-snapshot should use by adding black with a specific version to your dependencies.
     3. black is not installed. Black is an optional dependency since inline-snapshot v0.19.0

   - or with the format-command if you defined one.