|
193 | 193 | " if t is empty: raise TypeError('Missing type')\n", |
194 | 194 | " tmap = {int:\"integer\", float:\"number\", str:\"string\", bool:\"boolean\", list:\"array\", dict:\"object\"}\n", |
195 | 195 | " tmap.update({k.__name__: v for k, v in tmap.items()})\n", |
196 | | - " if getattr(t, '__origin__', None) in (list,tuple):\n", |
| 196 | + " if getattr(t, '__origin__', None) in (list,tuple,set):\n", |
197 | 197 | " args = getattr(t, '__args__', None)\n", |
198 | 198 | " item_type = \"object\" if not args else tmap.get(t.__args__[0].__name__, \"object\")\n", |
199 | 199 | " return \"array\", item_type\n", |
|
222 | 222 | { |
223 | 223 | "data": { |
224 | 224 | "text/plain": [ |
225 | | - "(('array', 'integer'), ('integer', None), ('integer', None))" |
| 225 | + "(('array', 'integer'),\n", |
| 226 | + " ('array', 'integer'),\n", |
| 227 | + " ('integer', None),\n", |
| 228 | + " ('integer', None))" |
226 | 229 | ] |
227 | 230 | }, |
228 | 231 | "execution_count": null, |
|
231 | 234 | } |
232 | 235 | ], |
233 | 236 | "source": [ |
234 | | - "_types(list[int]), _types(int), _types('int')" |
| 237 | + "_types(list[int]), _types(set[int]), _types(int), _types('int')" |
235 | 238 | ] |
236 | 239 | }, |
237 | 240 | { |
|
435 | 438 | "\n", |
436 | 439 | "def _handle_type(t, defs):\n", |
437 | 440 | " \"Handle a single type, creating nested schemas if necessary\"\n", |
| 441 | + " ot = ifnone(get_origin(t), t)\n", |
438 | 442 | " if t is NoneType: return {'type': 'null'}\n", |
439 | 443 | " if t in custom_types: return {'type':'string', 'format':t.__name__}\n", |
440 | | - " if t in (dict, list, tuple, set): return {'type': _types(t)[0]}\n", |
| 444 | + " if ot is dict: return {'type': _types(t)[0]} \n", |
| 445 | + " if ot in (list, tuple, set): return {'type': _types(t)[0], 'items':{}}\n", |
441 | 446 | " if isinstance(t, type) and not issubclass(t, (int, float, str, bool)) or inspect.isfunction(t):\n", |
442 | 447 | " defs[t.__name__] = _get_nested_schema(t)\n", |
443 | 448 | " return {'$ref': f'#/$defs/{t.__name__}'}\n", |
|
465 | 470 | "_handle_type(int, None), _handle_type(Path, None)" |
466 | 471 | ] |
467 | 472 | }, |
| 473 | + { |
| 474 | + "cell_type": "code", |
| 475 | + "execution_count": null, |
| 476 | + "id": "a43e9134", |
| 477 | + "metadata": {}, |
| 478 | + "outputs": [ |
| 479 | + { |
| 480 | + "data": { |
| 481 | + "text/plain": [ |
| 482 | + "({'type': 'array', 'items': {}},\n", |
| 483 | + " {'type': 'array', 'items': {}},\n", |
| 484 | + " {'type': 'array', 'items': {}})" |
| 485 | + ] |
| 486 | + }, |
| 487 | + "execution_count": null, |
| 488 | + "metadata": {}, |
| 489 | + "output_type": "execute_result" |
| 490 | + } |
| 491 | + ], |
| 492 | + "source": [ |
| 493 | + "# gemini expect `items` to be defined for arrays\n", |
| 494 | + "_handle_type(list, None), _handle_type(tuple[str], None), _handle_type(set[str], None)" |
| 495 | + ] |
| 496 | + }, |
| 497 | + { |
| 498 | + "cell_type": "code", |
| 499 | + "execution_count": null, |
| 500 | + "id": "cf6d417e", |
| 501 | + "metadata": {}, |
| 502 | + "outputs": [ |
| 503 | + { |
| 504 | + "data": { |
| 505 | + "text/plain": [ |
| 506 | + "({'type': 'object'}, {'type': 'object'})" |
| 507 | + ] |
| 508 | + }, |
| 509 | + "execution_count": null, |
| 510 | + "metadata": {}, |
| 511 | + "output_type": "execute_result" |
| 512 | + } |
| 513 | + ], |
| 514 | + "source": [ |
| 515 | + "_handle_type(dict, None), _handle_type(dict[str,str], None)" |
| 516 | + ] |
| 517 | + }, |
468 | 518 | { |
469 | 519 | "cell_type": "code", |
470 | 520 | "execution_count": null, |
|
1710 | 1760 | "output_type": "stream", |
1711 | 1761 | "text": [ |
1712 | 1762 | "Traceback (most recent call last):\n", |
1713 | | - " File \"/var/folders/51/b2_szf2945n072c0vj2cyty40000gn/T/ipykernel_6265/2052945749.py\", line 14, in python\n", |
| 1763 | + " File \"/tmp/ipykernel_3890/2052945749.py\", line 14, in python\n", |
1714 | 1764 | " try: return _run(code, glb, loc)\n", |
1715 | 1765 | " ^^^^^^^^^^^^^^^^^^^^\n", |
1716 | | - " File \"/var/folders/51/b2_szf2945n072c0vj2cyty40000gn/T/ipykernel_6265/1858893181.py\", line 18, in _run\n", |
| 1766 | + " File \"/tmp/ipykernel_3890/1858893181.py\", line 18, in _run\n", |
1717 | 1767 | " try: exec(compiled_code, glb, loc)\n", |
1718 | 1768 | " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", |
1719 | 1769 | " File \"<ast>\", line 1, in <module>\n", |
1720 | | - " File \"/var/folders/51/b2_szf2945n072c0vj2cyty40000gn/T/ipykernel_6265/2052945749.py\", line 9, in handler\n", |
| 1770 | + " File \"/tmp/ipykernel_3890/2052945749.py\", line 9, in handler\n", |
1721 | 1771 | " def handler(*args): raise TimeoutError()\n", |
1722 | 1772 | " ^^^^^^^^^^^^^^^^^^^^\n", |
1723 | 1773 | "TimeoutError\n", |
|
2051 | 2101 | { |
2052 | 2102 | "cell_type": "code", |
2053 | 2103 | "execution_count": null, |
2054 | | - "id": "7ac04e80-7bb9-4b52-8285-454684605d47", |
| 2104 | + "id": "73bca085", |
2055 | 2105 | "metadata": {}, |
2056 | 2106 | "outputs": [], |
2057 | 2107 | "source": [ |
|
0 commit comments