我使用xmlrpclib,wsapi4plone连接到plone:
client = xmlrpclib.ServerProxy('http://user:password@blah.com/plone')
是否有方法检查plone上的文件夹是否存在于其url中?类似于:client.exists('/sites/ng/path/to/folder')
我做的是作弊:
try:
client.get_types('/sites/ng/path/to/folder')
except:
#if there's an exception, that means there's no folder -> create it here
client.post_object(folder)
我没有管理员权限所以我无法查看方法列表(我被告知它在plone网站上的某个地方,但我需要成为管理员)。我不想继续在这里询问有什么方法可用,在网上的任何地方都有plone的方法列表吗?
答案 0 :(得分:2)
快速解决方案是查询目录,如下所示:
client = xmlrpclib.ServerProxy('http://user:password@blah.com/plone')
completePath = '/'.join(client.getPhysicalPath()) + '/sites/ng/path/to/folder'
if len(client.portal_catalog.searchResults(path=completePath)):
return True
另一个解决方案可能是遍历文件夹结构,如下所示:
client = xmlrpclib.ServerProxy('http://user:password@blah.com/plone')
path = '/sites/ng/path/to/folder'
subdirs = path.split('/')[1:]
dir = client
for subdir in subdirs:
if subdir in dir.objectIds():
dir = dir[subdir]
else:
return False
return True
修改强>:
我必须修改我的答案。我尝试通过xmlrpc与portal_catalog进行交互,实际上并不是那么容易。我的两个选项很好,但不能通过xmlrpc使用。因此,以transmogrify.ploneremote为例,检查远程文件夹是否存在的简单选项(与您的实现没有太大区别)是:
try:
path = 'http://user:password@blah.com/plone/sites/ng/path/to/folder'
xmlrpclib.ServerProxy(path).getPhysicalPath()
return True
except xmlrpclib.Fault, e:
return False