英文:
Disable google cloud authentication python when mocking google.cloud.storage
问题
以下是您要翻译的部分:
从以下的Google Cloud Storage模拟开始
```python
from google.cloud import storage
class MockBlob:
def download_as_string(self) -> bytes:
return bytes("\n".join(INPUT_IDS), "utf-8")
class MockBucket:
def get_blob(self, path: str) -> MockBlob:
return MockBlob()
class MockStorageClient(storage.Client):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def _require_client_info(self, client_info=None):
pass
def _require_virtual(self):
pass
def get_bucket(self, bucket_or_name: str):
return MockBucket()
我收到以下错误消息
.venv/lib/python3.8/site-packages/google/cloud/storage/client.py:173: in __init__
super(Client, self).__init__(
.venv/lib/python3.8/site-packages/google/cloud/client/__init__.py:320: in __init__
_ClientProjectMixin.__init__(self, project=project, credentials=credentials)
.venv/lib/python3.8/site-packages/google/cloud/client/__init__.py:268: in __init__
project = self._determine_default(project)
.venv/lib/python3.8/site-packages/google/cloud/client/__init__.py:287: in _determine_default
return _determine_default_project(project)
.venv/lib/python3.8/site-packages/google/cloud/_helpers/__init__.py:152: in _determine_default_project
_, project = google.auth.default()
.venv/lib/python3.8/site-packages/google/auth/_default.py:615: in default
credentials, project_id = checker()
.venv/lib/python3.8/site-packages/google/auth/_default.py:608: in <lambda>
lambda: _get_explicit_environ_credentials(quota_project_id=quota_project_id),
.venv/lib/python3.8/site-packages/google/auth/_default.py:228: in _get_explicit_environ_credentials
credentials, project_id = load_credentials_from_file(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
filename = '', scopes = None, default_scopes = None, quota_project_id = None, request = None
def load_credentials_from_file(
filename, scopes=None, default_scopes=None, quota_project_id=None, request=None
):
"""Loads Google credentials from a file.
The credentials file must be a service account key, stored authorized
user credentials, external account credentials, or impersonated service
account credentials.
Args:
filename (str): The full path to the credentials file.
scopes (Optional[Sequence[str]]): The list of scopes for the credentials. If
specified, the credentials will automatically be scoped if
necessary
default_scopes (Optional[Sequence[str]]): Default scopes passed by a
Google client library. Use 'scopes' for user-defined scopes.
quota_project_id (Optional[str]): The project ID used for
quota and billing.
request (Optional[google.auth.transport.Request]): An object used to make
HTTP requests. This is used to determine the associated project ID
for a workload identity pool resource (external account credentials).
If not specified, then it will use a
google.auth.transport.requests.Request client to make requests.
Returns:
Tuple[google.auth.credentials.Credentials, Optional[str]]: Loaded
credentials and the project ID. Authorized user credentials do not
have the project ID information. External account credentials project
IDs may not always be determined.
Raises:
google.auth.exceptions.DefaultCredentialsError: if the file is in the
wrong format or is missing.
"""
if not os.path.exists(filename):
> raise exceptions.DefaultCredentialsError(
"File {} was not found.".format(filename)
)
E google.auth.exceptions.DefaultCredentialsError: File was not found.
.venv/lib/python3.8/site-packages/google/auth/_default.py:116: DefaultCredentialsError
测试的目的是查看是否使用存储桶的代码是否正常工作。获取的Blob包含一个由"\n"分隔的文本文件中的ID,这就是下载函数返回静态字节字符串的原因。
如何禁用凭据以避免出现问题。
英文:
With the following mock of google cloud storage
from google.cloud import storage
class MockBlob:
def download_as_string(self) -> bytes:
return bytes("\n".join(INPUT_IDS), "utf-8")
class MockBucket:
def get_blob(self, path: str) -> MockBlob:
return MockBlob()
class MockStorageClient(storage.Client):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def _require_client_info(self, client_info=None):
pass
def _require_virtual(self):
pass
def get_bucket(self, bucket_or_name: str):
return MockBucket()
i get the error displayed below
.venv/lib/python3.8/site-packages/google/cloud/storage/client.py:173: in __init__
super(Client, self).__init__(
.venv/lib/python3.8/site-packages/google/cloud/client/__init__.py:320: in __init__
_ClientProjectMixin.__init__(self, project=project, credentials=credentials)
.venv/lib/python3.8/site-packages/google/cloud/client/__init__.py:268: in __init__
project = self._determine_default(project)
.venv/lib/python3.8/site-packages/google/cloud/client/__init__.py:287: in _determine_default
return _determine_default_project(project)
.venv/lib/python3.8/site-packages/google/cloud/_helpers/__init__.py:152: in _determine_default_project
_, project = google.auth.default()
.venv/lib/python3.8/site-packages/google/auth/_default.py:615: in default
credentials, project_id = checker()
.venv/lib/python3.8/site-packages/google/auth/_default.py:608: in <lambda>
lambda: _get_explicit_environ_credentials(quota_project_id=quota_project_id),
.venv/lib/python3.8/site-packages/google/auth/_default.py:228: in _get_explicit_environ_credentials
credentials, project_id = load_credentials_from_file(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
filename = '', scopes = None, default_scopes = None, quota_project_id = None, request = None
def load_credentials_from_file(
filename, scopes=None, default_scopes=None, quota_project_id=None, request=None
):
"""Loads Google credentials from a file.
The credentials file must be a service account key, stored authorized
user credentials, external account credentials, or impersonated service
account credentials.
Args:
filename (str): The full path to the credentials file.
scopes (Optional[Sequence[str]]): The list of scopes for the credentials. If
specified, the credentials will automatically be scoped if
necessary
default_scopes (Optional[Sequence[str]]): Default scopes passed by a
Google client library. Use 'scopes' for user-defined scopes.
quota_project_id (Optional[str]): The project ID used for
quota and billing.
request (Optional[google.auth.transport.Request]): An object used to make
HTTP requests. This is used to determine the associated project ID
for a workload identity pool resource (external account credentials).
If not specified, then it will use a
google.auth.transport.requests.Request client to make requests.
Returns:
Tuple[google.auth.credentials.Credentials, Optional[str]]: Loaded
credentials and the project ID. Authorized user credentials do not
have the project ID information. External account credentials project
IDs may not always be determined.
Raises:
google.auth.exceptions.DefaultCredentialsError: if the file is in the
wrong format or is missing.
"""
if not os.path.exists(filename):
> raise exceptions.DefaultCredentialsError(
"File {} was not found.".format(filename)
)
E google.auth.exceptions.DefaultCredentialsError: File was not found.
.venv/lib/python3.8/site-packages/google/auth/_default.py:116: DefaultCredentialsError
The purpose of the test is to see if the code utilizing the bucket is working. The blob that is fetched contains a text file of ids that are separated by "\n", which is why the download function returns a static byte string.
How do i disable the credentials, such that it is not an issue.
答案1
得分: 1
以下是翻译好的部分:
您可以简单地覆盖失败的函数,如下所示:
```python
from google.auth import credentials
import google.auth._default
def load_credentials_from_file(
filename, scopes=None, default_scopes=None, quota_project_id=None, request=None
) -> Tuple[credentials.Credentials, Optional[str]]:
return (credentials.AnonymousCredentials(), "test-project")
google.auth._default.load_credentials_from_file = load_credentials_from_file
<details>
<summary>英文:</summary>
You can simply override the function that fails as
```python
from google.auth import credentials
import google.auth._default
def load_credentials_from_file(
filename, scopes=None, default_scopes=None, quota_project_id=None, request=None
) -> Tuple[credentials.Credentials, Optional[str]]:
return (credentials.AnonymousCredentials(), "test-project")
google.auth._default.load_credentials_from_file = load_credentials_from_file
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论