# parameters
serve pydantic_v2.BaseModel
service DefaultService: get_codes, get_file, get_item, get_menu, get_note, get_pair, get_ratios, get_serving, get_sizes, repeat, search
service DefaultService without its methods: TypeError
app default
> GET /search
< 422 application/json [{"type": "missing", "loc": ["cookie", "session"]}]
> GET /search
< 422 application/json [{"type": "string_too_short", "loc": ["cookie", "session"]}]
> GET /search
  search(session='abc', code='AB', filter=None, ids=None, X_Ids=[3], blob=None, note=None)
< 204 - b''
> GET /search
  search(session='a%20b%2Bc', code='AB', filter=None, ids=None, X_Ids=[3], blob=None, note=None)
< 204 - b''
> GET /search
  search(session='50%off', code='AB', filter=None, ids=None, X_Ids=[3], blob=None, note=None)
< 204 - b''
> GET /search
  search(session='a b', code='AB', filter=None, ids=None, X_Ids=[3], blob=None, note=None)
< 204 - b''
> GET /search
  search(session='two', code='AB', filter=None, ids=None, X_Ids=[3], blob=None, note=None)
< 204 - b''
> GET /search
< 422 application/json [{"type": "string_too_short", "loc": ["cookie", "session"]}]
> GET /search?code=XY&filter%5Bname%5D=n&ids=1,2&blob=%7B%22a%22%3A1%7D&note=hi
< 422 application/json [{"type": "missing", "loc": ["query", "filter", "id"]}]
> GET /search?code=ab&ids=1,x&blob=%7B%22b%22%3A1%7D
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["query", "code"]}, {"type": "int_parsing", "loc": ["query", "ids", 1]}, {"type": "extra_forbidden", "loc": ["query", "blob", "b"]}]
> GET /search?blob=%7B
< 422 application/json [{"type": "json_invalid", "loc": ["query", "blob"]}]
> GET /search?blob=%7B%22a%22%3A1%2C%22a%22%3A2%7D
  search(session='abc', code='AB', filter=None, ids=None, X_Ids=[3], blob=Blob(a=2), note=None)
< 204 - b''
> GET /search?ids=1,%zz
< 400 application/json {"detail":"Invalid request"}
> GET /search?code=A&code=B
  search(session='abc', code='B', filter=None, ids=None, X_Ids=[3], blob=None, note=None)
< 204 - b''
> GET /search?filter%5Bname%5D=n&filter%5Bid%5D=1
  search(session='abc', code='AB', filter=Filter(id=1, name='n'), ids=None, X_Ids=[3], blob=None, note=None)
< 204 - b''
> GET /ratios?ratios=1&ratios=2.5
  get_ratios(ratios=[1.0, 2.5], limits=[1, 2])
< 204 - b''
> GET /ratios?ratios=nan
  get_ratios(ratios=[nan], limits=[1, 2])
< 204 - b''
> GET /ratios?ratios=inf
  get_ratios(ratios=[inf], limits=[1, 2])
< 204 - b''
> GET /ratios?ratios=1&limits=3&limits=4
  get_ratios(ratios=[1.0], limits=[3, 4])
< 204 - b''
> GET /ratios?ratios=1&limits=0
< 422 application/json [{"type": "greater_than_equal", "loc": ["query", "limits", 0]}]
> GET /sizes
  get_sizes(size=10, words=['a', 'b'], one='x', least=7, cap=None)
< 204 - b''
> GET /sizes?size=3&words=x&words=y
  get_sizes(size=3, words=['x', 'y'], one='x', least=7, cap=None)
< 204 - b''
> GET /sizes?cap=4
  get_sizes(size=10, words=['a', 'b'], one='x', least=7, cap=4)
< 204 - b''
> GET /sizes?size=0
< 422 application/json [{"type": "greater_than_equal", "loc": ["query", "size"]}]
> GET /codes
< 422 application/json [{"type": "missing", "loc": ["header", "X-Codes"]}]
> GET /codes
  get_codes(X_Codes=[1, 2])
< 204 - b''
> GET /repeat/1/again/1
  repeat(id=1)
