SharePlum错误:"无法获取用户信息列表"

时间:2017-08-08 12:48:27

标签: python sharepoint

我尝试使用SharePlum这是一个用于SharePoint的Python模块但是当我尝试连接到我的SharePoint时,SharePlum会引发我这个错误:

  

追踪(最近的呼叫最后):
  文件" C:/Users/me/Desktop/Sharpoint/sharpoint.py",第13行,在site = Site(sharepoint_url,auth = auth)

  文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ shareplum \ shareplum.py",第46行, init self .users = self.GetUsers()
  文件" C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ shareplum \ shareplum.py",第207行,在GetUsers中引发异常("可以& #39;获取用户信息列表")
  例外:无法获取用户信息列表

这是我写的非常短的代码:

auth = HttpNtlmAuth(username, password)  
site = Site(sharepoint_url, auth=auth)

此错误似乎表示用户名/密码错误,但我非常确定我所拥有的是正确的...

2 个答案:

答案 0 :(得分:2)

我知道这不是你的问题的实际解决方案,我会添加评论,但它太长了所以我会发布作为答案。

我无法复制您的问题,但通过查看shareplum.py的源代码,您可以看到为什么程序会抛出错误。在shareplum.py的第196行中有if子句(if response.status_code == 200:),它检查访问你的sharepoint url的请求是否成功(比它的状态代码为200)以及请求是否失败(还有一些其他状态代码) )它抛出异常(无法获取用户信息列表)。如果您想了解有关您的问题的更多信息,请访问您的shareplum.py文件(“C:\ Users \ me \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ shareplum \ shareplum.py”)和在第207行('raise Exception(“无法获取用户信息列表”)之前)添加此行print('{} {} Error: {} for url: {}'.format(response.status_code, 'Client'*(400 <= response.status_code < 500) + 'Server'*(500 <= response.status_code < 600), response.reason, response.url))。然后你的shareplum.py应该是这样的:

# Parse Response
    if response.status_code == 200:
        envelope = etree.fromstring(response.text.encode('utf-8'))
        listitems = envelope[0][0][0][0][0]
        data = []  
        for row in listitems:
            # Strip the 'ows_' from the beginning with key[4:]
            data.append({key[4:]: value for (key, value) in row.items() if key[4:]})

        return {'py': {i['ImnName']: i['ID']+';#'+i['ImnName'] for i in data},
                'sp': {i['ID']+';#'+i['ImnName'] : i['ImnName'] for i in data}}
    else:
        print('{} {} Error: {} for url: {}'.format(response.status_code, 'Client'*(400 <= response.status_code < 500) + 'Server'*(500 <= response.status_code < 600), response.reason, response.url))
        raise Exception("Can't get User Info List")

现在再次运行你的程序,它应该打印出它不工作的原因。 我知道最好不要更改Python模块中的文件,但是如果你知道你改变了什么,那么没有问题所以当你完成后只需删除添加的行。

此外,当您找到状态代码时,您可以在线搜索,只需在Google中输入或在List_of_HTTP_status_codes上搜索。

答案 1 :(得分:2)

好吧,似乎我找到了解决我问题的方法,它是关于我给出的Sharepoint网址。 如果我们采用这个例子:https://www.mysharepoint.com/Your/SharePoint/DocumentLibrary
您必须删除最后一部分:/DocumentLibrary

为什么要准确删除这部分?
事实上,当您在Sharepoint中进行足够深入时,您的网址将类似于:https://www.mysharepoint.com/Your/SharePoint/DocumentLibrary/Forms/AllItems.aspx?RootFolder=%2FYour%2FSharePoint%2DocumentLibrary%2FmyPersonnalFolder&FolderCTID=0x0120008BBC54784D92004D1E23F557873CC707&View=%7BE149526D%2DFD1B%2D4BFA%2DAA46%2D90DE0770F287%7D

您可以看到路径右侧位于RootFolder=%2FYour%2FSharePoint%2DocumentLibrary%2Fmy%20personnal%20folder而不是“普通”网址(如果是,则会像https://www.mysharepoint.com/Your/SharePoint/DocumentLibrary/myPersonnalFolder/一样)。

您必须删除的内容是“普通”网址的结尾,因此在这种情况下,/DocumentLibrary

因此,我在SharePlum中输入的正确Sharepoint网址将为https://www.mysharepoint.com/Your/SharePoint/

我对Sharepoint很陌生,所以我不确定这个问题对于其他人来说这个问题是否正确,对于比我更了解Sharepoint的人可以确认一下吗?