diff --git a/.github/workflows/scripts/package-versions.py b/.github/workflows/scripts/package-versions.py index 63acba40d..c28ad8520 100755 --- a/.github/workflows/scripts/package-versions.py +++ b/.github/workflows/scripts/package-versions.py @@ -61,7 +61,7 @@ def level(package: str) -> int: """ if package == "overture-schema-system": return 0 - elif package in ["overture-schema-core"]: + elif package in ["overture-schema-common", "overture-schema-core"]: return 1 elif re.fullmatch(r'overture-schema-.*-theme', package) or package in ["overture-schema", "overture-schema-cli", "overture-schema-codegen", "overture-schema-annex"]: return 2 diff --git a/PYDANTIC_GUIDE.md b/PYDANTIC_GUIDE.md index 0d9cfaf66..98dbf5005 100644 --- a/PYDANTIC_GUIDE.md +++ b/PYDANTIC_GUIDE.md @@ -5,7 +5,7 @@ This guide helps you work with Overture Maps Pydantic schemas - Python models th ## Table of Contents - [Quick Start](#quick-start) -- [Core Concepts](#core-concepts) +- [Basic Concepts](#basic-concepts) - [Models and Inheritance](#models-and-inheritance) - [Field Types](#field-types) - [Field Enhancement](#field-enhancement) @@ -40,8 +40,8 @@ from enum import Enum # Pydantic essentials from pydantic import BaseModel, Field -# Overture core models -from overture.schema.core import OvertureFeature +# Overture common models +from overture.schema.common import OvertureFeature from overture.schema.system.primitive import Geometry, GeometryType, GeometryTypeConstraint # Validation system @@ -54,7 +54,7 @@ from overture.schema.system.string import ( NoWhitespaceString, StrippedString, ) -from overture.schema.core.types import ConfidenceScore +from overture.schema.common.types import ConfidenceScore from overture.schema.system.string import LanguageTag # Numeric primitives (use these instead of int/float) @@ -100,7 +100,7 @@ class MyCustomType(BaseModel): ```python from typing import Annotated, Literal from pydantic import Field -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature from overture.schema.system.primitive import Geometry, GeometryType, GeometryTypeConstraint class MyFeature(OvertureFeature[Literal["my_theme"], Literal["my_type"]]): @@ -119,7 +119,7 @@ class MyFeature(OvertureFeature[Literal["my_theme"], Literal["my_type"]]): --- -## Core Concepts +## Basic Concepts ### Models and Inheritance @@ -151,7 +151,7 @@ class Address(BaseModel): ```python from typing import Literal -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature from overture.schema.system.primitive import float64 class Building(OvertureFeature[Literal["buildings"], Literal["building"]]): @@ -177,9 +177,9 @@ By specifying `OvertureFeature[Literal["buildings"], Literal["building"]]`, you' ```python from typing import Literal -from overture.schema.core import OvertureFeature -from overture.schema.core.models import Stacked -from overture.schema.core.names import Named +from overture.schema.common import OvertureFeature +from overture.schema.common.models import Stacked +from overture.schema.common.names import Named from overture.schema.system.primitive import float64 class Building(OvertureFeature[Literal["buildings"], Literal["building"]], Named, Stacked): @@ -647,7 +647,7 @@ The fundamental pattern is a direct reference where one feature "points to" anot ```python from typing import Annotated, Literal from pydantic import Field -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature from overture.schema.system.ref import Id, Reference, Relationship # COMPOSITION — part points to its whole @@ -772,7 +772,7 @@ division_id: Id ```python from typing import Annotated, Literal from pydantic import Field -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature # Base class with common fields class TransportationSegment(OvertureFeature[Literal["transportation"], Literal["segment"]]): @@ -999,7 +999,7 @@ class Contact(BaseModel): Organize code by scope and avoid circular imports: -**Cross-theme shared**: `overture-schema-core` package +**Cross-theme shared**: `overture-schema-common` package - Used by multiple themes (e.g., `OvertureFeature`, `Names`, `Sources`, `Scope`) @@ -1028,7 +1028,7 @@ from enum import Enum from pydantic import BaseModel, ConfigDict, Field # Cross-theme imports -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature from overture.schema.system.field_constraint import UniqueItemsConstraint from overture.schema.system.model_constraint import no_extra_fields @@ -1088,7 +1088,7 @@ properties: **Pydantic approach:** ```python -# In overture-schema-core/src/overture/schema/core/models.py +# In overture-schema-common/src/overture/schema/common/models.py @no_extra_fields class Address(BaseModel): """A postal address.""" @@ -1131,7 +1131,7 @@ allOf: **Pydantic equivalent** uses **mixin classes**: ```python -# In core/models.py +# In common/models.py class Named(BaseModel): """Properties defining the names of a feature.""" names: Names | None = None @@ -1203,7 +1203,7 @@ class MyCustomType(BaseModel): ```python models.py from typing import Annotated, Literal from pydantic import Field -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature from overture.schema.system.primitive import Geometry, GeometryType, GeometryTypeConstraint class MyFeature(OvertureFeature[Literal["my_theme"], Literal["my_type"]]): @@ -1262,7 +1262,7 @@ class Contact(BaseModel): ```python models.py from typing import Annotated, Literal from pydantic import Field -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature from overture.schema.system.primitive import float64 from overture.schema.system.ref import Id, Reference, Relationship @@ -1346,7 +1346,7 @@ class Status(str, Enum): from typing import Annotated, Literal from enum import Enum from pydantic import Field -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature from overture.schema.system.field_constraint import UniqueItemsConstraint from overture.schema.system.model_constraint import no_extra_fields from overture.schema.system.primitive import int32, float64 diff --git a/README.pydantic.md b/README.pydantic.md index c5d46f55c..76bd78e1f 100644 --- a/README.pydantic.md +++ b/README.pydantic.md @@ -88,7 +88,7 @@ This workspace contains the following packages: - **`overture-schema`** - Main entrypoint package that aggregates all types for convenient usage -- **`overture-schema-core`** - Overture-specific models shared across themes: base +- **`overture-schema-common`** - Overture-specific models shared across themes: base feature class, scoping framework, names, sources, and cartographic hints - **`overture-schema-system`** - Portable primitive types, constraints, and a GeoJSON-aware base model for building Pydantic schemas that serialize to @@ -200,7 +200,7 @@ buildings = filter_models( ``` Tags are produced by *tag providers* registered on the `overture.tag_providers` -entry-point group. The `system` and `core` packages ship the built-in providers +entry-point group. The `system` and `common` packages ship the built-in providers (`feature`, `overture`, `overture:theme=*`); third parties can register their own to attach custom tags during discovery. See the [`overture-schema-system` README](packages/overture-schema-system/README.md#tagging) for tag format, diff --git a/packages/overture-schema-addresses-theme/pyproject.toml b/packages/overture-schema-addresses-theme/pyproject.toml index c9074f76c..a550ec79f 100644 --- a/packages/overture-schema-addresses-theme/pyproject.toml +++ b/packages/overture-schema-addresses-theme/pyproject.toml @@ -3,7 +3,7 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-core", + "overture-schema-common", "overture-schema-system", "pydantic>=2.12.0", ] @@ -20,7 +20,7 @@ Source = "https://github.com/OvertureMaps/schema" Issues = "https://github.com/OvertureMaps/schema/issues" [tool.uv.sources] -overture-schema-core = { workspace = true } +overture-schema-common = { workspace = true } overture-schema-system = { workspace = true } diff --git a/packages/overture-schema-addresses-theme/src/overture/schema/addresses/address.py b/packages/overture-schema-addresses-theme/src/overture/schema/addresses/address.py index 6469cb130..baf93f839 100644 --- a/packages/overture-schema-addresses-theme/src/overture/schema/addresses/address.py +++ b/packages/overture-schema-addresses-theme/src/overture/schema/addresses/address.py @@ -7,7 +7,7 @@ from pydantic import BaseModel, ConfigDict, Field -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) from overture.schema.system.model_constraint import no_extra_fields diff --git a/packages/overture-schema-annex/pyproject.toml b/packages/overture-schema-annex/pyproject.toml index d8cea972b..95a45d362 100644 --- a/packages/overture-schema-annex/pyproject.toml +++ b/packages/overture-schema-annex/pyproject.toml @@ -2,7 +2,7 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] -dependencies = ["overture-schema-core", "overture-schema-system", "pydantic>=2.12.0"] +dependencies = ["overture-schema-common", "overture-schema-system", "pydantic>=2.12.0"] description = "Add your description here" dynamic = ["version"] license = "MIT" @@ -11,7 +11,7 @@ readme = "README.md" requires-python = ">=3.10" [tool.uv.sources] -overture-schema-core = { workspace = true } +overture-schema-common = { workspace = true } overture-schema-system = { workspace = true } [project.urls] diff --git a/packages/overture-schema-base-theme/pyproject.toml b/packages/overture-schema-base-theme/pyproject.toml index c281b7ff2..c671e1d88 100644 --- a/packages/overture-schema-base-theme/pyproject.toml +++ b/packages/overture-schema-base-theme/pyproject.toml @@ -3,7 +3,7 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-core", + "overture-schema-common", "overture-schema-system", "pydantic>=2.12.0", ] @@ -20,7 +20,7 @@ Source = "https://github.com/OvertureMaps/schema" Issues = "https://github.com/OvertureMaps/schema/issues" [tool.uv.sources] -overture-schema-core = { workspace = true } +overture-schema-common = { workspace = true } overture-schema-system = { workspace = true } diff --git a/packages/overture-schema-base-theme/src/overture/schema/base/bathymetry.py b/packages/overture-schema-base-theme/src/overture/schema/base/bathymetry.py index 80b5b260f..9f525728a 100644 --- a/packages/overture-schema-base-theme/src/overture/schema/base/bathymetry.py +++ b/packages/overture-schema-base-theme/src/overture/schema/base/bathymetry.py @@ -6,10 +6,10 @@ from pydantic import ConfigDict, Field -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.cartography import CartographicallyHinted +from overture.schema.common.cartography import CartographicallyHinted from overture.schema.system.primitive import ( Geometry, GeometryType, diff --git a/packages/overture-schema-base-theme/src/overture/schema/base/infrastructure.py b/packages/overture-schema-base-theme/src/overture/schema/base/infrastructure.py index 00fadf403..9b820b92f 100644 --- a/packages/overture-schema-base-theme/src/overture/schema/base/infrastructure.py +++ b/packages/overture-schema-base-theme/src/overture/schema/base/infrastructure.py @@ -9,11 +9,11 @@ from pydantic import ConfigDict, Field from overture.schema.base._common import Height, SourcedFromOpenStreetMap -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.models import Stacked -from overture.schema.core.names import Named +from overture.schema.common.models import Stacked +from overture.schema.common.names import Named from overture.schema.system.primitive import ( Geometry, GeometryType, diff --git a/packages/overture-schema-base-theme/src/overture/schema/base/land.py b/packages/overture-schema-base-theme/src/overture/schema/base/land.py index df94125c1..6775842b7 100644 --- a/packages/overture-schema-base-theme/src/overture/schema/base/land.py +++ b/packages/overture-schema-base-theme/src/overture/schema/base/land.py @@ -9,11 +9,11 @@ from pydantic import ConfigDict, Field from overture.schema.base._common import Elevation, SourcedFromOpenStreetMap -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.models import Stacked -from overture.schema.core.names import Named +from overture.schema.common.models import Stacked +from overture.schema.common.names import Named from overture.schema.system.primitive import ( Geometry, GeometryType, diff --git a/packages/overture-schema-base-theme/src/overture/schema/base/land_cover.py b/packages/overture-schema-base-theme/src/overture/schema/base/land_cover.py index 385501877..29eeb5e19 100644 --- a/packages/overture-schema-base-theme/src/overture/schema/base/land_cover.py +++ b/packages/overture-schema-base-theme/src/overture/schema/base/land_cover.py @@ -7,10 +7,10 @@ from pydantic import ConfigDict, Field -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.cartography import CartographicallyHinted +from overture.schema.common.cartography import CartographicallyHinted from overture.schema.system.primitive import ( Geometry, GeometryType, diff --git a/packages/overture-schema-base-theme/src/overture/schema/base/land_use.py b/packages/overture-schema-base-theme/src/overture/schema/base/land_use.py index 362af100d..2cc340c17 100644 --- a/packages/overture-schema-base-theme/src/overture/schema/base/land_use.py +++ b/packages/overture-schema-base-theme/src/overture/schema/base/land_use.py @@ -9,11 +9,11 @@ from pydantic import ConfigDict, Field from overture.schema.base._common import Elevation, SourcedFromOpenStreetMap -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.models import Stacked -from overture.schema.core.names import Named +from overture.schema.common.models import Stacked +from overture.schema.common.names import Named from overture.schema.system.primitive import ( Geometry, GeometryType, diff --git a/packages/overture-schema-base-theme/src/overture/schema/base/water.py b/packages/overture-schema-base-theme/src/overture/schema/base/water.py index f4a7518e9..d90971bb4 100644 --- a/packages/overture-schema-base-theme/src/overture/schema/base/water.py +++ b/packages/overture-schema-base-theme/src/overture/schema/base/water.py @@ -7,11 +7,11 @@ from pydantic import ConfigDict, Field from overture.schema.base._common import SourcedFromOpenStreetMap -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.models import Stacked -from overture.schema.core.names import Named +from overture.schema.common.models import Stacked +from overture.schema.common.names import Named from overture.schema.system.primitive import ( Geometry, GeometryType, diff --git a/packages/overture-schema-buildings-theme/pyproject.toml b/packages/overture-schema-buildings-theme/pyproject.toml index 7495f4772..833b67a23 100644 --- a/packages/overture-schema-buildings-theme/pyproject.toml +++ b/packages/overture-schema-buildings-theme/pyproject.toml @@ -3,7 +3,7 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-core", + "overture-schema-common", "overture-schema-system", "pydantic>=2.12.0", ] @@ -20,7 +20,7 @@ Source = "https://github.com/OvertureMaps/schema" Issues = "https://github.com/OvertureMaps/schema/issues" [tool.uv.sources] -overture-schema-core = { workspace = true } +overture-schema-common = { workspace = true } overture-schema-system = { workspace = true } diff --git a/packages/overture-schema-buildings-theme/src/overture/schema/buildings/building.py b/packages/overture-schema-buildings-theme/src/overture/schema/buildings/building.py index 8c2d762bb..d40d3e296 100644 --- a/packages/overture-schema-buildings-theme/src/overture/schema/buildings/building.py +++ b/packages/overture-schema-buildings-theme/src/overture/schema/buildings/building.py @@ -9,9 +9,9 @@ from pydantic import ConfigDict, Field from overture.schema.buildings._common import Appearance -from overture.schema.core import OvertureFeature -from overture.schema.core.models import Stacked -from overture.schema.core.names import Named +from overture.schema.common import OvertureFeature +from overture.schema.common.models import Stacked +from overture.schema.common.names import Named from overture.schema.system.primitive import ( Geometry, GeometryType, diff --git a/packages/overture-schema-buildings-theme/src/overture/schema/buildings/building_part.py b/packages/overture-schema-buildings-theme/src/overture/schema/buildings/building_part.py index 533f4623a..ce0ed2c46 100644 --- a/packages/overture-schema-buildings-theme/src/overture/schema/buildings/building_part.py +++ b/packages/overture-schema-buildings-theme/src/overture/schema/buildings/building_part.py @@ -8,9 +8,9 @@ from overture.schema.buildings._common import Appearance from overture.schema.buildings.building import Building -from overture.schema.core import OvertureFeature -from overture.schema.core.models import Stacked -from overture.schema.core.names import Named +from overture.schema.common import OvertureFeature +from overture.schema.common.models import Stacked +from overture.schema.common.names import Named from overture.schema.system.primitive import ( Geometry, GeometryType, diff --git a/packages/overture-schema-cli/pyproject.toml b/packages/overture-schema-cli/pyproject.toml index ff2e5b7ef..dd0aa1bd8 100644 --- a/packages/overture-schema-cli/pyproject.toml +++ b/packages/overture-schema-cli/pyproject.toml @@ -3,7 +3,7 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-core", + "overture-schema-common", "overture-schema-system", "pydantic>=2.12.0", "pyyaml>=6.0.2", @@ -24,7 +24,7 @@ Source = "https://github.com/OvertureMaps/schema" Issues = "https://github.com/OvertureMaps/schema/issues" [tool.uv.sources] -overture-schema-core = { workspace = true } +overture-schema-common = { workspace = true } overture-schema-system = { workspace = true } [build-system] diff --git a/packages/overture-schema-cli/src/overture/schema/cli/commands.py b/packages/overture-schema-cli/src/overture/schema/cli/commands.py index 2590bf721..24062452e 100644 --- a/packages/overture-schema-cli/src/overture/schema/cli/commands.py +++ b/packages/overture-schema-cli/src/overture/schema/cli/commands.py @@ -17,7 +17,7 @@ from rich.text import Text from yamlcore import CoreLoader # type: ignore -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature from overture.schema.system.discovery import ( ModelDict, ModelKey, diff --git a/packages/overture-schema-codegen/README.md b/packages/overture-schema-codegen/README.md index e9f5b0fba..d83cb7967 100644 --- a/packages/overture-schema-codegen/README.md +++ b/packages/overture-schema-codegen/README.md @@ -43,7 +43,7 @@ Output Layout What to generate, where it goes, how outputs link ^ Extraction TypeInfo, FieldSpec, ModelSpec, UnionSpec ^ -Discovery discover_models() from overture-schema-core +Discovery discover_models() from overture-schema-common ``` **Discovery** loads registered Pydantic models via entry points. The return dict diff --git a/packages/overture-schema-codegen/docs/design.md b/packages/overture-schema-codegen/docs/design.md index f29b3ce87..662d77fc5 100644 --- a/packages/overture-schema-codegen/docs/design.md +++ b/packages/overture-schema-codegen/docs/design.md @@ -57,7 +57,7 @@ Output Layout What to generate, where it goes, how outputs link ^ Extraction TypeInfo, FieldSpec, ModelSpec, EnumSpec, ... ^ -Discovery discover_models() from overture-schema-core +Discovery discover_models() from overture-schema-common ``` `markdown/pipeline.py` orchestrates the pipeline without I/O: it expands feature trees, diff --git a/packages/overture-schema-codegen/docs/walkthrough.md b/packages/overture-schema-codegen/docs/walkthrough.md index f4d1562c2..397e082f5 100644 --- a/packages/overture-schema-codegen/docs/walkthrough.md +++ b/packages/overture-schema-codegen/docs/walkthrough.md @@ -43,7 +43,7 @@ does. ## 1. Discovery -The pipeline starts in `overture-schema-core`, not in the codegen package itself. +The pipeline starts in `overture-schema-common`, not in the codegen package itself. `discover_models()` calls `importlib.metadata.entry_points(group="overture.models")` and loads every registered model. Each entry point name encodes identity as a colon-delimited triple (`overture:buildings:building`); each value encodes the Python diff --git a/packages/overture-schema-codegen/pyproject.toml b/packages/overture-schema-codegen/pyproject.toml index e6f55e127..3019a6a92 100644 --- a/packages/overture-schema-codegen/pyproject.toml +++ b/packages/overture-schema-codegen/pyproject.toml @@ -7,7 +7,7 @@ dependencies = [ "click>=8.1", "jinja2>=3.0", "overture-schema-cli", - "overture-schema-core", + "overture-schema-common", "overture-schema-system", "tomli>=2.0; python_version < '3.11'", ] @@ -21,7 +21,7 @@ overture-codegen = "overture.schema.codegen.cli:main" [tool.uv.sources] overture-schema-cli = { workspace = true } -overture-schema-core = { workspace = true } +overture-schema-common = { workspace = true } overture-schema-system = { workspace = true } [tool.hatch.version] diff --git a/packages/overture-schema-codegen/tests/test_cli.py b/packages/overture-schema-codegen/tests/test_cli.py index 13957606e..606e1837f 100644 --- a/packages/overture-schema-codegen/tests/test_cli.py +++ b/packages/overture-schema-codegen/tests/test_cli.py @@ -153,10 +153,10 @@ def test_generate_markdown_shared_types_mirror_modules( ) assert result.exit_code == 0 - core_dir = tmp_path / "core" - assert core_dir.exists(), "core/ directory should exist" - subdirs = [d.name for d in core_dir.iterdir() if d.is_dir()] - assert len(subdirs) > 0, "core/ should have subdirectories" + common_dir = tmp_path / "common" + assert common_dir.exists(), "common/ directory should exist" + subdirs = [d.name for d in common_dir.iterdir() if d.is_dir()] + assert len(subdirs) > 0, "common/ should have subdirectories" def test_generate_multiple_themes_to_output_dir( self, cli_runner: CliRunner, tmp_path: Path @@ -265,10 +265,10 @@ def test_generates_category_files( data = json.loads(cat_file.read_text()) assert data["label"] == "Buildings" - def test_core_directory_has_category_file( + def test_common_directory_has_category_file( self, cli_runner: CliRunner, tmp_path: Path ) -> None: - """core/ directory should have _category_.json.""" + """common/ directory should have _category_.json.""" result = cli_runner.invoke( cli, [ @@ -282,10 +282,10 @@ def test_core_directory_has_category_file( assert result.exit_code == 0 - cat_file = tmp_path / "core" / "_category_.json" + cat_file = tmp_path / "common" / "_category_.json" assert cat_file.exists() data = json.loads(cat_file.read_text()) - assert data["label"] == "Core" + assert data["label"] == "Common" def test_feature_dirs_positioned_before_non_feature_dirs( self, cli_runner: CliRunner, tmp_path: Path @@ -309,9 +309,9 @@ def pos(dir_name: str) -> int: return result # Feature directories (contain feature pages) should sort before - # non-feature directories (core, system -- shared types only) + # non-feature directories (common, system -- shared types only) feature_positions = [pos("buildings"), pos("places"), pos("transportation")] - non_feature_positions = [pos("core"), pos("system")] + non_feature_positions = [pos("common"), pos("system")] assert max(feature_positions) < min(non_feature_positions) @@ -332,7 +332,7 @@ def test_subdirectories_have_no_position( assert result.exit_code == 0 data = json.loads( - (tmp_path / "core" / "scoping" / "_category_.json").read_text() + (tmp_path / "common" / "scoping" / "_category_.json").read_text() ) assert "position" not in data diff --git a/packages/overture-schema-codegen/tests/test_module_layout.py b/packages/overture-schema-codegen/tests/test_module_layout.py index 5766e60e0..74ff5ec54 100644 --- a/packages/overture-schema-codegen/tests/test_module_layout.py +++ b/packages/overture-schema-codegen/tests/test_module_layout.py @@ -28,7 +28,7 @@ def test_single_path_drops_last_component(self) -> None: def test_mixed_depth_paths(self) -> None: paths = [ "overture.schema.buildings", - "overture.schema.core.names.primary_name", + "overture.schema.common.names.primary_name", ] assert compute_schema_root(paths) == "overture.schema" @@ -86,8 +86,10 @@ def test_strips_root_prefix(self) -> None: def test_deep_path(self) -> None: assert ( - module_relpath("overture.schema.core.names.primary_name", "overture.schema") - == "core.names.primary_name" + module_relpath( + "overture.schema.common.names.primary_name", "overture.schema" + ) + == "common.names.primary_name" ) def test_module_equals_root(self) -> None: @@ -137,18 +139,18 @@ def test_package_keeps_all_parts(self) -> None: assert result == PurePosixPath("buildings") def test_file_module_drops_last(self) -> None: - reg = _make_registry(("overture.schema.core.names.primary_name", False)) + reg = _make_registry(("overture.schema.common.names.primary_name", False)) result = compute_output_dir( - "overture.schema.core.names.primary_name", "overture.schema", reg + "overture.schema.common.names.primary_name", "overture.schema", reg ) - assert result == PurePosixPath("core/names") + assert result == PurePosixPath("common/names") def test_deep_package(self) -> None: - reg = _make_registry(("overture.schema.core.names", True)) + reg = _make_registry(("overture.schema.common.names", True)) result = compute_output_dir( - "overture.schema.core.names", "overture.schema", reg + "overture.schema.common.names", "overture.schema", reg ) - assert result == PurePosixPath("core/names") + assert result == PurePosixPath("common/names") def test_file_module_in_theme(self) -> None: reg = _make_registry(("overture.schema.buildings.enums", False)) diff --git a/packages/overture-schema-codegen/tests/test_type_placement.py b/packages/overture-schema-codegen/tests/test_type_placement.py index 506a2afec..63e26457c 100644 --- a/packages/overture-schema-codegen/tests/test_type_placement.py +++ b/packages/overture-schema-codegen/tests/test_type_placement.py @@ -65,16 +65,16 @@ def test_same_directory(self) -> None: def test_sibling_directory(self) -> None: source = PurePosixPath("buildings/building.md") - target = PurePosixPath("core/names/names.md") - assert relative_link(source, target) == "../core/names/names.md" + target = PurePosixPath("common/names/names.md") + assert relative_link(source, target) == "../common/names/names.md" - def test_within_core(self) -> None: - source = PurePosixPath("core/names/names.md") - target = PurePosixPath("core/sources/sources.md") + def test_within_common(self) -> None: + source = PurePosixPath("common/names/names.md") + target = PurePosixPath("common/sources/sources.md") assert relative_link(source, target) == "../sources/sources.md" def test_to_aggregate_page(self) -> None: - source = PurePosixPath("core/names/names.md") + source = PurePosixPath("common/names/names.md") target = PurePosixPath("system/primitive/primitives.md") assert relative_link(source, target) == "../../system/primitive/primitives.md" @@ -95,13 +95,13 @@ def test_features_at_theme_level(self) -> None: ) def test_shared_types_mirror_source_modules(self) -> None: - """Core/system types land in directories matching their module path.""" + """Shared types land in directories matching their module path.""" specs = flat_specs_from_discovery("buildings") registry, _ = _build_registry(specs) names = {tid.name for tid in registry} if "Names" in names: - assert str(lookup_by_name(registry, "Names")).startswith("core/") + assert str(lookup_by_name(registry, "Names")).startswith("common/") def test_no_duplicate_paths(self) -> None: """No two individual types share an output path.""" @@ -133,15 +133,15 @@ def test_supplementary_types_nested_under_types(self) -> None: ) def test_shared_types_not_nested(self) -> None: - """Core/system supplementary types stay at their module-mirrored path.""" + """Common/system supplementary types stay at their module-mirrored path.""" specs = flat_specs_from_discovery("buildings") registry, _ = _build_registry(specs) - # Names is from overture.schema.core -- no features there, no nesting + # Names is from overture.schema.common -- no features there, no nesting names = {tid.name for tid in registry} if "Names" in names: path = str(lookup_by_name(registry, "Names")) - assert path.startswith("core/") + assert path.startswith("common/") assert "/types/" not in path diff --git a/packages/overture-schema-core/README.md b/packages/overture-schema-common/README.md similarity index 92% rename from packages/overture-schema-core/README.md rename to packages/overture-schema-common/README.md index cef61bc9a..ebb4a4534 100644 --- a/packages/overture-schema-core/README.md +++ b/packages/overture-schema-common/README.md @@ -1,11 +1,11 @@ -# Overture Schema Core +# Overture Schema Common Shared models and conventions for building Overture Maps feature types. Defines the base feature class all themes extend, a scoping framework for expressing conditional values (this speed limit applies *here*, *then*, to *these vehicles*), and common structures for names, sources, and cartographic hints. ## Installation ```bash -pip install overture-schema-core +pip install overture-schema-common ``` ## OvertureFeature @@ -14,7 +14,7 @@ Every Overture feature type inherits from `OvertureFeature`, which extends `syst ```python from typing import Literal -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature class Park(OvertureFeature[Literal["places"], Literal["park"]]): area_hectares: float | None = None @@ -26,7 +26,7 @@ Many Overture values only apply under specific conditions -- a speed limit that ```python from pydantic import BaseModel -from overture.schema.core.scoping import Scope, scoped +from overture.schema.common.scoping import Scope, scoped from overture.schema.system.primitive import float32 @scoped(Scope.GEOMETRIC_RANGE, Scope.TEMPORAL) @@ -62,8 +62,8 @@ Multilingual naming with support for common names, name rules (official, alterna ```python from typing import Literal -from overture.schema.core import OvertureFeature -from overture.schema.core.names import Named +from overture.schema.common import OvertureFeature +from overture.schema.common.names import Named class Lake(OvertureFeature[Literal["base"], Literal["water"]], Named): pass # inherits names: Names | None from Named @@ -76,7 +76,7 @@ Name rules support geometric range and side scoping for cases like a street whos Source attribution tracking. Each `SourceItem` identifies which dataset a feature or property came from, with optional license, record ID, update time, and confidence score. Source items support geometric range scoping for per-segment attribution. ```python -from overture.schema.core.sources import SourceItem +from overture.schema.common.sources import SourceItem sources = [ SourceItem(property="", dataset="OpenStreetMap"), diff --git a/packages/overture-schema-core/pyproject.toml b/packages/overture-schema-common/pyproject.toml similarity index 77% rename from packages/overture-schema-core/pyproject.toml rename to packages/overture-schema-common/pyproject.toml index d7d93d7c5..de356fa4a 100644 --- a/packages/overture-schema-core/pyproject.toml +++ b/packages/overture-schema-common/pyproject.toml @@ -3,12 +3,12 @@ requires = ["hatchling"] build-backend = "hatchling.build" [project] -name = "overture-schema-core" +name = "overture-schema-common" maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dynamic = ["version"] -description = "Core schemas for Overture Maps" +description = "Common components that are shared across Overture theme schemas" license = "MIT" dependencies = [ "overture-schema-system", @@ -25,7 +25,7 @@ Issues = "https://github.com/OvertureMaps/schema/issues" overture-schema-system = { workspace = true } [tool.hatch.version] -path = "src/overture/schema/core/__about__.py" +path = "src/overture/schema/common/__about__.py" [tool.hatch.build.targets.wheel] packages = ["src/overture"] @@ -38,4 +38,4 @@ dev = [ ] [project.entry-points."overture.tag_providers"] -theme = "overture.schema.core.tag_providers:theme_provider" +theme = "overture.schema.common.tag_providers:theme_provider" diff --git a/packages/overture-schema-core/src/overture/__init__.py b/packages/overture-schema-common/src/overture/__init__.py similarity index 100% rename from packages/overture-schema-core/src/overture/__init__.py rename to packages/overture-schema-common/src/overture/__init__.py diff --git a/packages/overture-schema-core/src/overture/schema/__init__.py b/packages/overture-schema-common/src/overture/schema/__init__.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/__init__.py rename to packages/overture-schema-common/src/overture/schema/__init__.py diff --git a/packages/overture-schema-core/src/overture/schema/core/__about__.py b/packages/overture-schema-common/src/overture/schema/common/__about__.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/__about__.py rename to packages/overture-schema-common/src/overture/schema/common/__about__.py diff --git a/packages/overture-schema-core/src/overture/schema/core/__init__.py b/packages/overture-schema-common/src/overture/schema/common/__init__.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/__init__.py rename to packages/overture-schema-common/src/overture/schema/common/__init__.py diff --git a/packages/overture-schema-core/src/overture/schema/core/cartography.py b/packages/overture-schema-common/src/overture/schema/common/cartography.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/cartography.py rename to packages/overture-schema-common/src/overture/schema/common/cartography.py diff --git a/packages/overture-schema-core/src/overture/schema/core/enums.py b/packages/overture-schema-common/src/overture/schema/common/enums.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/enums.py rename to packages/overture-schema-common/src/overture/schema/common/enums.py diff --git a/packages/overture-schema-core/src/overture/schema/core/models.py b/packages/overture-schema-common/src/overture/schema/common/models.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/models.py rename to packages/overture-schema-common/src/overture/schema/common/models.py diff --git a/packages/overture-schema-core/src/overture/schema/core/names.py b/packages/overture-schema-common/src/overture/schema/common/names.py similarity index 97% rename from packages/overture-schema-core/src/overture/schema/core/names.py rename to packages/overture-schema-common/src/overture/schema/common/names.py index 631ec2d8d..75c0decf3 100644 --- a/packages/overture-schema-core/src/overture/schema/core/names.py +++ b/packages/overture-schema-common/src/overture/schema/common/names.py @@ -9,7 +9,7 @@ Create a feature type that can have a name: >>> from typing import Literal ->>> from overture.schema.core import OvertureFeature +>>> from overture.schema.common import OvertureFeature >>> from overture.schema.system.primitive import Geometry >>> class MyFeature(OvertureFeature[Literal["mytheme"], Literal["mytype"]], Named): ... pass @@ -59,7 +59,7 @@ Create a name structure for a street where the name changes based on the side of the street. ->>> from overture.schema.core.scoping import Side +>>> from overture.schema.common.scoping import Side >>> names = Names( ... primary='Fir St', ... rules=[ @@ -75,8 +75,8 @@ from pydantic import BaseModel, Field -from overture.schema.core.models import Perspectives -from overture.schema.core.scoping import Scope, scoped +from overture.schema.common.models import Perspectives +from overture.schema.common.scoping import Scope, scoped from overture.schema.system.doc import DocumentedEnum from overture.schema.system.model_constraint import no_extra_fields from overture.schema.system.string import ( diff --git a/packages/overture-schema-core/src/overture/schema/core/py.typed b/packages/overture-schema-common/src/overture/schema/common/py.typed similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/py.typed rename to packages/overture-schema-common/src/overture/schema/common/py.typed diff --git a/packages/overture-schema-core/src/overture/schema/core/scoping/__init__.py b/packages/overture-schema-common/src/overture/schema/common/scoping/__init__.py similarity index 97% rename from packages/overture-schema-core/src/overture/schema/core/scoping/__init__.py rename to packages/overture-schema-common/src/overture/schema/common/scoping/__init__.py index c4a4fbbae..8f89d790f 100644 --- a/packages/overture-schema-core/src/overture/schema/core/scoping/__init__.py +++ b/packages/overture-schema-common/src/overture/schema/common/scoping/__init__.py @@ -17,7 +17,7 @@ >>> from typing import Annotated, Literal >>> from pydantic import BaseModel ->>> from overture.schema.core.models import OvertureFeature +>>> from overture.schema.common.models import OvertureFeature >>> from overture.schema.system.primitive import ( ... float32, ... Geometry, @@ -56,7 +56,7 @@ Types of scoping ================ -The authoritative list of available scopes is enumerated in `overture.schema.core.scoping.Scope`. +The authoritative list of available scopes is enumerated in `overture.schema.common.scoping.Scope`. The following scopes are available: @@ -71,7 +71,7 @@ >>> from typing import Annotated, Literal >>> from pydantic import BaseModel ->>> from overture.schema.core.models import OvertureFeature +>>> from overture.schema.common.models import OvertureFeature >>> from overture.schema.system.primitive import ( ... Geometry, ... GeometryType, @@ -119,7 +119,7 @@ >>> from typing import Annotated, Literal >>> from pydantic import BaseModel, Field ->>> from overture.schema.core.models import OvertureFeature +>>> from overture.schema.common.models import OvertureFeature >>> from overture.schema.system.primitive import ( ... Geometry, ... GeometryType, @@ -212,7 +212,7 @@ >>> from typing import Annotated, Literal >>> from pydantic import BaseModel ->>> from overture.schema.core.models import OvertureFeature +>>> from overture.schema.common.models import OvertureFeature >>> from overture.schema.system.primitive import ( ... Geometry, ... GeometryType, @@ -254,7 +254,7 @@ *etc.* When a model is decorated with vehicle scoping, a `when.vehicle` field is automatically added to the model. ->>> from overture.schema.core.unit import LengthUnit +>>> from overture.schema.common.unit import LengthUnit >>> from overture.schema.system.primitive import float32 ... >>> @scoped(Scope.VEHICLE) diff --git a/packages/overture-schema-core/src/overture/schema/core/scoping/heading.py b/packages/overture-schema-common/src/overture/schema/common/scoping/heading.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/scoping/heading.py rename to packages/overture-schema-common/src/overture/schema/common/scoping/heading.py diff --git a/packages/overture-schema-core/src/overture/schema/core/scoping/lr.py b/packages/overture-schema-common/src/overture/schema/common/scoping/lr.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/scoping/lr.py rename to packages/overture-schema-common/src/overture/schema/common/scoping/lr.py diff --git a/packages/overture-schema-core/src/overture/schema/core/scoping/opening_hours.py b/packages/overture-schema-common/src/overture/schema/common/scoping/opening_hours.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/scoping/opening_hours.py rename to packages/overture-schema-common/src/overture/schema/common/scoping/opening_hours.py diff --git a/packages/overture-schema-core/src/overture/schema/core/scoping/purpose_of_use.py b/packages/overture-schema-common/src/overture/schema/common/scoping/purpose_of_use.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/scoping/purpose_of_use.py rename to packages/overture-schema-common/src/overture/schema/common/scoping/purpose_of_use.py diff --git a/packages/overture-schema-core/src/overture/schema/core/scoping/recognized_status.py b/packages/overture-schema-common/src/overture/schema/common/scoping/recognized_status.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/scoping/recognized_status.py rename to packages/overture-schema-common/src/overture/schema/common/scoping/recognized_status.py diff --git a/packages/overture-schema-core/src/overture/schema/core/scoping/scoped.py b/packages/overture-schema-common/src/overture/schema/common/scoping/scoped.py similarity index 99% rename from packages/overture-schema-core/src/overture/schema/core/scoping/scoped.py rename to packages/overture-schema-common/src/overture/schema/common/scoping/scoped.py index c95795325..23fcc3404 100644 --- a/packages/overture-schema-core/src/overture/schema/core/scoping/scoped.py +++ b/packages/overture-schema-common/src/overture/schema/common/scoping/scoped.py @@ -19,7 +19,7 @@ Field, ) -from overture.schema.core.scoping.heading import Heading +from overture.schema.common.scoping.heading import Heading from overture.schema.system import create_model from overture.schema.system.field_constraint import UniqueItemsConstraint from overture.schema.system.model_constraint import ( diff --git a/packages/overture-schema-core/src/overture/schema/core/scoping/side.py b/packages/overture-schema-common/src/overture/schema/common/scoping/side.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/scoping/side.py rename to packages/overture-schema-common/src/overture/schema/common/scoping/side.py diff --git a/packages/overture-schema-core/src/overture/schema/core/scoping/travel_mode.py b/packages/overture-schema-common/src/overture/schema/common/scoping/travel_mode.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/scoping/travel_mode.py rename to packages/overture-schema-common/src/overture/schema/common/scoping/travel_mode.py diff --git a/packages/overture-schema-core/src/overture/schema/core/scoping/vehicle.py b/packages/overture-schema-common/src/overture/schema/common/scoping/vehicle.py similarity index 96% rename from packages/overture-schema-core/src/overture/schema/core/scoping/vehicle.py rename to packages/overture-schema-common/src/overture/schema/common/scoping/vehicle.py index cd8f3169f..801d35aa3 100644 --- a/packages/overture-schema-core/src/overture/schema/core/scoping/vehicle.py +++ b/packages/overture-schema-common/src/overture/schema/common/scoping/vehicle.py @@ -7,7 +7,7 @@ from pydantic import BaseModel, Field -from overture.schema.core.unit import LengthUnit, WeightUnit +from overture.schema.common.unit import LengthUnit, WeightUnit from overture.schema.system.model_constraint import no_extra_fields from overture.schema.system.primitive import float64, uint8 @@ -17,7 +17,7 @@ class VehicleDimension(str, Enum): Dimension of a vehicle, such as length, weight, or number of axles, that can be constrained in a `VehicleParameter`. - See also: `overture.schema.core.scoping.Scope.VEHICLE`. + See also: `overture.schema.common.scoping.Scope.VEHICLE`. """ AXLE_COUNT = "axle_count" diff --git a/packages/overture-schema-core/src/overture/schema/core/sources.py b/packages/overture-schema-common/src/overture/schema/common/sources.py similarity index 96% rename from packages/overture-schema-core/src/overture/schema/core/sources.py rename to packages/overture-schema-common/src/overture/schema/common/sources.py index 068cc4f07..d6e5c282a 100644 --- a/packages/overture-schema-core/src/overture/schema/core/sources.py +++ b/packages/overture-schema-common/src/overture/schema/common/sources.py @@ -8,8 +8,8 @@ from pydantic import BaseModel, Field -from overture.schema.core.scoping import Scope, scoped -from overture.schema.core.types import ConfidenceScore +from overture.schema.common.scoping import Scope, scoped +from overture.schema.common.types import ConfidenceScore from overture.schema.system.field_constraint import UniqueItemsConstraint from overture.schema.system.model_constraint import no_extra_fields from overture.schema.system.string import JsonPointer, StrippedString diff --git a/packages/overture-schema-core/src/overture/schema/core/tag_providers.py b/packages/overture-schema-common/src/overture/schema/common/tag_providers.py similarity index 95% rename from packages/overture-schema-core/src/overture/schema/core/tag_providers.py rename to packages/overture-schema-common/src/overture/schema/common/tag_providers.py index 0c4b69b9b..02b6ed161 100644 --- a/packages/overture-schema-core/src/overture/schema/core/tag_providers.py +++ b/packages/overture-schema-common/src/overture/schema/common/tag_providers.py @@ -1,4 +1,4 @@ -"""Tag providers for the core Overture schema package. +"""Tag providers for the common Overture schema package. Each provider inspects a discovered model and returns the set of tags that should be attached. Registered via the @@ -10,7 +10,7 @@ from pydantic import BaseModel -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature from overture.schema.system.discovery import ModelKey diff --git a/packages/overture-schema-core/src/overture/schema/core/types.py b/packages/overture-schema-common/src/overture/schema/common/types.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/types.py rename to packages/overture-schema-common/src/overture/schema/common/types.py diff --git a/packages/overture-schema-core/src/overture/schema/core/unit.py b/packages/overture-schema-common/src/overture/schema/common/unit.py similarity index 100% rename from packages/overture-schema-core/src/overture/schema/core/unit.py rename to packages/overture-schema-common/src/overture/schema/common/unit.py diff --git a/packages/overture-schema-core/tests/scoping/test_scoped.py b/packages/overture-schema-common/tests/scoping/test_scoped.py similarity index 99% rename from packages/overture-schema-core/tests/scoping/test_scoped.py rename to packages/overture-schema-common/tests/scoping/test_scoped.py index 313579dba..ddd013000 100644 --- a/packages/overture-schema-core/tests/scoping/test_scoped.py +++ b/packages/overture-schema-common/tests/scoping/test_scoped.py @@ -3,7 +3,7 @@ from typing import Annotated, cast, get_args, get_origin import pytest -from overture.schema.core.scoping import ( +from overture.schema.common.scoping import ( Heading, LinearlyReferencedPosition, Scope, diff --git a/packages/overture-schema-core/tests/test_core_tag_providers.py b/packages/overture-schema-common/tests/test_common_tag_providers.py similarity index 90% rename from packages/overture-schema-core/tests/test_core_tag_providers.py rename to packages/overture-schema-common/tests/test_common_tag_providers.py index 8c8b7dce3..4f1755332 100644 --- a/packages/overture-schema-core/tests/test_core_tag_providers.py +++ b/packages/overture-schema-common/tests/test_common_tag_providers.py @@ -1,10 +1,10 @@ -"""Tests for core tag providers.""" +"""Tests for common tag providers.""" from typing import Annotated, Literal import pytest -from overture.schema.core import OvertureFeature -from overture.schema.core.tag_providers import ( +from overture.schema.common import OvertureFeature +from overture.schema.common.tag_providers import ( theme_provider, ) from overture.schema.system.discovery import ModelKey @@ -52,8 +52,8 @@ class Rail(OvertureFeature[Literal["transportation"], Literal["rail"]]): ] provider_key = TagProviderKey( name="theme", - entry_point="core:theme_provider", - package_name="overture-schema-core", + entry_point="common:theme_provider", + package_name="overture-schema-common", ) providers: TagProviderDict = {provider_key: theme_provider} tags = _generate_tags(union, _empty_key(), providers) diff --git a/packages/overture-schema-core/tests/test_models.py b/packages/overture-schema-common/tests/test_models.py similarity index 99% rename from packages/overture-schema-core/tests/test_models.py rename to packages/overture-schema-common/tests/test_models.py index c36510bea..a2c83e69c 100644 --- a/packages/overture-schema-core/tests/test_models.py +++ b/packages/overture-schema-common/tests/test_models.py @@ -4,7 +4,7 @@ import pytest from deepdiff import DeepDiff -from overture.schema.core.models import OvertureFeature +from overture.schema.common.models import OvertureFeature from overture.schema.system.json_schema import GenerateOmitNullableOptionalJsonSchema from overture.schema.system.primitive import ( BBox, diff --git a/packages/overture-schema-core/tests/test_primitive_types.py b/packages/overture-schema-common/tests/test_primitive_types.py similarity index 100% rename from packages/overture-schema-core/tests/test_primitive_types.py rename to packages/overture-schema-common/tests/test_primitive_types.py diff --git a/packages/overture-schema-divisions-theme/pyproject.toml b/packages/overture-schema-divisions-theme/pyproject.toml index 3a0a631f5..0314d8d1b 100644 --- a/packages/overture-schema-divisions-theme/pyproject.toml +++ b/packages/overture-schema-divisions-theme/pyproject.toml @@ -3,7 +3,7 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-core", + "overture-schema-common", "overture-schema-system", "pydantic>=2.12.0", ] @@ -20,7 +20,7 @@ Source = "https://github.com/OvertureMaps/schema" Issues = "https://github.com/OvertureMaps/schema/issues" [tool.uv.sources] -overture-schema-core = { workspace = true } +overture-schema-common = { workspace = true } overture-schema-system = { workspace = true } [build-system] diff --git a/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division.py b/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division.py index 955b8d723..f0b00b246 100644 --- a/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division.py +++ b/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division.py @@ -9,15 +9,15 @@ from pydantic import BaseModel, ConfigDict, Field -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.cartography import CartographicallyHinted -from overture.schema.core.models import ( +from overture.schema.common.cartography import CartographicallyHinted +from overture.schema.common.models import ( Perspectives, ) -from overture.schema.core.names import CommonNames, Named, Names -from overture.schema.core.scoping.side import Side +from overture.schema.common.names import CommonNames, Named, Names +from overture.schema.common.scoping.side import Side from overture.schema.system.doc import DocumentedEnum from overture.schema.system.field_constraint import ( UniqueItemsConstraint, diff --git a/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division_area.py b/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division_area.py index 61a30f7ab..3127f4391 100644 --- a/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division_area.py +++ b/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division_area.py @@ -5,10 +5,10 @@ from pydantic import ConfigDict, Field -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.names import ( +from overture.schema.common.names import ( Named, Names, ) diff --git a/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division_boundary.py b/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division_boundary.py index 2a6fd886d..97f5ae885 100644 --- a/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division_boundary.py +++ b/packages/overture-schema-divisions-theme/src/overture/schema/divisions/division_boundary.py @@ -5,10 +5,10 @@ from pydantic import ConfigDict, Field -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.models import Perspectives +from overture.schema.common.models import Perspectives from overture.schema.system.doc import DocumentedEnum from overture.schema.system.field_constraint import UniqueItemsConstraint from overture.schema.system.model_constraint import ( diff --git a/packages/overture-schema-places-theme/pyproject.toml b/packages/overture-schema-places-theme/pyproject.toml index a4a1e294e..58fa3dd7a 100644 --- a/packages/overture-schema-places-theme/pyproject.toml +++ b/packages/overture-schema-places-theme/pyproject.toml @@ -3,7 +3,7 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-core", + "overture-schema-common", "overture-schema-system", "pydantic[email]>=2.12.0", ] @@ -20,7 +20,7 @@ Source = "https://github.com/OvertureMaps/schema" Issues = "https://github.com/OvertureMaps/schema/issues" [tool.uv.sources] -overture-schema-core = { workspace = true } +overture-schema-common = { workspace = true } overture-schema-system = { workspace = true } [build-system] diff --git a/packages/overture-schema-places-theme/src/overture/schema/places/place.py b/packages/overture-schema-places-theme/src/overture/schema/places/place.py index f086933c3..f83e54e0b 100644 --- a/packages/overture-schema-places-theme/src/overture/schema/places/place.py +++ b/packages/overture-schema-places-theme/src/overture/schema/places/place.py @@ -8,13 +8,13 @@ from pydantic import BaseModel, ConfigDict, EmailStr, Field, HttpUrl -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.names import ( +from overture.schema.common.names import ( Named, ) -from overture.schema.core.types import ( +from overture.schema.common.types import ( ConfidenceScore, ) from overture.schema.system.field_constraint import ( diff --git a/packages/overture-schema-system/README.md b/packages/overture-schema-system/README.md index 2d17df397..8c2daacbc 100644 --- a/packages/overture-schema-system/README.md +++ b/packages/overture-schema-system/README.md @@ -195,14 +195,14 @@ Specific plain tags and namespaces are reserved for designated packages. For exa |---|---| | `feature` (tag) | `overture-schema-system` | | `system:` (namespace) | `overture-schema-system` | -| `overture:` (namespace) | `overture-schema-core` | +| `overture:` (namespace) | `overture-schema-common` | When a provider attempts to set a reserved tag from an unauthorized package, discovery logs a warning and discards the tag. ### Built-in Providers - **`feature`** (in `system`) -- adds `feature` if any concrete arm is a `Feature` subclass. -- **`theme`** (in `core`) -- adds `overture:theme={theme}` for each `OvertureFeature` referenced. A discriminated-union feature whose arms span multiple themes contributes one tag per distinct theme. +- **`theme`** (in `common`) -- adds `overture:theme={theme}` for each `OvertureFeature` referenced. A discriminated-union feature whose arms span multiple themes contributes one tag per distinct theme. ### Selecting Models by Tag diff --git a/packages/overture-schema-system/src/overture/schema/system/discovery/discovery.py b/packages/overture-schema-system/src/overture/schema/system/discovery/discovery.py index bd271fa9e..2425a7551 100644 --- a/packages/overture-schema-system/src/overture/schema/system/discovery/discovery.py +++ b/packages/overture-schema-system/src/overture/schema/system/discovery/discovery.py @@ -27,7 +27,7 @@ } # Namespaces that are reserved and can only be set by specific packages. _RESERVED_NAMESPACES: dict[str, set[str]] = { - "overture": {"overture-schema-core"}, + "overture": {"overture-schema-common"}, "system": {"overture-schema-system"}, } diff --git a/packages/overture-schema-system/tests/test_tag_providers.py b/packages/overture-schema-system/tests/test_tag_providers.py index ef7bba7ec..33fd15392 100644 --- a/packages/overture-schema-system/tests/test_tag_providers.py +++ b/packages/overture-schema-system/tests/test_tag_providers.py @@ -16,9 +16,11 @@ @pytest.fixture -def core_tag_provider() -> TagProviderKey: +def common_tag_provider() -> TagProviderKey: return TagProviderKey( - name="core", entry_point="core:Provider", package_name="overture-schema-core" + name="common", + entry_point="common:Provider", + package_name="overture-schema-common", ) @@ -136,13 +138,13 @@ def test_reserved_namespace( def test_allowed_reserved_namespace( - core_tag_provider: TagProviderKey, + common_tag_provider: TagProviderKey, system_tag_provider: TagProviderKey, any_key: ModelKey, any_model: type[BaseModel], ) -> None: - core_providers = {core_tag_provider: fake_provider("overture:feature")} - assert _generate_tags(any_model, any_key, core_providers) == {"overture:feature"} + common_providers = {common_tag_provider: fake_provider("overture:feature")} + assert _generate_tags(any_model, any_key, common_providers) == {"overture:feature"} system_providers = {system_tag_provider: fake_provider("system:feature")} assert _generate_tags(any_model, any_key, system_providers) == {"system:feature"} diff --git a/packages/overture-schema-transportation-theme/pyproject.toml b/packages/overture-schema-transportation-theme/pyproject.toml index adc34c018..547b54401 100644 --- a/packages/overture-schema-transportation-theme/pyproject.toml +++ b/packages/overture-schema-transportation-theme/pyproject.toml @@ -3,7 +3,7 @@ maintainers = [ {name = "Overture Maps Schema Working Group"}, ] dependencies = [ - "overture-schema-core", + "overture-schema-common", "overture-schema-system", "pydantic>=2.12.0", ] @@ -20,7 +20,7 @@ Source = "https://github.com/OvertureMaps/schema" Issues = "https://github.com/OvertureMaps/schema/issues" [tool.uv.sources] -overture-schema-core = { workspace = true } +overture-schema-common = { workspace = true } overture-schema-system = { workspace = true } diff --git a/packages/overture-schema-transportation-theme/src/overture/schema/transportation/connector/models.py b/packages/overture-schema-transportation-theme/src/overture/schema/transportation/connector/models.py index 9ec0e7d01..cb7d4e482 100644 --- a/packages/overture-schema-transportation-theme/src/overture/schema/transportation/connector/models.py +++ b/packages/overture-schema-transportation-theme/src/overture/schema/transportation/connector/models.py @@ -4,7 +4,7 @@ from pydantic import ConfigDict, Field -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) from overture.schema.system.primitive import ( diff --git a/packages/overture-schema-transportation-theme/src/overture/schema/transportation/models.py b/packages/overture-schema-transportation-theme/src/overture/schema/transportation/models.py index c4fbae42c..0d2685df9 100644 --- a/packages/overture-schema-transportation-theme/src/overture/schema/transportation/models.py +++ b/packages/overture-schema-transportation-theme/src/overture/schema/transportation/models.py @@ -4,12 +4,12 @@ from pydantic import BaseModel, ConfigDict, Field -from overture.schema.core import OvertureFeature -from overture.schema.core.scoping import Heading, Scope, scoped -from overture.schema.core.types import ( +from overture.schema.common import OvertureFeature +from overture.schema.common.scoping import Heading, Scope, scoped +from overture.schema.common.types import ( Level, ) -from overture.schema.core.unit import SpeedUnit +from overture.schema.common.unit import SpeedUnit from overture.schema.system.field_constraint import UniqueItemsConstraint from overture.schema.system.model_constraint import ( no_extra_fields, diff --git a/packages/overture-schema-transportation-theme/src/overture/schema/transportation/segment/models.py b/packages/overture-schema-transportation-theme/src/overture/schema/transportation/segment/models.py index 4d3d0f972..3643fd572 100644 --- a/packages/overture-schema-transportation-theme/src/overture/schema/transportation/segment/models.py +++ b/packages/overture-schema-transportation-theme/src/overture/schema/transportation/segment/models.py @@ -4,10 +4,10 @@ from pydantic import ConfigDict, Field, Tag -from overture.schema.core import ( +from overture.schema.common import ( OvertureFeature, ) -from overture.schema.core.names import ( +from overture.schema.common.names import ( Named, ) from overture.schema.system.feature import Feature diff --git a/packages/overture-schema/pyproject.toml b/packages/overture-schema/pyproject.toml index 432116454..eb9bb8940 100644 --- a/packages/overture-schema/pyproject.toml +++ b/packages/overture-schema/pyproject.toml @@ -9,7 +9,7 @@ dependencies = [ "overture-schema-divisions-theme", "overture-schema-places-theme", "overture-schema-transportation-theme", - "overture-schema-core", + "overture-schema-common", "pydantic>=2.12.0", "pyyaml>=6.0.2", "overture-schema-cli", @@ -31,7 +31,7 @@ overture-schema-addresses-theme = { workspace = true } overture-schema-base-theme = { workspace = true } overture-schema-buildings-theme = { workspace = true } overture-schema-cli = { workspace = true } -overture-schema-core = { workspace = true } +overture-schema-common = { workspace = true } overture-schema-divisions-theme = { workspace = true } overture-schema-places-theme = { workspace = true } overture-schema-transportation-theme = { workspace = true } diff --git a/packages/overture-schema/src/overture/schema/__init__.py b/packages/overture-schema/src/overture/schema/__init__.py index 2f5a0b7a0..3728b389a 100644 --- a/packages/overture-schema/src/overture/schema/__init__.py +++ b/packages/overture-schema/src/overture/schema/__init__.py @@ -8,7 +8,7 @@ from pydantic import BaseModel, Field, Tag, TypeAdapter -from overture.schema.core import OvertureFeature +from overture.schema.common import OvertureFeature from overture.schema.system.discovery import discover_models from overture.schema.system.feature import Feature diff --git a/pyproject.toml b/pyproject.toml index 88c227eb3..6046d76a6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -68,7 +68,7 @@ pythonpath = [ "packages/overture-schema-buildings-theme/tests", "packages/overture-schema-cli/tests", "packages/overture-schema-codegen/tests", - "packages/overture-schema-core/tests", + "packages/overture-schema-common/tests", "packages/overture-schema-divisions-theme/tests", "packages/overture-schema-places-theme/tests", "packages/overture-schema-system/tests", diff --git a/uv.lock b/uv.lock index d65a9bac3..0bbdf1cda 100644 --- a/uv.lock +++ b/uv.lock @@ -19,7 +19,7 @@ members = [ "overture-schema-buildings-theme", "overture-schema-cli", "overture-schema-codegen", - "overture-schema-core", + "overture-schema-common", "overture-schema-divisions-theme", "overture-schema-places-theme", "overture-schema-system", @@ -656,7 +656,7 @@ dependencies = [ { name = "overture-schema-base-theme" }, { name = "overture-schema-buildings-theme" }, { name = "overture-schema-cli" }, - { name = "overture-schema-core" }, + { name = "overture-schema-common" }, { name = "overture-schema-divisions-theme" }, { name = "overture-schema-places-theme" }, { name = "overture-schema-transportation-theme" }, @@ -677,7 +677,7 @@ requires-dist = [ { name = "overture-schema-base-theme", editable = "packages/overture-schema-base-theme" }, { name = "overture-schema-buildings-theme", editable = "packages/overture-schema-buildings-theme" }, { name = "overture-schema-cli", editable = "packages/overture-schema-cli" }, - { name = "overture-schema-core", editable = "packages/overture-schema-core" }, + { name = "overture-schema-common", editable = "packages/overture-schema-common" }, { name = "overture-schema-divisions-theme", editable = "packages/overture-schema-divisions-theme" }, { name = "overture-schema-places-theme", editable = "packages/overture-schema-places-theme" }, { name = "overture-schema-transportation-theme", editable = "packages/overture-schema-transportation-theme" }, @@ -696,14 +696,14 @@ dev = [ name = "overture-schema-addresses-theme" source = { editable = "packages/overture-schema-addresses-theme" } dependencies = [ - { name = "overture-schema-core" }, + { name = "overture-schema-common" }, { name = "overture-schema-system" }, { name = "pydantic" }, ] [package.metadata] requires-dist = [ - { name = "overture-schema-core", editable = "packages/overture-schema-core" }, + { name = "overture-schema-common", editable = "packages/overture-schema-common" }, { name = "overture-schema-system", editable = "packages/overture-schema-system" }, { name = "pydantic", specifier = ">=2.12.0" }, ] @@ -712,14 +712,14 @@ requires-dist = [ name = "overture-schema-annex" source = { editable = "packages/overture-schema-annex" } dependencies = [ - { name = "overture-schema-core" }, + { name = "overture-schema-common" }, { name = "overture-schema-system" }, { name = "pydantic" }, ] [package.metadata] requires-dist = [ - { name = "overture-schema-core", editable = "packages/overture-schema-core" }, + { name = "overture-schema-common", editable = "packages/overture-schema-common" }, { name = "overture-schema-system", editable = "packages/overture-schema-system" }, { name = "pydantic", specifier = ">=2.12.0" }, ] @@ -728,14 +728,14 @@ requires-dist = [ name = "overture-schema-base-theme" source = { editable = "packages/overture-schema-base-theme" } dependencies = [ - { name = "overture-schema-core" }, + { name = "overture-schema-common" }, { name = "overture-schema-system" }, { name = "pydantic" }, ] [package.metadata] requires-dist = [ - { name = "overture-schema-core", editable = "packages/overture-schema-core" }, + { name = "overture-schema-common", editable = "packages/overture-schema-common" }, { name = "overture-schema-system", editable = "packages/overture-schema-system" }, { name = "pydantic", specifier = ">=2.12.0" }, ] @@ -744,14 +744,14 @@ requires-dist = [ name = "overture-schema-buildings-theme" source = { editable = "packages/overture-schema-buildings-theme" } dependencies = [ - { name = "overture-schema-core" }, + { name = "overture-schema-common" }, { name = "overture-schema-system" }, { name = "pydantic" }, ] [package.metadata] requires-dist = [ - { name = "overture-schema-core", editable = "packages/overture-schema-core" }, + { name = "overture-schema-common", editable = "packages/overture-schema-common" }, { name = "overture-schema-system", editable = "packages/overture-schema-system" }, { name = "pydantic", specifier = ">=2.12.0" }, ] @@ -761,7 +761,7 @@ name = "overture-schema-cli" source = { editable = "packages/overture-schema-cli" } dependencies = [ { name = "click" }, - { name = "overture-schema-core" }, + { name = "overture-schema-common" }, { name = "overture-schema-system" }, { name = "pydantic" }, { name = "pyyaml" }, @@ -779,7 +779,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "click", specifier = ">=8.1" }, - { name = "overture-schema-core", editable = "packages/overture-schema-core" }, + { name = "overture-schema-common", editable = "packages/overture-schema-common" }, { name = "overture-schema-system", editable = "packages/overture-schema-system" }, { name = "pydantic", specifier = ">=2.12.0" }, { name = "pyyaml", specifier = ">=6.0.2" }, @@ -801,7 +801,7 @@ dependencies = [ { name = "click" }, { name = "jinja2" }, { name = "overture-schema-cli" }, - { name = "overture-schema-core" }, + { name = "overture-schema-common" }, { name = "overture-schema-system" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] @@ -811,14 +811,14 @@ requires-dist = [ { name = "click", specifier = ">=8.1" }, { name = "jinja2", specifier = ">=3.0" }, { name = "overture-schema-cli", editable = "packages/overture-schema-cli" }, - { name = "overture-schema-core", editable = "packages/overture-schema-core" }, + { name = "overture-schema-common", editable = "packages/overture-schema-common" }, { name = "overture-schema-system", editable = "packages/overture-schema-system" }, { name = "tomli", marker = "python_full_version < '3.11'", specifier = ">=2.0" }, ] [[package]] -name = "overture-schema-core" -source = { editable = "packages/overture-schema-core" } +name = "overture-schema-common" +source = { editable = "packages/overture-schema-common" } dependencies = [ { name = "overture-schema-system" }, { name = "pydantic" }, @@ -850,14 +850,14 @@ dev = [ name = "overture-schema-divisions-theme" source = { editable = "packages/overture-schema-divisions-theme" } dependencies = [ - { name = "overture-schema-core" }, + { name = "overture-schema-common" }, { name = "overture-schema-system" }, { name = "pydantic" }, ] [package.metadata] requires-dist = [ - { name = "overture-schema-core", editable = "packages/overture-schema-core" }, + { name = "overture-schema-common", editable = "packages/overture-schema-common" }, { name = "overture-schema-system", editable = "packages/overture-schema-system" }, { name = "pydantic", specifier = ">=2.12.0" }, ] @@ -866,14 +866,14 @@ requires-dist = [ name = "overture-schema-places-theme" source = { editable = "packages/overture-schema-places-theme" } dependencies = [ - { name = "overture-schema-core" }, + { name = "overture-schema-common" }, { name = "overture-schema-system" }, { name = "pydantic", extra = ["email"] }, ] [package.metadata] requires-dist = [ - { name = "overture-schema-core", editable = "packages/overture-schema-core" }, + { name = "overture-schema-common", editable = "packages/overture-schema-common" }, { name = "overture-schema-system", editable = "packages/overture-schema-system" }, { name = "pydantic", extras = ["email"], specifier = ">=2.12.0" }, ] @@ -910,14 +910,14 @@ dev = [ name = "overture-schema-transportation-theme" source = { editable = "packages/overture-schema-transportation-theme" } dependencies = [ - { name = "overture-schema-core" }, + { name = "overture-schema-common" }, { name = "overture-schema-system" }, { name = "pydantic" }, ] [package.metadata] requires-dist = [ - { name = "overture-schema-core", editable = "packages/overture-schema-core" }, + { name = "overture-schema-common", editable = "packages/overture-schema-common" }, { name = "overture-schema-system", editable = "packages/overture-schema-system" }, { name = "pydantic", specifier = ">=2.12.0" }, ]