Filenet and cmislib. AttributeError: 'RepositoryService' object has no attribute 'binding' error when getObjectByPath
Filenet and cmislib. AttributeError: 'RepositoryService' object has no attribute 'binding' error when getObjectByPath
我正在尝试获取数据并将其发送到 Filenet。
我正在使用 cmislib 0.6.0。 (Python).
我尝试使用的环境有多个仓库。
如果我使用
repo = client.defaultRepository
我没有得到我想要的回购协议(它不是列表的第一个)。
因此,出于这个原因,我正在使用
my_rep = client.getRepository('MY_REPO_ID')
但是当我尝试通过路径获取文件夹时
my_folder = my_repo.getObjectByPath('/MY_PATH')
*** AttributeError: 'RepositoryService' object has no attribute 'binding'
如果我检查回购属性:
my_repo._cmisClient.__dict__
{'logger': <logging.Logger object at 0x7f0fc73d79d0>, '_uriTemplates': {}}
我的默认回购(这不是我想要的回购)具有 绑定 属性:
repo_default._cmisClient.__dict__
{'username': 'USER',
'repositoryUrl': 'http://HOST:9080/fncmis/atom11',
'binding': <cmislib.atompub.binding.AtomPubBinding object at 0x7f0fc6afb850>,
'extArgs': {},
'logger': <logging.Logger object at 0x7f0fc73d7990>,
'password': 'PASSWORD'}
我缺少什么配置?
非常感谢。
我找到了解决方案。
问题是 repo 的属性 _cmisClient。
当使用 client.defaultRepository 创建存储库时,存储库属性为:
>>> repo_default.__dict__
{
'_capabilities': {},
'_repositoryName': None,
'_permDefs': {},
'_permMap': {},
'_propagation': None,
'_repositoryInfo': {},
'_cmisClient': < cmislib.model.CmisClient object at 0x107a0b250 > ,
'_repositoryId': None,
'logger': < logging.Logger object at 0x107faca10 > ,
'_permissions': None,
'xmlDoc': < DOM Element: app: workspace at 0x1083ef998 > ,
'_uriTemplates': {}
}
使用 client.getRepository(repositoryId)
创建存储库时
>>> repo.__dict__
{
'_capabilities': {},
'_repositoryName': None,
'_permDefs': {},
'_permMap': {},
'_propagation': None,
'_repositoryInfo': {},
'_cmisClient': < cmislib.atompub.binding.RepositoryService object at 0x10814fc10 > ,
'_repositoryId': None,
'logger': < logging.Logger object at 0x107faca10 > ,
'_permissions': None,
'xmlDoc': < DOM Element: app: workspace at 0x108786170 > ,
'_uriTemplates': {}
}
第一种情况_cmisClient有绑定属性:
{
'username': 'REPO_USER',
'repositoryUrl': 'REPO_URL',
'binding': < cmislib.atompub.binding.AtomPubBinding object at 0x107f2e550 > ,
'extArgs': {},
'logger': < logging.Logger object at 0x107f2e590 > ,
'password': 'REPO_PWD'
}
但是第二种情况没有:
{
'logger': < logging.Logger object at 0x107f2e5d0 > ,
'_uriTemplates': {}
}
问题与如何构建回购有关。它是在 cmislib/atompub/binding.py, class RepositoryService.
中完成的
在第一种情况下,回购是在 getDefaultRepository(self, client) 中完成的,回购是使用以下命令完成的:
repository = AtomPubRepository(client, [e for e in workspaceElements if e.nodeType == e.ELEMENT_NODE][0])
而在第二种情况下,repo 是在 getRepository(self, client, repositoryId)
方法中完成的
return AtomPubRepository(self, workspaceElement)
self 是 RepositoryService。
因此,修复方法是将自身替换为客户端:
return AtomPubRepository(client, workspaceElement)
希望对您有所帮助。
更新:
我已经用这个问题的修复程序 fork 了原始的 cmislib:
我正在尝试获取数据并将其发送到 Filenet。 我正在使用 cmislib 0.6.0。 (Python).
我尝试使用的环境有多个仓库。 如果我使用
repo = client.defaultRepository
我没有得到我想要的回购协议(它不是列表的第一个)。 因此,出于这个原因,我正在使用
my_rep = client.getRepository('MY_REPO_ID')
但是当我尝试通过路径获取文件夹时
my_folder = my_repo.getObjectByPath('/MY_PATH')
*** AttributeError: 'RepositoryService' object has no attribute 'binding'
如果我检查回购属性:
my_repo._cmisClient.__dict__
{'logger': <logging.Logger object at 0x7f0fc73d79d0>, '_uriTemplates': {}}
我的默认回购(这不是我想要的回购)具有 绑定 属性:
repo_default._cmisClient.__dict__
{'username': 'USER',
'repositoryUrl': 'http://HOST:9080/fncmis/atom11',
'binding': <cmislib.atompub.binding.AtomPubBinding object at 0x7f0fc6afb850>,
'extArgs': {},
'logger': <logging.Logger object at 0x7f0fc73d7990>,
'password': 'PASSWORD'}
我缺少什么配置?
非常感谢。
我找到了解决方案。
问题是 repo 的属性 _cmisClient。
当使用 client.defaultRepository 创建存储库时,存储库属性为:
>>> repo_default.__dict__
{
'_capabilities': {},
'_repositoryName': None,
'_permDefs': {},
'_permMap': {},
'_propagation': None,
'_repositoryInfo': {},
'_cmisClient': < cmislib.model.CmisClient object at 0x107a0b250 > ,
'_repositoryId': None,
'logger': < logging.Logger object at 0x107faca10 > ,
'_permissions': None,
'xmlDoc': < DOM Element: app: workspace at 0x1083ef998 > ,
'_uriTemplates': {}
}
使用 client.getRepository(repositoryId)
创建存储库时>>> repo.__dict__
{
'_capabilities': {},
'_repositoryName': None,
'_permDefs': {},
'_permMap': {},
'_propagation': None,
'_repositoryInfo': {},
'_cmisClient': < cmislib.atompub.binding.RepositoryService object at 0x10814fc10 > ,
'_repositoryId': None,
'logger': < logging.Logger object at 0x107faca10 > ,
'_permissions': None,
'xmlDoc': < DOM Element: app: workspace at 0x108786170 > ,
'_uriTemplates': {}
}
第一种情况_cmisClient有绑定属性:
{
'username': 'REPO_USER',
'repositoryUrl': 'REPO_URL',
'binding': < cmislib.atompub.binding.AtomPubBinding object at 0x107f2e550 > ,
'extArgs': {},
'logger': < logging.Logger object at 0x107f2e590 > ,
'password': 'REPO_PWD'
}
但是第二种情况没有:
{
'logger': < logging.Logger object at 0x107f2e5d0 > ,
'_uriTemplates': {}
}
问题与如何构建回购有关。它是在 cmislib/atompub/binding.py, class RepositoryService.
中完成的在第一种情况下,回购是在 getDefaultRepository(self, client) 中完成的,回购是使用以下命令完成的:
repository = AtomPubRepository(client, [e for e in workspaceElements if e.nodeType == e.ELEMENT_NODE][0])
而在第二种情况下,repo 是在 getRepository(self, client, repositoryId)
方法中完成的return AtomPubRepository(self, workspaceElement)
self 是 RepositoryService。
因此,修复方法是将自身替换为客户端:
return AtomPubRepository(client, workspaceElement)
希望对您有所帮助。
更新: 我已经用这个问题的修复程序 fork 了原始的 cmislib: