Skip to content

Commit 7b29adc

Browse files
style: ruff autofix (auto)
1 parent dfb580e commit 7b29adc

4 files changed

Lines changed: 81 additions & 61 deletions

File tree

alembic/versions/0006_revoke_provider_override_nonadmin.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,18 @@
1414
join rows for the two non-admin roles are removed.
1515
1616
"""
17-
from typing import Sequence, Union
1817

19-
from alembic import op
18+
from collections.abc import Sequence
19+
from typing import Union
20+
2021
import sqlalchemy as sa
2122

23+
from alembic import op
2224

2325
revision: str = "0006_revoke_provider_override_nonadmin"
24-
down_revision: Union[str, Sequence[str], None] = "0005_user_fk_ondelete"
25-
branch_labels: Union[str, Sequence[str], None] = None
26-
depends_on: Union[str, Sequence[str], None] = None
26+
down_revision: str | Sequence[str] | None = "0005_user_fk_ondelete"
27+
branch_labels: str | Sequence[str] | None = None
28+
depends_on: str | Sequence[str] | None = None
2729

2830
_PERM_NAME = "providers:override:self"
2931
_ROLE_NAMES = ["developer", "user"]
@@ -62,9 +64,7 @@ def downgrade() -> None:
6264
existing = {
6365
row[0]
6466
for row in bind.execute(
65-
sa.text(
66-
"SELECT role_id FROM role_permissions WHERE permission_id = :perm_id"
67-
),
67+
sa.text("SELECT role_id FROM role_permissions WHERE permission_id = :perm_id"),
6868
{"perm_id": perm_id},
6969
).fetchall()
7070
}
@@ -73,10 +73,6 @@ def downgrade() -> None:
7373
sa.column("role_id", sa.String),
7474
sa.column("permission_id", sa.String),
7575
)
76-
rows = [
77-
{"role_id": rid, "permission_id": perm_id}
78-
for rid in role_ids
79-
if rid not in existing
80-
]
76+
rows = [{"role_id": rid, "permission_id": perm_id} for rid in role_ids if rid not in existing]
8177
if rows:
8278
op.bulk_insert(rp_table, rows)

src/api/models.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,33 @@
11
from typing import Optional
22

33
from fastapi import Depends
4-
from pydantic import BaseModel
54
from fastapi.responses import JSONResponse
6-
from utils.logging_config import get_logger
5+
from pydantic import BaseModel
6+
77
from config.settings import get_openrag_config
88
from dependencies import get_models_service, require_permission
99
from session_manager import User
10+
from utils.logging_config import get_logger
1011

1112
logger = get_logger(__name__)
1213

1314

1415
class OpenAIBody(BaseModel):
15-
api_key: Optional[str] = None
16+
api_key: str | None = None
1617

1718

1819
class AnthropicBody(BaseModel):
19-
api_key: Optional[str] = None
20+
api_key: str | None = None
2021

2122

2223
class IBMBody(BaseModel):
23-
api_key: Optional[str] = None
24-
endpoint: Optional[str] = None
25-
project_id: Optional[str] = None
24+
api_key: str | None = None
25+
endpoint: str | None = None
26+
project_id: str | None = None
2627

2728

2829
async def get_openai_models(
29-
body: Optional[OpenAIBody] = None,
30+
body: OpenAIBody | None = None,
3031
models_service=Depends(get_models_service),
3132
user: User = Depends(require_permission("providers:read")),
3233
):
@@ -50,11 +51,13 @@ async def get_openai_models(
5051
return JSONResponse(models)
5152
except Exception as e:
5253
logger.error(f"Failed to get OpenAI models: {str(e)}")
53-
return JSONResponse({"error": f"Failed to retrieve OpenAI models: {str(e)}"}, status_code=500)
54+
return JSONResponse(
55+
{"error": f"Failed to retrieve OpenAI models: {str(e)}"}, status_code=500
56+
)
5457

5558

5659
async def get_anthropic_models(
57-
body: Optional[AnthropicBody] = None,
60+
body: AnthropicBody | None = None,
5861
models_service=Depends(get_models_service),
5962
user: User = Depends(require_permission("providers:read")),
6063
):
@@ -70,19 +73,23 @@ async def get_anthropic_models(
7073

7174
if not api_key:
7275
return JSONResponse(
73-
{"error": "Anthropic API key is required either in request body or in configuration"},
76+
{
77+
"error": "Anthropic API key is required either in request body or in configuration"
78+
},
7479
status_code=400,
7580
)
7681

7782
models = await models_service.get_anthropic_models(api_key=api_key)
7883
return JSONResponse(models)
7984
except Exception as e:
8085
logger.error(f"Failed to get Anthropic models: {str(e)}")
81-
return JSONResponse({"error": f"Failed to retrieve Anthropic models: {str(e)}"}, status_code=500)
86+
return JSONResponse(
87+
{"error": f"Failed to retrieve Anthropic models: {str(e)}"}, status_code=500
88+
)
8289

8390

8491
async def get_ollama_models(
85-
endpoint: Optional[str] = None,
92+
endpoint: str | None = None,
8693
models_service=Depends(get_models_service),
8794
user: User = Depends(require_permission("providers:read")),
8895
):
@@ -105,11 +112,13 @@ async def get_ollama_models(
105112
return JSONResponse(models)
106113
except Exception as e:
107114
logger.error(f"Failed to get Ollama models: {str(e)}")
108-
return JSONResponse({"error": f"Failed to retrieve Ollama models: {str(e)}"}, status_code=500)
115+
return JSONResponse(
116+
{"error": f"Failed to retrieve Ollama models: {str(e)}"}, status_code=500
117+
)
109118

110119

111120
async def get_ibm_models(
112-
body: Optional[IBMBody] = None,
121+
body: IBMBody | None = None,
113122
models_service=Depends(get_models_service),
114123
user: User = Depends(require_permission("providers:read")),
115124
):

src/api/settings/endpoints.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,9 @@ async def get_settings(
211211
endpoint=openrag_config.providers.ollama.endpoint or None,
212212
configured=openrag_config.providers.ollama.configured,
213213
),
214-
) if show_providers else None,
214+
)
215+
if show_providers
216+
else None,
215217
knowledge=KnowledgeConfig(
216218
embedding_model=knowledge_config.embedding_model,
217219
embedding_provider=knowledge_config.embedding_provider,

src/db/seed.py

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
("providers", "write", "Write workspace provider configuration"),
2929
("providers", "override:self", "Override providers in own user preferences"),
3030
("opensearch", "admin", "Administer OpenSearch security"),
31-
3231
# Users / RBAC
3332
("users", "list", "List users"),
3433
("users", "read", "Read user profile"),
@@ -40,15 +39,13 @@
4039
("roles", "edit", "Edit custom roles"),
4140
("roles", "delete", "Delete custom roles"),
4241
("audit", "read", "Read audit log"),
43-
4442
# Connectors
4543
("connectors", "list:own", "List own connectors"),
4644
("connectors", "list:all", "List all connectors in the workspace"),
4745
("connectors", "create", "Create connectors"),
4846
("connectors", "delete:own", "Delete own connectors"),
4947
("connectors", "delete:any", "Delete any connector"),
5048
("connectors", "use", "Use connector OAuth and browse"),
51-
5249
# Knowledge
5350
("knowledge", "upload", "Upload documents"),
5451
("knowledge", "delete:own", "Delete own documents"),
@@ -59,21 +56,18 @@
5956
("kf", "edit:own", "Edit own knowledge filters"),
6057
("kf", "edit:any", "Edit any knowledge filter"),
6158
("kf", "share", "Share knowledge filters"),
62-
6359
# Chat / search
6460
("chat", "use", "Use chat"),
6561
("search", "use", "Use search"),
6662
("conversations", "read:own", "Read own conversations"),
6763
("conversations", "read:all", "Read all conversations"),
6864
("conversations", "delete:own", "Delete own conversations"),
6965
("conversations", "delete:any", "Delete any conversation"),
70-
7166
# Flows / agent
7267
("flows", "read", "Read flows"),
7368
("flows", "edit", "Edit flows"),
7469
("agent", "prompt:override", "Override agent system prompt for self"),
7570
("agent", "prompt:global", "Edit global agent system prompt"),
76-
7771
# API keys
7872
("apikeys", "create:self", "Create own API keys"),
7973
("apikeys", "revoke:self", "Revoke own API keys"),
@@ -93,7 +87,11 @@ def permission_name(resource: str, action: str) -> str:
9387
BUILTIN_ROLES: list[tuple[str, str, str]] = [
9488
# (id, name, description)
9589
("role-admin", "admin", "Full control over infra, users, and all data."),
96-
("role-developer", "developer", "Manages own connectors, flows, and ingestion. No infra writes."),
90+
(
91+
"role-developer",
92+
"developer",
93+
"Manages own connectors, flows, and ingestion. No infra writes.",
94+
),
9795
("role-user", "user", "Default end-user. Chat, search, and own connectors."),
9896
("role-viewer", "viewer", "Read-only chat and search."),
9997
]
@@ -106,35 +104,56 @@ def _admin_perms() -> set[str]:
106104
def _developer_perms() -> set[str]:
107105
return {
108106
# NOTE: providers are admin-only — no provider perms for developers.
109-
"connectors:list:own", "connectors:create", "connectors:delete:own", "connectors:use",
110-
"knowledge:upload", "knowledge:delete:own", "knowledge:read:own",
111-
"kf:create", "kf:edit:own",
112-
"chat:use", "search:use",
113-
"conversations:read:own", "conversations:delete:own",
114-
"flows:read", "flows:edit",
107+
"connectors:list:own",
108+
"connectors:create",
109+
"connectors:delete:own",
110+
"connectors:use",
111+
"knowledge:upload",
112+
"knowledge:delete:own",
113+
"knowledge:read:own",
114+
"kf:create",
115+
"kf:edit:own",
116+
"chat:use",
117+
"search:use",
118+
"conversations:read:own",
119+
"conversations:delete:own",
120+
"flows:read",
121+
"flows:edit",
115122
"agent:prompt:override",
116-
"apikeys:create:self", "apikeys:revoke:self",
123+
"apikeys:create:self",
124+
"apikeys:revoke:self",
117125
}
118126

119127

120128
def _user_perms() -> set[str]:
121129
return {
122130
# NOTE: providers are admin-only — no provider perms for users.
123-
"connectors:list:own", "connectors:create", "connectors:delete:own", "connectors:use",
124-
"knowledge:upload", "knowledge:delete:own", "knowledge:read:own",
125-
"kf:create", "kf:edit:own",
126-
"chat:use", "search:use",
127-
"conversations:read:own", "conversations:delete:own",
131+
"connectors:list:own",
132+
"connectors:create",
133+
"connectors:delete:own",
134+
"connectors:use",
135+
"knowledge:upload",
136+
"knowledge:delete:own",
137+
"knowledge:read:own",
138+
"kf:create",
139+
"kf:edit:own",
140+
"chat:use",
141+
"search:use",
142+
"conversations:read:own",
143+
"conversations:delete:own",
128144
"flows:read",
129145
"agent:prompt:override",
130-
"apikeys:create:self", "apikeys:revoke:self",
146+
"apikeys:create:self",
147+
"apikeys:revoke:self",
131148
}
132149

133150

134151
def _viewer_perms() -> set[str]:
135152
return {
136-
"chat:use", "search:use",
137-
"conversations:read:own", "conversations:delete:own",
153+
"chat:use",
154+
"search:use",
155+
"conversations:read:own",
156+
"conversations:delete:own",
138157
"flows:read",
139158
}
140159

@@ -151,6 +170,7 @@ def _viewer_perms() -> set[str]:
151170
# Idempotent seeder
152171
# ---------------------------------------------------------------------------
153172

173+
154174
async def seed_roles_and_permissions(session: AsyncSession) -> None:
155175
"""Insert any missing roles/permissions/role_permissions. Safe to call repeatedly.
156176
@@ -160,8 +180,7 @@ async def seed_roles_and_permissions(session: AsyncSession) -> None:
160180

