Skip to content

Commit 6806361

Browse files
author
Sami Shahin
committed
Fix: Import semver package for version validation
- Use semver.parse on CSV version field This adds support for versions that use a string after the semver. Eg: '0.10.1', '5.4.3-alpha1' and '0.0.3-beta5+build.3' are valid
1 parent 387956e commit 6806361

File tree

5 files changed

+41
-17
lines changed

5 files changed

+41
-17
lines changed

Pipfile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@ verify_ssl = true
44
name = "pypi"
55

66
[packages]
7-
87
validators = "*"
98
requests = "*"
109
pytest = "*"
1110
pyyaml = "*"
1211
twine = "*"
13-
12+
semver = "*"
1413

1514
[dev-packages]

Pipfile.lock

Lines changed: 29 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

operatorcourier/validate.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22
import json
3-
import re
3+
import semver
44

55
import validators as v
66

@@ -386,9 +386,11 @@ def is_email(field):
386386
return True
387387

388388
def is_version(field):
389-
pattern1 = re.compile(r'v(\d+\.)(\d+\.)(\d)')
390-
pattern2 = re.compile(r'(\d+\.)(\d+\.)(\d)')
391-
return pattern1.match(field) or pattern2.match(field)
389+
try:
390+
semver.parse(field)
391+
except ValueError:
392+
return False
393+
return True
392394

393395
def is_capability_level(field):
394396
levels = [
@@ -477,8 +479,8 @@ def is_mediatype(mediatype):
477479

478480
# version check
479481
if not is_version(spec["version"]):
480-
self._log_error("spec.version %s is not a valid version "
481-
"(example of a valid version is: v1.0.12)",
482+
self._log_error("spec.version %s is not a valid semver "
483+
"(example of a valid version is: 1.0.12)",
482484
spec["version"])
483485
valid = False
484486

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
install_requires=[
2525
'pyyaml',
2626
'requests',
27-
'validators'
27+
'validators',
28+
'semver'
2829
],
2930
python_requires='>=3.6, <4',
3031
setup_requires=['pytest-runner'],

tests/test_validate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def test_ui_valid_bundle_io(bundle, expected_validation_results_dict):
4646
{'errors': [
4747
"csv.spec.links must be a list of name & url pairs.",
4848
"spec.version invalid is not a valid version "
49-
"(example of a valid version is: v1.0.12)",
49+
"(example of a valid version is: 1.0.12)",
5050
"spec.icon[0].mediatype image/invalid is not "
5151
"a valid mediatype. It must be one of \"image/gif\", "
5252
"\"image/jpeg\", \"image/png\", \"image/svg+xml\"",

0 commit comments

Comments
 (0)