Skip to content

Commit 2ea5c75

Browse files
jswhit2jswhit2
authored andcommitted
get rid of duplicated code
1 parent 45e5305 commit 2ea5c75

4 files changed

Lines changed: 25 additions & 51 deletions

File tree

‎test/parse_clean_version.py‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from packaging.version import Version, InvalidVersion
2+
import re
3+
4+
def parse_clean_version(version_str: str) -> Version:
5+
# Normalize "-development" or any variation like "-dev" to ".dev0"
6+
cleaned = re.sub(r'[-_.]?development', '.dev0', version_str, flags=re.IGNORECASE)
7+
# Catch cases where it's just raw text hyphens (e.g., 1.0.0-dev -> 1.0.0.dev0)
8+
cleaned = re.sub(r'-dev(\d*)', r'.dev\1', cleaned, flags=re.IGNORECASE)
9+
try:
10+
return Version(cleaned)
11+
except InvalidVersion:
12+
# Fallback regex to pull just the numerical digits if it's still breaking
13+
match = re.search(r'(\d+(\.\d+)+)', version_str)
14+
if match:
15+
return Version(match.group(1))
16+
raise

‎test/test_diskless.py‎

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,10 @@
11
import unittest, os, tempfile
2-
from packaging.version import Version, InvalidVersion
2+
from packaging.version import Version
3+
from parse_clean_version import parse_clean_version
34
import numpy as np
45
from numpy.random.mtrand import uniform
56
from numpy.testing import assert_array_equal, assert_array_almost_equal
67
import netCDF4
7-
import re
8-
9-
def _parse_clean_version(version_str: str) -> Version:
10-
# Normalize "-development" or any variation like "-dev" to ".dev0"
11-
cleaned = re.sub(r'[-_.]?development', '.dev0', version_str, flags=re.IGNORECASE)
12-
# Catch cases where it's just raw text hyphens (e.g., 1.0.0-dev -> 1.0.0.dev0)
13-
cleaned = re.sub(r'-dev(\d*)', r'.dev\1', cleaned, flags=re.IGNORECASE)
14-
try:
15-
return Version(cleaned)
16-
except InvalidVersion:
17-
# Fallback regex to pull just the numerical digits if it's still breaking
18-
match = re.search(r'(\d+(\.\d+)+)', version_str)
19-
if match:
20-
return Version(match.group(1))
21-
raise
228

239
# rudimentary test of diskless file capability.
2410

@@ -33,7 +19,7 @@ def _parse_clean_version(version_str: str) -> Version:
3319

3420

3521
@unittest.skipIf(
36-
_parse_clean_version(netCDF4.__netcdf4libversion__) < Version('4.2.1')
22+
parse_clean_version(netCDF4.__netcdf4libversion__) < Version('4.2.1')
3723
or netCDF4.__has_parallel4_support__
3824
or netCDF4.__has_pnetcdf_support__,
3925
"no diskless support",

‎test/test_masked5.py‎

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,14 @@
11
import unittest
22
import os
33
import tempfile
4-
import re
5-
from packaging.version import Version, InvalidVersion
4+
from packaging.version import Version
5+
from parse_clean_version import parse_clean_version
66

77
import numpy as np
88
from numpy import ma
99
from numpy.testing import assert_array_equal
1010
from netCDF4 import Dataset, __netcdf4libversion__
1111

12-
def _parse_clean_version(version_str: str) -> Version:
13-
# Normalize "-development" or any variation like "-dev" to ".dev0"
14-
cleaned = re.sub(r'[-_.]?development', '.dev0', version_str, flags=re.IGNORECASE)
15-
# Catch cases where it's just raw text hyphens (e.g., 1.0.0-dev -> 1.0.0.dev0)
16-
cleaned = re.sub(r'-dev(\d*)', r'.dev\1', cleaned, flags=re.IGNORECASE)
17-
try:
18-
return Version(cleaned)
19-
except InvalidVersion:
20-
# Fallback regex to pull just the numerical digits if it's still breaking
21-
match = re.search(r'(\d+(\.\d+)+)', version_str)
22-
if match:
23-
return Version(match.group(1))
24-
raise
25-
2612
# Test use of vector of missing values.
2713

2814
class VectorMissingValues(unittest.TestCase):
@@ -71,7 +57,7 @@ def test_scaled(self):
7157
# issue 730
7258
# this part fails with netcdf 4.1.3
7359
# a bug in vlen strings?
74-
if _parse_clean_version(__netcdf4libversion__) >= Version('4.4.0'):
60+
if parse_clean_version(__netcdf4libversion__) >= Version('4.4.0'):
7561
assert v2[0] == 'first'
7662
assert v2[1] == '<missing>'
7763

‎test/test_vlen.py‎

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,11 @@
22
import unittest
33
import os
44
import tempfile
5-
import re
6-
from packaging.version import Version, InvalidVersion
5+
from packaging.version import Version
76
from netCDF4 import Dataset
87
import numpy as np
98
from numpy.testing import assert_array_equal
10-
11-
def _parse_clean_version(version_str: str) -> Version:
12-
# Normalize "-development" or any variation like "-dev" to ".dev0"
13-
cleaned = re.sub(r'[-_.]?development', '.dev0', version_str, flags=re.IGNORECASE)
14-
# Catch cases where it's just raw text hyphens (e.g., 1.0.0-dev -> 1.0.0.dev0)
15-
cleaned = re.sub(r'-dev(\d*)', r'.dev\1', cleaned, flags=re.IGNORECASE)
16-
try:
17-
return Version(cleaned)
18-
except InvalidVersion:
19-
# Fallback regex to pull just the numerical digits if it's still breaking
20-
match = re.search(r'(\d+(\.\d+)+)', version_str)
21-
if match:
22-
return Version(match.group(1))
23-
raise
9+
from parse_clean_version import parse_clean_version
2410

2511
FILE_NAME = tempfile.NamedTemporaryFile(suffix='.nc', delete=False).name
2612
VL_NAME = 'vlen_type'
@@ -179,7 +165,7 @@ class VlenAppendTestCase(unittest.TestCase):
179165
def setUp(self):
180166

181167
import netCDF4
182-
if _parse_clean_version(netCDF4.__netcdf4libversion__) < Version("4.4.1"):
168+
if parse_clean_version(netCDF4.__netcdf4libversion__) < Version("4.4.1"):
183169
self.skip = True
184170
try:
185171
self.skipTest("This test requires NetCDF 4.4.1 or later.")

0 commit comments

Comments
 (0)