Office365-rest-python-client: Não é possível usá-lo para Python 3

Criado em 4 jul. 2017  ·  24Comentários  ·  Fonte: vgrem/Office365-REST-Python-Client

Existe um problema com o python 3?

bug enhancement

Comentários muito úteis

@ vic-by Um commit recente corrige o problema: https://github.com/vgrem/Office365-REST-Python-Client/commit/90731f
Observe que, neste momento, este commit ainda não foi enviado para pypi. Portanto, se você fizer um pip install Office365-REST-Python-Client , não obterá esse código. A instalação a partir do git: pip install git+https://github.com/vgrem/Office365-REST-Python-Client.git

Todos 24 comentários

Olá,

deve ser compatível com as duas versões do Python: 2 e 3, mas deixe-me verificar. Entrarei em contato com você.

Oi, obrigado pela pronta resposta.
Abaixo está o erro que estou recebendo
`------------------------------------------------- --------------------------
ModuleNotFoundError Traceback (última chamada mais recente)
no()
1 import json
2
----> 3 de office365.runtime.auth.authentication_context import AuthenticationContext
4 de office365.runtime.client_request import ClientRequest
5 de office365.runtime.utilities.request_options importar RequestOptions

ModuleNotFoundError: Nenhum módulo denominado 'office365'`

E sim, eu tenho o pip instalar o moduel :)

Oi, eu escrevi um código para obter as informações usando apenas o módulo de solicitações. e posso obter os cookies FedAuth e rtFa com êxito. No entanto, ele lança um erro Forbidden quando tento obter o siteUsers.
Você pode, por favor, ajudar nisso?
`pedidos de importação

url = " https://login.microsoftonline.com/extSTS.srf "
headers = {'content-type': 'application / json'}
TopLevelUrl = ' https://XXXX.sharepoint.com '
path = 'C: \ PSR \ PythonFiles \ SharePointOnlineXML.txt'

filecontent = open (caminho, 'r')
SharepointOnlineAuth = filecontent.read ()
SharepointOnlineAuth = SharepointOnlineAuth.format ('[email protected] ',' Senha ', TopLevelUrl)

Vamos fazer uma chamada para obter o Token para obter os cookies

response = requests.post (url, data = SharepointOnlineAuth, headers = headers)
s = str (response.content)
Start = [pos para pos no intervalo (len (s)) if s [pos:]. Startswith ('')] [0]
Terminar = [pos para pos no intervalo (len (s)) se s [pos:]. Startswith ('
')] [0]
LoginResponse = s [Iniciar + 40: Concluir]

Agora, vamos buscar os cookies para fazer Call to SharePoint Online

url = TopLevelUrl + '/ _ forms / default.aspx? wa = wsignin1.0'
headers = {'content-type': 'application / x-www-form-urlencoded'}
response = requests.post (url, data = LoginResponse, headers = headers)

Chamando a Api REST do Sharepoint usando cookies obtidos a partir de Chamada acima

url = TopLevelUrl + '/ _ api / web / siteusers'
imprimir (url)
_Fedauth = 'FedAuth = {}'. Format (response.cookies ['FedAuth'])
_rtFa = 'rtFa = {}'. formato (response.cookies ['rtFa'])
_FinalDict = {'Cookie': _ Fedauth + ',' + _ rtFa}

headers = {'Content-Type': 'application / x-www-form-urlencoded',
'Agente do usuário': 'Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 59.0.3071.115 Safari / 537.36'}
headers.update (_FinalDict)

imprimir (cabeçalhos)

resposta = solicitações.get (url, cabeçalhos = cabeçalhos)
imprimir (resposta) `

obtendo um erro em python3.4:

_Traceback (última chamada mais recente):
Arquivo "auth_sharepoint_online365.py", linha 2, em
de office365.runtime.auth.authentication_context import AuthenticationContext
Arquivo "authentication_context.py", linha 2, em
de office365.runtime.auth.saml_token_provider import SamlTokenProvider
Arquivo "saml_token_provider.py", linha 2, em
importar urlparse
ImportError: Nenhum módulo chamado ' urlparse ' _

De acordo com https://docs.python.org/2/library/urlparse.html :

O módulo urlparse foi renomeado para urllib.parse no Python 3.

Experimente este https://github.com/parthrawal/Python.O365. Eu escrevi um arquivo .py que pode se conectar ao SharePoint Online e ainda tem alguns métodos para obter os dados de listas em formato de dicionário. Avise-me se precisar de ajuda com isso.

@ vic-by Um commit recente corrige o problema: https://github.com/vgrem/Office365-REST-Python-Client/commit/90731f
Observe que, neste momento, este commit ainda não foi enviado para pypi. Portanto, se você fizer um pip install Office365-REST-Python-Client , não obterá esse código. A instalação a partir do git: pip install git+https://github.com/vgrem/Office365-REST-Python-Client.git

Ainda há trabalho necessário para obter a biblioteca realmente com o python 3.

Eu encontrei um problema de codificação ao executar a biblioteca em python 3. Aconteceu ao fazer um list.properties, mas tenho certeza de que o problema é persistente.

    ctx = ClientContext(url, ctx_auth)
    web = ctx.web
    ctx.load(web)
    ctx.execute_query()
    lists = web.lists
    ctx.load(lists)
    ctx.execute_query()
    lists[0].properties
 in <module>()
---> 16         lists[0].properties

