46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import warnings
|
|
|
|
import sqlalchemy
|
|
|
|
|
|
def parse_version(v):
|
|
"""
|
|
Take a string version and conver it to a tuple (for easier comparison), e.g.:
|
|
|
|
"1.2.3" --> (1, 2, 3)
|
|
"1.2" --> (1, 2, 0)
|
|
"1" --> (1, 0, 0)
|
|
"""
|
|
parts = v.split(".")
|
|
# Pad the list to make sure there is three elements so that we get major, minor, point
|
|
# comparisons that default to "0" if not given. I.e. "1.2" --> (1, 2, 0)
|
|
parts = (parts + 3 * ['0'])[:3]
|
|
return tuple(int(x) for x in parts)
|
|
|
|
|
|
def sqlalchemy_version(op, val):
|
|
sa_ver = parse_version(sqlalchemy.__version__)
|
|
target_ver = parse_version(val)
|
|
|
|
assert op in ('<', '>', '<=', '>=', '=='), 'op {} not supported'.format(op)
|
|
|
|
if op == '<':
|
|
return sa_ver < target_ver
|
|
if op == '>':
|
|
return sa_ver > target_ver
|
|
if op == '<=':
|
|
return sa_ver <= target_ver
|
|
if op == '>=':
|
|
return sa_ver >= target_ver
|
|
return sa_ver == target_ver
|
|
|
|
|
|
def engine_config_warning(config, version, deprecated_config_key, engine_option):
|
|
if config[deprecated_config_key] is not None:
|
|
warnings.warn(
|
|
'The `{}` config option is deprecated and will be removed in'
|
|
' v{}. Use `SQLALCHEMY_ENGINE_OPTIONS[\'{}\']` instead.'
|
|
.format(deprecated_config_key, version, engine_option),
|
|
DeprecationWarning
|
|
)
|