3232from .region import RegionMixin
3333from .settings import SettingsMixin
3434from .stack import StackMixin
35- from .version import _parse_version_string
3635
3736logger = logging .getLogger (__name__ )
3837logger .addHandler (logging .NullHandler ())
3938
4039
40+ def _get_server_version_info (version_str ):
41+ basic_info = version_str .split ('.' )
42+
43+ major = int (basic_info [0 ])
44+ minor = int (basic_info [1 ])
45+
46+ version_type = 'final'
47+ extra_id = 0
48+
49+ try :
50+ patch_v = int (basic_info [2 ])
51+ except ValueError :
52+ for vtype in ('a' , 'b' , 'rc' ):
53+ if vtype in basic_info [2 ]:
54+ version_type = vtype
55+ idx = basic_info [2 ].find (vtype )
56+ patch_v = int (basic_info [:idx ])
57+ extra_id = int (basic_info [2 ][idx + len (vtype ):])
58+
59+ if version_type == 'final' :
60+ raise ValueError ('Invalid version: {}' .format (version_str ))
61+
62+ if len (basic_info ) > 3 :
63+ for vtype in ('dev' , 'post' ):
64+ if basic_info [3 ].startswith (vtype ):
65+ version_type = vtype
66+ extra_id = int (basic_info [3 ][len (vtype ):])
67+
68+ if version_type == 'final' :
69+ raise ValueError ('Invalid version: {}' .format (version_str ))
70+
71+ return major , minor , patch_v , version_type , extra_id
72+
73+
4174class StackdioClient (BlueprintMixin , FormulaMixin , AccountMixin , ImageMixin ,
4275 RegionMixin , StackMixin , SettingsMixin , HttpMixin ):
4376
@@ -60,13 +93,17 @@ def __init__(self, url=None, username=None, password=None, verify=True, cfg_file
6093
6194 if self .usable ():
6295 try :
63- _ , self .version = _parse_version_string (self .get_version (raise_for_status = False ))
96+ raw_version = self .get_version (raise_for_status = False )
97+ self .version = _get_server_version_info (raw_version )
6498 except MissingUrlException :
99+ raw_version = None
65100 self .version = None
66101
67102 if self .version and (self .version [0 ] != 0 or self .version [1 ] != 7 ):
68- raise IncompatibleVersionException ('Server version {0}.{1}.{2} not '
69- 'supported.' .format (** self .version ))
103+ raise IncompatibleVersionException (
104+ 'Server version {0} not supported. Please upgrade '
105+ 'stackdio-cli to {1}.{2}.0 or higher.' .format (raw_version , * self .version )
106+ )
70107
71108 @property
72109 def url (self ):
0 commit comments