c:\python\python35\lib\encodings\cp850.py in encode(self, input, final)
     17 class IncrementalEncoder(codecs.IncrementalEncoder):
     18     def encode(self, input, final=False):
---> 19         return codecs.charmap_encode(input,self.errors,encoding_map)[0]
     20
     21 class IncrementalDecoder(codecs.IncrementalDecoder):

UnicodeEncodeError: 'charmap' codec can't encode character '\u2019' in position 11052: character maps to <undefined>

Estou tendo o mesmo problema com o Python 3: "ModuleNotFoundError: nenhum módulo chamado 'urlparse'"
Testando o arquivo SharePointOnline.py: Falha de autenticação -> As senhas inseridas e armazenadas não correspondem.

Você tentou este link https://github.com/parthrawal/Python.O365 certifique-se de usar a conta de serviço para o mesmo

sim. Copie / cole o código, na parte inferior:

if __name__ == "__main__":
    UserName = "[email protected]"
    # UserName = "[email protected]"
    Password = "my_password"
    TopLevelUrl = "https://company.sharepoint.com/"
    SPOnlineHeaders(UserName, Password, TopLevelUrl)

O seguinte erro é retornado:

....
IndexError: list index out of range

Para obter mais detalhes sobre o erro, inseri em SPOnlineHeaders o seguinte código (impressão (s)):

response = requests.post(url, data=SharepointOnlineAuth, headers=headers)
s = str(response.content)
print(s)

Resposta:
... wst: FailedAuthentication ... As senhas inseridas e armazenadas não correspondem ...

Espero que você esteja usando uma conta de serviço

Está correto. Estou usando a conta de serviço.

A senha está correta? você pode, por favor, verificar isso. porque tentei executar o código, está funcionando bem. Mas quando eu digitei a senha errada, ele gerou o erro "IndexError: list index out of range".

sim. A senha está correta. Isso é o que acontece ao fazer um login manualmente.

Eu escrevo o link no navegador: https://company.sharepoint.com/

Ao pressionar Enter, sou redirecionado para a página de login: https://login.microsoftonline.com/575...71a/oauth2/authorize?client_id=...&response_mode=form_post&response_type=code%20id_token&resource=...&scope=openid&nonce = .... & redirect_uri = https :% 2F% 2Fcompany.sharepoint.com% 2F_forms% 2Fdefault.aspx & wsucxt = 1 & client-request-id = ....

Depois de pressionar o botão ok na página de login, vi dois links rápidos ...
Primeiro: https://sts.company.com/adfs/ls/wia?client-request-id=...&wa=wsignin1.0&wtrealm=urn%3afederation%3aMicrosoftOnline&wctx=LoginOptions%3D3%26estsredirect%3d2%26estsrequest%. ... & cbcxt = & username = myemail% company.com & mkt = & lc =
... E ...
Segundo: https: //login.microsoftonline.com/login.srf? Client-request-id = ...

E finalmente para na página necessária:
https://company.sharepoint.com/

Eu executei este código e descobri que ele está gerando o erro 403 em algum lugar do código.

response = requests.post (url, data = SharepointOnlineAuth, headers = headers)
s = str (response.content)
impressão (s)
"b'403 PROIBIDO '"

Eu esqueci de usar o endpoint

url = " https://login.microsoftonline.com/extSTS.srf "

urlpar

Estou tendo o mesmo problema com urlparse (Python 3.6.5 :: Anaconda, Inc.). Isso foi resolvido modificando saml_token_provider.py: from urllib.parse import urlparse [...] url = urlparse(self.url)

Então estava faltando a web, que instalei com: pip install lpthw.web . No entanto, parece haver um problema, pois agora estou recebendo o seguinte problema:
from web import Web File "C:\ProgramData\Anaconda3\lib\site-packages\web\__init__.py", line 14, in <module> import utils, db, net, wsgi, http, webapi, httpserver, debugerror ModuleNotFoundError: No module named 'utils'

Instale o módulo utils no anaconda.

Instale o módulo utils no anaconda.

Obrigado. Depois de instalar os utils, também precisei instalar o banco de dados ... pode ser útil ter uma verificação de requirements.txt no pacote?

O que está acontecendo agora é que as instruções de impressão não são adequadas para python3:
print "var", var ^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print("var", var)?

@viogp Obrigado por postar seu progresso aqui, seria bom se pudéssemos resolver algumas dessas dificuldades. No momento, estamos usando esta biblioteca no py 2.7 e gostaria que esses fluxos de trabalho passassem para o py 3.

Oi. Eu tenho um problema ao usar esta biblioteca.
Ocorreu um erro ao recuperar o token: AADSTS90023: Solicitação STS inválida.
Ocorreu um erro ao recuperar cookies de autenticação
return 'FedAuth =' + self.FedAuth + '; rtFa = '+ self.rtFa
TypeError: só pode concatenar str (não "NoneType") para str
Alguém pode me ajudar?

Como a biblioteca é oficialmente compatível com os tempos de execução do Python 2 e do Python 3, proponha encerrar este problema.

Oi,

Estou recebendo este erro "ModuleNotFoundError: Nenhum módulo chamado 'office365.sharepoint.client_context'" quando uso o ambiente de projeto no pycharm durante a execução. MAS funcionará muito bem se eu usar o ambiente de sistema Python. O mesmo comportamento ou uso Python 3.6 ou 3.7.

Por favor ajude!
Obrigado.

Esta página foi útil?
0 / 5 - 0 avaliações