任務是為兩個相關欄位制作驗證器。如果MCC不為空,那么您需要檢查OUTSIDE是否在型別欄位中傳遞。反之亦然。如果MCC為空,INSIDE則應在型別欄位中傳遞。
我寫了這段代碼,但它不起作用。有人可以告訴我最好的方法嗎
import json
from pydantic.dataclasses import dataclass, ValidationError
from pydantic import root_validator, validator
from typing import Union, List, Literal
@dataclass
class DataInclude:
type: Literal['INSIDE', 'OUTSIDE']
accountID: Union[None, int]
date: int
tranDate: int
operationType: Literal['CREDIT', 'DEBIT', 'OPEN', 'DV']
paymentDetailType: Literal[
'BETWEEN_THEIR', 'INSIDE_BANK', 'EXTERNAL_INDIVIDUAL', 'EXTERNAL_ENTITY', 'OTHER_BANK',
'HOUSING_AND_COMMUNAL_SERVICE', 'MOBILE', 'INTERNET', 'TRANSPORT', 'TAX_AND_STATE_SERVICE',
'NOT_FINANCE', 'CONTACT_ADDRESSLESS', 'DIRECT', 'SFP', 'OUTSIDE_CASH', 'INSIDE_OTHER',
'OUTSIDE_OTHER', 'C2B_PAYMENT', 'INSIDE_DEPOSIT']
amount: Union[int, float, None]
documentAmount: Union[int, float, None]
comment: str
documentID: int | None
accountNumber: str
currencyCodeNumeric: int
merchantName: str | None
merchantNameRus: str | None
groupName: str
md5hash: str
svgImage: str | None
fastPayment: str | None
terminalCode: str | None
deviceCode: str | None
country: str | None
city: str | None
operationId: str | None
isCancellation: bool | None # BOOL!
cardTranNumber: str | None
opCode: int | None
MCC: int | None
@validator('type', 'MCC')
def check_passwords_match(cls, values):
type_operation, mcc = values['type'], values['MCC']
if mcc is not None:
if type_operation != "OUTSIDE":
raise ValueError('MCC NOT EQUAL TYPE OPERATION')
return values
@dataclass
class MessageResponse:
statusCode: int
errorMessage: Union[None, str]
data: List[DataInclude]
@staticmethod
def validation_body(data):
try:
data_new = json.loads(data)
MessageResponse(**data_new)
return True
except ValidationError as e:
raise e
我嘗試了各種選擇。我已閱讀檔案,但找不到問題的答案。我使用 pydantic 進行自動化 api 測驗
uj5u.com熱心網友回復:
我想你正在尋找這個,驗證器MCC將不得不處理你的兩個案例。
@validator("MCC")
def check_passwords_match(cls, v, values):
if "type" not in values:
raise ValueError("TYPE VALIDATION FAILED")
if (v is not None and values["type"] != "OUTSIDE") or (
v is None and values["type"] != "INSIDE"
):
raise ValueError("MCC NOT EQUAL TYPE OPERATION")
return v
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/536916.html
