janullo789
janullo789

Reputation: 71

Docs API, set permissions on sheet

I am creating a Python code that generates a sheet file in Google Docs. The file creates itself without any problems, but I can't change its editing permissions.

When I enter the following code, an error appears. Could you give me some advice?

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from google.oauth2.service_account import Credentials

creds = Credentials.from_service_account_file("key/key1.json")

service = build("sheets", "v4", credentials=creds)

spreadsheet = {
  "properties": {
    "title": "Nowy arkusz"
  }
}
spreadsheet = service.spreadsheets().create(body=spreadsheet).execute()
spreadsheet_id = spreadsheet.get("spreadsheetId")

permission = {
    'type': 'anyone',
    'role': 'writer',
}
service.permissions().create(fileId=spreadsheet_id, body=permission).execute()

Error

line 36, in <module>
    service.permissions().create(fileId=spreadsheet_id, body=permission).execute()
AttributeError: 'Resource' object has no attribute 'permissions'

Upvotes: 2

Views: 456

Answers (1)

Tanaike
Tanaike

Reputation: 201603

In your script, I think that in order to create the permission, it is required to use build("drive", "v3", credentials=creds) instead of build("sheets", "v4", credentials=creds).

When your script is modified, how about the following modification?

Modified script:

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from google.oauth2.service_account import Credentials

creds = Credentials.from_service_account_file(
    "key/key1.json",
    scopes=[
        "https://www.googleapis.com/auth/spreadsheets",
        "https://www.googleapis.com/auth/drive",
    ],
)

service = build("sheets", "v4", credentials=creds)
spreadsheet = {"properties": {"title": "Nowy arkusz"}}
spreadsheet = service.spreadsheets().create(body=spreadsheet).execute()
spreadsheet_id = spreadsheet.get("spreadsheetId")

drive = build("drive", "v3", credentials=creds)
permission = {
    "type": "anyone",
    "role": "writer",
}
drive.permissions().create(fileId=spreadsheet_id, body=permission).execute()

Reference:

Upvotes: 2

Related Questions