AttributeError: 'NoneType' object has no attribute 'authorize'

Code-Stücke können hier veröffentlicht werden.
kleiner_syrer
User
Beiträge: 5
Registriert: Mittwoch 18. Januar 2017, 20:44

AttributeError: 'NoneType' object has no attribute 'authorize'

Beitragvon kleiner_syrer » Samstag 4. März 2017, 14:12

Hallo

habe folgenden Code:

  1. #!C:\Python\python.exe
  2. # -*- coding: utf-8 -*-
  3.  
  4. from __future__ import print_function
  5. import sys
  6. import subprocess
  7. import os
  8. import httplib2
  9. import smtplib
  10. import active_directory
  11. import logging
  12. import codecs
  13.  
  14. # KTT apiclient change into googleapiclient'''
  15. from googleapiclient import discovery
  16. from oauth2client import client
  17. from oauth2client.file import Storage
  18. from json import dumps
  19. from email.mime.text import MIMEText
  20.  
  21.  
  22. # If modifying these scopes, delete your previously saved credentials
  23. # at ~/.credentials/admin-directory_v1-python-quickstart.json
  24. SCOPES = 'https://www.googleapis.com/auth/admin.directory.user'
  25. CLIENT_SECRET_FILE = 'C:\\Python\\Ownscripts\\client_secret.json'
  26. APPLICATION_NAME = 'Directory API Python Quickstart'
  27.  
  28.  
  29. # Open a plain text file for reading.  For this example, assume that
  30. # the text file contains only ASCII characters.
  31. fp = codecs.open('C:\\Python\\Ownscripts\\textfile.txt', 'r')
  32. msg_replace = fp.read()
  33. msg_replace = msg_replace.replace("_Benutzerkennung_", sys.argv[1])
  34. msg_replace = msg_replace.replace("_Anleger-UID_", sys.argv[3])
  35. # Create a text/plain message
  36. msg = MIMEText(msg_replace)
  37. fp.close()
  38.  
  39.  
  40. # Mail Konstanten
  41. user = active_directory.find_user(str(sys.argv[1]))
  42. CC_mail = active_directory.find_user(str(sys.argv[3]))
  43.  
  44.  
  45. sender = mail@web.de
  46. mailuser = mail1@web.de
  47. msg['Subject'] = 'Google Account wurde angelegt.'
  48. msg['From'] = sender
  49. msg['To'] = mailuser
  50. s = smtplib.SMTP('Server03')
  51.  
  52. ProxyInfo = httplib2.ProxyInfo(proxy_type=httplib2.socks.PROXY_TYPE_HTTP, proxy_host='Server01', proxy_port=8080,
  53.                                proxy_user='$NWVM-PROXY', proxy_pass='Passwort')
  54.  
  55.  
  56. def get_credentials():
  57.     home_dir = os.path.expanduser('~')
  58.     credential_dir = os.path.join(home_dir, '.credentials')
  59.     if not os.path.exists(credential_dir):
  60.         os.makedirs(credential_dir)
  61.     credential_path = os.path.join(credential_dir,
  62.                                    'admin-directory_v1-python-quickstart.json')
  63.     store = Storage(credential_path)
  64.     credentials = store.get()
  65.     if not credentials or credentials.invalid:
  66.         flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
  67.         flow.user_agent = APPLICATION_NAME
  68.         print('Storing credentials to ' + credential_path)
  69.     return credentials
  70.  
  71.  
  72. def main():
  73.  
  74.     credentials = get_credentials()
  75.     http = credentials.authorize(httplib2.Http(proxy_info=ProxyInfo))
  76.     discovery.build('admin', 'directory_v1', http=http)
  77.     http.request(
  78.         uri='https://www.googleapis.com/admin/directory/v1/users',
  79.         method='POST',
  80.         headers={'Content-Type': 'application/json; charset=UTF-8'},
  81.         body=dumps({"kind": "admin#directory#user",
  82.                     "password": str(sys.argv[2]),
  83.                     "changePasswordAtNextLogin": True,
  84.                     "orgUnitPath": '''/''' + user.userPrincipalName.split("@", 1)[-1],
  85.                     "primaryEmail": user.userPrincipalName,
  86.                     "customerID": "my_customer",
  87.                     "name": {"givenName": user.givenName, "familyName": user.sn}}
  88.                    ))
  89.     subprocess.call(
  90.         'runas.exe /user:XX-DD\$NWVMAD-USER /savecred "C:\Python\OwnScripts\ADUserGroup.cmd "' + str(sys.argv[1]))
  91.     s.sendmail(sender, [mailuser], msg.as_string('UTF-8'))
  92.     s.quit()
  93.  
  94.  
  95.  
  96. if __name__ == '__main__':
  97.     main()


Erhalte beim Ausführen auf dem Server folgende Nachricht:

Traceback (most recent call last):
File "C:\Python\Ownscripts\quickstart_ent.py", line 120, in <module>
main()
File "C:\Python\Ownscripts\quickstart_ent.py", line 95, in main
http = credentials.authorize(httplib2.Http(proxy_info=ProxyInfo))
AttributeError: 'NoneType' object has no attribute 'authorize'

Anscheinend kommt aus def get_credentials(): keine Inhalt zurück. Warum?

Danke für Eure Antwort

Gruß

Frank
Zuletzt geändert von BlackJack am Samstag 4. März 2017, 14:23, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
snafu
User
Beiträge: 5023
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: AttributeError: 'NoneType' object has no attribute 'authorize'

Beitragvon snafu » Samstag 4. März 2017, 14:26

Lass dir mal die Rückgabe von store.get() ausgeben und überleg dann mal, ob damit ein Zusammenhang bestehen könnte...

Übrigens ist es hilfreich, den Originalcode zu posten oder bei geändertem Code diesen nochmal auszuführen und dessen Fehlermeldung zu kopieren. Dann stimmen die Zeilennummern auch überein. ;)
shcol (Repo | Doc | PyPi)
kleiner_syrer
User
Beiträge: 5
Registriert: Mittwoch 18. Januar 2017, 20:44

Re: AttributeError: 'NoneType' object has no attribute 'authorize'

Beitragvon kleiner_syrer » Samstag 4. März 2017, 17:14

Das habe ich auch schon. Es wird none zurück gegeben. Mit Storage(credential_path) sollte ja alles in die admin-directory_v1-python-quickstart.json geschrieben werden. Dass passiert aber nicht. Die Datei wird gar nicht erst angelegt. Credential_path stimmt. Da wird der Pfad und die Datei angezeigt. Es muss also am Storage(credential_path) liegen. Storage hängt wiederum mit oauth2client zusammen. Aber genau da weiß ich nicht mehr weiter.

Berechtigungsprbleme sollten es nicht sein, weil das Verzeichnis .credentials wird immer abgelegt, wenn es nicht existiert.

Das mit dem Code entschuldige bitte.
Benutzeravatar
BlackJack
Moderator
Beiträge: 31649
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: AttributeError: 'NoneType' object has no attribute 'authorize'

Beitragvon BlackJack » Samstag 4. März 2017, 17:35

@kleiner_syrer: Wo denkst Du denn das die Datei geschrieben werden sollte? Kann es sein das der Code dafür eingentlich an der Stelle stehen sollte wo das `print()` in `get_credentials()` *behauptet* es würden „credentials“ gespeichert? Warum wird mit `flow` nichts gemacht was irgendeinen weitergehenden Effekt hat?

Wenn `credentials` `None` oder nicht gültig ist, wird zwar etwas gemacht, aber es wird auch nicht dafür gesorgt dass das am Ende der Funktion an gültige `credentials` gebunden wird.
“A lesson I've learned over and over is that computer programs live far longer than you expect. It pays to do 'em better at the beginning, 'cause you're likely to live with them quite a while.” — Cameron Laird in c.l.p
kleiner_syrer
User
Beiträge: 5
Registriert: Mittwoch 18. Januar 2017, 20:44

Re: AttributeError: 'NoneType' object has no attribute 'authorize'

Beitragvon kleiner_syrer » Montag 6. März 2017, 07:43

So jetzt wird es ein wenig kurios. Auf dem Client Windows 10 und Python 2.7.13 funktioniert es. Auf Windows 2008 mit Python 2.7.13 nicht. Woran kann das liegen? Alle Module sind gleich. Eine Idee?
Benutzeravatar
BlackJack
Moderator
Beiträge: 31649
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: AttributeError: 'NoneType' object has no attribute 'authorize'

Beitragvon BlackJack » Montag 6. März 2017, 09:55

@kleiner_syrer: Auf dem Rechner wo es funktioniert gibt es die Daten zur Autorisierung und bei dem anderen nicht‽
“A lesson I've learned over and over is that computer programs live far longer than you expect. It pays to do 'em better at the beginning, 'cause you're likely to live with them quite a while.” — Cameron Laird in c.l.p
kleiner_syrer
User
Beiträge: 5
Registriert: Mittwoch 18. Januar 2017, 20:44

Re: AttributeError: 'NoneType' object has no attribute 'authorize'

Beitragvon kleiner_syrer » Montag 6. März 2017, 16:46

Jo, auf beiden gibt es die Client_Secret.json. Auf dem Server wird die admin-directory_v1-python-quickstart.json.json nicht erzeugt auf dem Client schon.
Benutzeravatar
snafu
User
Beiträge: 5023
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: AttributeError: 'NoneType' object has no attribute 'authorize'

Beitragvon snafu » Montag 6. März 2017, 17:07

Vielleicht fehlen auf dem Server die benötigten Schreibrechte für den Dateipfad. Sowas geht normalerweise aus den Logfiles hervor.
shcol (Repo | Doc | PyPi)

Zurück zu „Codesnippets“

Wer ist online?

Mitglieder in diesem Forum: Yahoo [Bot]