Codegen requires you to explicitly commit changes by calling codebase.commit().

Keeping everything in memory enables fast, large-scale writes. See the How it Works guide to learn more.

You can manage your codebase’s state with two core APIs:

Committing Changes

When you make changes to your codebase through Codegen’s APIs, they aren’t immediately written to disk. You need to explicitly commit them with codebase.commit():

from codegen import Codebase

codebase = Codebase("./")

# Make some changes
file = codebase.get_file("src/app.py")
file.before("# 🌈 hello, world!")

# Changes aren't on disk yet
codebase.commit()  # Now they are!

This transaction-like behavior helps ensure your changes are atomic and consistent.

Resetting State

The codebase.reset() method allows you to revert the codebase to its initial state:

# Make some changes
codebase.get_file("src/app.py").remove()
codebase.create_file("src/new_file.py", "x = 1")

# Check the changes
assert codebase.get_file("src/app.py", optional=True) is None
assert codebase.get_file("src/new_file.py") is not None

# Reset everything
codebase.reset()

# Changes are reverted
assert codebase.get_file("src/app.py") is not None
assert codebase.get_file("src/new_file.py", optional=True) is None

reset() reverts both the in-memory state and any uncommitted filesystem changes. However, it preserves your codemod implementation in .codegen/.

Was this page helpful?