Skip to content

Commit fab8213

Browse files
chore: ruff linter and formatter (#173)
* add ruff linter and formater
1 parent db4f92e commit fab8213

37 files changed

+490
-267
lines changed

.github/workflows/evaluate-backend.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ jobs:
2222
run: |
2323
python -m pip install --upgrade pip
2424
pip install -r requirements.txt
25+
pip install ruff
2526
27+
- name: Run Ruff
28+
run: ruff check --output-format=github .
29+
2630
- name: Test with pytest
2731
run: |
2832
pip install pytest pytest-cov

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ env/
88
.DS_Store
99
.pytest_cache/
1010
.vscode
11-
model_files/
11+
model_files/
12+
.ruff_cache/
13+
.idea/

.pre-commit-config.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
repos:
3+
- repo: https://github.com/astral-sh/ruff-pre-commit
4+
# Ruff version.
5+
rev: v0.9.2
6+
hooks:
7+
# Run the linter.
8+
- id: ruff
9+
# Run the formatter.
10+
- id: ruff-format

app/admin/bots/routes.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from fastapi import APIRouter, HTTPException, UploadFile, File
1+
from fastapi import APIRouter, UploadFile, File
22
from fastapi.responses import Response
33
from typing import Dict, Any
44
import json
@@ -7,20 +7,23 @@
77

88
router = APIRouter(prefix="/bots")
99

10+
1011
@router.put("/{name}/config")
1112
async def set_config(name: str, config: Dict[str, Any]):
1213
"""
1314
Update bot config
1415
"""
1516
return await store.update_config(name, config)
1617

18+
1719
@router.get("/{name}/config")
1820
async def get_config(name: str):
1921
"""
2022
Get bot config
2123
"""
2224
return await store.get_config(name)
2325

26+
2427
@router.get("/{name}/export")
2528
async def export_bot(name: str):
2629
"""
@@ -29,10 +32,11 @@ async def export_bot(name: str):
2932
data = await store.export_bot(name)
3033
return Response(
3134
content=json.dumps(data),
32-
media_type='application/json',
33-
headers={'Content-Disposition': 'attachment;filename=chatbot_data.json'}
35+
media_type="application/json",
36+
headers={"Content-Disposition": "attachment;filename=chatbot_data.json"},
3437
)
3538

39+
3640
@router.post("/{name}/import")
3741
async def import_bot(name: str, file: UploadFile = File(...)):
3842
"""
@@ -42,4 +46,4 @@ async def import_bot(name: str, file: UploadFile = File(...)):
4246
content = await file.read()
4347
json_data = json.loads(content)
4448

45-
return await store.import_bot(name, json_data)
49+
return await store.import_bot(name, json_data)

app/admin/bots/schemas.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
from typing import Dict, Any
33
from app.database import ObjectIdField
44

5+
56
class Bot(BaseModel):
67
"""Base schema for bot"""
8+
79
id: ObjectIdField = Field(validation_alias="_id", default=None)
810
name: str
911
config: Dict[str, Any] = {}
1012

1113
class Config:
12-
arbitrary_types_allowed=True
14+
arbitrary_types_allowed = True

app/admin/bots/store.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,40 @@
66

77
bot_collection = database.get_collection("bot")
88

9+
910
async def add_bot(data: dict):
1011
await bot_collection.insert_one(data)
1112

13+
1214
async def get_bot(name: str) -> Bot:
1315
bot = await bot_collection.find_one({"name": name})
1416
return Bot.model_validate(bot)
1517

18+
1619
async def get_config(name: str) -> Dict:
1720
bot = await get_bot(name)
1821
return bot.config
1922

23+
2024
async def update_config(name: str, entity_data: dict):
2125
await bot_collection.update_one({"name": name}, {"$set": {"config": entity_data}})
2226

27+
2328
async def export_bot(name) -> Dict:
2429
# Get all intents and entities
2530
intents = await list_intents()
2631
entities = await list_entities()
2732

2833
entities = [entity.model_dump(exclude={"id"}) for entity in entities]
29-
intents = [intent.model_dump(exclude={"id": True, "parameters": {'__all__': {"id"}}}) for intent in intents]
34+
intents = [
35+
intent.model_dump(exclude={"id": True, "parameters": {"__all__": {"id"}}})
36+
for intent in intents
37+
]
3038

31-
export_data = {
32-
"intents": intents,
33-
"entities": entities
34-
}
39+
export_data = {"intents": intents, "entities": entities}
3540
return export_data
3641

42+
3743
async def import_bot(name: str, data: Dict):
3844
intents = data.get("intents", [])
3945
entities = data.get("entities", [])
@@ -43,6 +49,5 @@ async def import_bot(name: str, data: Dict):
4349

4450
return {
4551
"num_intents_created": len(created_intents),
46-
"num_entities_created": len(created_entities)
52+
"num_entities_created": len(created_entities),
4753
}
48-

app/admin/entities/routes.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from app.admin.entities import store
33
from app.admin.entities.schemas import Entity
44

5-
router = APIRouter(prefix='/entities')
5+
router = APIRouter(prefix="/entities")
6+
67

78
@router.post("/")
89
async def create_entity(entity: Entity):
@@ -11,25 +12,29 @@ async def create_entity(entity: Entity):
1112
entity = await store.add_entity(entity_dict)
1213
return entity
1314

15+
1416
@router.get("/")
1517
async def read_entities():
1618
"""Get all entities"""
17-
return await store.list_entities()
19+
return await store.list_entities()
20+
1821

1922
@router.get("/{entity_id}")
2023
async def read_entity(entity_id: str):
2124
"""Get a specific entity by ID"""
2225
return await store.get_entity(entity_id)
2326

27+
2428
@router.put("/{entity_id}")
2529
async def update_entity(entity_id: str, entity: Entity):
2630
"""Update an entity"""
2731
entity_dict = entity.model_dump(exclude={"id"})
2832
await store.edit_entity(entity_id, entity_dict)
2933
return {"status": "success"}
3034

35+
3136
@router.delete("/{entity_id}")
3237
async def delete_entity(entity_id: str):
3338
"""Delete an entity"""
3439
await store.delete_entity(entity_id)
35-
return {"status": "success"}
40+
return {"status": "success"}

app/admin/entities/schemas.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22
from typing import List
33
from app.database import ObjectIdField
44

5+
56
class EntityValue(BaseModel):
67
"""Schema for entity value"""
8+
79
value: str
810
synonyms: List[str] = []
911

12+
1013
class Entity(BaseModel):
1114
"""Schema for entity"""
15+
1216
id: ObjectIdField = Field(validation_alias="_id", default=None)
1317
name: str
1418
entity_values: List[EntityValue] = []
1519

1620
class Config:
17-
arbitrary_types_allowed=True
21+
arbitrary_types_allowed = True

app/admin/entities/store.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,34 @@
77

88
entity_collection = database.get_collection("entity")
99

10+
1011
async def add_entity(entity_data: dict) -> Entity:
1112
result = await entity_collection.insert_one(entity_data)
1213
return await get_entity(str(result.inserted_id))
1314

15+
1416
async def get_entity(id: str) -> Entity:
1517
entity = await entity_collection.find_one({"_id": ObjectId(id)})
1618
return Entity.model_validate(entity)
1719

20+
1821
async def list_entities() -> List[Entity]:
1922
entities = await entity_collection.find().to_list()
2023
return [Entity.model_validate(entity) for entity in entities]
2124

25+
2226
async def edit_entity(entity_id: str, entity_data: dict):
23-
await entity_collection.update_one({"_id": ObjectId(entity_id)}, {"$set": entity_data})
27+
await entity_collection.update_one(
28+
{"_id": ObjectId(entity_id)}, {"$set": entity_data}
29+
)
30+
2431

2532
async def delete_entity(entity_id: str):
2633
await entity_collection.delete_one({"_id": ObjectId(entity_id)})
2734

35+
2836
async def list_synonyms():
29-
""" list all synonyms across the entities"""
37+
"""list all synonyms across the entities"""
3038
synonyms = {}
3139

3240
entities = await list_entities()
@@ -36,14 +44,13 @@ async def list_synonyms():
3644
synonyms[synonym] = value.value
3745
return synonyms
3846

47+
3948
async def bulk_import_entities(entities: List[Dict]) -> List[str]:
4049
created_entities = []
4150
if entities:
4251
for entity in entities:
4352
result = await entity_collection.update_one(
44-
{"name": entity.get("name")},
45-
{"$set": entity},
46-
upsert=True
53+
{"name": entity.get("name")}, {"$set": entity}, upsert=True
4754
)
4855
if result.upserted_id:
4956
created_entities.append(str(result.upserted_id))

app/admin/intents/routes.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from app.admin.intents import store
33
from app.admin.intents.schemas import Intent
44

5-
router = APIRouter(prefix='/intents')
5+
router = APIRouter(prefix="/intents")
6+
67

78
@router.post("/")
89
async def create_intent(intent: Intent):
@@ -11,26 +12,30 @@ async def create_intent(intent: Intent):
1112
intent = await store.add_intent(intent_dict)
1213
return intent
1314

15+
1416
@router.get("/")
1517
async def read_intents():
1618
"""Get all intents"""
1719
return await store.list_intents()
1820

21+
1922
@router.get("/{intent_id}")
2023
async def read_intent(intent_id: str):
2124
"""Get a specific intent by ID"""
2225
intent = await store.get_intent(intent_id)
2326
return intent
2427

28+
2529
@router.put("/{intent_id}")
2630
async def update_intent(intent_id: str, intent: Intent):
2731
"""Update an intent"""
2832
intent_dict = intent.model_dump(exclude={"id"})
2933
await store.edit_intent(intent_id, intent_dict)
3034
return {"status": "success"}
3135

36+
3237
@router.delete("/{intent_id}")
3338
async def delete_intent(intent_id: str):
3439
"""Delete an intent"""
3540
await store.delete_intent(intent_id)
36-
return {"status": "success"}
41+
return {"status": "success"}

0 commit comments

Comments
 (0)