'Prepare the authorization code request URI
The client constructs the request URI by adding the following
parameters to the query component of the authorization endpoint URI
using the "application/x-www-form-urlencoded" format as defined by
[`W3C.REC-html401-19991224`_]:
response_type
REQUIRED.  Value MUST be set to "code".
client_id
REQUIRED.  The client identifier as described in `Section 2.2`_.
redirect_uri
OPTIONAL.  As described in `Section 3.1.2`_.
scope
OPTIONAL.  The scope of the access request as described by
`Section 3.3`_.
state
RECOMMENDED.  An opaque value used by the client to maintain
state between the request and callback.  The authorization
server includes this value when redirecting the user-agent back
to the client.  The parameter SHOULD be used for preventing
cross-site request forgery as described in `Section 10.12`_.
.. _`W3C.REC-html401-19991224`: http://tools.ietf.org/html/draft-ietf-oauth-v2-28#ref-W3C.REC-html401-19991224
.. _`Section 2.2`: http://tools.ietf.org/html/draft-ietf-oauth-v2-28#section-2.2
.. _`Section 3.1.2`: http://tools.ietf.org/html/draft-ietf-oauth-v2-28#section-3.1.2
.. _`Section 3.3`: http://tools.ietf.org/html/draft-ietf-oauth-v2-28#section-3.3
.. _`Section 10.12`: http://tools.ietf.org/html/draft-ietf-oauth-v2-28#section-10.12'

def prepare_request_uri(self, uri, redirect_uri=None, scope=None, state=None, **kwargs):

    redirect_uri = (redirect_uri or self.default_redirect_uri)
    return prepare_grant_uri(uri, self.client_id, u'code', redirect_uri=redirect_uri, scope=scope, state=state, **kwargs)
