1

私は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のメソッドリストがありますか?

4

1 に答える 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と対話しようとしましたが、実際にはそれほど簡単ではありません。私の2つのオプションは良いですが、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
于 2011-11-09T23:55:16.480 に答える