Как проверить, существует ли папка по ее полному пути в Plone? - PullRequest
1 голос
/ 10 ноября 2011

Я использую 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?

1 Ответ

2 голосов
/ 10 ноября 2011

Быстрое решение - запросить каталог, например так:

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

редактировать

Я должен изменить свой ответ. Я пытался взаимодействовать с portal_catalog через xmlrpc, и на самом деле это не так просто. Мои два варианта хороши, но не для использования через 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
...