Add optional photo providers, layout studio and scoped integrations
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
from fastapi import Depends
|
||||
|
||||
from pigway_frame_flow.core.auth import require
|
||||
from pigway_frame_flow.extensions.api import AISecret
|
||||
from pigway_frame_flow.extensions.secrets import save_secret
|
||||
from pigway_frame_flow.providers.external import (
|
||||
ExternalProviderConfig,
|
||||
)
|
||||
|
||||
|
||||
def install_providers(app, service):
|
||||
providers = service.providers
|
||||
|
||||
@app.get(
|
||||
"/api/v1/providers/external",
|
||||
tags=["Providers"],
|
||||
dependencies=[Depends(require("devices:read"))],
|
||||
)
|
||||
def list_providers():
|
||||
return providers.list()
|
||||
|
||||
@app.put(
|
||||
"/api/v1/providers/external/{id}",
|
||||
tags=["Providers"],
|
||||
dependencies=[Depends(require("admin"))],
|
||||
)
|
||||
def configure(id: str, payload: ExternalProviderConfig):
|
||||
return providers.save(id, payload)
|
||||
|
||||
@app.get(
|
||||
"/api/v1/providers/external/{id}/data",
|
||||
tags=["Providers"],
|
||||
dependencies=[Depends(require("devices:read"))],
|
||||
)
|
||||
def provider_data(id: str):
|
||||
return providers.get(id)
|
||||
|
||||
@app.put(
|
||||
"/api/v1/providers/external/{id}/key",
|
||||
status_code=204,
|
||||
tags=["Providers"],
|
||||
dependencies=[Depends(require("admin"))],
|
||||
)
|
||||
def provider_key(id: str, payload: AISecret):
|
||||
providers.config(id)
|
||||
save_secret(
|
||||
service.settings.config_dir / ("provider-" + id + ".secret"),
|
||||
payload.key.get_secret_value(),
|
||||
)
|
||||
service.settings.additional_secrets.append(payload.key.get_secret_value())
|
||||
providers.cache.pop(id, None)
|
||||
Reference in New Issue
Block a user