Filenet和cmislib。 AttributeError:' RepositoryService'对象没有属性'绑定' getObjectByPath时出错

时间:2017-11-21 12:13:20

标签: python cmis opencmis filenet

我正在尝试获取并向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'}

我缺少什么配置?

非常感谢提前。

1 个答案:

答案 0 :(得分:3)

我得到了解决方案。

问题是回购的atributte _cmisClient。

当使用client.defaultRepository创建repo时,repo属性为:

>>> 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时
>>> 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 ,类 RepositoryService 中完成。

在第一种情况下,repo在 getDefaultRepository(self,client)中完成,repo使用以下命令完成:

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。

所以,修复是用客户端替换self:

return AtomPubRepository(client, workspaceElement)

我希望它有所帮助。

<强>更新 我已将原始cmislib与此问题的修复分开:

https://github.com/sergioescudero/chemistry-cmislib