Пример #1
0
 def test_legacyItemComparison(self):
     """
     Legacy items with different versions must not compare equal.
     """
     legacy1 = declareLegacyItem('test_type', 1, {})
     legacy2 = declareLegacyItem('test_type', 2, {})
     self.assertNotEqual(legacy1, legacy2)
     self.assertEqual(legacy1, legacy1)
     self.assertEqual(legacy2, legacy2)
Пример #2
0
 def test_legacyItemComparison(self):
     """
     Legacy items with different versions must not compare equal.
     """
     legacy1 = declareLegacyItem('test_type', 1, {})
     legacy2 = declareLegacyItem('test_type', 2, {})
     self.assertNotEqual(legacy1, legacy2)
     self.assertEqual(legacy1, legacy1)
     self.assertEqual(legacy2, legacy2)
Пример #3
0
 def test_queueMultipleVersions(self):
     """
     If multiple schema versions are queued for upgrade, upgrades should be
     attempted for all of them (but only attempted once per version).
     """
     legacy1 = declareLegacyItem('test_type', 1, {})
     legacy2 = declareLegacyItem('test_type', 2, {})
     self._upgrader.queueTypeUpgrade(legacy1)
     self._upgrader.queueTypeUpgrade(legacy2)
     self._upgrader.queueTypeUpgrade(legacy2)
     self.assertEqual(len(self._upgrader._oldTypesRemaining), 2)
Пример #4
0
 def test_queueMultipleVersions(self):
     """
     If multiple schema versions are queued for upgrade, upgrades should be
     attempted for all of them (but only attempted once per version).
     """
     legacy1 = declareLegacyItem('test_type', 1, {})
     legacy2 = declareLegacyItem('test_type', 2, {})
     self._upgrader.queueTypeUpgrade(legacy1)
     self._upgrader.queueTypeUpgrade(legacy2)
     self._upgrader.queueTypeUpgrade(legacy2)
     self.assertEqual(len(self._upgrader._oldTypesRemaining), 2)
Пример #5
0
    def test_axiomaticUpgradeExceptionBubbling(self):
        """
        Exceptions encountered by L{Upgrade.upgradeStore} are handled and
        re-raised as L{errors.ItemUpgradeError} with attributes indicating
        which L{Item} was being upgraded when the exception occurred.
        """
        choose(oldapp)
        swordID = oldapp.Sword(store=self.store,
                               name='longsword',
                               hurtfulness=4).storeID
        self.store.close()

        choose(brokenapp)
        self.store = store.Store(self.dbdir)

        cmd = Upgrade()
        cmd.parent = CommandStub(self.store, 'upgrade')
        cmd.count = 100

        err = self.assertRaises(errors.ItemUpgradeError,
                                callWithStdoutRedirect, cmd.upgradeStore,
                                self.store)

        self.assertTrue(
            err.originalFailure.check(brokenapp.UpgradersAreBrokenHere))

        oldType = item.declareLegacyItem(oldapp.Sword.typeName,
                                         oldapp.Sword.schemaVersion, {})
        self.assertEqual(err.storeID, swordID)
        self.assertIdentical(err.oldType, oldType)
        self.assertIdentical(err.newType, brokenapp.Sword)
Пример #6
0
    def test_axiomaticUpgradeExceptionBubbling(self):
        """
        Exceptions encountered by L{Upgrade.upgradeStore} are handled and
        re-raised as L{errors.ItemUpgradeError} with attributes indicating
        which L{Item} was being upgraded when the exception occurred.
        """
        choose(oldapp)
        swordID = oldapp.Sword(
            store=self.store, name='longsword', hurtfulness=4).storeID
        self.store.close()

        choose(brokenapp)
        self.store = store.Store(self.dbdir)

        cmd = Upgrade()
        cmd.parent = CommandStub(self.store, 'upgrade')
        cmd.count = 100

        err = self.assertRaises(
            errors.ItemUpgradeError,
            callWithStdoutRedirect, cmd.upgradeStore, self.store)

        self.assertTrue(
            err.originalFailure.check(brokenapp.UpgradersAreBrokenHere))

        oldType = item.declareLegacyItem(
            oldapp.Sword.typeName,
            oldapp.Sword.schemaVersion, {})
        self.assertEqual(err.storeID, swordID)
        self.assertIdentical(err.oldType, oldType)
        self.assertIdentical(err.newType, brokenapp.Sword)
Пример #7
0
        def checkException(ign):
            # It's redundant that the errback is called and the failure is
            # logged.  See #2638.
            loggedErrors = self.flushLoggedErrors(errors.ItemUpgradeError)
            self.assertEqual(len(loggedErrors), 1)

            oldType = item.declareLegacyItem(oldapp.Sword.typeName,
                                             oldapp.Sword.schemaVersion, {})
            e = loggedErrors[0].value
            self.assertEqual(e.storeID, swordID)
            self.assertIdentical(e.oldType, oldType)
            self.assertIdentical(e.newType, brokenapp.Sword)
Пример #8
0
        def checkException(ign):
            # It's redundant that the errback is called and the failure is
            # logged.  See #2638.
            loggedErrors = self.flushLoggedErrors(errors.ItemUpgradeError)
            self.assertEqual(len(loggedErrors), 1)
            upgradeError = loggedErrors[0]

            loggedErrors = self.flushLoggedErrors(brokenapp.UpgradersAreBrokenHere)
            self.assertEqual(len(loggedErrors), 1)

            oldType = item.declareLegacyItem(
                oldapp.Sword.typeName,
                oldapp.Sword.schemaVersion, {})
            e = upgradeError.value
            self.assertEqual(e.storeID, swordID)
            self.assertIdentical(e.oldType, oldType)
            self.assertIdentical(e.newType, brokenapp.Sword)
Пример #9
0
    def activate(self):
        _SchedulerCompatMixin.activate(self)

    def setServiceParent(self, parent):
        """
        L{Scheduler} is no longer an L{IService}, but still provides this
        method as a no-op in case an instance which was still an L{IService}
        powerup is loaded (in which case it will be used like a service
        once).
        """


