|
16 | 16 | from typing import Union, Tuple, Optional
|
17 | 17 | import logging
|
18 | 18 | import os
|
| 19 | +import sys |
| 20 | + |
| 21 | + |
| 22 | +MPI_DATABASE_FILE: str = "apis.json" |
19 | 23 |
|
20 | 24 |
|
21 | 25 | from .storage import KINDS, PROCEDURES, CALLBACKS, PREDEFINED_FUNCTIONS, clear_storage
|
@@ -129,38 +133,42 @@ def _register_kinds_v1() -> None:
|
129 | 133 | KINDS[key.lower()] = item
|
130 | 134 |
|
131 | 135 |
|
| 136 | +def _load_bundled_db(): |
| 137 | + if sys.version_info.major == 3 and sys.version_info.minor < 9: |
| 138 | + with importlib.resources.path( |
| 139 | + "pympistandard.data", MPI_DATABASE_FILE |
| 140 | + ) as datapath: |
| 141 | + return datapath |
| 142 | + |
| 143 | + else: |
| 144 | + return importlib.resources.files("pympistandard.data").joinpath( |
| 145 | + MPI_DATABASE_FILE |
| 146 | + ) |
| 147 | + |
| 148 | + |
132 | 149 | def _resolve_path(
|
133 | 150 | given_path: Optional[Union[str, Path]] = None, force_bundled: bool = False
|
134 | 151 | ) -> Path:
|
135 | 152 | """Find correct path to load apis.json from."""
|
136 | 153 |
|
137 | 154 | if force_bundled:
|
138 |
| - with importlib.resources.path("pympistandard.data", "apis.json") as datapath: |
139 |
| - path = datapath |
| 155 | + path = _load_bundled_db() |
140 | 156 |
|
141 | 157 | # convert str path to Path
|
142 | 158 | elif isinstance(given_path, str):
|
143 | 159 | given_path = Path(given_path)
|
144 | 160 |
|
145 | 161 | # use given path
|
146 | 162 | elif isinstance(given_path, Path):
|
147 |
| - path = given_path / "apis.json" |
| 163 | + path = given_path / MPI_DATABASE_FILE |
148 | 164 |
|
149 | 165 | # use environment variable paths
|
150 | 166 | elif "MPISTANDARD" in os.environ:
|
151 |
| - path = Path(os.environ["MPISTANDARD"] + "/apis.json") |
152 |
| - |
153 |
| - # else: |
154 |
| - # raise RuntimeError( |
155 |
| - # "Could not find apis.json, either use MPISTANDARD environment variable" |
156 |
| - # "or execute pympistandard from root of MPI Standard direction." |
157 |
| - # ) |
| 167 | + path = Path(os.environ["MPISTANDARD"] + "/" + MPI_DATABASE_FILE) |
158 | 168 |
|
159 | 169 | else:
|
160 | 170 | # fallback to packaged data
|
161 |
| - # AFTER 3.9 path = importlib.resources.files("pympistandard.data").joinpath("apis.json") |
162 |
| - with importlib.resources.path("pympistandard.data", "apis.json") as datapath: |
163 |
| - path = datapath |
| 171 | + path = _load_bundled_db() |
164 | 172 |
|
165 | 173 | # require resolved path to exist
|
166 | 174 | path.resolve(True)
|
|
0 commit comments