@@ -38,7 +38,7 @@ async def fromURL(cls, url, *, credentials=None, insecure=False):
3838 # For now just re-raise as SessionError.
3939 raise SessionError (str (error ))
4040 else :
41- session = cls (description , credentials )
41+ session = cls (url , description , credentials )
4242 session .scheme = urlparse (url ).scheme
4343 session .insecure = insecure
4444 return session
@@ -49,7 +49,7 @@ def fromProfile(cls, profile):
4949
5050 :see: `ProfileStore`.
5151 """
52- session = cls (profile .description , profile .credentials )
52+ session = cls (profile .url , profile . description , profile .credentials )
5353 session .scheme = urlparse (profile .url ).scheme
5454 session .insecure = profile .other .get ("insecure" , False )
5555 return session
@@ -75,7 +75,7 @@ async def login(cls, url, *, username=None, password=None, insecure=False):
7575 profile = await helpers .login (
7676 url = url , username = username , password = password , insecure = insecure
7777 )
78- session = cls (profile .description , profile .credentials )
78+ session = cls (url , profile .description , profile .credentials )
7979 session .scheme = urlparse (url ).scheme
8080 session .insecure = insecure
8181 return profile , session
@@ -90,7 +90,7 @@ async def connect(cls, url, *, apikey=None, insecure=False):
9090 instance made using the profile.
9191 """
9292 profile = await helpers .connect (url = url , apikey = apikey , insecure = insecure )
93- session = cls (profile .description , profile .credentials )
93+ session = cls (url , profile .description , profile .credentials )
9494 session .scheme = urlparse (url ).scheme
9595 session .insecure = insecure
9696 return profile , session
@@ -100,13 +100,15 @@ async def connect(cls, url, *, apikey=None, insecure=False):
100100 insecure = False
101101 debug = False
102102
103- def __init__ (self , description , credentials = None ):
103+ def __init__ (self , url , description , credentials = None ):
104104 """Construct a `SessionAPI`.
105105
106+ :param url: MAAS URL
106107 :param description: The description of the remote API. See `fromURL`.
107108 :param credentials: Credentials for the remote system. Optional.
108109 """
109110 super (SessionAPI , self ).__init__ ()
111+ self .__url = url
110112 self .__description = description
111113 self .__credentials = credentials
112114 self .__populate ()
@@ -116,15 +118,15 @@ def __populate(self):
116118 if self .__credentials is None :
117119 for resource in resources :
118120 if resource ["anon" ] is not None :
119- handler = HandlerAPI (resource ["anon" ], resource , self )
121+ handler = HandlerAPI (self . __url , resource ["anon" ], resource , self )
120122 setattr (self , handler .name , handler )
121123 else :
122124 for resource in resources :
123125 if resource ["auth" ] is not None :
124- handler = HandlerAPI (resource ["auth" ], resource , self )
126+ handler = HandlerAPI (self . __url , resource ["auth" ], resource , self )
125127 setattr (self , handler .name , handler )
126128 elif resource ["anon" ] is not None :
127- handler = HandlerAPI (resource ["anon" ], resource , self )
129+ handler = HandlerAPI (self . __url , resource ["anon" ], resource , self )
128130 setattr (self , handler .name , handler )
129131
130132 @property
@@ -154,16 +156,18 @@ class HandlerAPI:
154156 operations.
155157 """
156158
157- def __init__ (self , handler , resource , session ):
159+ def __init__ (self , url , handler , resource , session ):
158160 """Construct a `HandlerAPI`.
159161
162+ :param url: MAAS URL
160163 :param handler: The handler description from the overall API
161164 description document. See `SessionAPI`.
162165 :param resource: The parent of `handler` in the API description
163166 document. XXX: This does not appear to be needed.
164167 :param session: The `SessionAPI`.
165168 """
166169 super (HandlerAPI , self ).__init__ ()
170+ self .__url = url
167171 self .__handler = handler
168172 self .__resource = resource
169173 self .__session = session
@@ -187,7 +191,8 @@ def uri(self):
187191 This will typically contain replacement patterns; these are
188192 interpolated in `CallAPI`.
189193 """
190- return self .__handler ["uri" ]
194+ url = urlparse (self .__url )
195+ return f"{ url .scheme } ://{ url .netloc } { self .__handler ['path' ]} "
191196
192197 @property
193198 def params (self ):
0 commit comments