Как определить, какие атрибуты и методы доступны в PloneFormGen? - PullRequest
1 голос
/ 15 марта 2019

Как вы можете определить методы и атрибуты объектов в PloneFormGen?Я хочу написать несколько сценариев для настраиваемого адаптера поля и хотел бы знать, что доступно.Моя непосредственная проблема связана с некоторым онлайн-кодом, из которого я скопировал: скрипт Python, чтобы скрыть форму ploneformgen после того, как пользователь заполнил ее.(Для Plone-4.3.2-64.)

alreadyInDB = False
savedData = ploneformgen.savefield.getSavedFormInputForEdit()
username = request.AUTHENTICATED_USER.getId()
return {'username': 'No way man!'}
usersInDB = [x.split(',')[1] for x in savedData.split('\r\n') if len(x)>0]

if username in usersInDB:
    alreadyInDB = True

if alreadyInDB:
    return {'username': 'No way man!'}

Это сообщение об ошибке, которое я получаю.

AttributeError: savefield

Я хочу посмотреть, что доступно для атрибутов и методов, и либо исправить это, либо написать свой собственный.Любая помощь приветствуется.

Это то, что мы используем: PloneFormGen 1.7.12 Products.PFGExtendedMailAdapter 2.4

Plone 4.3.3 (4308) CMF 2.2.7 Zope 2.13.22 Python 2.7.5(по умолчанию, 30 октября 2018 г., 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] PIL 2.0.0 (подушка)

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

PloneFormGen использует ограниченный Python для сценариев TTW. Вы можете использовать dir () или vars () на своих объектах, чтобы узнать, что они предлагают. Чтобы увидеть это, вы, вероятно, захотите распечатать их.

Сценарии TTW не так уж хороши для интроспекции. Возможно, посмотрите на связанный код или используйте режим отладки, чтобы получить форму, и используйте настоящий отладчик там с теми же методами, что и выше, чтобы увидеть, что происходит.

. / Bin / instance debug Тогда у вас будет корневой объект базы данных как «приложение».

Получение вашей формы может быть таким же легким, как это:

myform = app.unrestrictedTraverse('Plone/my-form')

Получение всех объектов поля формы (дочерних):

myform.objectItems()

Получение определенного поля (включая объект адаптера сохранения dada):

myform.objectIds()
myform['adapter-id']

удачи;)

0 голосов
/ 31 марта 2019

В примере кода ploneformgen - доступная переменная контекста, представляющая объект формы-папки, а savefield - идентификатор адаптера сохранения данных, находящегося в папке-форме.

Вам необходимо добавить адаптер сохранения данных с именем savefield или, если он уже существует, соответствующим образом изменить идентификатор в сценарии.

0 голосов
/ 15 марта 2019

Вызовите dir() объекта, чтобы получить список всех доступных методов и атрибутов, которые у него есть.

Либо используйте inspect.getsource() для функции, класса, метода класса или атрибута класса, чтобы вернуть связанный с ним исходный код.

Пример использования объекта DataFrame pandas:

>>> from inspect import getsource
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> dir(df)
    # returns methods and attributes of df
    # which is an instance of a DataFrame object
>>> getsource(pd.DataFrame.head)
    # returns source code for head attribute
    # of a DataFrame object

Обратите внимание, что getsource требуется доступ к атрибуту / методу фактического класса (в данном случае pd.DataFrame) вместо экземпляра этого класса (df в этом примере). Таким образом, вы можете сначала использовать dir для определения методов / атрибутов, а затем getsource для конкретного метода / атрибута, чтобы увидеть код.

...