如何通过完整路径检查Plone中的文件夹是否存在?

1 投票
1 回答
1040 浏览
提问于 2025-04-17 05:59

我使用 xmlrpclib 和 wsapi4plone 来连接到 plone:

client = xmlrpclib.ServerProxy('http://user:password@blah.com/plone')

有没有什么方法可以通过网址检查 plone 上的一个文件夹是否存在?类似于: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 的方法列表?

1 个回答

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

撰写回答