take psu.py from bbmaster2 branch, with some improvements
This commit is contained in:
parent
dc5d913b99
commit
9c2517a518
1 changed files with 168 additions and 0 deletions
168
psu.py
Normal file
168
psu.py
Normal file
|
@ -0,0 +1,168 @@
|
|||
# psu - paster shell utilities
|
||||
# use this from (e.g.):
|
||||
#
|
||||
# bin/paster shell deploy.ini
|
||||
#
|
||||
# then:
|
||||
#
|
||||
# from loops import psu
|
||||
# psu.setup(root)
|
||||
# obj = psu.byuid('578457950')
|
||||
#
|
||||
|
||||
from transaction import commit, abort
|
||||
from zope.app.authentication.principalfolder import Principal
|
||||
from zope.app.component.hooks import setSite
|
||||
from zope.app.container.contained import ObjectAddedEvent, ObjectRemovedEvent
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.catalog.interfaces import ICatalog
|
||||
from zope.copypastemove.interfaces import IContainerItemRenamer
|
||||
from zope import component
|
||||
from zope.event import notify
|
||||
from zope.exceptions.interfaces import DuplicationError
|
||||
from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
|
||||
from zope.publisher.browser import TestRequest as BaseTestRequest
|
||||
from zope.security.management import getInteraction, newInteraction, endInteraction
|
||||
from zope.interface import Interface
|
||||
|
||||
from cybertools.util.jeep import Jeep
|
||||
from loops.common import adapted, baseObject
|
||||
from loops.util import getObjectForUid, getUidForObject, getCatalog, reindex
|
||||
#from xxx import config
|
||||
|
||||
|
||||
sc = Jeep() # shortcuts
|
||||
rf = None # root folder
|
||||
|
||||
def setup(root):
|
||||
global sm, smdefault, catalog, intids, pau, sc
|
||||
setSite(root)
|
||||
sm = component.getSiteManager(root)
|
||||
smdefault = sm['default']
|
||||
intids = smdefault['IntIds']
|
||||
pau = smdefault['PluggableAuthentication']
|
||||
#user = getattr(config, 'shell_user', 'zope.manager')
|
||||
#password = (getattr(config, 'shell_pw', None) or
|
||||
# raw_input('Enter manager password: '))
|
||||
user = 'zope.manager'
|
||||
password = raw_input('Enter manager password: ')
|
||||
login(Principal(user, password, u'Manager'))
|
||||
|
||||
|
||||
def byuid(uid):
|
||||
return getObjectForUid(uid)
|
||||
|
||||
def uid(obj):
|
||||
return getUidForObject(obj)
|
||||
|
||||
def notifyModification(obj):
|
||||
obj = baseObject(obj)
|
||||
notify(ObjectModifiedEvent(obj))
|
||||
|
||||
def save(obj):
|
||||
notifyModification(obj)
|
||||
commit()
|
||||
|
||||
def notifyAdded(obj):
|
||||
obj = baseObject(obj)
|
||||
notify(ObjectAddedEvent(obj))
|
||||
|
||||
def notifyRemoved(obj):
|
||||
obj = baseObject(obj)
|
||||
notify(ObjectRemovedEvent(obj))
|
||||
|
||||
def delete(container, name):
|
||||
obj = container.get(name)
|
||||
if obj is None:
|
||||
print '*** Object', name, 'not found!'
|
||||
return
|
||||
notifyRemoved(obj)
|
||||
del container[name]
|
||||
commit()
|
||||
|
||||
def rename(container, old, new, docommit=True):
|
||||
obj = container.get(old)
|
||||
if obj is None:
|
||||
print '*** Object', old, 'not found!'
|
||||
return
|
||||
renamer = IContainerItemRenamer(container)
|
||||
if new != old:
|
||||
try:
|
||||
renamer.renameItem(old, new)
|
||||
except DuplicationError:
|
||||
print '*** Object', new, 'already exists!'
|
||||
# container[new] = obj
|
||||
# notifyAdded(obj)
|
||||
notifyModification(obj)
|
||||
if docommit:
|
||||
commit()
|
||||
|
||||
def move(source, target, name):
|
||||
obj = source.get(name)
|
||||
if obj is None:
|
||||
print '*** Object', name, 'not found!'
|
||||
return
|
||||
#notifyRemoved(obj)
|
||||
#del source[name]
|
||||
target[name] = obj
|
||||
#notifyAdded(obj)
|
||||
notifyModification(obj)
|
||||
commit()
|
||||
|
||||
def get(container, obj):
|
||||
if isinstance(obj, basestring):
|
||||
name = obj
|
||||
obj = container.get(name)
|
||||
if obj is None:
|
||||
print '*** Object', name, 'not found!'
|
||||
return None
|
||||
return adapted(obj)
|
||||
|
||||
# catalog / indexing
|
||||
|
||||
def getCatalog(context):
|
||||
context = baseObject(context)
|
||||
for cat in component.getAllUtilitiesRegisteredFor(ICatalog, context=context):
|
||||
return cat
|
||||
print '*** No catalog found!'
|
||||
|
||||
def reindex(obj, catalog=None):
|
||||
obj = baseObject(obj)
|
||||
if catalog is None:
|
||||
catalog = getCatalog(obj)
|
||||
if catalog is not None:
|
||||
catalog.index_doc(int(getUidForObject(obj)), obj)
|
||||
|
||||
|
||||
# helper functions and classes
|
||||
|
||||
def login(principal):
|
||||
endInteraction()
|
||||
newInteraction(Participation(principal))
|
||||
|
||||
|
||||
class TestRequest(BaseTestRequest):
|
||||
|
||||
basePrincipal = BaseTestRequest.principal
|
||||
|
||||
@Lazy
|
||||
def principal(self):
|
||||
interaction = getInteraction()
|
||||
if interaction is not None:
|
||||
parts = interaction.participations
|
||||
if parts:
|
||||
prin = parts[0].principal
|
||||
if prin is not None:
|
||||
return prin
|
||||
return self.basePrincipal
|
||||
|
||||
|
||||
class Participation(object):
|
||||
""" Dummy Participation class for testing.
|
||||
"""
|
||||
|
||||
interaction = None
|
||||
|
||||
def __init__(self, principal):
|
||||
self.principal = principal
|
||||
|
Loading…
Add table
Reference in a new issue