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.)

3

4 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-api-python-client

google_auth_oauthlib.flow module

Github post similar issue

1

You 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.

For more info, refer to

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 

git link :

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.