161181
# Permissions
162182
existing_perms = {
163-
p.name: p
164-
for p in (await session.execute(select(Permission))).scalars().all()
183+
p.name: p for p in (await session.execute(select(Permission))).scalars().all()
165184
}
166185
perm_id_by_name: dict[str, str] = {p.name: p.id for p in existing_perms.values()}
167186

@@ -183,10 +202,7 @@ async def seed_roles_and_permissions(session: AsyncSession) -> None:
183202
await session.flush()
184203

185204
# Roles
186-
existing_roles = {
187-
r.name: r
188-
for r in (await session.execute(select(Role))).scalars().all()
189-
}
205+
existing_roles = {r.name: r for r in (await session.execute(select(Role))).scalars().all()}
190206
for role_id, role_name, description in BUILTIN_ROLES:
191207
if role_name in existing_roles:
192208
continue
@@ -201,10 +217,7 @@ async def seed_roles_and_permissions(session: AsyncSession) -> None:
201217
await session.flush()
202218

203219
# Re-fetch so we have IDs for the just-inserted rows.
204-
role_id_by_name = {
205-
r.name: r.id
206-
for r in (await session.execute(select(Role))).scalars().all()
207-
}
220+
role_id_by_name = {r.name: r.id for r in (await session.execute(select(Role))).scalars().all()}
208221

209222
# Role permissions (additive only — never remove perms set by an admin via UI)
210223
existing_rp = set(

0 commit comments

Comments
 (0)