Browse Source

restore compatibility with pandas<0.23

https://travis-ci.org/fphammerle/freesurfer-volume-reader/builds/527926426?utm_source=github_status&utm_medium=notification
Fabian Peter Hammerle 5 years ago
parent
commit
bf7feb5ba0
3 changed files with 33 additions and 6 deletions
  1. 4 0
      freesurfer_volume_reader/__init__.py
  2. 6 2
      freesurfer_volume_reader/__main__.py
  3. 23 4
      tests/init_test.py

+ 4 - 0
freesurfer_volume_reader/__init__.py

@@ -23,6 +23,10 @@ import typing
 import pandas
 
 
+def parse_version_string(version_string: str) -> typing.Tuple[typing.Union[int, str]]:
+    return tuple(int(p) if p.isdigit() else p for p in version_string.split('.'))
+
+
 def remove_group_names_from_regex(regex_pattern: str) -> str:
     return re.sub(r'\?P<.+?>', '', regex_pattern)
 

+ 6 - 2
freesurfer_volume_reader/__main__.py

@@ -9,7 +9,8 @@ import re
 
 import pandas
 
-from freesurfer_volume_reader import ashs, freesurfer, remove_group_names_from_regex
+from freesurfer_volume_reader import ashs, freesurfer, parse_version_string, \
+                                     remove_group_names_from_regex
 
 VOLUME_FILE_FINDERS = {
     'ashs': ashs.HippocampalSubfieldsVolumeFile,
@@ -49,7 +50,10 @@ def main():
                 volume_frame['source_type'] = source_type
                 volume_frame['source_path'] = volume_file.absolute_path
                 volume_frames.append(volume_frame)
-    united_volume_frame = pandas.concat(volume_frames, ignore_index=True, sort=False)
+    if parse_version_string(pandas.__version__) < (0, 23):
+        united_volume_frame = pandas.concat(volume_frames, ignore_index=True)
+    else:
+        united_volume_frame = pandas.concat(volume_frames, ignore_index=True, sort=False)
     print(united_volume_frame.to_csv(index=False))
 
 if __name__ == '__main__':

+ 23 - 4
tests/init_test.py

@@ -1,6 +1,27 @@
 import pytest
 
-import freesurfer_volume_reader
+from freesurfer_volume_reader import parse_version_string, remove_group_names_from_regex
+
+
+@pytest.mark.parametrize(('version_string', 'expected_tuple'), [
+    ('0.24.2', (0, 24, 2)),
+    ('0.21.0', (0, 21, 0)),
+    ('0.2.2.dev28+g526f05c.d20190504', (0, 2, 2, 'dev28+g526f05c', 'd20190504')),
+])
+def test_parse_version_string(version_string, expected_tuple):
+    assert expected_tuple == parse_version_string(version_string)
+
+
+def test_parse_version_string_comparison():
+    assert parse_version_string('0.24.2') == (0, 24, 2)
+    assert parse_version_string('0.24.2') < (0, 25)
+    assert parse_version_string('0.24.2') < (0, 24, 3)
+    assert parse_version_string('0.24.2') <= (0, 24, 2)
+    assert parse_version_string('0.24.2') >= (0, 24, 2)
+    assert parse_version_string('0.24.2') > (0, 24, 1)
+    assert parse_version_string('0.24.2') > (0, 24)
+    assert parse_version_string('0.2.2.dev28+g526f05c.d20190504') > (0, 2, 2)
+    assert parse_version_string('0.2.2.dev28+g526f05c.d20190504') < (0, 2, 3)
 
 
 @pytest.mark.parametrize(('source_pattern', 'expected_pattern'), [
@@ -8,6 +29,4 @@ import freesurfer_volume_reader
     (r'(?P<a>a(?P<b>b))', r'(a(b))'),
 ])
 def test_remove_group_names_from_regex(source_pattern, expected_pattern):
-    assert expected_pattern == freesurfer_volume_reader.remove_group_names_from_regex(
-        regex_pattern=source_pattern,
-    )
+    assert expected_pattern == remove_group_names_from_regex(regex_pattern=source_pattern)