Skip to content

Commit cf82cf3

Browse files
authored
Merge pull request #1993 from pupil-labs/better-version-comparison
Better version comparison
2 parents dfad579 + 39f6f4e commit cf82cf3

File tree

22 files changed

+130
-125
lines changed

22 files changed

+130
-125
lines changed

pupil_src/launchables/eye.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def eye(
141141
# helpers/utils
142142
from uvc import get_time_monotonic
143143
from file_methods import Persistent_Dict
144-
from version_utils import VersionFormat
144+
from version_utils import parse_version
145145
from methods import normalize, denormalize, timer
146146
from av_writer import JPEG_Writer, MPEG_Writer, NonMonotonicTimestampError
147147
from ndsi import H264Writer
@@ -362,7 +362,7 @@ def on_drop(window, count, paths):
362362
session_settings = Persistent_Dict(
363363
os.path.join(g_pool.user_dir, "user_settings_eye{}".format(eye_id))
364364
)
365-
if VersionFormat(session_settings.get("version", "0.0")) != g_pool.version:
365+
if parse_version(session_settings.get("version", "0.0")) != g_pool.version:
366366
logger.info(
367367
"Session setting are from a different version of this app. I will not use those."
368368
)

pupil_src/launchables/player.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def player(
8383
from video_capture import File_Source
8484

8585
# helpers/utils
86-
from version_utils import VersionFormat
86+
from version_utils import parse_version
8787
from methods import normalize, denormalize, delta_t, get_system_info
8888
import player_methods as pm
8989
from pupil_recording import PupilRecording
@@ -131,7 +131,7 @@ def player(
131131
InvalidRecordingException,
132132
)
133133

134-
assert VersionFormat(pyglui_version) >= VersionFormat(
134+
assert parse_version(pyglui_version) >= parse_version(
135135
"1.28"
136136
), "pyglui out of date, please upgrade to newest version"
137137

@@ -346,7 +346,7 @@ def get_dt():
346346
session_settings = Persistent_Dict(
347347
os.path.join(user_dir, "user_settings_player")
348348
)
349-
if VersionFormat(session_settings.get("version", "0.0")) != app_version:
349+
if parse_version(session_settings.get("version", "0.0")) != app_version:
350350
logger.info(
351351
"Session setting are a different version of this app. I will not use those."
352352
)
@@ -793,7 +793,7 @@ def player_drop(
793793
import glfw
794794
import gl_utils
795795
from OpenGL.GL import glClearColor
796-
from version_utils import VersionFormat
796+
from version_utils import parse_version
797797
from file_methods import Persistent_Dict
798798
from pyglui.pyfontstash import fontstash
799799
from pyglui.ui import get_roboto_font_path
@@ -830,7 +830,7 @@ def on_drop(window, count, paths):
830830
session_settings = Persistent_Dict(
831831
os.path.join(user_dir, "user_settings_player")
832832
)
833-
if VersionFormat(session_settings.get("version", "0.0")) != app_version:
833+
if parse_version(session_settings.get("version", "0.0")) != app_version:
834834
logger.info(
835835
"Session setting are from a different version of this app. I will not use those."
836836
)

pupil_src/launchables/service.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def stop_eye_process(eye_id):
8888
# helpers/utils
8989
from file_methods import Persistent_Dict
9090
from methods import delta_t, get_system_info
91-
from version_utils import VersionFormat
91+
from version_utils import parse_version
9292
import audio
9393
from uvc import get_time_monotonic
9494

@@ -183,7 +183,7 @@ def get_dt():
183183
session_settings = Persistent_Dict(
184184
os.path.join(g_pool.user_dir, "user_settings_service")
185185
)
186-
if session_settings.get("version", VersionFormat("0.0")) < g_pool.version:
186+
if parse_version(session_settings.get("version", "0.0")) < g_pool.version:
187187
logger.info(
188188
"Session setting are from older version of this app. I will not use those."
189189
)

pupil_src/launchables/world.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,10 @@ def detection_enabled_setter(is_on: bool):
118118

119119
# display
120120
import glfw
121-
from version_utils import VersionFormat
121+
from version_utils import parse_version
122122
from pyglui import ui, cygl, __version__ as pyglui_version
123123

124-
assert VersionFormat(pyglui_version) >= VersionFormat(
124+
assert parse_version(pyglui_version) >= parse_version(
125125
"1.27"
126126
), "pyglui out of date, please upgrade to newest version"
127127
from pyglui.cygl.utils import Named_Texture
@@ -441,7 +441,7 @@ def get_dt():
441441
session_settings = Persistent_Dict(
442442
os.path.join(g_pool.user_dir, "user_settings_world")
443443
)
444-
if VersionFormat(session_settings.get("version", "0.0")) != g_pool.version:
444+
if parse_version(session_settings.get("version", "0.0")) != g_pool.version:
445445
logger.info(
446446
"Session setting are from a different version of this app. I will not use those."
447447
)

pupil_src/shared_modules/audio_playback.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
import gl_utils
2727
from audio_utils import Audio_Viz_Transform, NoAudioLoadedError, load_audio
2828
from plugin import System_Plugin_Base
29-
from version_utils import VersionFormat
29+
from version_utils import parse_version
3030

3131

32-
assert VersionFormat(av.__version__) >= VersionFormat("0.4.4")
32+
assert parse_version(av.__version__) >= parse_version("0.4.4")
3333

3434

3535
logger = logging.getLogger(__name__)

pupil_src/shared_modules/os_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@
1010
"""
1111

1212
import platform, sys, os, time, traceback
13-
from distutils.version import LooseVersion as VersionFormat
1413
import subprocess as sp
14+
from version_utils import parse_version
1515

1616
import logging
1717

1818
logger = logging.getLogger(__name__)
1919

2020
os_name = platform.system()
2121
if os_name == "Darwin":
22-
mac_version = VersionFormat(platform.mac_ver()[0])
23-
min_version = VersionFormat("10.11.0")
22+
mac_version = parse_version(platform.mac_ver()[0])
23+
min_version = parse_version("10.11.0")
2424

2525
if os_name == "Darwin" and mac_version >= min_version:
2626

pupil_src/shared_modules/pupil_detector_plugins/detector_3d_plugin.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
---------------------------------------------------------------------------~(*)
1010
"""
1111
import logging
12-
from distutils.version import LooseVersion as VersionFormat
12+
from version_utils import parse_version
1313

1414
import pupil_detectors
1515
from pupil_detectors import Detector3D, DetectorBase, Roi
@@ -32,7 +32,7 @@
3232

3333
logger = logging.getLogger(__name__)
3434

35-
if VersionFormat(pupil_detectors.__version__) < VersionFormat("1.0.5"):
35+
if parse_version(pupil_detectors.__version__) < parse_version("1.0.5"):
3636
msg = (
3737
f"This version of Pupil requires pupil_detectors >= 1.0.5."
3838
f" You are running with pupil_detectors == {pupil_detectors.__version__}."

pupil_src/shared_modules/pupil_recording/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88
See COPYING and COPYING.LESSER for license details.
99
---------------------------------------------------------------------------~(*)
1010
"""
11-
12-
from packaging.version import Version
13-
1411
from .info import RecordingInfoFile
1512
from .recording import PupilRecording
1613
from .recording_utils import InvalidRecordingException, assert_valid_recording_type

pupil_src/shared_modules/pupil_recording/info/__init__.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@
88
See COPYING and COPYING.LESSER for license details.
99
---------------------------------------------------------------------------~(*)
1010
"""
11-
12-
from .. import Version
1311
from .recording_info import RecordingInfoFile
1412
from .recording_info_2_0 import _RecordingInfoFile_2_0
1513
from .recording_info_2_1 import _RecordingInfoFile_2_1
1614
from .recording_info_2_2 import _RecordingInfoFile_2_2
15+
from version_utils import parse_version
1716

18-
RecordingInfoFile.register_child_class(Version("2.0"), _RecordingInfoFile_2_0)
19-
RecordingInfoFile.register_child_class(Version("2.1"), _RecordingInfoFile_2_1)
20-
RecordingInfoFile.register_child_class(Version("2.2"), _RecordingInfoFile_2_2)
17+
RecordingInfoFile.register_child_class(parse_version("2.0"), _RecordingInfoFile_2_0)
18+
RecordingInfoFile.register_child_class(parse_version("2.1"), _RecordingInfoFile_2_1)
19+
RecordingInfoFile.register_child_class(parse_version("2.2"), _RecordingInfoFile_2_2)

pupil_src/shared_modules/pupil_recording/info/recording_info.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@
1818
import typing as T
1919
import uuid
2020

21-
from version_utils import get_version
21+
from version_utils import get_version, parse_version, ParsedVersion
2222

23-
from .. import Version
2423

25-
__all__ = ["RecordingInfo", "RecordingInfoFile", "RecordingInfoInvalidError", "Version"]
24+
__all__ = ["RecordingInfo", "RecordingInfoFile", "RecordingInfoInvalidError"]
2625

2726

2827
logger = logging.getLogger(__name__)
@@ -72,12 +71,12 @@ def __len__(self):
7271

7372
@property
7473
@abc.abstractmethod
75-
def meta_version(self) -> Version:
74+
def meta_version(self) -> ParsedVersion:
7675
pass
7776

7877
@property
7978
@abc.abstractmethod
80-
def min_player_version(self) -> Version:
79+
def min_player_version(self) -> ParsedVersion:
8180
pass
8281

8382
@property
@@ -377,11 +376,11 @@ def does_recording_contain_info_file(rec_dir: str) -> bool:
377376
return os.path.isfile(file_path)
378377

379378
@staticmethod
380-
def detect_recording_info_file_version(rec_dir: str) -> Version:
379+
def detect_recording_info_file_version(rec_dir: str) -> ParsedVersion:
381380
file_path = RecordingInfoFile._info_file_path(rec_dir=rec_dir)
382381
with open(file_path, "r") as file:
383382
read_dict = RecordingInfoFile._read_dict_from_file(file=file)
384-
return Version(read_dict["meta_version"])
383+
return parse_version(read_dict["meta_version"])
385384

386385
@staticmethod
387386
def read_file_from_recording(rec_dir: str) -> "RecordingInfoFile":
@@ -403,7 +402,7 @@ def read_file_from_recording(rec_dir: str) -> "RecordingInfoFile":
403402
info_file_path = RecordingInfoFile._info_file_path(rec_dir)
404403
with open(info_file_path, "r") as f:
405404
info_dict = RecordingInfoFile._read_dict_from_file(f)
406-
min_player_version = Version(info_dict["min_player_version"])
405+
min_player_version = parse_version(info_dict["min_player_version"])
407406
except Exception as e:
408407
# Catching BaseException since at this point we don't know anything
409408
logger.error(
@@ -415,9 +414,7 @@ def read_file_from_recording(rec_dir: str) -> "RecordingInfoFile":
415414
f"Recording is too new to be opened with this version of Player!"
416415
)
417416

418-
# TODO: get_version() returns a LooseVersion, but we are using
419-
# packaging.Version now, need to adjust this across the codebase
420-
if min_player_version > Version(get_version().vstring):
417+
if min_player_version > get_version():
421418
raise RecordingInfoInvalidError(
422419
f"This recording requires Player version >= {min_player_version}!"
423420
)
@@ -440,7 +437,7 @@ def read_file_from_recording(rec_dir: str) -> "RecordingInfoFile":
440437

441438
@staticmethod
442439
def create_empty_file(
443-
rec_dir: str, fixed_version: T.Optional[Version] = None
440+
rec_dir: str, fixed_version: T.Optional[ParsedVersion] = None
444441
) -> "RecordingInfoFile":
445442
"""
446443
Creates a new `RecordingInfoFile` instance using the latest meta format version,
@@ -483,15 +480,15 @@ def validate(self):
483480
_info_file_versions = {}
484481

485482
@classmethod
486-
def register_child_class(cls, version: Version, child_class: type):
483+
def register_child_class(cls, version: ParsedVersion, child_class: type):
487484
"""Use this to register interface implementations for specific versions."""
488485
# NOTE: This is dependency inversion to avoids circular imports, because we
489486
# don't need to know our child classes.
490487
# TODO: Would be much cleaner with self-registering meta classes.
491488
cls._info_file_versions[version] = child_class
492489

493490
@classmethod
494-
def get_latest_info_file_version(cls) -> Version:
491+
def get_latest_info_file_version(cls) -> ParsedVersion:
495492
if not cls._info_file_versions:
496493
raise ValueError(
497494
"RecordingInfoFile not correctly initialized! No templates registered."

0 commit comments

Comments
 (0)