18 Commits

Author SHA1 Message Date
Steve Martinelli
81fdaabf3f use positional library instead of utils
swap instances of utils.positional with the positional library.

Change-Id: Id8a9961e68d287a802f25512fc970829e9feb5c2
2016-01-25 01:54:35 -05:00
Jamie Lennox
c0a731204e Allow passing logger object to request
It can become difficult to trace the client that created HTTP requests
as the logging all goes through the keystoneclient.session logger. Allow
passing the logger through the request function and make it able to be
set via the adapter so it can be set once per client instantiation.

Change-Id: Id45c315bee9a56f1c241210d667470751bf689d5
Closes-Bug: #1421868
2015-03-16 15:16:07 +11:00
Brant Knudson
86ac254fee Change oslo.serialization to oslo_serialization
The oslo libraries are moving away from namespace packages.

bp drop-namespace-packages

Change-Id: I76dc9f733b222144f0274f8854877587c3501d1e
2015-01-31 08:03:37 -06:00
Jamie Lennox
496a0efc43 Surface the user_id and project_id beyond the plugin
Having the user_id and project_id exposed in the plugin is a good first
step however we don't really expect the user to be interacting with the
plugins directly often - particularly as you need to pass session to the
methods.

Exposing get_user_id and get_project_id on the session and the adapter
in this way is very similar to the way we expose get_token and
get_endpoint on the session and adapter for use higher up.

Related-Bug: #1364724
Change-Id: If2f868c3ddc19133f18446e74f8e1b560a4798fa
2015-01-23 10:41:07 +10:00
Jamie Lennox
6b0fd667ce get_endpoint should return the override
If your adapter has an endpoint_override set then this value will be
consumed by session and used in preference to whatever you give to
endpoint_filter.

This means that if you ask the adapter for the endpoint it is going to
use to query a URL you expect to get back the override because this is
where it will be sent.

Closes-Bug: #1400174
Change-Id: I707e549a4fa349d0e9a0bdac61a2573aa2e5b434
2014-12-07 23:08:31 +00:00
Jamie Lennox
28ea0a8e36 Pass all adapter parameters through to adapter
We can't simply pass through kwargs to the adapter for compatibility
reasons however make sure that we accept the appropriate arguments and
pass them to adapter.

Also add some notes to try and keep them up to date.

Closes-Bug: #1399492
Change-Id: If72295590483bb52fcf5a0d59cf95f3e49ea69c8
2014-12-05 14:21:39 +10:00
Brant Knudson
3c8d35247e Correct documenting constructor parameters
When the docs are rendered to HTML, any docs on __init__ are not
displayed. The parameters to the constructor have to be documented on
the class rather than on the __init__ method.

Also, corrected other minor issues in the same areas.

Change-Id: Ic56da33f6b99fe5efb636c289e3c4e1569f0c84c
2014-12-04 19:04:15 -06:00
Jenkins
41afe3c963 Merge "Docstring cleanup for return type" 2014-12-02 01:46:24 +00:00
Jenkins
2e900a9347 Merge "Cleanup docs - raises class" 2014-11-18 19:18:13 +00:00
Brant Knudson
14a6d80116 Cleanup docs - raises class
The argument to the :raises: directive is the class name. If the
class name is a valid reference it's rendered as a link to the
class. This change cleans up the :raises: directives to use the
reference correctly and use a valid class reference.

Change-Id: I84188b60de0ab4c6b5b2fb5a203c43bfde094707
2014-10-18 17:59:08 -05:00
Brant Knudson
3f1ba9f007 Docstring cleanup for return type
The :returns: directive doesn't take an argument. To specify the
return type, use the :rtype: directive.

Change-Id: I3aaab824792333b3f75a10af92f5b712cc9b4ff6
2014-10-15 12:24:52 -05:00
Steve Martinelli
802301ca17 Use oslo.utils and oslo.serialization
Left timeutils and strutils in openstack/common since they are used in
openstack/common/apiclient and memorycache.

Change-Id: Idb5f09c159d907dfba84cd1f7501f650318af7d9
2014-10-15 04:25:50 +00:00
Jamie Lennox
b5a435b9ab Allow retrying some failed requests
Connection Errors can be transient and there are many clients (including
auth_token middleware) that allow retrying requests that fail.

We should support this in the session, disabled by default, rather than
have multiple implementations for it.

For the moment I have purposefully not added it as an option to
Session.__init__ though I can see arguments for it. This can be added
later if there becomes a particular need.

I have also purposefully distinguished between Connection Errors (and
connect_retries) and HTTP errors. I don't know a good way to generalize
retrying on HTTP errors and they can be added later if required.

Blueprint: session-retries
Change-Id: Ia219636663980433ddb9c00c6df7c8477df4ef99
2014-09-16 10:59:29 +10:00
Jamie Lennox
4be8e8db3f Expose auth methods on the adapter
Provide access to get_token, get_endpoint and invalidate to the adapter.
The adapter is essentially created per individual client and it can be
useful to know things like the endpoint that requests will be sent to
based on the parameters that are included in the endpoint_filter.

This essentially allows us to emulate the management_url and auth_token
properties of the existing clients.

Change-Id: Ic01bc52bb38e8fb72e7a6d93bfd2944b11d0b070
2014-09-01 10:50:16 +10:00
Jamie Lennox
0e61719043 Add version parameter to adapter.
The version parameter was left out of adapter previously because setting
a version number triggers discovery and I felt that it was not ready for
the other services.

However if it isn't set then it won't be used and we may as well
implement it here once rather than have the individual services that do
support it override it themselves.

Change-Id: I707380a01175dc19b59de32cbb8fd2bb123d7335
2014-09-01 10:49:12 +10:00
Jamie Lennox
22a93fceb4 Allow providing an endpoint_override to requests
As much as I'd prefer not to need this functionality there are plenty of
existing clients that we want to have use the adapter that can accept a
bypass argument such that it ignores the service catalog and uses that
URL for all requests.

We therefore need to be able to support similar functionality in our
adapter.

Change-Id: I206705241ff9b84967d0d9c089b4795bcc26b65e
2014-09-01 10:48:32 +10:00
Jamie Lennox
1145d9424b Use jsonutils to load adapter response
This is not technically needed, however we and the libraries we use,
aren't very good about keeping our strings and bytes straight for python
3. jsonutils has an attempt to decode stage that means we can let it
manage the correct types.

Change-Id: I2caf4a5b9a04495aa0286f2b6e3193a17ff246e5
2014-07-15 13:31:06 +10:00
Jamie Lennox
1893703b4f Session Adapters
A Session is a global object that can be shared around. There are
however many variables (those passed to session.request) that are
specific to the client that will be using that session. These often need
to be set for every request going through a client.

For this purpose we have a Session Adapter. An adapter is like a
view on a session. Where the session maintains very global state the
adapter maintains state relevant to a specific usage of a session. These
might be things like User-Agent which wants to be set per client using
the session, or possibly even auth plugins if we share a common session
object amongst a number of clients with different plugins.

Almost anything that gets passed to a Session.request() call is suitable
to go into an adapter (the exceptions are essentially the body data and
method which only makes sense per call)

Implements: blueprint session-propagation
Change-Id: I100c791806674213d3cdb5389d4b0a1cf88c82dd
2014-06-25 10:03:32 +10:00