Fix up circular imports and typing-only imports #414
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The bug we encountered in #411 highlighted some odd patterns in how pyairtable does its imports, which are more "emergent" (or "sloppy" 😁) than well-reasoned. This branch cleans it up, so that module-level imports only go "down" the hierarchy (i.e. Api can import Base, but not vice versa) and imports which go "up" the hierarchy must either (1) happen at runtime or (2) be wrapped in
if TYPE_CHECKING
.I specifically tested this against
pydantic==2.10.1
to ensure that whatever bug we were causing in that library is no longer triggered. I couldn't test againstpydantic==2.10.0
because of pydantic/pydantic#10907Along the way, I also replaced all relative imports with absolute imports.
Fixes #412