我有以下代码:
bucket = get_bucket('bucket-name')
blob = bucket.blob(os.path.join(*pieces))
blob.upload_from_string('test')
blob.make_public()
result = blob.public_url
# result is `<Mock name='mock().get_bucket().blob().public_url`
Run Code Online (Sandbox Code Playgroud)
我想模拟public_url的结果,我的单元测试代码是这样的
with ExitStack() as st:
from google.cloud import storage
blob_mock = mock.Mock(spec=storage.Blob)
blob_mock.public_url.return_value = 'http://'
bucket_mock = mock.Mock(spec=storage.Bucket)
bucket_mock.blob.return_value = blob_mock
storage_client_mock = mock.Mock(spec=storage.Client)
storage_client_mock.get_bucket.return_value = bucket_mock
st.enter_context(
mock.patch('google.cloud.storage.Client', storage_client_mock))
my_function()
Run Code Online (Sandbox Code Playgroud)
谷歌存储有没有像FakeRedis或moto这样的东西,所以我可以模拟google.cloud.storage.Blob.public_url?
mocking google-api google-cloud-storage python-unittest google-cloud-python
根据此示例,该to_excel方法应保存带有背景颜色的 Excel 文件。但是,我保存的 Excel 文件中没有任何颜色。我尝试同时使用openpyxl和xlsxwriter引擎进行编写。在这两种情况下,Excel 文件都保存了,但单元格颜色/样式丢失了。
我可以读回文件并使用 重新格式化openpyxl,但如果这种to_excel方法应该有效,为什么不呢?
这是示例代码。
import pandas as pd # version 0.24.2
dict = {'A': [1, 1, 1, 1, 1], 'B':[2, 1, 2, 1, 2], 'C':[1, 2, 1, 2, 1]}
df = pd.DataFrame(dict)
df_styled = df.style.apply(lambda x: ["background: #ffa31a" if x.iloc[0] < v else " " for v in x], axis=1)
df_styled
''' in my jupyter notebook, this displayed my dataframe with background color …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 NetBeans 8.2 上运行 QuickStart.java https://developers.google.com/sheets/api/quickstart/java。我已经导入了所有的 Google 图书馆,但遇到了这个问题
Exception in thread "main" java.lang.IllegalArgumentException
at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:111)
at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:37)
at com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.getDetails(GoogleClientSecrets.java:82)
at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder.<init>(GoogleAuthorizationCodeFlow.java:197)
at Quickstart.authorize(Quickstart.java:71)
at Quickstart.getSheetsService(Quickstart.java:90)
at Quickstart.main(Quickstart.java:98)
C:\Users\kevin\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
Run Code Online (Sandbox Code Playgroud)
我已经尝试过警告中提到的内容:无法更改每个人的权限:,但没有用。我的代码如下:
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.sheets.v4.SheetsScopes;
import com.google.api.services.sheets.v4.model.*;
import com.google.api.services.sheets.v4.Sheets;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
public class Quickstart {
/** …Run Code Online (Sandbox Code Playgroud) 这是我的场景:
问题是脚本尝试读取 A1 内容,但是如果您正在编辑它,则在您手动单击另一个单元格之前,它的内容不会更新(因此,如果您在编辑 A1 后立即直接单击图像,脚本将读取先前存储的 A1 值)
问题是单击图像不会触发 A1 上的模糊事件,因此如果您正在编辑内容,则不会存储该内容。我想知道如何使用 Apps 脚本强制模糊/保存/停止编辑单元格,因此我可以确定检索到的值是您刚刚输入的值。我试过选择另一个活动范围,但没有帮助。
谢谢你。
我有一个 Google 表格插件,目前正在我的域中进行测试。对于这篇文章,我们称之为My First Add On。当用户安装加载项时,会提示他们提供权限,但它在对话框中始终显示为“未命名项目”:

在我能找到的任何地方,项目名称都设置为My First Add On:
我的附加组件以“私人”可见性发布,仅供给定 Google 群组中的人员(我信任的测试人员)使用。
我搜索了文档和论坛,看看我在这里遗漏了什么,但找不到涵盖这种情况的任何内容。
这必须是一些基本的东西,但我完全被卡住了,唯一可用的支持选项就是在这里发帖。我会很感激任何帮助,伙计们!
我有一个 Google 电子表格,其中 A 列的每一行都有复选框。我编写了一个脚本来在复选框被选中的所有行上执行一个函数,但我想在最后添加一个重置函数,以便在脚本运行后再次取消选中所有选中的框。
我试过使用这样的 for 循环:
var dataRange = sheet.getRange('A3:A');
var values = dataRange.getValues();
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (values[i][j] == true) {
values[i].setValue(false);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但显然这不起作用,因为我收到错误。
有谁知道如何做到这一点?
我正在尝试在 Google Cloud Platform 中创建一个仅具有 Google Drive API 访问权限的服务帐户。但是,我根本找不到角色:
此外,如果我创建一个“通用服务帐户”,那么该用户可以添加实例等。这在过去一直是一个可怕的安全问题,因为拥有该密钥的用户实际上已经创建了未经授权的实例(因此出现了上述问题)。
我将如何创建一个可以访问 Google Drive API 而没有其他权限的服务帐户?
我想编写一个脚本,允许我仅突出显示(背景颜色)选定范围内的某些单元格,例如,仅突出显示第 2 列和第 2 行中的单元格,即使我选择整个表格也是如此。
例如:
For each cell in selected range {
If selected cell[i][j] is within allowed range {
cell background color = green
};
};Run Code Online (Sandbox Code Playgroud)
我试图完成的代码:
function BackgroundColor() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getActiveRange();
var cells = range.getValues();
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
for (var i = 0; i < numRows; i++) {
for (var j = 0; j < numCols; j++) {
if (range.getValues()[i][j] == …Run Code Online (Sandbox Code Playgroud)我继Quickstart上https://developers.google.com/drive/api/v3/quickstart/python。我已经通过页面启用了驱动器 API,加载了credentials.json并且可以成功地列出我的谷歌驱动器中的文件。但是,当我想下载文件时,我收到了消息
`The user has not granted the app ####### read access to the file`
Run Code Online (Sandbox Code Playgroud)
我需要做的不仅仅是将该范围放入我的代码中,还是需要激活其他东西?
SCOPES = 'https://www.googleapis.com/auth/drive.file'
client.flow_from_clientsecrets('credentials.json', SCOPES)
Run Code Online (Sandbox Code Playgroud) python google-drive-api google-oauth google-api-python-client
我尝试使用以下代码访问 Google Drive 中的 Google Sheets 文件:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
gc = gspread.authorize(credentials)
wks = gc.open('my_test').sheet1
print(wks.get_all_records())
Run Code Online (Sandbox Code Playgroud)
然后,我在我的驱动器中创建了一个名为my_test的电子表格,并将其与credentials.json 中的电子邮件共享。然后它起作用了。但是,范围太广,我想使用
scope = ['https://www.googleapis.com/auth/drive.file']
Run Code Online (Sandbox Code Playgroud)
反而。但是如果我改变范围,它就找不到工作表:
File "/home/my_username/.local/lib/python3.6/site-packages/gspread/client.py", line 130, in open
raise SpreadsheetNotFound
gspread.exceptions.SpreadsheetNotFound
Run Code Online (Sandbox Code Playgroud)
这是为什么?我怎样才能改变它?我在谷歌上搜索了很多,对于大多数人来说,共享或重新共享电子表格是有效的。就我而言,问题仍然存在。
在使用 drive.file 范围解决方案为 Drive 元数据添加范围的解决方案执行查询时,我也尝试了此错误 500,但这会导致此权限错误,这可以看作是进度(因为它找到了文件):
gspread.exceptions.APIError: {
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,即使我将电子表格访问权限设置为“公开”,此错误仍然存在。
任何提示非常感谢!
哦,我还有一个更普遍的问题:服务帐户是否可以访问我的整个驱动器?还是仅适用于与服务帐户共享的所有内容?因为我只与它共享了一个电子表格,所以我对这里的权限究竟是如何工作感到有些困惑。
python ×2
checkbox ×1
google-api ×1
google-oauth ×1
gspread ×1
highlight ×1
java ×1
loops ×1
mocking ×1
openpyxl ×1
pandas ×1
range ×1
styling ×1
xlsxwriter ×1