Normally, loads a pickled grammar by doing pkgutil.get_data(package, pickled_grammar) where *pickled_grammar* is computed from *grammar_source* by adding the Python version and using a ``.pickle`` extension. However, if *grammar_source* is an extant file, load_grammar(grammar_so
(
package: str, grammar_source: str, cache_dir: Path | None = None
)
| 273 | |
| 274 | |
| 275 | def load_packaged_grammar( |
| 276 | package: str, grammar_source: str, cache_dir: Path | None = None |
| 277 | ) -> grammar.Grammar: |
| 278 | """Normally, loads a pickled grammar by doing |
| 279 | pkgutil.get_data(package, pickled_grammar) |
| 280 | where *pickled_grammar* is computed from *grammar_source* by adding the |
| 281 | Python version and using a ``.pickle`` extension. |
| 282 | |
| 283 | However, if *grammar_source* is an extant file, load_grammar(grammar_source) |
| 284 | is called instead. This facilitates using a packaged grammar file when needed |
| 285 | but preserves load_grammar's automatic regeneration behavior when possible. |
| 286 | |
| 287 | """ |
| 288 | if os.path.isfile(grammar_source): |
| 289 | gp = _generate_pickle_name(grammar_source, cache_dir) if cache_dir else None |
| 290 | return load_grammar(grammar_source, gp=gp) |
| 291 | pickled_name = _generate_pickle_name(os.path.basename(grammar_source), cache_dir) |
| 292 | data = pkgutil.get_data(package, pickled_name) |
| 293 | assert data is not None |
| 294 | g = grammar.Grammar() |
| 295 | g.loads(data) |
| 296 | return g |
| 297 | |
| 298 | |
| 299 | def main(*args: str) -> bool: |
nothing calls this directly
no test coverage detected