< 204 - b''
> GET /repeat/1/again/01
< 422 application/json [{"type": "value_error", "loc": ["path", "id"]}]
> GET /repeat/1/again/2
< 422 application/json [{"type": "value_error", "loc": ["path", "id"]}]
> GET /repeat/x/again/x
< 422 application/json [{"type": "int_parsing", "loc": ["path", "id"]}]
> GET /repeat/1/again/1 (without raw_path)
  repeat(id=1)
< 204 - b''
> GET /repeat/1/again/1 (raw_path /elsewhere)
< 400 application/json {"detail":"Invalid request"}
> GET /notes/7
  get_note(note_id=7)
< 204 - b''
> GET /notes/seven
< 422 application/json [{"type": "int_parsing", "loc": ["path", "note.id"]}]
> GET /files/a.txt
  get_file(file_name='a.txt')
< 204 - b''
> GET /files/A.txt
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["path", "file.name"]}]
> GET /files/a%2Fb.txt
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["path", "file.name"]}]
> GET /files/a%2fb.txt
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["path", "file.name"]}]
> GET /files/a%2Fb.txt (without raw_path)
< 404 application/json {"detail":"Not Found"}
> GET /files/a%2Fb.txt/
< 404 application/json {"detail":"Not Found"}
> GET /files/a.txt (raw_path /files/a%2Fb.txt)
  get_file(file_name='a.txt')
< 204 - b''
> GET /notes/7%2F8
< 422 application/json [{"type": "int_parsing", "loc": ["path", "note.id"]}]
> GET /repeat/1%2F2/again/1%2F2
< 422 application/json [{"type": "int_parsing", "loc": ["path", "id"]}]
> GET /men%C3%BC/tea
  get_menu(item='tea')
< 204 - b''
> GET /%6Den%c3%bc/tea
  get_menu(item='tea')
< 204 - b''
> GET /men%C3%BC/Tea
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["path", "item"]}]
> GET /items/1?mode=1
  get_item(level=<ItemsLevelGetPathLevelParameter.integer_1: 1>, mode=<ItemsLevelGetQueryModeParameter.integer_1: 1>, ratio=None, X_Flag=None, kind=None, tier=None, levels=None)
< 204 - b''
> GET /items/2?mode=2&ratio=1.5&kind=b
  get_item(level=<ItemsLevelGetPathLevelParameter.integer_2: 2>, mode=<ItemsLevelGetQueryModeParameter.integer_2: 2>, ratio=<ItemsLevelGetQueryRatioParameter.number_1_5: 1.5>, X_Flag=True, kind=<ItemsLevelGetQueryKindParameter.b: 'b'>, tier=None, levels=None)
< 204 - b''
> GET /items/3
< 422 application/json [{"type": "enum", "loc": ["path", "level"]}]
> GET /items/1?mode=3
< 422 application/json [{"type": "enum", "loc": ["query", "mode"]}]
> GET /items/1?ratio=2
< 422 application/json [{"type": "enum", "loc": ["query", "ratio"]}]
> GET /items/1
< 422 application/json [{"type": "literal_error", "loc": ["header", "X-Flag"]}]
> GET /items/1?kind=c
< 422 application/json [{"type": "enum", "loc": ["query", "kind"]}]
> GET /items/1?tier=2
  get_item(level=<ItemsLevelGetPathLevelParameter.integer_1: 1>, mode=None, ratio=None, X_Flag=None, kind=None, tier=<ItemsLevelGetQueryTierParameter1.integer_2: 2>, levels=None)
< 204 - b''
> GET /items/1?levels=1&levels=2
  get_item(level=<ItemsLevelGetPathLevelParameter.integer_1: 1>, mode=None, ratio=None, X_Flag=None, kind=None, tier=None, levels=[<ItemsLevelGetQueryLevelsParameterEnum.integer_1: 1>, <ItemsLevelGetQueryLevelsParameterEnum.integer_2: 2>])
< 204 - b''
> GET /search?filter[name]=n&filter[unknown]=extra
< 422 application/json [{"type": "missing", "loc": ["query", "filter", "id"]}, {"type": "extra_forbidden", "loc": ["query", "filter", "unknown"]}]
> GET /search?filter[name]=n&filter[id]=05
  search(session='abc', code='AB', filter=Filter(id=5, name='n'), ids=None, X_Ids=[3], blob=None, note=None)
