@@ -14,13 +14,28 @@ def __init__(self, client, name):
1414 self .name = name
1515 self .uri = "{}/auth/{}s/{}" .format (self .client .version_prefix ,
1616 self .entity , self .name )
17+ # This will be lazily evaluated if not manually set
18+ self ._legacy_api = None
19+
20+ @property
21+ def legacy_api (self ):
22+ if self ._legacy_api is None :
23+ # The auth API has changed between 2.2 and 2.3, true story!
24+ major , minor , _ = map (int , self .client .version .split ('.' ))
25+ self ._legacy_api = (major < 3 and minor < 3 )
26+ return self ._legacy_api
27+
1728
1829 @property
1930 def names (self ):
2031 key = "{}s" .format (self .entity )
2132 uri = "{}/auth/{}" .format (self .client .version_prefix , key )
2233 response = self .client .api_execute (uri , self .client ._MGET )
23- return json .loads (response .data .decode ('utf-8' ))[key ]
34+ if self .legacy_api :
35+ return json .loads (response .data .decode ('utf-8' ))[key ]
36+ else :
37+ return [obj [self .entity ]
38+ for obj in json .loads (response .data .decode ('utf-8' ))[key ]]
2439
2540 def read (self ):
2641 try :
@@ -102,7 +117,16 @@ def __init__(self, client, name):
102117
103118 def _from_net (self , data ):
104119 d = json .loads (data .decode ('utf-8' ))
105- self .roles = d .get ('roles' , [])
120+ roles = d .get ('roles' , [])
121+ try :
122+ self .roles = roles
123+ except TypeError :
124+ # with the change of API, PUT responses are different
125+ # from GET reponses, which makes everything so funny.
126+ # Specifically, PUT responses are the same as before...
127+ if self .legacy_api :
128+ raise
129+ self .roles = [obj ['role' ] for obj in roles ]
106130 self .name = d .get ('user' )
107131
108132 def _to_net (self , prevobj = None ):
0 commit comments