refactor(backend): Reduce circular imports (#12068)

I'm getting circular import issues because there is a lot of
cross-importing between `backend.data`, `backend.blocks`, and other
modules. This change reduces block-related cross-imports and thus risk
of breaking circular imports.

### Changes 🏗️

- Strip down `backend.data.block`
- Move `Block` base class and related class/enum defs to
`backend.blocks._base`
  - Move `is_block_auth_configured` to `backend.blocks._utils`
- Move `get_blocks()`, `get_io_block_ids()` etc. to `backend.blocks`
(`__init__.py`)
  - Update imports everywhere
- Remove unused and poorly typed `Block.create()`
  - Change usages from `block_cls.create()` to `block_cls()`
- Improve typing of `load_all_blocks` and `get_blocks`
- Move cross-import of `backend.api.features.library.model` from
`backend/data/__init__.py` to `backend/data/integrations.py`
- Remove deprecated attribute `NodeModel.webhook`
  - Re-generate OpenAPI spec and fix frontend usage
- Eliminate module-level `backend.blocks` import from `blocks/agent.py`
- Eliminate module-level `backend.data.execution` and
`backend.executor.manager` imports from `blocks/helpers/review.py`
- Replace `BlockInput` with `GraphInput` for graph inputs

### Checklist 📋

#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
  - CI static type-checking + tests should be sufficient for this
This commit is contained in:
Reinier van der Leer
2026-02-12 13:07:49 +01:00
committed by GitHub
parent d09f1532a4
commit 113e87a23c
176 changed files with 1444 additions and 1446 deletions

View File

@@ -20,13 +20,13 @@ Follow these steps to create and test a new block:
Every block should contain the following:
```python
from backend.data.block import Block, BlockSchemaInput, BlockSchemaOutput, BlockOutput
from backend.blocks._base import Block, BlockSchemaInput, BlockSchemaOutput, BlockOutput
```
Example for the Wikipedia summary block:
```python
from backend.data.block import Block, BlockSchemaInput, BlockSchemaOutput, BlockOutput
from backend.blocks._base import Block, BlockSchemaInput, BlockSchemaOutput, BlockOutput
from backend.utils.get_request import GetRequest
import requests
@@ -237,7 +237,7 @@ from backend.data.model import (
Credentials,
)
from backend.data.block import Block, BlockOutput, BlockSchemaInput, BlockSchemaOutput
from backend.blocks._base import Block, BlockOutput, BlockSchemaInput, BlockSchemaOutput
from backend.data.model import CredentialsField
from backend.integrations.providers import ProviderName
@@ -496,8 +496,8 @@ To create a webhook-triggered block, follow these additional steps on top of the
<details>
<summary><code>BlockWebhookConfig</code> definition</summary>
```python title="backend/data/block.py"
--8<-- "autogpt_platform/backend/backend/data/block.py:BlockWebhookConfig"
```python title="backend/blocks/_base.py"
--8<-- "autogpt_platform/backend/backend/blocks/_base.py:BlockWebhookConfig"
```
</details>