Robustify SQLA version determination logic #647
+35
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What GitHub issue is this PR addressing? Make sure that there is an accompanying issue to your PR.
Fixes SNOW-3066571: SQLAlchemy compat script doesn't handle versions containing letters #646
Fill out the following pre-review checklist:
Please describe how your code solves the related issue.
The version string
SA_VERSIONcan contain pre-release suffixes like2.1.0b1,2.0.0rc2, or2.0.5.post1. The original code splits on"."and callsint()on each segment, which raisesValueErrorfor segments like0b1orpost1that contain non-numeric characters.The fix uses
re.match(r"(\d+)\.(\d+)\.(\d+)", SA_VERSION)to extract only the three leading numeric version components, ignoring any suffix. This works because the regex captures digits up to the first non-digit in each segment, and stops after the third group, so2.1.0b1yields(2, 1, 0),2.0.5.post1yields(2, 0, 5), etc.It is worth noting that this can be achieved more simply (and correctly) using an additional dependency,
packaging, by doingWith the key difference being that
packagingcorrectly treats pre-releases as less than the release (2.0.0b1 < 2.0.0), while the regex treats them as equal.