All pastes #4321 Raw Edit

Anonymous

public python v1 · immutable
#4321 ·published 2005-01-16 16:40 UTC
rendered paste body
from atop.store import Storefrom atop.credup import StoreRealm, AnonymousUser, Avatarfrom atop.powerup import IPowerStation,Powerupfrom twisted.application import servicefrom twisted.cred import credentials, portal, checkersfrom twisted.python import reflectfrom twisted.internet import deferimport typesclass NullRealm:    __implements__ = portal.IRealm    def requestAvatar(self, avatarId, mind, *interfaces):        raise NotImplementedError("Realm not yet initialized.")class StorageService(service.Service):    def __init__(self, db, fs, guarded=False):        self.setName(reflect.qual(self.__class__))        self._storeParams = (db, fs)        self._pups = []        self.guarded = guarded        if self.guarded:            self.portal = portal.Portal(NullRealm())    def addPowerups(self, pups):        if type(pups) not in (types.TupleType, types.ListType):            pups = [pups]        self._pups.extend(pups)    def storeInit(self):        pass    def portalInit(self):        self.portal.registerChecker(checkers.AllowAnonymousAccess(), credentials.IAnonymous)        self.portal.registerChecker(checkers.ICredentialsChecker(self.store))    def startService(self):        service.Service.startService(self)        self.store = Store(*self._storeParams)        self.store.service = self        ps = IPowerStation(self.store)        def _():            self.storeInit()            if self.guarded:                # install the realm                ps.installPowerup(StoreRealm)                # create checker & domain                checker = checkers.ICredentialsChecker(self.store)                checker.addDomain("myDefaultDomain")                realm = portal.IRealm(self.store)                self.portal.realm = realm                self.portalInit()            for pup in self._pups:                ps.installPowerup(pup)            svc = service.IService(self.store, default=None)            if svc is not None:                return svc.startService()        return self.store.transact(_)    def _closeLater(self, result):        d = defer.Deferred()        from twisted.internet import reactor        reactor.callLater(0, self._reallyClose, d, result)        return d    def _reallyClose(self, d, result):        self.store.close()        d.callback(result)    def stopService(self):        service.Service.stopService(self)        def _():            svc = service.IService(self.store, default=None)            if svc is not None:                return svc.stopService()            return defer.succeed(None)        return self.store.transact(_).addCallback(self._closeLater)