declareLegacyItem(
    Scheduler.typeName, 1,
    dict(eventsRun=integer(default=0),
         lastEventAt=timestamp(),
         nextEventAt=timestamp()))


def scheduler1to2(old):
    new = old.upgradeVersion(Scheduler.typeName, 1, 2)
    new.store.powerDown(new, IService)
    new.store.powerDown(new, IScheduler)
    return new


registerUpgrader(scheduler1to2, Scheduler.typeName, 1, 2)


class _SubSchedulerParentHook(Item):
Пример #10
0
        for answer in self.store.query(_AlreadyAnswered,
                                       sort=_AlreadyAnswered.storeID.ascending):
            self._deliverAnswer(answer)
        nextmsg = self.store.findFirst(_QueuedMessage, default=None)
        if nextmsg is not None:
            delay = _RETRANSMIT_DELAY
        else:
            nextanswer = self.store.findFirst(_AlreadyAnswered, default=None)
            if nextanswer is not None:
                delay = _RETRANSMIT_DELAY
        if delay is not None:
            return IScheduler(self.store).now() + timedelta(seconds=delay)


declareLegacyItem(
    MessageQueue.typeName, 1,
    dict(messageCounter=integer(default=0, allowNone=False),
         scheduler=reference()))

def upgradeMessageQueue1to2(old):
    """
    Copy the C{messageCounter} attribute to the upgraded MessageQueue.
    """
    return old.upgradeVersion(
        MessageQueue.typeName, 1, 2, messageCounter=old.messageCounter)

registerUpgrader(upgradeMessageQueue1to2, MessageQueue.typeName, 1, 2)


#### High-level convenience API ####

AMP_MESSAGE_TYPE = u'mantissa.amp.message'
Пример #11
0
            sch.schedule(self, extime.Time() + nextTry)

        if not self.running:
            self.running = True
            self.tries += 1

            d = self.sendmail()
            d.addCallback(self.mailSent, sch)
            d.addErrback(self.failureSending, sch)
            d.addErrback(log.err)


item.declareLegacyItem(
    DeliveryToAddress.typeName, 2,
    dict(composer=attributes.reference(),
         message=attributes.reference(),
         fromAddress=attributes.reference(),
         toAddress=attributes.text(),
         tries=attributes.integer(default=0)))


