Files
test/app/schema/__pycache__/advanced_schema.cpython-313.pyc
T

58 lines
6.5 KiB
Plaintext
Raw Normal View History

2026-09-21 19:03:31 +08:00
ó
c‡ªjoãó•SrSSKJr SSKJrJr SSKJrJrJ r J
r
SSK J r "SS\5r
\
R5 "SS \5r"S
S \5r"S S
\5r"SS\5r"SS\5r"SS\5rg)u通用高级筛选器出入å�‚(需求 2.7.1)。
请求体形如:
{
"model": "student",
"rules": [
{"field": "age", "operator": ">", "value": 25},
{"field": "gender", "operator": "=", "value": "ç”·"},
{"logic": "OR", "sub_rules": [
{"field": "salary", "operator": ">=", "value": 15000},
{"field": "class_name", "operator": "like", "value": "Java"}
]}
],
"order_by": "age",
"order": "desc",
"page": 1,
"page_size": 10
}
é)Ú annotations)ÚAnyÚLiteral)Ú BaseModelÚFieldÚfield_validatorÚmodel_validator)Ú SortOrdercóЕ\rSrSr%Sr\"SSS9rS\S'\"SSS9rS\S '\"SS
S9r S \S '\"SS
S9r
S\S'\"SSS9r S\S'\ "SS9S5r
\"S 5\S55rSrg)Ú
FilterRuleéu2一æ�¡è§„则 = 一个æ�¡ä»¶ 或 一组å­�规则。Nu#字段å��,与 sub_rules 二选一©Ú descriptionú
str | NoneÚfielduIæ“�作符 > < = != >= <= like in not_like not_in between is_null not_nullÚoperatoru4比较值;in/not_in 传数组,between ä¼  [a, b]rÚvalueu#å­�规则之间的逻辑,AND / ORz(Literal['AND', 'OR', 'and', 'or'] | NoneÚlogicu嵌套å­�规则,å�¯å¤šå±‚zlist['FilterRule'] | NoneÚ sub_rulesÚafter)ÚmodecóÄ•[UR5nU(aURcSUlU$UR(aUR(d [ S5eU$)NÚANDu1å�¶å­�规则必须å�Œæ—¶æ��ä¾› field å’Œ operator)ÚboolrrrrÚ
ValueError)ÚselfÚis_groups Úapp\schema\advanced_schema.pyÚ_checkÚFilterRule._check,sG€ä˜Ÿ™Ó'ˆÞ Ø�z‰zÑ!Ø"�”
؈KØ�z�z §§ÜÐPÓQÐ Q؈ ócól•[U[5(aUR5R5$U$)N)Ú
isinstanceÚstrÚstripÚlower)ÚclsÚvs rÚ_lowerÚFilterRule._lower7s(€ô%/¨q´#×$6Ñ$6ˆq�w‰w‹y�‰Ó Ð=¸AÐ=r!)r)Ú__name__Ú
__module__Ú __qualname__Ú__firstlineno__Ú__doc__rrÚ__annotations__rrrrr rrÚ classmethodr)Ú__static_attributes__©r!rr r s ‡Ù<á˜dÐ0UÑV€Eˆ:ÓVÙ Ø Ø_ñ€Hˆjóñ�tÐ)_Ñ`€Eˆ3Ó`á6;¸DÐNsÑ6t€EÐ 3ÓtÙ+0°ÐC`Ñ+a€IÐ(Óaá˜'Ñ"ñó#ðñ�ZÓ Øñ>óó!ó>r!r cóì•\rSrSr%\"SSS9rS\S'\"\SS9rS \S
'\"S S S9r S
\S'\"\
RSS9r S\S'\"SSS9r
S\S'\"SSSS9rS\S'\"S SS9rS\S'\"SSS9rS\S 'S!rg )"Ú QueryRequesté@ÚstudentuG目标模型:student / class / teacher / score / employment / advisorrr$Úmodelõ筛选规则树©Údefault_factoryrúlist[FilterRule]ÚrulesNu*排åº�字段(å�Œæ ·å�—白å��å�•é™�制)rÚorder_byu排åº�æ–¹å�‘ asc / descr
Úorderé)ÚgeÚintÚpageé
éÈ©rAÚleÚ page_sizeu3指定返回字段,ä¸�传返回全部å�¯è¯»å­—段zlist[str] | NoneÚfieldsTu9是å�¦è¿”回规则解æž�å�Žçš„说明,方便调试规则rÚ with_explainr3)r+r,r-r.rr8r0Úlistr=r>r
ÚASCr?rCrHrIrJr2r3r!rr5r5@s—‡Ù�yÐ.wÑx€Eˆ3ÓxÙ#°DÐFWÑX€EÐ ÓXÙ  Ð3_Ñ`€HˆjÓ`Ù˜YŸ]™]Ð8QÑR€Eˆ9ÓRÙ�a˜A‘€Dˆ#ÓÙ˜2 !¨Ñ,€IˆsÓ,Ù$ TÐ7lÑm€FÐ ÓmÙ˜tÐ1lÑm€L�$Ömr!r5có^•\rSrSr%\"SSS9rS\S'\"SSS9rS \S
'\"SS S9rS \S 'S
r g)Ú
MetricSpecéK.u è�šå�ˆå‡½æ•°rz>Literal['count', 'count_distinct', 'avg', 'sum', 'max', 'min']ÚfuncNu!è�šå�ˆå­—段;count æ—¶å�¯çœ�ç•¥rru 结果列å��Úaliasr3)
r+r,r-r.rrPr0rrQr2r3r!rrNrNKs9‡ÙKPÐQTÐbpÑKq€DÐ
HÓqÙ˜dÐ0SÑT€Eˆ:ÓTÙ˜d°Ñ?€Eˆ:Ö?r!rNcóä•\rSrSr%\"SSS9rS\S'\"\SS9rS \S
'\"SS S S
9r S\S'\"\SS9r
S\S'\"\SS9r S\S'\"SSS9r S\S'\
RrS\S'\"SS SS9rS\S'S rg)!ÚAggregationParamséQ.u 目标模型rr$r8u%分组字段,å�¯ä¸ºç©º=整体è�šå�ˆr:ú list[str]Úgroup_byr@u è�šå�ˆæŒ‡æ ‡)Ú
min_lengthrzlist[MetricSpec]Úmetricsr9r<r=u$对è�šå�ˆç»“果的过滤(HAVING)ÚhavingNu按结果列å��排åº�rr>r
r?é2iôrFrBÚlimitr3)r+r,r-r.rr8r0rKrVrXr=rYr>r
ÚDESCr?r[r2r3r!rrSrSQs’‡Ù�s¨Ñ7€Eˆ3Ó7Ù°ÐBiÑj€HˆiÓjÙ % c°aÀ^Ñ T€GÐ
ÓTÙ#°DÐFWÑX€EÐ ÓXÙ$°TÐGmÑn€FÐ ÓnÙ  Ð3JÑK€HˆjÓKØ —~‘~€Eˆ9Ó%Ù�r˜a CÑ(€Eˆ3Ö(r!rScóh•\rSrSr%\"\S9rS\S'\"\S9rS\S'Sr S\S '\"S
S S 9r