I like to use IPython’s zope profile to inspect my Plone instance, but a few annoying permissions differences come up compared to inserting a breakpoint and hitting it with the admin user.
For example, I would like to iterate over the content objects in an unpublished testing folder. This query will return no results in the shell, but works from a breakpoint.
$ bin/instance shell $ ipython --profile=zope from Products.CMFPlone.utils import getToolByName catalog = getToolByName(context, 'portal_catalog') catalog({'path':'Plone/testing'})
Can I authenticate as admin or otherwise rejigger the permissions to fully manipulate my site from ipython?
Just use catalog.search({‘path’:’Plone/testing’}). It performs the same query as catalog() but does not filter the results based on the current user’s permissions.
IPython’s zope profile does provide a method utils.su(‘username’) to change the current user, but it does not recognize the admin user (defined in /acl_users instead of /Plone/acl_users) and after calling it subsequent calls to catalog() fail with AttributeError: ‘module’ object has no attribute ‘checkPermission’.