Что делать, если буфер обмена мешает жить?
Проблема возникает, преимущественно при отладке сайтов, и выглядит как внезапно возникающее на ровном месте исключение KeyError, NotFound или что-то в этом роде. При просмотре логов выясняется, что при отображении страницы Zope делает какое-то обращение к давно не существующему продукту, причем почему и зачем вы понять не можете, а у других ошибка не воспроизводится - что и является характерным признаком того, что у вас какая-то личная размолвка с буфером обмена.
Бывает, залогинишься в инстанцию и хоть руби ее хоть режь - System Crash да System Crash. Может быть все поломалось, а может буфер обмена проявляет неуместную инициативу. Не будем останавливаться на том, как избежать возникновения проблемы вообще (так как и сами не до конца понимаем еще), расскажем кратко в чем причина и как усмирить злопамятный сервис. При выполнении операций копирования и переноски объектов в стандартном виде контейнера, информация об этом объекте копируется в т.н. буфер обмена. После чего при каждом входе в любой другой контейнер проверяется возможность вставки этого объекта (по ограниченияем на контент-тип или другого рода). Если объект оказывается недоступен, причем, недоступен каким-то нехорошим образом, то операция проваливается и вид не отображается.
Как бороться - стереть данные из буфера обмена. Наверно есть нормальный и простой способ, но нижеследующий совет дал человек непростой, для которого Zope3-отладчик роднее вебинтерфейса. Проблему можно решить, почистив клипборд принципала, соответствующего данному пользователю. Для этого запускаем debugzope и выполняем следующий код:
from zope.component import getUtility from zope.app.principalannotation.interfaces import IPrincipalAnnotationUtility from zope.copypastemove.interfaces import IPrincipalClipboard import transaction IPrincipalClipboard(getUtility(IPrincipalAnnotationUtility, context=root).getAnnotationsById('<id принципала>')).clearContents() transaction.commit()
- Как узнать
- зависит от способа авторизации. Для менеджера его можно посмотреть в etc/principals.zcml (по умолчанию -- zope.manager), в других случаях обратитесь к местному авторитету :).