mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-08 22:58:01 -05:00
refactor(backend): Simplify CredentialsField usage + use ProviderName globally (#8725)
- Resolves #8931 - Follow-up to #8358 ### Changes 🏗️ - Avoid double specifying provider and cred types on `credentials` inputs - Move `credentials` sub-schema validation from `CredentialsField` to `CredentialsMetaInput.validate_credentials_field_schema(..)`, which is called in `BlockSchema.__pydantic_init_subclass__` - Use `ProviderName` enum globally
This commit is contained in:
committed by
GitHub
parent
b8a3ffc04a
commit
33b9eef376
@@ -121,6 +121,7 @@ from backend.data.model import (
|
||||
|
||||
from backend.data.block import Block, BlockOutput, BlockSchema
|
||||
from backend.data.model import CredentialsField
|
||||
from backend.integrations.providers import ProviderName
|
||||
|
||||
|
||||
# API Key auth:
|
||||
@@ -128,9 +129,9 @@ class BlockWithAPIKeyAuth(Block):
|
||||
class Input(BlockSchema):
|
||||
# Note that the type hint below is require or you will get a type error.
|
||||
# The first argument is the provider name, the second is the credential type.
|
||||
credentials: CredentialsMetaInput[Literal['github'], Literal['api_key']] = CredentialsField(
|
||||
provider="github",
|
||||
supported_credential_types={"api_key"},
|
||||
credentials: CredentialsMetaInput[
|
||||
Literal[ProviderName.GITHUB], Literal["api_key"]
|
||||
] = CredentialsField(
|
||||
description="The GitHub integration can be used with "
|
||||
"any API key with sufficient permissions for the blocks it is used on.",
|
||||
)
|
||||
@@ -151,9 +152,9 @@ class BlockWithOAuth(Block):
|
||||
class Input(BlockSchema):
|
||||
# Note that the type hint below is require or you will get a type error.
|
||||
# The first argument is the provider name, the second is the credential type.
|
||||
credentials: CredentialsMetaInput[Literal['github'], Literal['oauth2']] = CredentialsField(
|
||||
provider="github",
|
||||
supported_credential_types={"oauth2"},
|
||||
credentials: CredentialsMetaInput[
|
||||
Literal[ProviderName.GITHUB], Literal["oauth2"]
|
||||
] = CredentialsField(
|
||||
required_scopes={"repo"},
|
||||
description="The GitHub integration can be used with OAuth.",
|
||||
)
|
||||
@@ -174,9 +175,9 @@ class BlockWithAPIKeyAndOAuth(Block):
|
||||
class Input(BlockSchema):
|
||||
# Note that the type hint below is require or you will get a type error.
|
||||
# The first argument is the provider name, the second is the credential type.
|
||||
credentials: CredentialsMetaInput[Literal['github'], Literal['api_key', 'oauth2']] = CredentialsField(
|
||||
provider="github",
|
||||
supported_credential_types={"api_key", "oauth2"},
|
||||
credentials: CredentialsMetaInput[
|
||||
Literal[ProviderName.GITHUB], Literal["api_key", "oauth2"]
|
||||
] = CredentialsField(
|
||||
required_scopes={"repo"},
|
||||
description="The GitHub integration can be used with OAuth, "
|
||||
"or any API key with sufficient permissions for the blocks it is used on.",
|
||||
@@ -227,6 +228,16 @@ response = requests.post(
|
||||
)
|
||||
```
|
||||
|
||||
The `ProviderName` enum is the single source of truth for which providers exist in our system.
|
||||
Naturally, to add an authenticated block for a new provider, you'll have to add it here too.
|
||||
<details>
|
||||
<summary><code>ProviderName</code> definition</summary>
|
||||
|
||||
```python title="backend/integrations/providers.py"
|
||||
--8<-- "autogpt_platform/backend/backend/integrations/providers.py:ProviderName"
|
||||
```
|
||||
</details>
|
||||
|
||||
#### Adding an OAuth2 service integration
|
||||
|
||||
To add support for a new OAuth2-authenticated service, you'll need to add an `OAuthHandler`.
|
||||
|
||||
Reference in New Issue
Block a user