norae
/
docker
/deezer-spleeter-env
/lib64
/python3.10
/site-packages
/google_auth_oauthlib
/interactive.py
| # Copyright 2019 Google LLC | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # https://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| """Get user credentials from interactive code environments. | |
| This module contains helpers for getting user credentials from interactive | |
| code environments installed on a development machine, such as Jupyter | |
| notebooks. | |
| """ | |
| from __future__ import absolute_import | |
| import contextlib | |
| import socket | |
| import google_auth_oauthlib.flow | |
| LOCALHOST = "localhost" | |
| DEFAULT_PORTS_TO_TRY = 100 | |
| def is_port_open(port): | |
| """Check if a port is open on localhost. | |
| Based on StackOverflow answer: https://stackoverflow.com/a/43238489/101923 | |
| Parameters | |
| ---------- | |
| port : int | |
| A port to check on localhost. | |
| Returns | |
| ------- | |
| is_open : bool | |
| True if a socket can be opened at the requested port. | |
| """ | |
| with contextlib.closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock: | |
| try: | |
| sock.bind((LOCALHOST, port)) | |
| sock.listen(1) | |
| except socket.error: | |
| is_open = False | |
| else: | |
| is_open = True | |
| return is_open | |
| def find_open_port(start=8080, stop=None): | |
| """Find an open port between ``start`` and ``stop``. | |
| Parameters | |
| ---------- | |
| start : Optional[int] | |
| Beginning of range of ports to try. Defaults to 8080. | |
| stop : Optional[int] | |
| End of range of ports to try (not including exactly equals ``stop``). | |
| This function tries 100 possible ports if no ``stop`` is specified. | |
| Returns | |
| ------- | |
| Optional[int] | |
| ``None`` if no open port is found, otherwise an integer indicating an | |
| open port. | |
| """ | |
| if not stop: | |
| stop = start + DEFAULT_PORTS_TO_TRY | |
| for port in range(start, stop): | |
| if is_port_open(port): | |
| return port | |
| # No open ports found. | |
| return None | |
| def get_user_credentials( | |
| scopes, client_id, client_secret, minimum_port=8080, maximum_port=None | |
| ): | |
| """Gets credentials associated with your Google user account. | |
| This function authenticates using your user credentials by going through | |
| the OAuth 2.0 flow. You'll open a browser window to authenticate to your | |
| Google account. The permissions it requests correspond to the scopes | |
| you've provided. | |
| To obtain the ``client_id`` and ``client_secret``, create an **OAuth | |
| client ID** with application type **Other** from the `Credentials page on | |
| the Google Developer's Console | |
| <https://console.developers.google.com/apis/credentials>`_. Learn more | |
| with the `Authenticating as an end user | |
| <https://cloud.google.com/docs/authentication/end-user>`_ guide. | |
| Args: | |
| scopes (Sequence[str]): | |
| A list of scopes to use when authenticating to Google APIs. See | |
| the `list of OAuth 2.0 scopes for Google APIs | |
| <https://developers.google.com/identity/protocols/googlescopes>`_. | |
| client_id (str): | |
| A string that identifies your application to Google APIs. Find | |
| this value in the `Credentials page on the Google Developer's | |
| Console | |
| <https://console.developers.google.com/apis/credentials>`_. | |
| client_secret (str): | |
| A string that verifies your application to Google APIs. Find this | |
| value in the `Credentials page on the Google Developer's Console | |
| <https://console.developers.google.com/apis/credentials>`_. | |
| minimum_port (int): | |
| Beginning of range of ports to try for redirect URI HTTP server. | |
| Defaults to 8080. | |
| maximum_port (Optional[int]): | |
| End of range of ports to try (not including exactly equals ``stop``). | |
| This function tries 100 possible ports if no ``stop`` is specified. | |
| Returns: | |
| google.oauth2.credentials.Credentials: | |
| The OAuth 2.0 credentials for the user. | |
| Examples: | |
| Get credentials for your user account and use them to run a query | |
| with BigQuery:: | |
| import google_auth_oauthlib | |
| # TODO: Create a client ID for your project. | |
| client_id = "YOUR-CLIENT-ID.apps.googleusercontent.com" | |
| client_secret = "abc_ThIsIsAsEcReT" | |
| # TODO: Choose the needed scopes for your applications. | |
| scopes = ["https://www.googleapis.com/auth/cloud-platform"] | |
| credentials = google_auth_oauthlib.get_user_credentials( | |
| scopes, client_id, client_secret | |
| ) | |
| # 1. Open the link. | |
| # 2. Authorize the application to have access to your account. | |
| # 3. Copy and paste the authorization code to the prompt. | |
| # Use the credentials to construct a client for Google APIs. | |
| from google.cloud import bigquery | |
| bigquery_client = bigquery.Client( | |
| credentials=credentials, project="your-project-id" | |
| ) | |
| print(list(bigquery_client.query("SELECT 1").result())) | |
| """ | |
| client_config = { | |
| "installed": { | |
| "client_id": client_id, | |
| "client_secret": client_secret, | |
| "auth_uri": "https://accounts.google.com/o/oauth2/auth", | |
| "token_uri": "https://oauth2.googleapis.com/token", | |
| } | |
| } | |
| app_flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_config( | |
| client_config, scopes=scopes | |
| ) | |
| port = find_open_port(start=minimum_port, stop=maximum_port) | |
| if not port: | |
| raise ConnectionError("Could not find open port.") | |
| return app_flow.run_local_server(host=LOCALHOST, port=port) | |