< 204 - b''
> GET /search?filter[name]=n&filter[id]=%2B1
  search(session='abc', code='AB', filter=Filter(id=1, name='n'), ids=None, X_Ids=[3], blob=None, note=None)
< 204 - b''
> GET /search?filter[name]=n&filter[id]=1.0
  search(session='abc', code='AB', filter=Filter(id=1, name='n'), ids=None, X_Ids=[3], blob=None, note=None)
< 204 - b''
> GET /items/1?ratio=2.2
  get_item(level=<ItemsLevelGetPathLevelParameter.integer_1: 1>, mode=None, ratio=<ItemsLevelGetQueryRatioParameter.number_2_2: 2.2>, X_Flag=None, kind=None, tier=None, levels=None)
< 204 - b''
> GET /items/1?ratio=%EF%BC%92.%EF%BC%92
< 422 application/json [{"type": "enum", "loc": ["query", "ratio"]}]
> GET /items/%D9%A1
< 422 application/json [{"type": "enum", "loc": ["path", "level"]}]
> GET /items/1?levels=%EF%BC%91
< 422 application/json [{"type": "enum", "loc": ["query", "levels", 0]}]
> GET /notes/%D9%A7
< 422 application/json [{"type": "int_parsing", "loc": ["path", "note.id"]}]
> GET /items/1?ratio=1e999
< 422 application/json [{"type": "enum", "loc": ["query", "ratio"]}]
> GET /pairs/ab/2/3/of/3
  get_pair(pair='ab', kind=2, part=3, X_Rank=4)
< 204 - b''
> GET /pairs/AB/x/3/of/3
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["path", "pair.id"]}, {"type": "int_parsing", "loc": ["path", "class"]}, {"type": "int_parsing", "loc": ["header", "X_Rank"]}]
> GET /pairs/AB/x/y/of/y
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["path", "pair.id"]}, {"type": "int_parsing", "loc": ["path", "class"]}, {"type": "int_parsing", "loc": ["path", "part"]}]
> GET /pairs/ab/2/1/of/2
< 422 application/json [{"type": "value_error", "loc": ["path", "part"]}]
> GET /foods/apple/servings/2
  get_serving(food_id='apple', serving=2)
< 204 - b''
> GET /foods/apple/servings/0
< 422 application/json [{"type": "greater_than_equal", "loc": ["path", "serving"]}]
> GET /foods/apple/servings/
< 404 application/json {"detail":"Not Found"}
app mounted
> GET /a%2Fb/files/a.txt
  get_file(file_name='a.txt')
< 204 - b''
> GET /a/b/files/a%2Fb.txt
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["path", "file.name"]}]
> GET /a/b/men%C3%BC/tea
  get_menu(item='tea')
< 204 - b''
> GET /a/b/pairs/AB/0/3/of/3
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["path", "pair.id"]}, {"type": "greater_than_equal", "loc": ["path", "class"]}]
app extended
> GET /files/a%2Fb.txt
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["path", "file.name"], "input": "a/b.txt", "ctx": {"pattern": "^[a-z]+\\.txt$"}}]
> GET /user/a%2Fb
< 200 application/json {"path":"/user/a/b","params":{"name":"a/b"}}
> GET /echo/a%2Fb
< 200 application/json {"path":"/echo/a/b","params":{"rest":"a/b"}}
> GET /included/a%2Fb
< 200 application/json {"path":"/included/a/b","params":{"rest":"a/b"}}
> GET /mounted/a%2Fb
< 200 application/json {"path":"/mounted/a/b","params":{"rest":"a/b"}}
> GET /nowhere/a%2Fb
< 404 application/json {"detail":"Not Found"}
> GET /pairs/AB/0/3/of/3
< 422 application/json [{"type": "string_pattern_mismatch", "loc": ["path", "pair.id"], "input": "AB", "ctx": {"pattern": "^[a-z]+$"}}, {"type": "greater_than_equal", "loc": ["path", "class"], "input": "0", "ctx": {"ge": 1}}]
