小编teh*_*wch的帖子

模拟访问公共 GCS 存储桶的结果

我有以下代码:

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)

谷歌存储有没有像FakeRedismoto这样的东西,所以我可以模拟google.cloud.storage.Blob.public_url

mocking google-api google-cloud-storage python-unittest google-cloud-python

8
推荐指数
1
解决办法
1584
查看次数

为什么使用“to_excel”保存时熊猫数据框样式丢失?

根据此示例,to_excel方法应保存带有背景颜色的 Excel 文件。但是,我保存的 Excel 文件中没有任何颜色。我尝试同时使用openpyxlxlsxwriter引擎进行编写。在这两种情况下,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)

styling pandas openpyxl xlsxwriter

8
推荐指数
1
解决办法
5134
查看次数

使用 Google 的 Java API 客户端库进行身份验证时出现 IllegalArgumentException

我正在尝试在 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)

java google-api-java-client

7
推荐指数
1
解决办法
3452
查看次数

Apps 脚本:在编辑单元格上强制模糊以保存其内容

这是我的场景:

  • 1 个单元格:A1,您可以在其中输入一些文本
  • 1 图像/绘图:单击时调用脚本函数

问题是脚本尝试读取 A1 内容,但是如果您正在编辑它,则在您手动单击另一个单元格之前,它的内容不会更新(因此,如果您在编辑 A1 后立即直接单击图像,脚本将读取先前存储的 A1 值)

问题是单击图像不会触发 A1 上的模糊事件,因此如果您正在编辑内容,则不会存储该内容。我想知道如何使用 Apps 脚本强制模糊/保存/停止编辑单元格,因此我可以确定检索到的值是您刚刚输入的值。我试过选择另一个活动范围,但没有帮助。

谢谢你。

google-sheets google-apps-script

7
推荐指数
1
解决办法
812
查看次数

无法在 Google Apps Script Add-on 的“授予权限”对话框中设置项目名称

我有一个 Google 表格插件,目前正在我的域中进行测试。对于这篇文章,我们称之为My First Add On。当用户安装加载项时,会提示他们提供权限,但它在对话框中始终显示为“未命名项目”:

屏幕截图:使用 Google 提示登录

在我能找到的任何地方,项目名称都设置为My First Add On

  • Google Apps 脚本项目名称
  • Google Cloud Platform 项目名称(IAM > 设置)
  • Google Chrome 网上应用店插件名称(开发者仪表板)

我的附加组件以“私人”可见性发布,仅供给定 Google 群组中的人员(我信任的测试人员)使用。

我搜索了文档和论坛,看看我在这里遗漏了什么,但找不到涵盖这种情况的任何内容。

这必须是一些基本的东西,但我完全被卡住了,唯一可用的支持选项就是在这里发帖。我会很感激任何帮助,伙计们!

google-apps-script google-apps-script-addon

7
推荐指数
1
解决办法
734
查看次数

将复选框重置为 false

我有一个 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)

但显然这不起作用,因为我收到错误。

有谁知道如何做到这一点?

checkbox google-sheets google-apps-script

7
推荐指数
2
解决办法
2万
查看次数

如何创建具有 Google Drive 访问权限的服务帐户

我正在尝试在 Google Cloud Platform 中创建一个仅具有 Google Drive API 访问权限的服务帐户。但是,我根本找不到角色:

在此处输入图片说明

此外,如果我创建一个“通用服务帐户”,那么该用户可以添加实例等。这在过去一直是一个可怕的安全问题,因为拥有该密钥的用户实际上已经创建了未经授权的实例(因此出现了上述问题)。

我将如何创建一个可以访问 Google Drive API 而没有其他权限的服务帐户?

google-drive-api service-accounts google-cloud-platform

7
推荐指数
1
解决办法
2496
查看次数

使用 Google 脚本循环访问 Google 表格中某个范围内的单元格

我想编写一个脚本,允许我仅突出显示(背景颜色)选定范围内的某些单元格,例如,仅突出显示第 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)

loops range highlight google-sheets google-apps-script

7
推荐指数
2
解决办法
2万
查看次数

Google Drive API:用户未授予应用错误

我继Quickstarthttps://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

7
推荐指数
2
解决办法
5776
查看次数

如何正确使用范围 https://www.googleapis.com/auth/drive.file

我尝试使用以下代码访问 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 service-accounts gspread google-sheets-api

6
推荐指数
1
解决办法
2173
查看次数