def deliveryToAddress2to3(old):
    delivery = MessageDelivery(composer=old.composer,
                               message=old.message,
                               store=old.store)
    new = old.upgradeVersion(old.typeName,
                             2,
                             3,
                             delivery=delivery,
                             message=old.message,
                             fromAddress=old.fromAddress,
Пример #12
0
            newCertPath = site.store.newFilePath('server.pem')
            oldCertPath.moveTo(newCertPath)
            port = SSLPort(
                store=site.store,
                portNumber=oldSite.securePortNumber,
                certificatePath=newCertPath,
                factory=site)
            installOn(port, site.store)

    newSite.deleteFromStore()


declareLegacyItem(
    WebSite.typeName, 1, dict(
        hitCount = integer(default=0),
        installedOn = reference(),
        portNumber = integer(default=0),
        securePortNumber = integer(default=0),
        certificateFile = bytes(default=None)))

def upgradeWebSite1To6(oldSite):
    return _makeSiteConfiguration(1, oldSite, False)
upgrade.registerUpgrader(upgradeWebSite1To6, 'mantissa_web_powerup', 1, 6)

declareLegacyItem(
    WebSite.typeName, 2, dict(
        hitCount = integer(default=0),
        installedOn = reference(),
        portNumber = integer(default=0),
        securePortNumber = integer(default=0),
        certificateFile = bytes(default=None),
Пример #13
0
    def listen(self):
        if self._listen is not None:
            _listen = self._listen
        else:
            from twisted.internet import reactor
            _listen = reactor.listenTCP
        return _listen(self.portNumber,
                       self.factory.getFactory(),
                       interface=self.interface.encode('ascii'))


declareLegacyItem(typeName=normalize(qual(TCPPort)),
                  schemaVersion=1,
                  attributes=dict(portNumber=integer(),
                                  factory=reference(),
                                  parent=inmemory(),
                                  _listen=inmemory(),
                                  listeningPort=inmemory()))

registerAttributeCopyingUpgrader(TCPPort, 1, 2)


class SSLPort(PortMixin, Item):
    """
    An Axiom Service Item which will bind a TCP port to a protocol factory when
    it is started.
    """
    schemaVersion = 2

    portNumber = integer(doc="""
Пример #14
0
def _declareLegacyIndexerItem(typeClass, version):
    item.declareLegacyItem(
        typeClass.typeName, version,
        dict(indexCount=attributes.integer(),
             installedOn=attributes.reference(),
             indexDirectory=attributes.text()))
Пример #15
0
        mechanism from barfing.  Even though this Item is no longer an IService
        powerup, it will still be found as one one more time and this method
        will be called on it.
        """



def pop3Listener1to2(old):
    p3l = old.upgradeVersion(POP3Listener.typeName, 1, 2)
    p3l.userbase = old.store.findOrCreate(LoginSystem)
    return p3l
registerUpgrader(pop3Listener1to2, POP3Listener.typeName, 1, 2)

declareLegacyItem(
    POP3Listener.typeName, 2, dict(portNumber=integer(default=6110),
                                   securePortNumber=integer(default=0),
                                   certificateFile=bytes(default=None),
                                   userbase=reference(doc="dependsOn(LoginSystem)")))

def pop3listener2to3(oldPOP3):
    """
    Create TCPPort and SSLPort items as appropriate.
    """
    newPOP3 = oldPOP3.upgradeVersion(
        POP3Listener.typeName, 2, 3,
        userbase=oldPOP3.userbase,
        certificateFile=oldPOP3.certificateFile)

    if oldPOP3.portNumber is not None:
        port = TCPPort(store=newPOP3.store, portNumber=oldPOP3.portNumber, factory=newPOP3)
        installOn(port, newPOP3.store)
Пример #16
0
    """
    newHook = oldHook.upgradeVersion(
        oldHook.typeName,
        1,
        2,
        loginAccount=oldHook.loginAccount,
        scheduledAt=oldHook.scheduledAt,
        scheduler=oldHook.store.findFirst(Scheduler))
    return newHook


registerUpgrader(upgradeParentHook1to2, _SubSchedulerParentHook.typeName, 1, 2)

declareLegacyItem(
    _SubSchedulerParentHook.typeName, 2,
    dict(loginAccount=reference(),
         scheduledAt=timestamp(default=None),
         scheduler=reference()))


def upgradeParentHook2to3(old):
    """
    Copy all attributes except C{scheduledAt}.
    """
    return old.upgradeVersion(old.typeName,
                              2,
                              3,
                              loginAccount=old.loginAccount,
                              scheduler=old.scheduler)

Пример #17
0
def upgradeInbox1to2(oldInbox):
    """
    Create the extra state tracking items necessary for efficiently determining
    distinct source addresses.
    """
    newInbox = oldInbox.upgradeVersion(
        "quotient_inbox", 1, 2, installedOn=oldInbox.installedOn, uiComplexity=oldInbox.uiComplexity
    )
    return newInbox


registerUpgrader(upgradeInbox1to2, "quotient_inbox", 1, 2)

declareLegacyItem(
    Inbox.typeName,
    2,
    dict(installedOn=attributes.reference(), uiComplexity=attributes.integer(), catalog=attributes.reference()),
)

registerAttributeCopyingUpgrader(Inbox, 2, 3)

declareLegacyItem(
    Inbox.typeName,
    3,
    dict(
        installedOn=attributes.reference(),
        catalog=attributes.reference(),
        uiComplexity=attributes.integer(),
        showMoreDetail=attributes.boolean(),
    ),
)
Пример #18
0
                contact = sip.IContact(self.store)
                def regged(_):
                    return defer.succeed(None)
                def unregged(e):
                    self.uas.dialogs = dialogs
                    return self.uas
                return defer.maybeDeferred(contact.getRegistrationInfo, sip.parseAddress(msg.headers["from"][0])[1]).addCallbacks(regged, unregged)
        else:
            return defer.succeed(None)


    def localElementByName(self, n):
        for name, domain in userbase.getAccountNames(self.store, protocol=u'sip'):
            #if we got here, we have a SIP account...
            return useragent.ICallControllerFactory(self.store)




item.declareLegacyItem(VoicemailDispatcher.typeName, 1, dict(
    localHost=bytes(),
    installedOn=reference()))

def _voicemailDispatcher1to2(old):
    df = old.upgradeVersion(VoicemailDispatcher.typeName, 1, 2,
                            localHost=old.localHost,
                            voicemailUser=old.store.findOrCreate(
        AnonConfessionUser))
    return df
registerUpgrader(_voicemailDispatcher1to2, VoicemailDispatcher.typeName, 1, 2)
Пример #19
0
    # IPowerupIndirector
    def indirect(self, interface):
        """
        Indirect the implementation of L{IWebViewer} to
        L{_AuthenticatedWebViewer}.
        """
        if interface == IWebViewer:
            return _AuthenticatedWebViewer(self)
        return self


PrivateApplicationV2 = declareLegacyItem(
    PrivateApplication.typeName, 2,
    dict(
        installedOn=reference(),
        preferredTheme=text(),
        hitCount=integer(default=0),
        privateKey=integer(),
        privateIndexPage=reference(),
    ))

PrivateApplicationV3 = declareLegacyItem(
    PrivateApplication.typeName, 3,
    dict(
        preferredTheme=text(),
        hitCount=integer(default=0),
        privateKey=integer(),
        privateIndexPage=reference(),
        customizedPublicPage=reference("dependsOn(CustomizedPublicPage)"),
        authenticationApplication=reference(
            "dependsOn(AuthenticationApplication)"),
Пример #20
0
registerAdapter(ExtractRenderer, EmailAddressExtract, IRenderer)
registerExtractUpgrader1to2(EmailAddressExtract)

extractTypes = {'url': URLExtract,
                'phone number': PhoneNumberExtract,
                'email address': EmailAddressExtract}


class ExtractPowerup(Item):
    schemaVersion = 2
    gallery = dependsOn(Gallery)
    thumbnailDisplayer = dependsOn(ThumbnailDisplayer)

    def installed(self):
        self.store.findUnique(mail.MessageSource).addReliableListener(self)

    def processItem(self, message):
        extractImages(message)

        for et in extractTypes.itervalues():
            et.extract(message)

declareLegacyItem(ExtractPowerup.typeName, 1, dict(
    installedOn = attributes.reference()))

def _extractPowerup1to2(old):
    return old.upgradeVersion(ExtractPowerup.typeName, 1, 2,
                              gallery=old.store.findOrCreate(Gallery),
                              thumbnailDisplayer=old.store.findOrCreate(ThumbnailDisplayer))
registerUpgrader(_extractPowerup1to2, ExtractPowerup.typeName, 1, 2)
Пример #21
0
    def installed(self):
        self.indexer.addSource(self.messageSource)

    def count(self, term):
        raise NotImplementedError("No one should ever call count, I think.")

    def search(self, *a, **k):
        if 'sortAscending' not in k:
            k['sortAscending'] = False
        d = self.indexer.search(*a, **k)
        d.addCallback(_mailsearchui.SearchAggregatorFragment, self.store)
        return d


declareLegacyItem(
    MessageSearchProvider.typeName, 1,
    dict(indexer=attributes.reference(), installedOn=attributes.reference()))


def _messageSearchProvider1to2(old):
    new = old.upgradeVersion(MessageSearchProvider.typeName,
                             1,
                             2,
                             indexer=old.indexer,
                             messageSource=old.store.findUnique(
                                 mail.MessageSource))
    return new


registerUpgrader(_messageSearchProvider1to2, MessageSearchProvider.typeName, 1,
                 2)
Пример #22
0
                 'LOGIN': imap4.LOGINCredentials,
                 },
                certOpts)
            if self.debug:
                self.factory = policies.TrafficLoggingFactory(self.factory, 'smtp')
        return self.factory

    # GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
    def setServiceParent(self, parent):
        pass


item.declareLegacyItem(typeName=MailTransferAgent.typeName,
                  schemaVersion=2,
                  attributes=dict(messageCount=attributes.integer(),
                                  installedOn=attributes.reference(),
                                  portNumber=attributes.integer(),
                                  securePortNumber=attributes.integer(),
                                  certificateFile=attributes.bytes(),
                                  domain=attributes.bytes()))

def upgradeMailTransferAgent1to2(oldMTA):
    """
    MailTransferAgent has been replaced with MailDeliveryAgent on B{user
    stores}.  Delete it from user stores and create a MailDelivery agent
    there, but leave it alone on the site store.
    """
    loginSystem = oldMTA.store.findUnique(userbase.LoginSystem, default=None)
    if loginSystem is not None:
        newMTA = oldMTA.upgradeVersion(
            'mantissa_mta', 1, 2,
            messageCount=oldMTA.messageCount,
Пример #23
0
    # IPowerupIndirector
    def indirect(self, interface):
        """
        Indirect the implementation of L{IWebViewer} to
        L{_AuthenticatedWebViewer}.
        """
        if interface == IWebViewer:
            return _AuthenticatedWebViewer(self)
        return self



PrivateApplicationV2 = declareLegacyItem(PrivateApplication.typeName, 2, dict(
    installedOn = reference(),
    preferredTheme = text(),
    hitCount = integer(default=0),
    privateKey = integer(),
    privateIndexPage = reference(),
    ))

PrivateApplicationV3 = declareLegacyItem(PrivateApplication.typeName, 3, dict(
    preferredTheme=text(),
    hitCount=integer(default=0),
    privateKey=integer(),
    privateIndexPage=reference(),
    customizedPublicPage=reference("dependsOn(CustomizedPublicPage)"),
    authenticationApplication=reference("dependsOn(AuthenticationApplication)"),
    preferenceAggregator=reference("dependsOn(PreferenceAggregator)"),
    defaultPreferenceCollection=reference("dependsOn(DefaultPreferenceCollection)"),
    searchAggregator=reference("dependsOn(SearchAggregator)"),
    website=reference(),
Пример #24
0
            newCertPath = site.store.newFilePath('server.pem')
            oldCertPath.moveTo(newCertPath)
            port = SSLPort(
                store=site.store,
                portNumber=oldSite.securePortNumber,
                certificatePath=newCertPath,
                factory=site)
            installOn(port, site.store)

    newSite.deleteFromStore()


declareLegacyItem(
    WebSite.typeName, 1, dict(
        hitCount = integer(default=0),
        installedOn = reference(),
        portNumber = integer(default=0),
        securePortNumber = integer(default=0),
        certificateFile = bytes(default=None)))

def upgradeWebSite1To6(oldSite):
    return _makeSiteConfiguration(1, oldSite, False)
upgrade.registerUpgrader(upgradeWebSite1To6, 'mantissa_web_powerup', 1, 6)

declareLegacyItem(
    WebSite.typeName, 2, dict(
        hitCount = integer(default=0),
        installedOn = reference(),
        portNumber = integer(default=0),
        securePortNumber = integer(default=0),
        certificateFile = bytes(default=None),
Пример #25
0
    """
    Obsolete.  Only present for schema compatibility.  Do not use.
    """
    powerupInterfaces = (INavigableElement,)
    implements(INavigableElement)

    schemaVersion = 2
    typeName = 'administrator_application'

    updateInterval = integer(default=5)
    privateApplication = dependsOn(PrivateApplication)

    def getTabs(self):
        return []

declareLegacyItem(AdminStatsApplication, 1,
                  dict(updateInterval=integer(default=5)))

def _adminStatsApplication1to2(old):
    new = old.upgradeVersion(AdminStatsApplication.typeName, 1, 2,
                             updateInterval=old.updateInterval,
                             privateApplication=old.store.findOrCreate(PrivateApplication))
    return new
registerUpgrader(_adminStatsApplication1to2, AdminStatsApplication.typeName, 1, 2)

class LocalUserBrowser(Item):
    """
    XXX I am an unfortunate necessity.

    This class shouldn't exist, and in fact, will be destroyed at the first
    possible moment.  It's stateless, existing only to serve as a web lookup
    hook for the UserInteractionFragment view class.
Пример #26
0
                    'LOGIN': imap4.LOGINCredentials,
                }, certOpts)
            if self.debug:
                self.factory = policies.TrafficLoggingFactory(
                    self.factory, 'smtp')
        return self.factory

    # GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
    def setServiceParent(self, parent):
        pass


item.declareLegacyItem(typeName=MailTransferAgent.typeName,
                       schemaVersion=2,
                       attributes=dict(messageCount=attributes.integer(),
                                       installedOn=attributes.reference(),
                                       portNumber=attributes.integer(),
                                       securePortNumber=attributes.integer(),
                                       certificateFile=attributes.bytes(),
                                       domain=attributes.bytes()))


def upgradeMailTransferAgent1to2(oldMTA):
    """
    MailTransferAgent has been replaced with MailDeliveryAgent on B{user
    stores}.  Delete it from user stores and create a MailDelivery agent
    there, but leave it alone on the site store.
    """
    loginSystem = oldMTA.store.findUnique(userbase.LoginSystem, default=None)
    if loginSystem is not None:
        newMTA = oldMTA.upgradeVersion(
            'mantissa_mta',
Пример #27
0
        doc="""
        An application L{SubStore} whose default shared item should be
        displayed on the root web resource. If None, the default index
        of applications will be displayed.
        """,
        allowNone=True)

    def createResourceWith(self, crud):
        """
        Create a L{_PublicFrontPage} resource wrapping this object.
        """
        return _PublicFrontPage(self, crud)

item.declareLegacyItem(
    FrontPage.typeName,
    1,
    dict(publicViews = attributes.integer(),
         privateViews = attributes.integer(),
         prefixURL = attributes.text(allowNone=False)))

upgrade.registerAttributeCopyingUpgrader(FrontPage, 1, 2)



class PublicAthenaLivePage(_PublicPageMixin, website.MantissaLivePage):
    """
    PublicAthenaLivePage is a publicly viewable Athena-enabled page which slots
    a single fragment into the center of the page.
    """
    docFactory = ThemedDocumentFactory('shell', 'templateResolver')
    unsupportedBrowserLoader = ThemedDocumentFactory(
        'athena-unsupported', 'templateResolver')
Пример #28
0
        An application L{SubStore} whose default shared item should be
        displayed on the root web resource. If None, the default index
        of applications will be displayed.
        """,
                                              allowNone=True)

    def createResourceWith(self, crud):
        """
        Create a L{_PublicFrontPage} resource wrapping this object.
        """
        return _PublicFrontPage(self, crud)


item.declareLegacyItem(
    FrontPage.typeName, 1,
    dict(publicViews=attributes.integer(),
         privateViews=attributes.integer(),
         prefixURL=attributes.text(allowNone=False)))

upgrade.registerAttributeCopyingUpgrader(FrontPage, 1, 2)


class PublicAthenaLivePage(_PublicPageMixin, website.MantissaLivePage):
    """
    PublicAthenaLivePage is a publicly viewable Athena-enabled page which slots
    a single fragment into the center of the page.
    """
    docFactory = ThemedDocumentFactory('shell', 'templateResolver')
    unsupportedBrowserLoader = ThemedDocumentFactory('athena-unsupported',
                                                     'templateResolver')
Пример #29
0
        _SchedulerCompatMixin.activate(self)


    def setServiceParent(self, parent):
        """
        L{Scheduler} is no longer an L{IService}, but still provides this
        method as a no-op in case an instance which was still an L{IService}
        powerup is loaded (in which case it will be used like a service
        once).
        """



declareLegacyItem(
    Scheduler.typeName, 1,
    dict(eventsRun=integer(default=0),
         lastEventAt=timestamp(),
         nextEventAt=timestamp()))


def scheduler1to2(old):
    new = old.upgradeVersion(Scheduler.typeName, 1, 2)
    new.store.powerDown(new, IService)
    new.store.powerDown(new, IScheduler)
    return new

registerUpgrader(scheduler1to2, Scheduler.typeName, 1, 2)


class _SubSchedulerParentHook(Item):
    schemaVersion = 4
Пример #30
0
        # the middle will muck things up.
        def go():
            for msg in work:
                for f in filters:
                    f.train(msg._spam, msg)
                yield None
            self.reclassify()

        return coiterate(go())


registerAttributeCopyingUpgrader(Filter, 1, 2)

item.declareLegacyItem(
    Filter.typeName, 2,
    dict(installedOn=attributes.reference(),
         usePostiniScore=attributes.boolean(default=False, allowNone=False),
         postiniThreshhold=attributes.ieee754_double(default=0.03)))


def _filter2to3(old):
    """
    add dependencies as attributes, remove installedOn
    """
    filter = old.upgradeVersion(old.typeName, 2, 3)
    s = old.store
    filter.usePostiniScore = old.usePostiniScore
    filter.postiniThreshhold = old.postiniThreshhold
    filter.messageSource = s.findOrCreate(MessageSource)
    filter.tiSource = s.findOrCreate(_TrainingInstructionSource)
    return filter
Пример #31
0
    """)

    def listen(self):
        if self._listen is not None:
            _listen = self._listen
        else:
            from twisted.internet import reactor
            _listen = reactor.listenTCP
        return _listen(self.portNumber, self.factory.getFactory(),
                       interface=self.interface.encode('ascii'))

declareLegacyItem(
    typeName=normalize(qual(TCPPort)),
    schemaVersion=1,
    attributes=dict(
        portNumber=integer(),
        factory=reference(),
        parent=inmemory(),
        _listen=inmemory(),
        listeningPort=inmemory()))

registerAttributeCopyingUpgrader(TCPPort, 1, 2)



class SSLPort(PortMixin, Item):
    """
    An Axiom Service Item which will bind a TCP port to a protocol factory when
    it is started.
    """
    schemaVersion = 2
Пример #32
0
        powerup, it will still be found as one one more time and this method
        will be called on it.
        """


def pop3Listener1to2(old):
    p3l = old.upgradeVersion(POP3Listener.typeName, 1, 2)
    p3l.userbase = old.store.findOrCreate(LoginSystem)
    return p3l


registerUpgrader(pop3Listener1to2, POP3Listener.typeName, 1, 2)

declareLegacyItem(
    POP3Listener.typeName, 2,
    dict(portNumber=integer(default=6110),
         securePortNumber=integer(default=0),
         certificateFile=bytes(default=None),
         userbase=reference(doc="dependsOn(LoginSystem)")))


def pop3listener2to3(oldPOP3):
    """
    Create TCPPort and SSLPort items as appropriate.
    """
    newPOP3 = oldPOP3.upgradeVersion(POP3Listener.typeName,
                                     2,
                                     3,
                                     userbase=oldPOP3.userbase,
                                     certificateFile=oldPOP3.certificateFile)

    if oldPOP3.portNumber is not None:
Пример #33
0
def upgradeCompose1to2(oldComposer):
    """
    Version 2 of the Composer powers up IMessageSender, which version 1 did
    not.  Correct that here.
    """
    newComposer = oldComposer.upgradeVersion(
        'quotient_composer', 1, 2,
        installedOn=oldComposer.installedOn)
    newComposer.installedOn.powerUp(
        newComposer, iquotient.IMessageSender)
    return newComposer

registerUpgrader(upgradeCompose1to2, 'quotient_composer', 1, 2)

item.declareLegacyItem(Composer.typeName, 2,
                       dict(installedOn=attributes.reference()))

def composer2to3(old):
    """
    Remove the L{Composer.fromAddress} attribute
    """
    return old.upgradeVersion(old.typeName, 2, 3,
                              installedOn=old.installedOn)

registerUpgrader(composer2to3, Composer.typeName, 2, 3)

item.declareLegacyItem(Composer.typeName, 3,
                       dict(installedOn=attributes.reference()))


Пример #34
0
    return newsword


registerUpgrader(sword2to3, 'test_app_sword', 2, 3)


####### DOUBLE-LEGACY UPGRADE SPECTACULAR !! ###########

# declare legacy class.

from axiom.item import declareLegacyItem

declareLegacyItem(typeName = 'test_app_sword',
                  schemaVersion = 2,

                  attributes = dict(name=text(),
                                    damagePerHit=integer(),
                                    owner=reference(),
                                    activated=inmemory()))


def upgradePlayerAndSword(oldplayer):
    newplayer = oldplayer.upgradeVersion('test_app_player', 1, 2)
    newplayer.name = oldplayer.name

    oldsword = oldplayer.sword

    newsword = oldsword.upgradeVersion('test_app_sword', 1, 2,
                                       name=oldsword.name,
                                       damagePerHit=oldsword.hurtfulness * 2,
                                       owner=newplayer)
Пример #35
0
            port = 110

        pg = POP3Grabber(
            store=self.store,
            username=username,
            password=password,
            domain=domain,
            port=port,
            config=self,
            ssl=ssl)
        # DO IT *NOW*
        self.scheduler.schedule(pg, extime.Time())
        # OR MAYBE A LITTLE LATER

item.declareLegacyItem(GrabberConfiguration.typeName, 1, dict(
    paused=attributes.boolean(default=False),
    installedOn=attributes.reference()))

def _grabberConfiguration1to2(old):
    new = old.upgradeVersion(GrabberConfiguration.typeName, 1, 2,
                             paused=old.paused,
                             privateApplication = old.store.findOrCreate(PrivateApplication),
                             deliveryAgent = old.store.findOrCreate(DeliveryAgent))
    return new
registerUpgrader(_grabberConfiguration1to2, GrabberConfiguration.typeName, 1, 2)

item.declareLegacyItem(GrabberConfiguration.typeName, 2, dict(
    paused=attributes.boolean(default=False),
    scheduler=attributes.reference(),
    privateApplication=attributes.reference(),
    deliveryAgent=attributes.reference(),
Пример #36
0
        """
        store = Store()
        t = nonUpgradedItem(store=store)
        self.assertEquals(t.__legacy__, True)
        self.assertFalse(store.objectCache.has(t.storeID))
        t2 = store.getItemByID(t.storeID)
        self.assertNotIdentical(t, t2)
        self.assertTrue(isinstance(t2, UpgradedItem))


class UpgradedItem(Item):
    """
    A simple item which is the current version of L{nonUpgradedItem}.
    """
    schemaVersion = 2
    dummy = integer()


nonUpgradedItem = declareLegacyItem(UpgradedItem.typeName, 1,
                                    dict(dummy=integer()))


def item1to2(old):
    """
    Upgrade an nonUpgradedItem to UpgradedItem
    """
    return old.upgradeVersion(UpgradedItem.typeName, 1, 2, dummy=old.dummy)


registerUpgrader(item1to2, UpgradedItem.typeName, 1, 2)
Пример #37
0
        self.assertEquals(t.__legacy__, True)
        self.assertRaises(KeyError, store.objectCache.get, t.storeID)
        t2 = store.getItemByID(t.storeID)
        self.assertNotIdentical(t, t2)
        self.assertTrue(isinstance(t2, UpgradedItem))


class UpgradedItem(Item):
    """
    A simple item which is the current version of L{nonUpgradedItem}.
    """
    schemaVersion = 3
    ref = reference()


nonUpgradedItem = declareLegacyItem(UpgradedItem.typeName, 1,
                                    dict(ref=reference()))

nonUpgradedItem2 = declareLegacyItem(UpgradedItem.typeName, 2,
                                     dict(ref=reference()))

registerAttributeCopyingUpgrader(UpgradedItem, 1, 2)


def item2to3(old):
    """
    Upgrade an nonUpgradedItem to UpgradedItem
    """
    return old.upgradeVersion(UpgradedItem.typeName, 2, 3, ref=old.ref)


registerUpgrader(item2to3, UpgradedItem.typeName, 2, 3)
Пример #38
0
            sch.schedule(self, extime.Time() + nextTry)

        if not self.running:
            self.running = True
            self.tries += 1

            d = self.sendmail()
            d.addCallback(self.mailSent, sch)
            d.addErrback(self.failureSending, sch)
            d.addErrback(log.err)



item.declareLegacyItem(DeliveryToAddress.typeName, 2,
                       dict(composer = attributes.reference(),
                            message = attributes.reference(),
                            fromAddress = attributes.reference(),
                            toAddress = attributes.text(),
                            tries = attributes.integer(default=0)))



def deliveryToAddress2to3(old):
    delivery = MessageDelivery(composer=old.composer,
                               message=old.message,
                               store=old.store)
    new = old.upgradeVersion(old.typeName, 2, 3,
                             delivery=delivery,
                             message=old.message,
                             fromAddress=old.fromAddress,
                             toAddress=old.toAddress,
                             tries=old.tries,
Пример #39
0
        self.dispatcher.installTemporaryProcessor(sip.URL(host, localpart), uac)

        uac._doCall(partyA[1], fromName="Divmod")

def sipServer1to2(old):
    ss = old.upgradeVersion(old.typeName, 1, 2)
    ss.portno = old.portno
    ss.pstn = old.pstn
    ss.userbase = old.store.findOrCreate(LoginSystem)
    return ss

registerUpgrader(sipServer1to2, SIPServer.typeName, 1, 2)

declareLegacyItem(
    SIPServer.typeName, 2,
    dict(portno=integer(),
         pstn=bytes(),
         scheduler=reference(),
         userbase=reference()))

def sipServer2to3(old):
    ss = old.upgradeVersion(old.typeName, 2, 3)
    ss.portno = old.portno
    ss.pstn = old.pstn
    ss.userbase = old.userbase
    return ss

registerUpgrader(sipServer2to3, SIPServer.typeName, 2, 3)

class Registration(Item):
    typename = "sine_registration"
    schemaVersion = 1
Пример #40
0
        uac._doCall(partyA[1], fromName="Divmod")


def sipServer1to2(old):
    ss = old.upgradeVersion(old.typeName, 1, 2)
    ss.portno = old.portno
    ss.pstn = old.pstn
    ss.userbase = old.store.findOrCreate(LoginSystem)
    return ss


registerUpgrader(sipServer1to2, SIPServer.typeName, 1, 2)

declareLegacyItem(
    SIPServer.typeName, 2,
    dict(portno=integer(),
         pstn=bytes(),
         scheduler=reference(),
         userbase=reference()))


def sipServer2to3(old):
    ss = old.upgradeVersion(old.typeName, 2, 3)
    ss.portno = old.portno
    ss.pstn = old.pstn
    ss.userbase = old.userbase
    return ss


registerUpgrader(sipServer2to3, SIPServer.typeName, 2, 3)

Пример #41
0
    raise RuntimeError("The database does not contain any swords of version 2,"
                       " so you should be able to skip this version.")


registerUpgrader(sword2to3, 'test_app_sword', 2, 3)


####### DOUBLE-LEGACY UPGRADE SPECTACULAR !! ###########

# declare legacy class.

from axiom.item import declareLegacyItem

declareLegacyItem(typeName = 'test_app_sword',
                  schemaVersion = 2,
                  attributes = dict(name=text(),
                                    damagePerHit=integer(),
                                    owner=reference(),
                                    activated=inmemory()))


def upgradePlayerAndSword(oldplayer):
    newplayer = oldplayer.upgradeVersion('test_app_player', 1, 2)
    newplayer.name = oldplayer.name

    oldsword = oldplayer.sword

    newsword = oldsword.upgradeVersion('test_app_sword', 1, 3,
                                       name=oldsword.name,
                                       damagePerHit=oldsword.hurtfulness * 2)
    invent = InventoryEntry(store=newsword.store,
                            owner=newplayer,
Пример #42
0
        self.assertEquals(t.__legacy__, True)
        self.assertFalse(store.objectCache.has(t.storeID))
        t2 = store.getItemByID(t.storeID)
        self.assertNotIdentical(t, t2)
        self.assertTrue(isinstance(t2, UpgradedItem))



class UpgradedItem(Item):
    """
    A simple item which is the current version of L{nonUpgradedItem}.
    """
    schemaVersion = 2
    dummy = integer()



nonUpgradedItem = declareLegacyItem(
    UpgradedItem.typeName, 1,
    dict(dummy=integer()))



def item1to2(old):
    """
    Upgrade an nonUpgradedItem to UpgradedItem
    """
    return old.upgradeVersion(UpgradedItem.typeName, 1, 2, dummy=old.dummy)

registerUpgrader(item1to2, UpgradedItem.typeName, 1, 2)
Пример #43
0
    }

    return old.upgradeVersion('free_signup',
                              2,
                              3,
                              prefixURL=old.prefixURL,
                              booth=old.booth,
                              benefactor=old.benefactor,
                              emailTemplate=emailTemplate)


upgrade.registerUpgrader(freeTicketSignup2To3, 'free_signup', 2, 3)

declareLegacyItem(typeName='free_signup',
                  schemaVersion=3,
                  attributes=dict(prefixURL=text(),
                                  booth=reference(),
                                  benefactor=reference(),
                                  emailTemplate=text()))


def freeTicketSignup3To4(old):
    return old.upgradeVersion('free_signup',
                              3,
                              4,
                              prefixURL=old.prefixURL,
                              booth=old.booth,
                              benefactor=old.benefactor,
                              emailTemplate=old.emailTemplate,
                              prompt=u'Sign Up')

Пример #44
0

def upgradeInbox1to2(oldInbox):
    """
    Create the extra state tracking items necessary for efficiently determining
    distinct source addresses.
    """
    newInbox = oldInbox.upgradeVersion(
        'quotient_inbox', 1, 2,
        installedOn=oldInbox.installedOn,
        uiComplexity=oldInbox.uiComplexity)
    return newInbox
registerUpgrader(upgradeInbox1to2, 'quotient_inbox', 1, 2)

declareLegacyItem(Inbox.typeName, 2,
                  dict(installedOn=attributes.reference(),
                       uiComplexity=attributes.integer(),
                       catalog=attributes.reference()))

registerAttributeCopyingUpgrader(Inbox, 2, 3)

declareLegacyItem(Inbox.typeName, 3,
                  dict(installedOn=attributes.reference(),
                       catalog=attributes.reference(),
                       uiComplexity=attributes.integer(),
                       showMoreDetail=attributes.boolean()))

def inbox3to4(old):
    """
    Copy over all attributes except for 'installedOn' and 'catalog', which
    have been deleted.
Пример #45
0
    emailTemplate = file(sibpath(__file__, 'signup.rfc2822')).read()
    emailTemplate %= {'blurb': u'',
                      'subject': 'Welcome to a Generic Axiom Application!',
                      'linktext': "Click here to claim your 'generic axiom application' account"}

    return old.upgradeVersion('free_signup', 2, 3,
                              prefixURL=old.prefixURL,
                              booth=old.booth,
                              benefactor=old.benefactor,
                              emailTemplate=emailTemplate)

upgrade.registerUpgrader(freeTicketSignup2To3, 'free_signup', 2, 3)

declareLegacyItem(typeName='free_signup',
                  schemaVersion=3,
                  attributes=dict(prefixURL=text(),
                                  booth=reference(),
                                  benefactor=reference(),
                                  emailTemplate=text()))



def freeTicketSignup3To4(old):
    return old.upgradeVersion('free_signup', 3, 4,
                              prefixURL=old.prefixURL,
                              booth=old.booth,
                              benefactor=old.benefactor,
                              emailTemplate=old.emailTemplate,
                              prompt=u'Sign Up')

upgrade.registerUpgrader(freeTicketSignup3To4, 'free_signup', 3, 4)
Пример #46
0
        self.assertNotIdentical(t, t2)
        self.assertTrue(isinstance(t2, UpgradedItem))



class UpgradedItem(Item):
    """
    A simple item which is the current version of L{nonUpgradedItem}.
    """
    schemaVersion = 3
    ref = reference()



nonUpgradedItem = declareLegacyItem(
    UpgradedItem.typeName, 1,
    dict(ref=reference()))



nonUpgradedItem2 = declareLegacyItem(
    UpgradedItem.typeName, 2,
    dict(ref=reference()))

registerAttributeCopyingUpgrader(UpgradedItem, 1, 2)


def item2to3(old):
    """
    Upgrade an nonUpgradedItem to UpgradedItem
    """
Пример #47
0
def _declareLegacyIndexerItem(typeClass, version):
    item.declareLegacyItem(typeClass.typeName, version,
                           dict(indexCount=attributes.integer(),
                                installedOn=attributes.reference(),
                                indexDirectory=attributes.text()))
Пример #48
0
            port = 110

        pg = POP3Grabber(store=self.store,
                         username=username,
                         password=password,
                         domain=domain,
                         port=port,
                         config=self,
                         ssl=ssl)
        # DO IT *NOW*
        self.scheduler.schedule(pg, extime.Time())
        # OR MAYBE A LITTLE LATER


item.declareLegacyItem(
    GrabberConfiguration.typeName, 1,
    dict(paused=attributes.boolean(default=False),
         installedOn=attributes.reference()))


def _grabberConfiguration1to2(old):
    new = old.upgradeVersion(
        GrabberConfiguration.typeName,
        1,
        2,
        paused=old.paused,
        privateApplication=old.store.findOrCreate(PrivateApplication),
        deliveryAgent=old.store.findOrCreate(DeliveryAgent))
    return new


registerUpgrader(_grabberConfiguration1to2, GrabberConfiguration.typeName, 1,
Пример #49
0

        # XXX This really should use in-database state, otherwise a restart in
        # the middle will muck things up.
        def go():
            for msg in work:
                for f in filters:
                    f.train(msg._spam, msg)
                yield None
            self.reclassify()
        return coiterate(go())

registerAttributeCopyingUpgrader(Filter, 1, 2)

item.declareLegacyItem(Filter.typeName, 2,
    dict(installedOn = attributes.reference(),
         usePostiniScore = attributes.boolean(default=False,allowNone=False),
         postiniThreshhold = attributes.ieee754_double(default=0.03)))



def _filter2to3(old):
    """
    add dependencies as attributes, remove installedOn
    """
    filter = old.upgradeVersion(old.typeName, 2, 3)
    s = old.store
    filter.usePostiniScore = old.usePostiniScore
    filter.postiniThreshhold = old.postiniThreshhold
    filter.messageSource = s.findOrCreate(MessageSource)
    filter.tiSource = s.findOrCreate(_TrainingInstructionSource)
    return filter
Пример #50
0
    def installed(self):
        self.indexer.addSource(self.messageSource)
    def count(self, term):
        raise NotImplementedError("No one should ever call count, I think.")


    def search(self, *a, **k):
        if 'sortAscending' not in k:
            k['sortAscending'] = False
        d = self.indexer.search(*a, **k)
        d.addCallback(_mailsearchui.SearchAggregatorFragment, self.store)
        return d

declareLegacyItem(MessageSearchProvider.typeName, 1, dict(
    indexer=attributes.reference(),
    installedOn=attributes.reference()))

def _messageSearchProvider1to2(old):
    new = old.upgradeVersion(MessageSearchProvider.typeName, 1, 2,
                             indexer=old.indexer,
                             messageSource=old.store.findUnique(mail.MessageSource))
    return new
registerUpgrader(_messageSearchProvider1to2, MessageSearchProvider.typeName, 1, 2)

class QuotientBenefactor(Item):
    implements(ixmantissa.IBenefactor)

    typeName = 'quotient_benefactor'
    schemaVersion = 1
Пример #51
0
    newsword.damagePerHit = oldsword.damagePerHit
    invent = InventoryEntry(store=newsword.store, owner=oldsword.owner, owned=newsword)
    return newsword


registerUpgrader(sword2to3, "test_app_sword", 2, 3)


####### DOUBLE-LEGACY UPGRADE SPECTACULAR !! ###########

# declare legacy class.

from axiom.item import declareLegacyItem


declareLegacyItem(typeName="test_app_player", schemaVersion=2, attributes=dict(name=text(allowNone=True)))

registerAttributeCopyingUpgrader(Adventurer, 2, 3)

declareLegacyItem(
    typeName="test_app_sword",
    schemaVersion=2,
    attributes=dict(name=text(), damagePerHit=integer(), owner=reference(), activated=inmemory()),
)


def upgradePlayerAndSword(oldplayer):
    newplayer = oldplayer.upgradeVersion("test_app_player", 1, 2)
    newplayer.name = oldplayer.name

    oldsword = oldplayer.sword
Пример #52
0
        for answer in self.store.query(
                _AlreadyAnswered, sort=_AlreadyAnswered.storeID.ascending):
            self._deliverAnswer(answer)
        nextmsg = self.store.findFirst(_QueuedMessage, default=None)
        if nextmsg is not None:
            delay = _RETRANSMIT_DELAY
        else:
            nextanswer = self.store.findFirst(_AlreadyAnswered, default=None)
            if nextanswer is not None:
                delay = _RETRANSMIT_DELAY
        if delay is not None:
            return IScheduler(self.store).now() + timedelta(seconds=delay)


declareLegacyItem(
    MessageQueue.typeName, 1,
    dict(messageCounter=integer(default=0, allowNone=False),
         scheduler=reference()))


def upgradeMessageQueue1to2(old):
    """
    Copy the C{messageCounter} attribute to the upgraded MessageQueue.
    """
    return old.upgradeVersion(MessageQueue.typeName,
                              1,
                              2,
                              messageCounter=old.messageCounter)


registerUpgrader(upgradeMessageQueue1to2, MessageQueue.typeName, 1, 2)