Chuẩn hoá dữ liệu mặt hàng bằng mô hình Pydantic
Mọi API đều có một điểm vào duy nhất cho dữ liệu thô: mô hình của Pydantic. Nó kiểm tra
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: python-basics, python-dictionaries.
Nội dung đề bài
Mô tả bài toán
Mọi API đều có một điểm vào duy nhất cho dữ liệu thô: mô hình của Pydantic. Nó kiểm tra kiểu, bắt buộc trường cần thiết, loại bỏ trường lạ và trả về đối tượng đã sạch. Nhờ vậy phần xử lý phía sau không phải tự kiểm tra lại từng khoá.
Yêu cầu
- Khai báo mô hình ItemPayload kế thừa BaseModel với ba trường:
- name: chuỗi, bắt buộc.
- quantity: số nguyên, bắt buộc.
- tag: chuỗi, mặc định "general".
- Thêm luật kiểm tra cho name: cắt khoảng trắng hai đầu, đưa về chữ thường; nếu sau
khi cắt mà chuỗi rỗng thì báo lỗi.
- Thêm luật kiểm tra cho quantity: nhỏ hơn 1 là không hợp lệ.
- Viết hàm validate_item(payload) nhận dict dữ liệu thô, dựng ItemPayload từ dict
đó và trả về dict đã chuẩn hoá {"name": ..., "quantity": ..., "tag": ...}.
- Nếu dữ liệu không hợp lệ, hàm phải ném ValueError (không để lộ
pydantic.ValidationError ra ngoài).
Quy ước nộp bài
Nộp mô hình ItemPayload và hàm validate_item trong solution.py. Hệ thống gọi hàm trực tiếp theo tên đối số, so dict trả về với kết quả soạn tay và kiểm tra ngoại lệ ValueError; không đọc dữ liệu từ stdin và không in ra stdout.
Input
- payload: dict dữ liệu thô, có thể thiếu khoá, thừa khoá, sai kiểu chữ/số hoặc vi
phạm các luật kiểm tra ở trên.
Output
Dict có đúng ba khoá name, quantity, tag: name đã cắt khoảng trắng và về chữ thường, quantity là số nguyên, tag lấy từ dữ liệu hoặc bằng "general" nếu thiếu.
Ràng buộc
- name và quantity là hai trường bắt buộc; thiếu một trong hai phải báo lỗi.
- Trường lạ trong payload bị bỏ qua, không xuất hiện trong kết quả.
- Chuỗi số như "4" vẫn được Pydantic chuyển thành số nguyên 4.
- Chỉ trả về dict; không trả về đối tượng ItemPayload.
- Hàm không được ném pydantic.ValidationError ra ngoài.
Ví dụ 1
Input
validate_item(payload={"name": " Banana ", "quantity": 3})
Output
{"name": "banana", "quantity": 3, "tag": "general"}
Ví dụ 2
Input
validate_item(payload={"name": "Tea", "quantity": 0})
Output
raises ValueError
Giải thích
Với payload = {"name": " Banana ", "quantity": 3}: tên được cắt và đưa về chữ thường thành "banana", không có khoá tag nên lấy mặc định, kết quả là {"name": "banana", "quantity": 3, "tag": "general"}. Với payload có "quantity": 0 thì hàm ném ValueError.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
