Skip to content

Commit 5f3a0e2

Browse files
committed
Fallback on semver compliant string instead of pep440
1 parent ba8532c commit 5f3a0e2

File tree

7 files changed

+42
-13
lines changed

7 files changed

+42
-13
lines changed

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
project = "AIND VR Foraging"
2020
copyright = "2025, Allen Institute for Neural Dynamics"
2121
author = "Bruno Cruz"
22-
release = aind_behavior_vr_foraging.__version__
22+
release = aind_behavior_vr_foraging.__semver__
2323

2424
# -- General configuration ---------------------------------------------------
2525
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,30 @@
1-
__version__ = "0.6.0-rc2"
1+
import re
2+
from importlib.metadata import PackageNotFoundError, version
3+
4+
5+
def pep440_to_semver(ver: str) -> str:
6+
"""
7+
Convert a PEP 440 version to a SemVer-compatible string.
8+
9+
Examples:
10+
1.2.3rc2 -> 1.2.3-rc2
11+
1.2.3a1 -> 1.2.3-a1
12+
1.2.3b1 -> 1.2.3-b1
13+
1.2.3.dev4 -> 1.2.3-dev4
14+
1.2.3.post1 -> 1.2.3+post1
15+
"""
16+
# pre-release: a, b, rc -> -aN, -bN, -rcN
17+
ver = re.sub(r"(?<=\d)(a|b|rc)(\d+)", r"-\1\2", ver)
18+
# dev release: .devN -> -devN
19+
ver = re.sub(r"\.dev(\d+)", r"-dev\1", ver)
20+
# post release: .postN -> +postN
21+
ver = re.sub(r"\.post(\d+)", r"+post\1", ver)
22+
return ver
23+
24+
25+
try:
26+
__semver__ = version(__name__)
27+
except PackageNotFoundError:
28+
__semver__ = "0.0.0"
29+
30+
__semver__ = pep440_to_semver(__semver__)

src/aind_behavior_vr_foraging/cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from pydantic import Field, RootModel
44
from pydantic_settings import BaseSettings, CliApp, CliSubCommand
55

6-
from aind_behavior_vr_foraging import __version__, regenerate
6+
from aind_behavior_vr_foraging import __semver__, regenerate
77
from aind_behavior_vr_foraging.data_mappers import DataMapperCli
88
from aind_behavior_vr_foraging.data_qc import DataQcCli
99
from aind_behavior_vr_foraging.launcher import ClabeCli
@@ -13,7 +13,7 @@ class VersionCli(RootModel):
1313
root: t.Any
1414

1515
def cli_cmd(self) -> None:
16-
print(__version__)
16+
print(__semver__)
1717

1818

1919
class DslRegenerateCli(RootModel):

src/aind_behavior_vr_foraging/data_contract/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import contraqctor
77
import semver
88

9-
from aind_behavior_vr_foraging import __version__
9+
from aind_behavior_vr_foraging import __semver__
1010

1111

1212
def _dataset_lookup_helper(version: str) -> t.Callable[[Path], contraqctor.contract.Dataset]:
@@ -22,7 +22,7 @@ def _dataset_lookup_helper(version: str) -> t.Callable[[Path], contraqctor.contr
2222
return partial(_dataset, version=version)
2323

2424

25-
def dataset(path: os.PathLike, version: str = __version__) -> contraqctor.contract.Dataset:
25+
def dataset(path: os.PathLike, version: str = __semver__) -> contraqctor.contract.Dataset:
2626
"""
2727
Loads the dataset for the Aind VR Foraging project from a specified version.
2828
@@ -37,7 +37,7 @@ def dataset(path: os.PathLike, version: str = __version__) -> contraqctor.contra
3737
return dataset_constructor(Path(path))
3838

3939

40-
def render_dataset(version: str = __version__) -> str:
40+
def render_dataset(version: str = __semver__) -> str:
4141
"""Renders the dataset as a tree-like structure for visualization."""
4242
from contraqctor.contract.utils import print_data_stream_tree
4343

src/aind_behavior_vr_foraging/data_qc.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from contraqctor.contract.harp import HarpDevice
1111
from matplotlib import pyplot as plt
1212

13-
from aind_behavior_vr_foraging import __version__
13+
from aind_behavior_vr_foraging import __semver__
1414
from aind_behavior_vr_foraging.data_contract import dataset
1515
from aind_behavior_vr_foraging.rig import AindVrForagingRig
1616

@@ -284,7 +284,7 @@ class DataQcCli(pydantic_settings.BaseSettings, cli_kebab_case=True):
284284
data_path: pydantic_settings.CliPositionalArg[os.PathLike] = pydantic.Field(
285285
description="Path to the session data directory."
286286
)
287-
version: str = pydantic.Field(default=__version__, description="Version of the dataset.")
287+
version: str = pydantic.Field(default=__semver__, description="Version of the dataset.")
288288

289289
def cli_cmd(self):
290290
vr_dataset = dataset(Path(self.data_path), self.version)

src/aind_behavior_vr_foraging/rig.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import aind_behavior_services.rig as rig
1212
from pydantic import BaseModel, Field
1313

14-
from aind_behavior_vr_foraging import __version__
14+
from aind_behavior_vr_foraging import __semver__
1515

1616

1717
class AindManipulatorAdditionalSettings(BaseModel):
@@ -35,7 +35,7 @@ class RigCalibration(BaseModel):
3535

3636

3737
class AindVrForagingRig(rig.AindBehaviorRigModel):
38-
version: Literal[__version__] = __version__
38+
version: Literal[__semver__] = __semver__
3939
triggered_camera_controller: rig.cameras.CameraController[rig.cameras.SpinnakerCamera] = Field(
4040
..., description="Required camera controller to triggered cameras."
4141
)

src/aind_behavior_vr_foraging/task_logic.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from typing_extensions import TypeAliasType
99

1010
from aind_behavior_vr_foraging import (
11-
__version__,
11+
__semver__,
1212
)
1313

1414
logger = logging.getLogger(__name__)
@@ -1006,6 +1006,6 @@ class AindVrForagingTaskLogic(AindBehaviorTaskLogicModel):
10061006
It includes all task parameters, environment specifications, and control settings.
10071007
"""
10081008

1009-
version: Literal[__version__] = __version__
1009+
version: Literal[__semver__] = __semver__
10101010
name: Literal["AindVrForaging"] = Field(default="AindVrForaging", description="Name of the task logic", frozen=True)
10111011
task_parameters: AindVrForagingTaskParameters = Field(description="Parameters of the task logic")

0 commit comments

Comments
 (0)