【问题标题】:How to check if a folder exists by its complete path in Plone?如何通过 Plone 中的完整路径检查文件夹是否存在?
【发布时间】:2011-11-09 20:14:01
【问题描述】:

我使用xmlrpclib、wsapi4plone连接plone:

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

有没有一种方法可以通过其 url 检查 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 网站的某个地方,但我需要成为管理员)。我不想在这里一直问关于什么方法可用的问题,网络上的任何地方都有克隆的方法列表吗?

【问题讨论】:

    标签: python plone xmlrpclib


    【解决方案1】:

    一种快速的解决方案是查询目录,如下所示:

    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
    

    【讨论】:

    • 我喜欢第一个解决方案。然而,当我尝试它时,我得到了这个错误:TypeError: __call__() got an unexpected keyword argument 'path'。或者,如果我删除关键字,我会收到此错误:xmlrpclib.Fault: <Fault -1: "Unexpected Zope exception: <type 'exceptions.TypeError'> - string indices must be integers, not str">
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2021-11-09
    • 2011-07-30
    • 2012-02-09
    • 1970-01-01
    相关资源
    最近更新 更多