Office365-REST-Python-Client: SSLCertVerificationError - AttributeError: 'NoneType' object has no attribute 'text'

Code worked completely fine and out of nowhere started giving me this error message: AttributeError: ‘NoneType’ object has no attribute ‘text’

Only other issues I can find online are for the Sharepy libary here on Github and here on Stack

Not sure what else can be tested on my end or what the Systems Admin can do to resolve this issue. If I could better target where to troubleshoot (login credentials, code to access, etc) that would be optimal.

The Systems Admin and I have tried using new credentials with no success, and I have also tried uninstalling and reinstalling the library, and testing on a new Python Environment, to no success.

Code used in script:

from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.client_credential import ClientCredential

client_credentials = ClientCredential(client_id,client_secret)
ctx = ClientContext(sitepath).with_credentials(client_credentials)

web = ctx.web
ctx.load(web)
ctx.execute_query()

The last line is where the error is thrown when I run it line by line.

Full error code:

SSLCertVerificationError                  Traceback (most recent call last)
[c:\Users\restoffilepath\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    702             # Make the request on the httplib connection object.
--> 703             httplib_response = self._make_request(
    704                 conn,

[c:\Users\restoffilepath\lib\site-packages\urllib3\connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    385         try:
--> 386             self._validate_conn(conn)
    387         except (SocketTimeout, BaseSSLError) as e:

[c:\Users\restoffilepath\lib\site-packages\urllib3\connectionpool.py in _validate_conn(self, conn)
   1039         if not getattr(conn, "sock", None):  # AppEngine might not have  `.sock`
-> 1040             conn.connect()
   1041 

[c:\Users\restoffilepath\lib\site-packages\urllib3\connection.py in connect(self)
    415 
--> 416         self.sock = ssl_wrap_socket(
    417             sock=conn,

[c:\Users\restoffilepath\lib\site-packages\urllib3\util\ssl_.py in ssl_wrap_socket(sock, keyfile, certfile, cert_reqs, ca_certs, server_hostname, ssl_version, ciphers, ssl_context, ca_cert_dir, key_password, ca_cert_data, tls_in_tls)
    448     if send_sni:
--> 449         ssl_sock = _ssl_wrap_socket_impl(
...
---> 45             self.error = e.response.text
     46             raise ValueError(e.response.text)
     47 

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

About this issue

  • Original URL
  • State: open
  • Created a year ago
  • Reactions: 1
  • Comments: 18 (2 by maintainers)

Most upvoted comments

Hello @aayushkatariaa @ekoutsoff I actually ended up putting the entire project on backburner as this issue has no fix in sight. I’ve worked with my entire company IT and troubleshooted every issue we could have.
My plan is to use FME (Feature Manipulation Engine) by Safe Software to read the data from SharePoint. Just waiting on the license to do that.

My experience is exactly the same. Working completely fine for months before 3/14/2023, suddenly this exact same error. Occuring across multiple OSs such as Windows 10 and Windows Server 2016.

Code used in script:

from office365.runtime.auth.client_credential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.sharing.role_type import RoleType

sharepoint_url = f'https://{self.domain}/sites/{self.siteName}'

# Initialize the client credentials
client_credentials = ClientCredential(client_id, client_secret)

# create client context object
self.client_context = ClientContext(sharepoint_url).with_credentials(client_credentials)

self.web = self.client_context.web.get().execute_query()

Stack Trace:

Traceback (most recent call last):
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\connectionpool.py", line 710, in urlopen
    chunked=chunked,
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\connectionpool.py", line 386, in _make_request
    self._validate_conn(conn)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\connectionpool.py", line 1042, in _validate_conn
    conn.connect()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\connection.py", line 424, in connect
    tls_in_tls=tls_in_tls,
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\util\ssl_.py", line 450, in ssl_wrap_socket
    sock, context, tls_in_tls, server_hostname=server_hostname
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\ssl.py", line 423, in wrap_socket
    session=session
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\ssl.py", line 870, in _create
    self.do_handshake()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\ssl.py", line 1139, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1091)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\adapters.py", line 499, in send
    timeout=timeout,
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\connectionpool.py", line 788, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\util\retry.py", line 592, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='accounts.accesscontrol.windows.net', port=443): Max retries exceeded with url: /da67ef1b-ca59-4db2-9a8c-aa8d94617a16/tokens/OAuth/2 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1091)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\providers\acs_token_provider.py", line 43, in get_app_only_access_token
    return self._get_app_only_access_token(url_info.hostname, realm)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\providers\acs_token_provider.py", line 65, in _get_app_only_access_token
    data=oauth2_request)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\api.py", line 115, in post
    return request("post", url, data=data, json=json, **kwargs)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\adapters.py", line 563, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='accounts.accesscontrol.windows.net', port=443): Max retries exceeded with url: /da67ef1b-ca59-4db2-9a8c-aa8d94617a16/tokens/OAuth/2 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1091)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:/Users/eu2pey4/OneDrive - McKesson Corporation/Source Code/Muse/Automation/MailReports/GxCostReport.py", line 51, in <module>
    report = GxCostReport(user='conner.holt@mckesson.com')
  File "c:/Users/eu2pey4/OneDrive - McKesson Corporation/Source Code/Muse/Automation/MailReports/GxCostReport.py", line 16, in __init__
    self.sharepointApi = SharePointApi(siteName='SpecialtyPricing')
  File "C:\Users\eu2pey4\OneDrive - McKesson Corporation\Source Code\Muse\APIs\SharepointApi.py", line 45, in __init__
    self.web = self.client_context.web.get().execute_query()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\client_object.py", line 44, in execute_query
    self.context.execute_query()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\client_runtime_context.py", line 162, in execute_query
    self.pending_request().execute_query(qry)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\client_request.py", line 57, in execute_query
    response = self.execute_request_direct(request)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\client_request.py", line 69, in execute_request_direct
    self.beforeExecute.notify(request)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\types\event_handler.py", line 21, in notify
    listener(*args, **kwargs)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\sharepoint\client_context.py", line 212, in _authenticate_request
    self.authentication_context.authenticate_request(request)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\authentication_context.py", line 97, in authenticate_request
    self._provider.authenticate_request(request)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\providers\acs_token_provider.py", line 31, in authenticate_request
    self.ensure_app_only_access_token()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\providers\acs_token_provider.py", line 36, in ensure_app_only_access_token
    self._cached_token = self.get_app_only_access_token()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\providers\acs_token_provider.py", line 45, in get_app_only_access_token
    self.error = e.response.text
AttributeError: 'NoneType' object has no attribute 'text'

(Muse) C:\Users\eu2pey4\OneDrive - McKesson Corporation\Source Code\Muse\Automation>C:/Users/eu2pey4/Anaconda3/envs/Muse/python.exe "c:/Users/eu2pey4/OneDrive - McKesson Corporation/Source 
Code/Muse/Automation/MailReports/GxCostReport.py"
Initiating login request with your identity provider. A browser window should have opened for you to complete the login. If you can't see it, check existing browser windows, or your OS settings. Press CTRL+C to abort and try again...
Traceback (most recent call last):
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\connectionpool.py", line 710, in urlopen
    chunked=chunked,
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\connectionpool.py", line 386, in _make_request
    self._validate_conn(conn)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\connectionpool.py", line 1042, in _validate_conn
    conn.connect()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\connection.py", line 424, in connect
    tls_in_tls=tls_in_tls,
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\util\ssl_.py", line 450, in ssl_wrap_socket
    sock, context, tls_in_tls, server_hostname=server_hostname
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\ssl.py", line 423, in wrap_socket
    session=session
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\ssl.py", line 870, in _create
    self.do_handshake()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\ssl.py", line 1139, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1091)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\adapters.py", line 499, in send
    timeout=timeout,
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\connectionpool.py", line 788, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\urllib3\util\retry.py", line 592, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='accounts.accesscontrol.windows.net', port=443): Max retries exceeded with url: /da67ef1b-ca59-4db2-9a8c-aa8d94617a16/tokens/OAuth/2 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1091)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\providers\acs_token_provider.py", line 43, in get_app_only_access_token
    return self._get_app_only_access_token(url_info.hostname, realm)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\providers\acs_token_provider.py", line 65, in _get_app_only_access_token
    data=oauth2_request)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\api.py", line 115, in post
    return request("post", url, data=data, json=json, **kwargs)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\requests\adapters.py", line 563, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='accounts.accesscontrol.windows.net', port=443): Max retries exceeded with url: /da67ef1b-ca59-4db2-9a8c-aa8d94617a16/tokens/OAuth/2 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1091)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:/Users/eu2pey4/OneDrive - McKesson Corporation/Source Code/Muse/Automation/MailReports/GxCostReport.py", line 51, in <module>
    report = GxCostReport(user='conner.holt@mckesson.com')
  File "c:/Users/eu2pey4/OneDrive - McKesson Corporation/Source Code/Muse/Automation/MailReports/GxCostReport.py", line 16, in __init__
    self.sharepointApi = SharePointApi(siteName='SpecialtyPricing')
  File "C:\Users\eu2pey4\OneDrive - McKesson Corporation\Source Code\Muse\APIs\SharepointApi.py", line 43, in __init__
    self.web = self.client_context.web.get().execute_query()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\client_object.py", line 44, in execute_query
    self.context.execute_query()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\client_runtime_context.py", line 162, in execute_query
    self.pending_request().execute_query(qry)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\client_request.py", line 57, in execute_query
    response = self.execute_request_direct(request)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\client_request.py", line 69, in execute_request_direct
    self.beforeExecute.notify(request)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\types\event_handler.py", line 21, in notify
    listener(*args, **kwargs)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\sharepoint\client_context.py", line 212, in _authenticate_request
    self.authentication_context.authenticate_request(request)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\authentication_context.py", line 97, in authenticate_request
    self._provider.authenticate_request(request)
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\providers\acs_token_provider.py", line 31, in authenticate_request
    self.ensure_app_only_access_token()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\providers\acs_token_provider.py", line 36, in ensure_app_only_access_token
    self._cached_token = self.get_app_only_access_token()
  File "C:\Users\eu2pey4\Anaconda3\envs\Muse\lib\site-packages\office365\runtime\auth\providers\acs_token_provider.py", line 45, in get_app_only_access_token
    self.error = e.response.text
AttributeError: 'NoneType' object has no attribute 'text'

@vgrem thanks for the response! I’ll have to double check nothing changed with Active Directory but that should be all set, and we’ve created new secret key and certificate so that is ruled out. To verify permissions, is that something done within Python? Apologies for lack of knowledge there. Cheers.