We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Convert to using tomli
The library currently depends on the dead "toml" library, instead of the "tomli" library (which was just accepted into the stdlib as "tomllib" for Python 3.11. It should be a really easy swap; it's almost the same API as toml, it just expects binary files instead of unicode ones if using `toml{i,lib}.load`. `loads` is the same. Writing is a separate library.

Working on pyodide at https://github.com/pyodide/pyodide/pull/2234 and don't want to have to port a dead library.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `yt/config.py`
Content:
```
1 import os
2 import warnings
3 
4 import toml
5 from more_itertools import always_iterable
6 
7 from yt.utilities.configuration_tree import ConfigLeaf, ConfigNode
8 
9 ytcfg_defaults = {}
10 
11 ytcfg_defaults["yt"] = dict(
12     serialize=False,
13     only_deserialize=False,
14     time_functions=False,
15     colored_logs=False,
16     suppress_stream_logging=False,
17     stdout_stream_logging=False,
18     log_level=20,
19     inline=False,
20     num_threads=-1,
21     store_parameter_files=False,
22     parameter_file_store="parameter_files.csv",
23     maximum_stored_datasets=500,
24     skip_dataset_cache=True,
25     load_field_plugins=False,
26     plugin_filename="my_plugins.py",
27     parallel_traceback=False,
28     pasteboard_repo="",
29     reconstruct_index=True,
30     test_storage_dir="/does/not/exist",
31     test_data_dir="/does/not/exist",
32     enzo_db="",
33     notebook_password="",
34     answer_testing_tolerance=3,
35     answer_testing_bitwise=False,
36     gold_standard_filename="gold311",
37     local_standard_filename="local001",
38     answer_tests_url="http://answers.yt-project.org/{1}_{2}",
39     sketchfab_api_key="None",
40     imagebin_api_key="e1977d9195fe39e",
41     imagebin_upload_url="https://api.imgur.com/3/image",
42     imagebin_delete_url="https://api.imgur.com/3/image/{delete_hash}",
43     curldrop_upload_url="http://use.yt/upload",
44     thread_field_detection=False,
45     ignore_invalid_unit_operation_errors=False,
46     chunk_size=1000,
47     xray_data_dir="/does/not/exist",
48     supp_data_dir="/does/not/exist",
49     default_colormap="cmyt.arbre",
50     ray_tracing_engine="embree",
51     internals=dict(
52         within_testing=False,
53         within_pytest=False,
54         parallel=False,
55         strict_requires=False,
56         global_parallel_rank=0,
57         global_parallel_size=1,
58         topcomm_parallel_rank=0,
59         topcomm_parallel_size=1,
60         command_line=False,
61     ),
62 )
63 
64 
65 def config_dir():
66     config_root = os.environ.get(
67         "XDG_CONFIG_HOME", os.path.join(os.path.expanduser("~"), ".config")
68     )
69     conf_dir = os.path.join(config_root, "yt")
70 
71     if not os.path.exists(conf_dir):
72         try:
73             os.makedirs(conf_dir)
74         except OSError:
75             warnings.warn("unable to create yt config directory")
76     return conf_dir
77 
78 
79 # For backward compatibility, do not use these vars internally in yt
80 CONFIG_DIR = config_dir()
81 
82 
83 class YTConfig:
84     def __init__(self, defaults=None):
85         if defaults is None:
86             defaults = {}
87         self.config_root = ConfigNode(None)
88 
89     def get(self, section, *keys, callback=None):
90         node_or_leaf = self.config_root.get(section, *keys)
91         if isinstance(node_or_leaf, ConfigLeaf):
92             if callback is not None:
93                 return callback(node_or_leaf)
94             return node_or_leaf.value
95         return node_or_leaf
96 
97     def get_most_specific(self, section, *keys, **kwargs):
98         use_fallback = "fallback" in kwargs
99         fallback = kwargs.pop("fallback", None)
100         try:
101             return self.config_root.get_deepest_leaf(section, *keys)
102         except KeyError as err:
103             if use_fallback:
104                 return fallback
105             else:
106                 raise err
107 
108     def update(self, new_values, metadata=None):
109         if metadata is None:
110             metadata = {}
111         self.config_root.update(new_values, metadata)
112 
113     def has_section(self, section):
114         try:
115             self.config_root.get_child(section)
116             return True
117         except KeyError:
118             return False
119 
120     def add_section(self, section):
121         self.config_root.add_child(section)
122 
123     def remove_section(self, section):
124         if self.has_section(section):
125             self.config_root.remove_child(section)
126             return True
127         else:
128             return False
129 
130     def set(self, *args, metadata=None):
131         section, *keys, value = args
132         if metadata is None:
133             metadata = {"source": "runtime"}
134         self.config_root.upsert_from_list(
135             [section] + list(keys), value, extra_data=metadata
136         )
137 
138     def remove(self, *args):
139         self.config_root.pop_leaf(args)
140 
141     def read(self, file_names):
142         file_names_read = []
143         for fname in always_iterable(file_names):
144             if not os.path.exists(fname):
145                 continue
146             metadata = {"source": f"file: {fname}"}
147             self.update(toml.load(fname), metadata=metadata)
148             file_names_read.append(fname)
149 
150         return file_names_read
151 
152     def write(self, file_handler):
153         value = self.config_root.as_dict()
154         config_as_str = toml.dumps(value)
155 
156         try:
157             # Assuming file_handler has a write attribute
158             file_handler.write(config_as_str)
159         except AttributeError:
160             # Otherwise we expect a path to a file
161             with open(file_handler, mode="w") as fh:
162                 fh.write(config_as_str)
163 
164     @staticmethod
165     def get_global_config_file():
166         return os.path.join(config_dir(), "yt.toml")
167 
168     @staticmethod
169     def get_local_config_file():
170         return os.path.join(os.path.abspath(os.curdir), "yt.toml")
171 
172     def __setitem__(self, args, value):
173         section, *keys = always_iterable(args)
174         self.set(section, *keys, value, metadata=None)
175 
176     def __getitem__(self, key):
177         section, *keys = always_iterable(key)
178         return self.get(section, *keys)
179 
180     def __contains__(self, item):
181         return item in self.config_root
182 
183     # Add support for IPython rich display
184     # see https://ipython.readthedocs.io/en/stable/config/integrating.html
185     def _repr_json_(self):
186         return self.config_root._repr_json_()
187 
188 
189 _global_config_file = YTConfig.get_global_config_file()
190 _local_config_file = YTConfig.get_local_config_file()
191 
192 if not os.path.exists(_global_config_file):
193     cfg = {"yt": {}}  # type: ignore
194     try:
195         with open(_global_config_file, mode="w") as fd:
196             toml.dump(cfg, fd)
197     except OSError:
198         warnings.warn("unable to write new config file")
199 
200 
201 # Load the config
202 ytcfg = YTConfig()
203 ytcfg.update(ytcfg_defaults, metadata={"source": "defaults"})
204 
205 # Try loading the local config first, otherwise fall back to global config
206 if os.path.exists(_local_config_file):
207     ytcfg.read(_local_config_file)
208 elif os.path.exists(_global_config_file):
209     ytcfg.read(_global_config_file)
210
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/yt/config.py b/yt/config.py
--- a/yt/config.py
+++ b/yt/config.py
@@ -1,7 +1,9 @@
 import os
 import warnings
 
-import toml
+# TODO: import tomllib from the standard library instead in Python >= 3.11
+import tomli as tomllib
+import tomli_w
 from more_itertools import always_iterable
 
 from yt.utilities.configuration_tree import ConfigLeaf, ConfigNode
@@ -144,14 +146,16 @@
             if not os.path.exists(fname):
                 continue
             metadata = {"source": f"file: {fname}"}
-            self.update(toml.load(fname), metadata=metadata)
+            with open(fname, "rb") as fh:
+                data = tomllib.load(fh)
+            self.update(data, metadata=metadata)
             file_names_read.append(fname)
 
         return file_names_read
 
     def write(self, file_handler):
         value = self.config_root.as_dict()
-        config_as_str = toml.dumps(value)
+        config_as_str = tomli_w.dumps(value)
 
         try:
             # Assuming file_handler has a write attribute
@@ -192,8 +196,8 @@
 if not os.path.exists(_global_config_file):
     cfg = {"yt": {}}  # type: ignore
     try:
-        with open(_global_config_file, mode="w") as fd:
-            toml.dump(cfg, fd)
+        with open(_global_config_file, mode="wb") as fd:
+            tomli_w.dump(cfg, fd)
     except OSError:
         warnings.warn("unable to write new config file")

{"golden_diff": "diff --git a/yt/config.py b/yt/config.py\n--- a/yt/config.py\n+++ b/yt/config.py\n@@ -1,7 +1,9 @@\n import os\n import warnings\n \n-import toml\n+# TODO: import tomllib from the standard library instead in Python >= 3.11\n+import tomli as tomllib\n+import tomli_w\n from more_itertools import always_iterable\n \n from yt.utilities.configuration_tree import ConfigLeaf, ConfigNode\n@@ -144,14 +146,16 @@\n             if not os.path.exists(fname):\n                 continue\n             metadata = {\"source\": f\"file: {fname}\"}\n-            self.update(toml.load(fname), metadata=metadata)\n+            with open(fname, \"rb\") as fh:\n+                data = tomllib.load(fh)\n+            self.update(data, metadata=metadata)\n             file_names_read.append(fname)\n \n         return file_names_read\n \n     def write(self, file_handler):\n         value = self.config_root.as_dict()\n-        config_as_str = toml.dumps(value)\n+        config_as_str = tomli_w.dumps(value)\n \n         try:\n             # Assuming file_handler has a write attribute\n@@ -192,8 +196,8 @@\n if not os.path.exists(_global_config_file):\n     cfg = {\"yt\": {}}  # type: ignore\n     try:\n-        with open(_global_config_file, mode=\"w\") as fd:\n-            toml.dump(cfg, fd)\n+        with open(_global_config_file, mode=\"wb\") as fd:\n+            tomli_w.dump(cfg, fd)\n     except OSError:\n         warnings.warn(\"unable to write new config file\")\n", "issue": "Convert to using tomli\nThe library currently depends on the dead \"toml\" library, instead of the \"tomli\" library (which was just accepted into the stdlib as \"tomllib\" for Python 3.11. It should be a really easy swap; it's almost the same API as toml, it just expects binary files instead of unicode ones if using `toml{i,lib}.load`. `loads` is the same. Writing is a separate library.\r\n\r\nWorking on pyodide at https://github.com/pyodide/pyodide/pull/2234 and don't want to have to port a dead library.\r\n\n", "before_files": [{"content": "import os\nimport warnings\n\nimport toml\nfrom more_itertools import always_iterable\n\nfrom yt.utilities.configuration_tree import ConfigLeaf, ConfigNode\n\nytcfg_defaults = {}\n\nytcfg_defaults[\"yt\"] = dict(\n    serialize=False,\n    only_deserialize=False,\n    time_functions=False,\n    colored_logs=False,\n    suppress_stream_logging=False,\n    stdout_stream_logging=False,\n    log_level=20,\n    inline=False,\n    num_threads=-1,\n    store_parameter_files=False,\n    parameter_file_store=\"parameter_files.csv\",\n    maximum_stored_datasets=500,\n    skip_dataset_cache=True,\n    load_field_plugins=False,\n    plugin_filename=\"my_plugins.py\",\n    parallel_traceback=False,\n    pasteboard_repo=\"\",\n    reconstruct_index=True,\n    test_storage_dir=\"/does/not/exist\",\n    test_data_dir=\"/does/not/exist\",\n    enzo_db=\"\",\n    notebook_password=\"\",\n    answer_testing_tolerance=3,\n    answer_testing_bitwise=False,\n    gold_standard_filename=\"gold311\",\n    local_standard_filename=\"local001\",\n    answer_tests_url=\"http://answers.yt-project.org/{1}_{2}\",\n    sketchfab_api_key=\"None\",\n    imagebin_api_key=\"e1977d9195fe39e\",\n    imagebin_upload_url=\"https://api.imgur.com/3/image\",\n    imagebin_delete_url=\"https://api.imgur.com/3/image/{delete_hash}\",\n    curldrop_upload_url=\"http://use.yt/upload\",\n    thread_field_detection=False,\n    ignore_invalid_unit_operation_errors=False,\n    chunk_size=1000,\n    xray_data_dir=\"/does/not/exist\",\n    supp_data_dir=\"/does/not/exist\",\n    default_colormap=\"cmyt.arbre\",\n    ray_tracing_engine=\"embree\",\n    internals=dict(\n        within_testing=False,\n        within_pytest=False,\n        parallel=False,\n        strict_requires=False,\n        global_parallel_rank=0,\n        global_parallel_size=1,\n        topcomm_parallel_rank=0,\n        topcomm_parallel_size=1,\n        command_line=False,\n    ),\n)\n\n\ndef config_dir():\n    config_root = os.environ.get(\n        \"XDG_CONFIG_HOME\", os.path.join(os.path.expanduser(\"~\"), \".config\")\n    )\n    conf_dir = os.path.join(config_root, \"yt\")\n\n    if not os.path.exists(conf_dir):\n        try:\n            os.makedirs(conf_dir)\n        except OSError:\n            warnings.warn(\"unable to create yt config directory\")\n    return conf_dir\n\n\n# For backward compatibility, do not use these vars internally in yt\nCONFIG_DIR = config_dir()\n\n\nclass YTConfig:\n    def __init__(self, defaults=None):\n        if defaults is None:\n            defaults = {}\n        self.config_root = ConfigNode(None)\n\n    def get(self, section, *keys, callback=None):\n        node_or_leaf = self.config_root.get(section, *keys)\n        if isinstance(node_or_leaf, ConfigLeaf):\n            if callback is not None:\n                return callback(node_or_leaf)\n            return node_or_leaf.value\n        return node_or_leaf\n\n    def get_most_specific(self, section, *keys, **kwargs):\n        use_fallback = \"fallback\" in kwargs\n        fallback = kwargs.pop(\"fallback\", None)\n        try:\n            return self.config_root.get_deepest_leaf(section, *keys)\n        except KeyError as err:\n            if use_fallback:\n                return fallback\n            else:\n                raise err\n\n    def update(self, new_values, metadata=None):\n        if metadata is None:\n            metadata = {}\n        self.config_root.update(new_values, metadata)\n\n    def has_section(self, section):\n        try:\n            self.config_root.get_child(section)\n            return True\n        except KeyError:\n            return False\n\n    def add_section(self, section):\n        self.config_root.add_child(section)\n\n    def remove_section(self, section):\n        if self.has_section(section):\n            self.config_root.remove_child(section)\n            return True\n        else:\n            return False\n\n    def set(self, *args, metadata=None):\n        section, *keys, value = args\n        if metadata is None:\n            metadata = {\"source\": \"runtime\"}\n        self.config_root.upsert_from_list(\n            [section] + list(keys), value, extra_data=metadata\n        )\n\n    def remove(self, *args):\n        self.config_root.pop_leaf(args)\n\n    def read(self, file_names):\n        file_names_read = []\n        for fname in always_iterable(file_names):\n            if not os.path.exists(fname):\n                continue\n            metadata = {\"source\": f\"file: {fname}\"}\n            self.update(toml.load(fname), metadata=metadata)\n            file_names_read.append(fname)\n\n        return file_names_read\n\n    def write(self, file_handler):\n        value = self.config_root.as_dict()\n        config_as_str = toml.dumps(value)\n\n        try:\n            # Assuming file_handler has a write attribute\n            file_handler.write(config_as_str)\n        except AttributeError:\n            # Otherwise we expect a path to a file\n            with open(file_handler, mode=\"w\") as fh:\n                fh.write(config_as_str)\n\n    @staticmethod\n    def get_global_config_file():\n        return os.path.join(config_dir(), \"yt.toml\")\n\n    @staticmethod\n    def get_local_config_file():\n        return os.path.join(os.path.abspath(os.curdir), \"yt.toml\")\n\n    def __setitem__(self, args, value):\n        section, *keys = always_iterable(args)\n        self.set(section, *keys, value, metadata=None)\n\n    def __getitem__(self, key):\n        section, *keys = always_iterable(key)\n        return self.get(section, *keys)\n\n    def __contains__(self, item):\n        return item in self.config_root\n\n    # Add support for IPython rich display\n    # see https://ipython.readthedocs.io/en/stable/config/integrating.html\n    def _repr_json_(self):\n        return self.config_root._repr_json_()\n\n\n_global_config_file = YTConfig.get_global_config_file()\n_local_config_file = YTConfig.get_local_config_file()\n\nif not os.path.exists(_global_config_file):\n    cfg = {\"yt\": {}}  # type: ignore\n    try:\n        with open(_global_config_file, mode=\"w\") as fd:\n            toml.dump(cfg, fd)\n    except OSError:\n        warnings.warn(\"unable to write new config file\")\n\n\n# Load the config\nytcfg = YTConfig()\nytcfg.update(ytcfg_defaults, metadata={\"source\": \"defaults\"})\n\n# Try loading the local config first, otherwise fall back to global config\nif os.path.exists(_local_config_file):\n    ytcfg.read(_local_config_file)\nelif os.path.exists(_global_config_file):\n    ytcfg.read(_global_config_file)\n", "path": "yt/config.py"}], "after_files": [{"content": "import os\nimport warnings\n\n# TODO: import tomllib from the standard library instead in Python >= 3.11\nimport tomli as tomllib\nimport tomli_w\nfrom more_itertools import always_iterable\n\nfrom yt.utilities.configuration_tree import ConfigLeaf, ConfigNode\n\nytcfg_defaults = {}\n\nytcfg_defaults[\"yt\"] = dict(\n    serialize=False,\n    only_deserialize=False,\n    time_functions=False,\n    colored_logs=False,\n    suppress_stream_logging=False,\n    stdout_stream_logging=False,\n    log_level=20,\n    inline=False,\n    num_threads=-1,\n    store_parameter_files=False,\n    parameter_file_store=\"parameter_files.csv\",\n    maximum_stored_datasets=500,\n    skip_dataset_cache=True,\n    load_field_plugins=False,\n    plugin_filename=\"my_plugins.py\",\n    parallel_traceback=False,\n    pasteboard_repo=\"\",\n    reconstruct_index=True,\n    test_storage_dir=\"/does/not/exist\",\n    test_data_dir=\"/does/not/exist\",\n    enzo_db=\"\",\n    notebook_password=\"\",\n    answer_testing_tolerance=3,\n    answer_testing_bitwise=False,\n    gold_standard_filename=\"gold311\",\n    local_standard_filename=\"local001\",\n    answer_tests_url=\"http://answers.yt-project.org/{1}_{2}\",\n    sketchfab_api_key=\"None\",\n    imagebin_api_key=\"e1977d9195fe39e\",\n    imagebin_upload_url=\"https://api.imgur.com/3/image\",\n    imagebin_delete_url=\"https://api.imgur.com/3/image/{delete_hash}\",\n    curldrop_upload_url=\"http://use.yt/upload\",\n    thread_field_detection=False,\n    ignore_invalid_unit_operation_errors=False,\n    chunk_size=1000,\n    xray_data_dir=\"/does/not/exist\",\n    supp_data_dir=\"/does/not/exist\",\n    default_colormap=\"cmyt.arbre\",\n    ray_tracing_engine=\"embree\",\n    internals=dict(\n        within_testing=False,\n        within_pytest=False,\n        parallel=False,\n        strict_requires=False,\n        global_parallel_rank=0,\n        global_parallel_size=1,\n        topcomm_parallel_rank=0,\n        topcomm_parallel_size=1,\n        command_line=False,\n    ),\n)\n\n\ndef config_dir():\n    config_root = os.environ.get(\n        \"XDG_CONFIG_HOME\", os.path.join(os.path.expanduser(\"~\"), \".config\")\n    )\n    conf_dir = os.path.join(config_root, \"yt\")\n\n    if not os.path.exists(conf_dir):\n        try:\n            os.makedirs(conf_dir)\n        except OSError:\n            warnings.warn(\"unable to create yt config directory\")\n    return conf_dir\n\n\n# For backward compatibility, do not use these vars internally in yt\nCONFIG_DIR = config_dir()\n\n\nclass YTConfig:\n    def __init__(self, defaults=None):\n        if defaults is None:\n            defaults = {}\n        self.config_root = ConfigNode(None)\n\n    def get(self, section, *keys, callback=None):\n        node_or_leaf = self.config_root.get(section, *keys)\n        if isinstance(node_or_leaf, ConfigLeaf):\n            if callback is not None:\n                return callback(node_or_leaf)\n            return node_or_leaf.value\n        return node_or_leaf\n\n    def get_most_specific(self, section, *keys, **kwargs):\n        use_fallback = \"fallback\" in kwargs\n        fallback = kwargs.pop(\"fallback\", None)\n        try:\n            return self.config_root.get_deepest_leaf(section, *keys)\n        except KeyError as err:\n            if use_fallback:\n                return fallback\n            else:\n                raise err\n\n    def update(self, new_values, metadata=None):\n        if metadata is None:\n            metadata = {}\n        self.config_root.update(new_values, metadata)\n\n    def has_section(self, section):\n        try:\n            self.config_root.get_child(section)\n            return True\n        except KeyError:\n            return False\n\n    def add_section(self, section):\n        self.config_root.add_child(section)\n\n    def remove_section(self, section):\n        if self.has_section(section):\n            self.config_root.remove_child(section)\n            return True\n        else:\n            return False\n\n    def set(self, *args, metadata=None):\n        section, *keys, value = args\n        if metadata is None:\n            metadata = {\"source\": \"runtime\"}\n        self.config_root.upsert_from_list(\n            [section] + list(keys), value, extra_data=metadata\n        )\n\n    def remove(self, *args):\n        self.config_root.pop_leaf(args)\n\n    def read(self, file_names):\n        file_names_read = []\n        for fname in always_iterable(file_names):\n            if not os.path.exists(fname):\n                continue\n            metadata = {\"source\": f\"file: {fname}\"}\n            with open(fname, \"rb\") as fh:\n                data = tomllib.load(fh)\n            self.update(data, metadata=metadata)\n            file_names_read.append(fname)\n\n        return file_names_read\n\n    def write(self, file_handler):\n        value = self.config_root.as_dict()\n        config_as_str = tomli_w.dumps(value)\n\n        try:\n            # Assuming file_handler has a write attribute\n            file_handler.write(config_as_str)\n        except AttributeError:\n            # Otherwise we expect a path to a file\n            with open(file_handler, mode=\"w\") as fh:\n                fh.write(config_as_str)\n\n    @staticmethod\n    def get_global_config_file():\n        return os.path.join(config_dir(), \"yt.toml\")\n\n    @staticmethod\n    def get_local_config_file():\n        return os.path.join(os.path.abspath(os.curdir), \"yt.toml\")\n\n    def __setitem__(self, args, value):\n        section, *keys = always_iterable(args)\n        self.set(section, *keys, value, metadata=None)\n\n    def __getitem__(self, key):\n        section, *keys = always_iterable(key)\n        return self.get(section, *keys)\n\n    def __contains__(self, item):\n        return item in self.config_root\n\n    # Add support for IPython rich display\n    # see https://ipython.readthedocs.io/en/stable/config/integrating.html\n    def _repr_json_(self):\n        return self.config_root._repr_json_()\n\n\n_global_config_file = YTConfig.get_global_config_file()\n_local_config_file = YTConfig.get_local_config_file()\n\nif not os.path.exists(_global_config_file):\n    cfg = {\"yt\": {}}  # type: ignore\n    try:\n        with open(_global_config_file, mode=\"wb\") as fd:\n            tomli_w.dump(cfg, fd)\n    except OSError:\n        warnings.warn(\"unable to write new config file\")\n\n\n# Load the config\nytcfg = YTConfig()\nytcfg.update(ytcfg_defaults, metadata={\"source\": \"defaults\"})\n\n# Try loading the local config first, otherwise fall back to global config\nif os.path.exists(_local_config_file):\n    ytcfg.read(_local_config_file)\nelif os.path.exists(_global_config_file):\n    ytcfg.read(_global_config_file)\n", "path": "yt/config.py"}]}