I wrote a Python script(Google_add.py) which creates users in the Google Workspace. However, When it is run, an AttributeError occurred. How do I resolve this Error?
・Google_add.py (Excerpt)
PATH = '/opt/Google/credentials.json' CLIENT_SECRETS = '/opt/Google/client_secrets.json' credentials = None #If there are credentials if os.path.exists(PATH): credentials = Credentials.from_authorized_user_file( path = PATH, scopes = SCOPES) #If there are no (valid) credentials available if not credentials or not credentials.valid: if credentials and credentials.expired and credentials.refresh_token: credentials.refresh(Request()) else: FLOW = flow.InstalledAppFlow.from_client_secrets_file( client_secrets_file = CLIENT_SECRETS, scopes = SCOPES) credentials = FLOW.run_console() with open(PATH, 'w') as token: token.write(credentials.to_json()) ・Error Message
File "Google_add.py", line 186, in <module> main() File "Google_add.py", line 172, in main FLOW.run_console() AttributeError: 'InstalledAppFlow' object has no attribute 'run_console' I refer the below site when I wrote it.
In the script, I want to authorize using the user account(not service account). And "run_local_server()" method doesn't work because my linux server isn't a web server (doesn't have httpd, nginx and so on).
(I'm sorry if my writing is hard to read.)
34 Answers
Expanding on George's answer above, the versions of the library from the github post that work are:
google-api-python-client==1.7.2 google-auth==1.8.0 google-auth-httplib2==0.0.3 google-auth-oauthlib==0.4.1 The issue may have been a version compatibility issue of google-api-python-client library with other libraries like
- google-auth
- google-auth-httplib2
- google-auth-oauthlib
You just need to make sure that the version of your google-api-python-client supports the versions you have installed to its dependency libraries. You can view the full change log of google-api-python-client library here
References:
google-api-python-client change log
google_auth_oauthlib.flow module
1You said:
"run_local_server()" method doesn't work because my linux server isn't a web server (doesn't have httpd, nginx and so on).
This isn't true. The solution below will work also on non-web servers, your local machine, local scripts etc... However, you need a way to open a browser. If not, you can create the token on your local machine and copy the token to your server.
Replace: credentials = FLOW.run_console()
with: credentials = FLOW.run_local_server(port=0)
This will work perfectly in all situations.
The
run_console()(OOB) flow has been deprecated by Google, that's why it was removed from newer versions of the Google OAuth connector
Replace the line
credentials = FLOW.run_console() to
credentials = FLOW.run_local_server() people also got it working by these configurations:
google-api-python-client==1.7.2 google-auth==2.14.1 google-auth-httplib2==0.0.3 google-auth-oauthlib==0.4.1