{ "info": { "author": "Colin Bounouar", "author_email": "colin.bounouar.dev@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Build Tools" ], "description": "# Easy Authentication for Requests #\n\nThis module provides you authentication classes to be used with [`requests`][1].\n\nTo use a specific authentication in combination with requests, use the [authentication parameter on `requests` module][2].\n\n## OAuth 2 ##\n\n### Authorization Code flow ###\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import OAuth2AuthorizationCode\n\nrequests.get('http://www.example.com', auth=OAuth2AuthorizationCode('https://www.authorization.url', 'https://www.token.url'))\n```\n\nor\n\n```python\nimport requests\nfrom requests_auth import oauth2, OAuth2Flow\n\nrequests.get('http://www.example.com', auth=oauth2(OAuth2Flow.AuthorizationCode, 'https://www.authorization.url', 'https://www.token.url'))\n```\n\n#### Parameters ####\n\n| Name | Description | Mandatory | Default value |\n|:------------------------|:---------------------------|:----------|:--------------|\n| `authorization_url` | OAuth 2 authorization URL. | Mandatory | |\n| `token_url` | OAuth 2 token URL. | Mandatory | |\n| `redirect_uri_endpoint` | Custom endpoint that will be used as redirect_uri the following way: http://localhost:/. | Optional | '' |\n| `redirect_uri_port` | The port on which the server listening for the OAuth 2 code will be started. | Optional | 5000 |\n| `timeout` | Maximum amount of seconds to wait for a code or a token to be received once requested. | Optional | 60 |\n| `success_display_time` | In case a code is successfully received, this is the maximum amount of milliseconds the success page will be displayed in your browser. | Optional | 1 |\n| `failure_display_time` | In case received code is not valid, this is the maximum amount of milliseconds the failure page will be displayed in your browser. | Optional | 5000 |\n| `header_name` | Name of the header field used to send token. | Optional | Authorization |\n| `header_value` | Format used to send the token value. \"{token}\" must be present as it will be replaced by the actual token. | Optional | Bearer {token} |\n| `response_type` | Value of the response_type query parameter if not already provided in authorization URL. | Optional | code |\n| `token_field_name` | Field name containing the token. | Optional | access_token |\n| `code_field_name` | Field name containing the code. | Optional | code |\n| `username` | User name in case basic authentication should be used to retrieve token. | Optional | |\n| `password` | User password in case basic authentication should be used to retrieve token. | Optional | |\n\nAny other parameter will be put as query parameter in the authorization URL and as body parameters in the token URL. \n\nUsual parameters are:\n \n| Name | Description |\n|:----------------|:---------------------------------------------------------------------|\n| `client_id` | Corresponding to your Application ID (in Microsoft Azure app portal) |\n| `client_secret` | If client is not authenticated with the authorization server |\n| `nonce` | Refer to [OpenID ID Token specifications][3] for more details |\n\n### Resource Owner Password Credentials flow ###\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import OAuth2ResourceOwnerPasswordCredentials\n\nrequests.get('http://www.example.com', auth=OAuth2ResourceOwnerPasswordCredentials('https://www.token.url', 'user name', 'user password'))\n```\n\nor\n\n```python\nimport requests\nfrom requests_auth import oauth2, OAuth2Flow\n\nrequests.get('http://www.example.com', auth=oauth2(OAuth2Flow.PasswordCredentials, 'https://www.token.url', 'user name', 'user password'))\n```\n\n#### Parameters ####\n\n| Name | Description | Mandatory | Default value |\n|:-------------------|:---------------------------------------------|:----------|:--------------|\n| `token_url` | OAuth 2 token URL. | Mandatory | |\n| `username` | Resource owner user name. | Mandatory | |\n| `password` | Resource owner password. | Mandatory | |\n| `timeout` | Maximum amount of seconds to wait for a token to be received once requested. | Optional | 60 |\n| `header_name` | Name of the header field used to send token. | Optional | Authorization |\n| `header_value` | Format used to send the token value. \"{token}\" must be present as it will be replaced by the actual token. | Optional | Bearer {token} |\n| `scope` | Scope parameter sent to token URL as body. Can also be a list of scopes. | Optional | |\n| `token_field_name` | Field name containing the token. | Optional | access_token |\n\nAny other parameter will be put as body parameter in the token URL.\n\n### Client Credentials flow ###\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import OAuth2ClientCredentials\n\nrequests.get('http://www.example.com', auth=OAuth2ClientCredentials('https://www.token.url', 'user name', 'user password'))\n```\n\nor\n\n```python\nimport requests\nfrom requests_auth import oauth2, OAuth2Flow\n\nrequests.get('http://www.example.com', auth=oauth2(OAuth2Flow.ClientCredentials, 'https://www.token.url', 'user name', 'user password'))\n```\n\n#### Parameters ####\n\n| Name | Description | Mandatory | Default value |\n|:-------------------|:---------------------------------------------|:----------|:--------------|\n| `token_url` | OAuth 2 token URL. | Mandatory | |\n| `username` | Resource owner user name. | Mandatory | |\n| `password` | Resource owner password. | Mandatory | |\n| `timeout` | Maximum amount of seconds to wait for a token to be received once requested. | Optional | 60 |\n| `header_name` | Name of the header field used to send token. | Optional | Authorization |\n| `header_value` | Format used to send the token value. \"{token}\" must be present as it will be replaced by the actual token. | Optional | Bearer {token} |\n| `scope` | Scope parameter sent to token URL as body. Can also be a list of scopes. | Optional | |\n| `token_field_name` | Field name containing the token. | Optional | access_token |\n\nAny other parameter will be put as body parameter in the token URL.\n\n### Implicit flow ###\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import OAuth2Implicit\n\nrequests.get('http://www.example.com', auth=OAuth2Implicit('https://www.authorization.url'))\n```\n\nor\n\n```python\nimport requests\nfrom requests_auth import oauth2, OAuth2Flow\n\nrequests.get('http://www.example.com', auth=oauth2(OAuth2Flow.Implicit, 'https://www.authorization.url'))\n```\n\n#### Parameters ####\n\n| Name | Description | Mandatory | Default value |\n|:------------------------|:---------------------------|:----------|:--------------|\n| `authorization_url` | OAuth 2 authorization URL. | Mandatory | |\n| `response_type` | Value of the response_type query parameter if not already provided in authorization URL. | Optional | token |\n| `token_field_name` | Field name containing the token. | Optional | id_token if response_type is id_token, otherwise access_token |\n| `redirect_uri_endpoint` | Custom endpoint that will be used as redirect_uri the following way: http://localhost:/. | Optional | '' |\n| `redirect_uri_port` | The port on which the server listening for the OAuth 2 token will be started. | Optional | 5000 |\n| `timeout` | Maximum amount of seconds to wait for a token to be received once requested. | Optional | 60 |\n| `success_display_time` | In case a token is successfully received, this is the maximum amount of milliseconds the success page will be displayed in your browser. | Optional | 1 |\n| `failure_display_time` | In case received token is not valid, this is the maximum amount of milliseconds the failure page will be displayed in your browser. | Optional | 5000 |\n| `header_name` | Name of the header field used to send token. | Optional | Authorization |\n| `header_value` | Format used to send the token value. \"{token}\" must be present as it will be replaced by the actual token. | Optional | Bearer {token} |\n\nAny other parameter will be put as query parameter in the authorization URL. \n\nUsual parameters are:\n\n| Name | Description |\n|:----------------|:---------------------------------------------------------------------|\n| `client_id` | Corresponding to your Application ID (in Microsoft Azure app portal) |\n| `nonce` | Refer to [OpenID ID Token specifications][3] for more details |\n| `prompt` | none to avoid prompting the user if a session is already opened. |\n\n#### Common providers ####\n\n##### Microsoft - Azure Active Directory (OAuth2 Access Token) #####\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import AzureActiveDirectoryImplicit\n\n\naad = AzureActiveDirectoryImplicit(tenant_id='45239d18-c68c-4c47-8bdd-ce71ea1d50cd', client_id='54239d18-c68c-4c47-8bdd-ce71ea1d50cd')\nrequests.get('http://www.example.com', auth=aad)\n```\n\nor\n\n```python\nimport requests\nfrom requests_auth import aad, OAuth2Flow\n\nrequests.get('http://www.example.com', auth=aad(OAuth2Flow.Implicit, tenant_id='45239d18-c68c-4c47-8bdd-ce71ea1d50cd', client_id='54239d18-c68c-4c47-8bdd-ce71ea1d50cd'))\n```\n\n###### Parameters ######\n\n| Name | Description | Mandatory | Default value |\n|:------------------------|:---------------------------|:----------|:--------------|\n| `tenant_id` | Microsoft Tenant Identifier (formatted as an Universal Unique Identifier). | Mandatory | |\n| `client_id` | Microsoft Application Identifier (formatted as an Universal Unique Identifier). | Mandatory | |\n| `response_type` | Value of the response_type query parameter if not already provided in authorization URL. | Optional | token |\n| `token_field_name` | Field name containing the token. | Optional | access_token |\n| `nonce` | Refer to [OpenID ID Token specifications][3] for more details | Optional | Newly generated Universal Unique Identifier. |\n| `redirect_uri_endpoint` | Custom endpoint that will be used as redirect_uri the following way: http://localhost:/. | Optional | '' |\n| `redirect_uri_port` | The port on which the server listening for the OAuth 2 token will be started. | Optional | 5000 |\n| `timeout` | Maximum amount of seconds to wait for a token to be received once requested. | Optional | 60 |\n| `success_display_time` | In case a token is successfully received, this is the maximum amount of milliseconds the success page will be displayed in your browser. | Optional | 1 |\n| `failure_display_time` | In case received token is not valid, this is the maximum amount of milliseconds the failure page will be displayed in your browser. | Optional | 5000 |\n| `header_name` | Name of the header field used to send token. | Optional | Authorization |\n| `header_value` | Format used to send the token value. \"{token}\" must be present as it will be replaced by the actual token. | Optional | Bearer {token} |\n\nAny other parameter will be put as query parameter in the authorization URL. \n\nUsual parameters are:\n\n| Name | Description |\n|:----------------|:---------------------------------------------------------------------|\n| `prompt` | none to avoid prompting the user if a session is already opened. |\n\n##### Microsoft - Azure Active Directory (OpenID Connect ID token) #####\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import AzureActiveDirectoryImplicitIdToken\n\n\naad = AzureActiveDirectoryImplicitIdToken(tenant_id='45239d18-c68c-4c47-8bdd-ce71ea1d50cd', client_id='54239d18-c68c-4c47-8bdd-ce71ea1d50cd')\nrequests.get('http://www.example.com', auth=aad)\n```\n\n###### Parameters ######\n\n| Name | Description | Mandatory | Default value |\n|:------------------------|:---------------------------|:----------|:--------------|\n| `tenant_id` | Microsoft Tenant Identifier (formatted as an Universal Unique Identifier). | Mandatory | |\n| `client_id` | Microsoft Application Identifier (formatted as an Universal Unique Identifier). | Mandatory | |\n| `response_type` | Value of the response_type query parameter if not already provided in authorization URL. | Optional | id_token |\n| `token_field_name` | Field name containing the token. | Optional | id_token |\n| `nonce` | Refer to [OpenID ID Token specifications][3] for more details | Optional | Newly generated Universal Unique Identifier. |\n| `redirect_uri_endpoint` | Custom endpoint that will be used as redirect_uri the following way: http://localhost:/. | Optional | '' |\n| `redirect_uri_port` | The port on which the server listening for the OAuth 2 token will be started. | Optional | 5000 |\n| `timeout` | Maximum amount of seconds to wait for a token to be received once requested. | Optional | 60 |\n| `success_display_time` | In case a token is successfully received, this is the maximum amount of milliseconds the success page will be displayed in your browser. | Optional | 1 |\n| `failure_display_time` | In case received token is not valid, this is the maximum amount of milliseconds the failure page will be displayed in your browser. | Optional | 5000 |\n| `header_name` | Name of the header field used to send token. | Optional | Authorization |\n| `header_value` | Format used to send the token value. \"{token}\" must be present as it will be replaced by the actual token. | Optional | Bearer {token} |\n\nAny other parameter will be put as query parameter in the authorization URL. \n\nUsual parameters are:\n\n| Name | Description |\n|:----------------|:---------------------------------------------------------------------|\n| `prompt` | none to avoid prompting the user if a session is already opened. |\n\n##### OKTA (OAuth2 Access Token) #####\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import OktaImplicit\n\n\nokta = OktaImplicit(instance='testserver.okta-emea.com', client_id='54239d18-c68c-4c47-8bdd-ce71ea1d50cd')\nrequests.get('http://www.example.com', auth=okta)\n```\n\nor\n\n```python\nimport requests\nfrom requests_auth import okta, OAuth2Flow\n\nrequests.get('http://www.example.com', auth=okta(OAuth2Flow.Implicit, instance='testserver.okta-emea.com', client_id='54239d18-c68c-4c47-8bdd-ce71ea1d50cd'))\n```\n\n###### Parameters ######\n\n| Name | Description | Mandatory | Default value |\n|:------------------------|:---------------------------|:----------|:--------------|\n| `instance` | OKTA instance (like \"testserver.okta-emea.com\"). | Mandatory | |\n| `client_id` | Microsoft Application Identifier (formatted as an Universal Unique Identifier). | Mandatory | |\n| `response_type` | Value of the response_type query parameter if not already provided in authorization URL. | Optional | token |\n| `token_field_name` | Field name containing the token. | Optional | access_token |\n| `nonce` | Refer to [OpenID ID Token specifications][3] for more details. | Optional | Newly generated Universal Unique Identifier. |\n| `scope` | Scope parameter sent in query. Can also be a list of scopes. | Optional | ['openid', 'profile', 'email'] |\n| `authorization_server` | OKTA authorization server. | Optional | '' |\n| `redirect_uri_endpoint` | Custom endpoint that will be used as redirect_uri the following way: http://localhost:/. | Optional | '' |\n| `redirect_uri_port` | The port on which the server listening for the OAuth 2 token will be started. | Optional | 5000 |\n| `timeout` | Maximum amount of seconds to wait for a token to be received once requested. | Optional | 60 |\n| `success_display_time` | In case a token is successfully received, this is the maximum amount of milliseconds the success page will be displayed in your browser. | Optional | 1 |\n| `failure_display_time` | In case received token is not valid, this is the maximum amount of milliseconds the failure page will be displayed in your browser. | Optional | 5000 |\n| `header_name` | Name of the header field used to send token. | Optional | Authorization |\n| `header_value` | Format used to send the token value. \"{token}\" must be present as it will be replaced by the actual token. | Optional | Bearer {token} |\n\nAny other parameter will be put as query parameter in the authorization URL. \n\nUsual parameters are:\n\n| Name | Description |\n|:----------------|:---------------------------------------------------------------------|\n| `prompt` | none to avoid prompting the user if a session is already opened. |\n\n##### OKTA (OpenID Connect ID token) #####\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import OktaImplicitIdToken\n\n\nokta = OktaImplicitIdToken(instance='testserver.okta-emea.com', client_id='54239d18-c68c-4c47-8bdd-ce71ea1d50cd')\nrequests.get('http://www.example.com', auth=okta)\n```\n\n###### Parameters ######\n\n| Name | Description | Mandatory | Default value |\n|:------------------------|:---------------------------|:----------|:--------------|\n| `instance` | OKTA instance (like \"testserver.okta-emea.com\"). | Mandatory | |\n| `client_id` | Microsoft Application Identifier (formatted as an Universal Unique Identifier). | Mandatory | |\n| `response_type` | Value of the response_type query parameter if not already provided in authorization URL. | Optional | id_token |\n| `token_field_name` | Field name containing the token. | Optional | id_token |\n| `nonce` | Refer to [OpenID ID Token specifications][3] for more details. | Optional | Newly generated Universal Unique Identifier. |\n| `scope` | Scope parameter sent in query. Can also be a list of scopes. | Optional | ['openid', 'profile', 'email'] |\n| `authorization_server` | OKTA authorization server. | Optional | '' |\n| `redirect_uri_endpoint` | Custom endpoint that will be used as redirect_uri the following way: http://localhost:/. | Optional | '' |\n| `redirect_uri_port` | The port on which the server listening for the OAuth 2 token will be started. | Optional | 5000 |\n| `timeout` | Maximum amount of seconds to wait for a token to be received once requested. | Optional | 60 |\n| `success_display_time` | In case a token is successfully received, this is the maximum amount of milliseconds the success page will be displayed in your browser. | Optional | 1 |\n| `failure_display_time` | In case received token is not valid, this is the maximum amount of milliseconds the failure page will be displayed in your browser. | Optional | 5000 |\n| `header_name` | Name of the header field used to send token. | Optional | Authorization |\n| `header_value` | Format used to send the token value. \"{token}\" must be present as it will be replaced by the actual token. | Optional | Bearer {token} |\n\nAny other parameter will be put as query parameter in the authorization URL. \n\nUsual parameters are:\n\n| Name | Description |\n|:----------------|:---------------------------------------------------------------------|\n| `prompt` | none to avoid prompting the user if a session is already opened. |\n\n### Managing token cache ###\n\nTo avoid asking for a new token every new request, a token cache is used.\n\nDefault cache is in memory but it is also possible to use a physical cache using the following method:\n\n```python\nfrom requests_auth import OAuth2, JsonTokenFileCache\n\nOAuth2.token_cache = JsonTokenFileCache('my_token_cache')\n```\n\n\n## API key in header ##\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import HeaderApiKey\n\nrequests.get('http://www.example.com', auth=HeaderApiKey('my_api_key'))\n```\n\n### Parameters ###\n\n| Name | Description | Mandatory | Default value |\n|:------------------------|:-------------------------------|:----------|:--------------|\n| `api_key` | The API key that will be sent. | Mandatory | |\n| `header_name` | Name of the header field. | Optional | \"X-API-Key\" |\n\n## API key in query ##\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import QueryApiKey\n\nrequests.get('http://www.example.com', auth=QueryApiKey('my_api_key'))\n```\n\n### Parameters ###\n\n| Name | Description | Mandatory | Default value |\n|:------------------------|:-------------------------------|:----------|:--------------|\n| `api_key` | The API key that will be sent. | Mandatory | |\n| `query_parameter_name` | Name of the query parameter. | Optional | \"api_key\" |\n\n## Basic ##\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import Basic\n\nrequests.get('http://www.example.com', auth=Basic('username', 'password'))\n```\n\n### Parameters ###\n\n| Name | Description | Mandatory | Default value |\n|:------------------------|:-------------------------------|:----------|:--------------|\n| `username` | User name. | Mandatory | |\n| `password` | User password. | Mandatory | |\n\n## NTLM ##\n\nRequires [requests-negotiate-sspi module][4] or [requests_ntlm module][5] depending on provided parameters.\n\nSample:\n\n```python\nimport requests\nfrom requests_auth import NTLM\n\nrequests.get('http://www.example.com', auth=NTLM())\n```\n\n### Parameters ###\n\n| Name | Description | Mandatory | Default value |\n|:------------------------|:-------------------------------|:----------|:--------------|\n| `username` | User name. | Mandatory if requests_negotiate_sspi module is not installed. In such a case requests_ntlm module is mandatory. | |\n| `password` | User password. | Mandatory if requests_negotiate_sspi module is not installed. In such a case requests_ntlm module is mandatory. | |\n\n## Multiple authentication at once ##\n\nYou can also use a combination of authentication as in the following sample:\n\n```python\nimport requests\nfrom requests_auth import Auths, HeaderApiKey, OAuth2Implicit\n\napi_key = HeaderApiKey('my_api_key')\noauth2 = OAuth2Implicit('https://www.example.com')\nrequests.get('http://www.example.com', auth=Auths(api_key, oauth2))\n```\n\n[1]: https://pypi.python.org/pypi/requests \"requests module\"\n[2]: http://docs.python-requests.org/en/master/user/authentication/ \"authentication parameter on requests module\"\n[3]: http://openid.net/specs/openid-connect-core-1_0.html#IDToken \"OpenID ID Token specifications\"\n[4]: https://pypi.python.org/pypi/requests-negotiate-sspi \"requests-negotiate-sspi module\"\n[5]: https://pypi.python.org/pypi/requests_ntlm \"requests_ntlm module\"", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://pypi.org/project/requests-auth/", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Colin-b/requests_auth", "keywords": "authentication,ntlm,oauth2,azure-active-directory,azure-ad,okta,apikey,multiple", "license": "MIT", "maintainer": "Colin Bounouar", "maintainer_email": "colin.bounouar.dev@gmail.com", "name": "requests-auth", "package_url": "https://pypi.org/project/requests-auth/", "platform": "Windows", "project_url": "https://pypi.org/project/requests-auth/", "project_urls": { "Download": "https://pypi.org/project/requests-auth/", "Homepage": "https://github.com/Colin-b/requests_auth" }, "release_url": "https://pypi.org/project/requests-auth/4.0.1/", "requires_dist": null, "requires_python": "", "summary": "Easy Authentication for Requests", "version": "4.0.1" }, "last_serial": 4604997, "releases": { "1.0.2": [ { "comment_text": "", "digests": { "md5": "ab4b850c7efbf57d47c9353ab78865de", "sha256": "692e49c4b094b565ab5aa8cacd6df11238d8453ac22f2d331a314bca612cf9de" }, "downloads": -1, "filename": "requests_auth-1.0.2.tar.gz", "has_sig": false, "md5_digest": "ab4b850c7efbf57d47c9353ab78865de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11825, "upload_time": "2018-01-19T16:12:23", "url": "https://files.pythonhosted.org/packages/dd/e5/e638d78e8ace2f748448baffa2b7f50ddd0d98d9abafa0f3940d38c20c0d/requests_auth-1.0.2.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "2f99a3aa581d4077234f73150bf44893", "sha256": "c89ccfc66ff3daae3f8c2c3f60721d770019accccef1fced47428ccc827bd67b" }, "downloads": -1, "filename": "requests_auth-2.0.0.tar.gz", "has_sig": false, "md5_digest": "2f99a3aa581d4077234f73150bf44893", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12744, "upload_time": "2018-10-09T10:31:37", "url": "https://files.pythonhosted.org/packages/30/17/fd8d870f84eae6565f159a9ee526c341b9453a25813a6b0674eabbfb2cce/requests_auth-2.0.0.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "665972f3e4054954ab06d4423e93a9bb", "sha256": "0b1d67d34d559f9a584bf9d0a896aa63fdfed11323bb438ee8482fe1607d7ad3" }, "downloads": -1, "filename": "requests_auth-3.0.0.tar.gz", "has_sig": false, "md5_digest": "665972f3e4054954ab06d4423e93a9bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16381, "upload_time": "2018-11-13T18:06:13", "url": "https://files.pythonhosted.org/packages/b5/84/e6e7d07279e734a182219266f64c99d51c50bee4e60a44a66153522f944d/requests_auth-3.0.0.tar.gz" } ], "4.0.0": [ { "comment_text": "", "digests": { "md5": "503baf8184d847e6a07c761a19952ce0", "sha256": "31cb825f31dfa2715f66f94b7771bc588ef5098b71606fe2a5654bd75221bda0" }, "downloads": -1, "filename": "requests_auth-4.0.0.tar.gz", "has_sig": false, "md5_digest": "503baf8184d847e6a07c761a19952ce0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16977, "upload_time": "2018-12-16T16:08:19", "url": "https://files.pythonhosted.org/packages/44/4e/9af83abc3a30580c3bca27f42ddee15aedf28e57b29f928d86ae4727b034/requests_auth-4.0.0.tar.gz" } ], "4.0.1": [ { "comment_text": "", "digests": { "md5": "3bdf39594f555a1fd9268f9d020ba47d", "sha256": "85040a26f83c1852a5c965911da305073fc91175613439f9bee4a79e0d3b8762" }, "downloads": -1, "filename": "requests_auth-4.0.1.tar.gz", "has_sig": false, "md5_digest": "3bdf39594f555a1fd9268f9d020ba47d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17051, "upload_time": "2018-12-16T16:22:57", "url": "https://files.pythonhosted.org/packages/62/42/bc15b06ed588c818db95ebc93ccff65e674cd89c85062c1c51dc7f977260/requests_auth-4.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3bdf39594f555a1fd9268f9d020ba47d", "sha256": "85040a26f83c1852a5c965911da305073fc91175613439f9bee4a79e0d3b8762" }, "downloads": -1, "filename": "requests_auth-4.0.1.tar.gz", "has_sig": false, "md5_digest": "3bdf39594f555a1fd9268f9d020ba47d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17051, "upload_time": "2018-12-16T16:22:57", "url": "https://files.pythonhosted.org/packages/62/42/bc15b06ed588c818db95ebc93ccff65e674cd89c85062c1c51dc7f977260/requests_auth-4.0.1.tar.gz" } ] }