|
25 | 25 | "outputs": [], |
26 | 26 | "source": [ |
27 | 27 | "#| export\n", |
28 | | - "from nbdev.showdoc import *\n", |
29 | | - "from fastcore.test import *\n", |
30 | | - "from unittest.mock import patch\n", |
31 | | - "\n", |
32 | | - "import dotenv\n", |
33 | 28 | "import json\n", |
| 29 | + "import logging\n", |
34 | 30 | "import os\n", |
35 | 31 | "import os.path\n", |
36 | | - "import jsonschema\n", |
37 | | - "import logging\n", |
38 | | - "from jsonschema import validate, ValidationError\n", |
39 | 32 | "from typing import Union\n", |
| 33 | + "\n", |
| 34 | + "import dotenv\n", |
| 35 | + "import jsonschema\n", |
40 | 36 | "from fs.base import FS\n", |
41 | 37 | "from fs.osfs import OSFS\n", |
42 | | - "\n", |
| 38 | + "from jsonschema import ValidationError, validate\n", |
43 | 39 | "\n", |
44 | 40 | "logger = logging.getLogger(__name__)" |
45 | 41 | ] |
46 | 42 | }, |
| 43 | + { |
| 44 | + "cell_type": "code", |
| 45 | + "execution_count": null, |
| 46 | + "metadata": {}, |
| 47 | + "outputs": [], |
| 48 | + "source": [ |
| 49 | + "#| hide\n", |
| 50 | + "\n", |
| 51 | + "# dev/testing deps\n", |
| 52 | + "from unittest.mock import patch\n", |
| 53 | + "\n", |
| 54 | + "from fastcore.test import *\n", |
| 55 | + "from nbdev.showdoc import *" |
| 56 | + ] |
| 57 | + }, |
47 | 58 | { |
48 | 59 | "cell_type": "code", |
49 | 60 | "execution_count": null, |
|
652 | 663 | "ConfigValidator.DEFAULT_STORAGE_DRIVER = memfs_fallback\n", |
653 | 664 | "\n", |
654 | 665 | "validated_config5 = ConfigValidator.load_dotenv(\n", |
655 | | - " json_schema='schema.json'\n", |
| 666 | + " json_schema='schema.json',\n", |
656 | 667 | ")\n", |
657 | 668 | " \n", |
658 | 669 | "ConfigValidator.DEFAULT_STORAGE_DRIVER = OLD_DRIVER" |
|
662 | 673 | "cell_type": "code", |
663 | 674 | "execution_count": null, |
664 | 675 | "metadata": {}, |
665 | | - "outputs": [ |
666 | | - { |
667 | | - "ename": "ResourceNotFound", |
668 | | - "evalue": "resource 'special-bespoke-location/my-own.env' not found", |
669 | | - "output_type": "error", |
670 | | - "traceback": [ |
671 | | - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
672 | | - "\u001b[0;31mResourceNotFound\u001b[0m Traceback (most recent call last)", |
673 | | - "Cell \u001b[0;32mIn[97], line 11\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m memfs\u001b[38;5;241m.\u001b[39mopen(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfoo.schema.json\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mw\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m ofile:\n\u001b[1;32m 5\u001b[0m ofile\u001b[38;5;241m.\u001b[39mwrite(json\u001b[38;5;241m.\u001b[39mdumps({\n\u001b[1;32m 6\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtype\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mobject\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 7\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mproperties\u001b[39m\u001b[38;5;124m'\u001b[39m: {\n\u001b[1;32m 8\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mA_NUMERIC_VALUE\u001b[39m\u001b[38;5;124m'\u001b[39m: { \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtype\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnumber\u001b[39m\u001b[38;5;124m'\u001b[39m },\n\u001b[1;32m 9\u001b[0m }\n\u001b[1;32m 10\u001b[0m }))\n\u001b[0;32m---> 11\u001b[0m validated_dotenv \u001b[38;5;241m=\u001b[39m \u001b[43mConfigValidator\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload_dotenv\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 12\u001b[0m \u001b[43m \u001b[49m\u001b[43mjson_schema\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mfoo.schema.json\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 13\u001b[0m \u001b[43m \u001b[49m\u001b[43mdotenv_path\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mspecial-bespoke-location/my-own.env\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 14\u001b[0m \u001b[43m \u001b[49m\u001b[43mstorage_driver\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmemfs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 15\u001b[0m \u001b[43m)\u001b[49m\n\u001b[1;32m 16\u001b[0m test_eq(validated_dotenv, {\n\u001b[1;32m 17\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mA_NUMERIC_VALUE\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1167.89\u001b[39m,\n\u001b[1;32m 18\u001b[0m })\n\u001b[1;32m 20\u001b[0m test_fail(validator\u001b[38;5;241m.\u001b[39mload_dotenv, kwargs\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdotenv_path\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnon-existent-location-own.env\u001b[39m\u001b[38;5;124m'\u001b[39m})\n", |
674 | | - "Cell \u001b[0;32mIn[80], line 143\u001b[0m, in \u001b[0;36mConfigValidator.load_dotenv\u001b[0;34m(cls, json_schema, dotenv_path, storage_driver, override)\u001b[0m\n\u001b[1;32m 141\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m dotenv_path:\n\u001b[1;32m 142\u001b[0m dotenv_storage_driver \u001b[38;5;241m=\u001b[39m storage_driver \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39m_get_maybe_abspath_driver(dotenv_path)\n\u001b[0;32m--> 143\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mdotenv_storage_driver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdotenv_path\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m ifile:\n\u001b[1;32m 144\u001b[0m config \u001b[38;5;241m=\u001b[39m dotenv\u001b[38;5;241m.\u001b[39mdotenv_values(stream\u001b[38;5;241m=\u001b[39mifile)\n\u001b[1;32m 146\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m config \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", |
675 | | - "File \u001b[0;32m~/Desktop/experiment/python-schematized-config/venv/lib/python3.10/site-packages/fs/base.py:1228\u001b[0m, in \u001b[0;36mFS.open\u001b[0;34m(self, path, mode, buffering, encoding, errors, newline, **options)\u001b[0m\n\u001b[1;32m 1226\u001b[0m validate_open_mode(mode)\n\u001b[1;32m 1227\u001b[0m bin_mode \u001b[38;5;241m=\u001b[39m mode\u001b[38;5;241m.\u001b[39mreplace(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mt\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m-> 1228\u001b[0m bin_file \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopenbin\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbin_mode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbuffering\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbuffering\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1229\u001b[0m io_stream \u001b[38;5;241m=\u001b[39m iotools\u001b[38;5;241m.\u001b[39mmake_stream(\n\u001b[1;32m 1230\u001b[0m path,\n\u001b[1;32m 1231\u001b[0m bin_file,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1237\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39moptions\n\u001b[1;32m 1238\u001b[0m )\n\u001b[1;32m 1239\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m io_stream\n", |
676 | | - "File \u001b[0;32m~/Desktop/experiment/python-schematized-config/venv/lib/python3.10/site-packages/fs/memoryfs.py:513\u001b[0m, in \u001b[0;36mMemoryFS.openbin\u001b[0;34m(self, path, mode, buffering, **options)\u001b[0m\n\u001b[1;32m 511\u001b[0m parent_dir_entry \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_dir_entry(dir_path)\n\u001b[1;32m 512\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m parent_dir_entry \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m parent_dir_entry\u001b[38;5;241m.\u001b[39mis_dir:\n\u001b[0;32m--> 513\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m errors\u001b[38;5;241m.\u001b[39mResourceNotFound(path)\n\u001b[1;32m 515\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _mode\u001b[38;5;241m.\u001b[39mcreate:\n\u001b[1;32m 516\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m file_name \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m parent_dir_entry:\n", |
677 | | - "\u001b[0;31mResourceNotFound\u001b[0m: resource 'special-bespoke-location/my-own.env' not found" |
678 | | - ] |
679 | | - } |
680 | | - ], |
| 676 | + "outputs": [], |
681 | 677 | "source": [ |
682 | 678 | "#| hide\n", |
683 | 679 | "# test using custom json schema\n", |
|
774 | 770 | "possibly due to jupyter environment blackmagicfuddery, mocking builtins.open DOES NOT WORK!\n", |
775 | 771 | "take the easy way out and mock an actual file!\n", |
776 | 772 | "'''\n", |
777 | | - "import tempfile\n", |
778 | 773 | "import os.path as _p\n", |
| 774 | + "import tempfile\n", |
779 | 775 | "\n", |
780 | 776 | "OLD_DRIVER = ConfigValidator.DEFAULT_STORAGE_DRIVER\n", |
781 | 777 | "ConfigValidator.DEFAULT_STORAGE_DRIVER = None\n", |
|
0 commit comments