range / src /range_curate /customization.py
Brianferrell787's picture
RANGE: clean package identity, example taxonomy API, Gradio 6.27.0
c4aee46 verified
Raw History Blame Contribute Delete
2.06 kB
"""Public taxonomy composition and deterministic ranking contracts."""
from __future__ import annotations
from importlib.resources import files as resource_files
from pathlib import Path
from ._taxonomy_impl import (
DefaultRanker,
DefaultTaxonomy,
Ranker,
Taxonomy,
TaxonomyBuilder,
)
# Keep repr(), documentation, and pickling pointed at the public module after
# the pre-release namespace migration.
for _public_type in (
DefaultRanker,
DefaultTaxonomy,
Ranker,
Taxonomy,
TaxonomyBuilder,
):
_public_type.__module__ = __name__
class GeneralEconomyTaxonomy(DefaultTaxonomy):
"""The bundled, conservative taxonomy for economy and broad-market news."""
def copy_default_taxonomy(
destination: str | Path,
*,
overwrite: bool = False,
) -> Path:
"""Copy the bundled general-economy taxonomy to an editable directory."""
root = Path(destination).expanduser().resolve()
package = resource_files("range_curate._core")
copies = (
(package.joinpath("configs", "default.yml"), root / "taxonomy.yml"),
(
package.joinpath("catalogs", "entities.yml"),
root / "catalogs" / "entities.yml",
),
(
package.joinpath("catalogs", "lexical.yml"),
root / "catalogs" / "lexical.yml",
),
)
existing = [target for _source, target in copies if target.exists()]
if existing and not overwrite:
names = ", ".join(str(path) for path in existing)
raise FileExistsError(
f"taxonomy files already exist: {names}; pass overwrite=True to replace them"
)
for source, target in copies:
target.parent.mkdir(parents=True, exist_ok=True)
target.write_bytes(source.read_bytes())
return root / "taxonomy.yml"
__all__ = [
"DefaultRanker",
"DefaultTaxonomy",
"GeneralEconomyTaxonomy",
"Ranker",
"Taxonomy",
"TaxonomyBuilder",
"copy_default_taxonomy",
]