コード例 #1
0
ファイル: test_publicweb.py プロジェクト: rcarmo/divmod.org
    def setUp(self):
        """
        Set up stores and an offering.
        """
        store = Store(dbdir=self.mktemp())
        appStore1 = SubStore.createNew(store, ("app", "test1.axiom"))
        appStore2 = SubStore.createNew(store, ("app", "test2.axiom"))
        self.firstOffering = Offering(u'first offering', None, None, None, None,
                                      None, [])
        firstInstalledOffering = InstalledOffering(
            store=store, application=appStore1,
            offeringName=self.firstOffering.name)
        ss1 = appStore1.open()
        self.installApp(ss1)
        # (bypass Item.__setattr__)
        object.__setattr__(
            firstInstalledOffering, 'getOffering',
            lambda: self.firstOffering)

        secondOffering = Offering(u'second offering', None, None, None, None,
                                  None, [])
        secondInstalledOffering = InstalledOffering(
            store=store, application=appStore2,
            offeringName=secondOffering.name)
        # (bypass Item.__setattr__)
        object.__setattr__(secondInstalledOffering, 'getOffering',
                           lambda: secondOffering)

        self.fragment = _OfferingsFragment(FrontPage(store=store))
コード例 #2
0
    def setUp(self):
        """
        Set up stores and an offering.
        """
        store = Store(dbdir=self.mktemp())
        appStore1 = SubStore.createNew(store, ("app", "test1.axiom"))
        appStore2 = SubStore.createNew(store, ("app", "test2.axiom"))
        self.firstOffering = Offering(u'first offering', None, None, None,
                                      None, None, [])
        firstInstalledOffering = InstalledOffering(
            store=store,
            application=appStore1,
            offeringName=self.firstOffering.name)
        ss1 = appStore1.open()
        self.installApp(ss1)
        # (bypass Item.__setattr__)
        object.__setattr__(firstInstalledOffering, 'getOffering',
                           lambda: self.firstOffering)

        secondOffering = Offering(u'second offering', None, None, None, None,
                                  None, [])
        secondInstalledOffering = InstalledOffering(
            store=store,
            application=appStore2,
            offeringName=secondOffering.name)
        # (bypass Item.__setattr__)
        object.__setattr__(secondInstalledOffering, 'getOffering',
                           lambda: secondOffering)

        self.fragment = _OfferingsFragment(FrontPage(store=store))
コード例 #3
0
ファイル: test_upgrading.py プロジェクト: perkinslr/axiom-py3
    def test_upgradeStoreRecursing(self):
        """
        L{Upgrade} upgrades L{Item}s in substores.
        """
        choose(oldapp)

        ss1 = SubStore.createNew(self.store, ['a'])
        ss2 = SubStore.createNew(self.store, ['b'])

        swordIDs = [
            (ss1.storeID, oldapp.Sword(store=ss1.open(), name='foo').storeID),
            (ss2.storeID, oldapp.Sword(store=ss2.open(), name='bar').storeID)]

        del ss1, ss2
        self.store.close()

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

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

        callWithStdoutRedirect(cmd.parseOptions, [])

        for (ssid, swordID) in swordIDs:
            self.assertRaises(
                KeyError,
                self.store.getItemByID(ssid).open().getItemByID, swordID)
コード例 #4
0
ファイル: test_upgrading.py プロジェクト: perkinslr/axiom-py3
    def test_upgradeStoreRecursing(self):
        """
        L{Upgrade} upgrades L{Item}s in substores.
        """
        choose(oldapp)

        ss1 = SubStore.createNew(self.store, ['a'])
        ss2 = SubStore.createNew(self.store, ['b'])

        swordIDs = [(ss1.storeID, oldapp.Sword(store=ss1.open(),
                                               name='foo').storeID),
                    (ss2.storeID, oldapp.Sword(store=ss2.open(),
                                               name='bar').storeID)]

        del ss1, ss2
        self.store.close()

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

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

        callWithStdoutRedirect(cmd.parseOptions, [])

        for (ssid, swordID) in swordIDs:
            self.assertRaises(KeyError,
                              self.store.getItemByID(ssid).open().getItemByID,
                              swordID)
コード例 #5
0
ファイル: test_userbase.py プロジェクト: perkinslr/axiom-py3
    def testAvatarStoreState(self):
        """
        You can only pass an 'avatars' argument if it doesn't already have an
        account in it.  Some accounts want to have their stores in slightly odd
        places (like offering.py) but you can't have two accounts added which
        both point to the same store.
        """
        dbdir = FilePath(self.mktemp())
        s = Store(dbdir)
        ls = userbase.LoginSystem(store=s)
        dependency.installOn(ls, s)
        acc = ls.addAccount('alice', 'dom.ain', 'password')

        # this is allowed, if weird
        unrelatedAccount = ls.addAccount(
            'elseice', 'dom.ain', 'password',
            avatars=SubStore.createNew(s, ('crazy', 'what')))

        # this is not allowed.
        self.assertRaises(errors.DuplicateUniqueItem,
                          ls.addAccount,
                          'bob', 'ain.dom', 'xpassword',
                          avatars=acc.avatars)

        # Make sure that our stupid call to addAccount did not corrupt
        # anything, because we are stupid
        self.assertEqual(acc.avatars.open().query(userbase.LoginAccount).count(), 1)
コード例 #6
0
 def test_requiresFromSite(self):
     """
     The value of a L{axiom.dependency.requiresFromSite} descriptor ought to
     be the powerup on the site for the instance it describes.
     """
     dependency.installOn(RealGrid(store=self.store), self.store)
     substore = SubStore.createNew(self.store, ['sub']).open()
     self.assertEquals(PowerStrip(store=substore).draw(1), REAL_POWER)
コード例 #7
0
    def setUp(self):
        self.spath = filepath.FilePath(self.mktemp() + ".axiom")
        self.store = Store(self.spath)
        self.substoreitem = SubStore.createNew(self.store, ["sub.axiom"])

        self.substore = self.substoreitem.open()
        # Not available yet.
        self.substore.attachToParent()
コード例 #8
0
ファイル: test_dependency.py プロジェクト: bne/squeal
 def test_requiresFromSite(self):
     """
     The value of a L{axiom.dependency.requiresFromSite} descriptor ought to
     be the powerup on the site for the instance it describes.
     """
     dependency.installOn(RealGrid(store=self.store), self.store)
     substore = SubStore.createNew(self.store, ['sub']).open()
     self.assertEquals(PowerStrip(store=substore).draw(1), REAL_POWER)
コード例 #9
0
 def test_subSchedule(self):
     """
     The same as test_schedule, except using a subscheduler.
     """
     subst = SubStore.createNew(self.store, ['scheduler_test'])
     substore = subst.open()
     subscheduler = IScheduler(substore)
     return self._testSchedule(subscheduler)
コード例 #10
0
ファイル: test_substore.py プロジェクト: bne/squeal
 def setUp(self):
     """
     Set up the tests by creating a store and a substore and opening them both.
     """
     self.topdb = topdb = Store(filepath.FilePath(self.mktemp()))
     self.ssitem = ssitem = SubStore.createNew(
         topdb, ["dontstartme", "really"])
     self.ss = ssitem.open()
     self.serviceStarted = False
コード例 #11
0
 def test_requiresFromSiteNoDefault(self):
     """
     The default function shouldn't be needed or invoked if its value isn't
     going to be used.
     """
     dependency.installOn(RealGrid(store=self.store), self.store)
     substore = SubStore.createNew(self.store, ['sub']).open()
     self.assertEquals(
         SpecifiedBadDefaults(store=substore).pump(), REAL_POWER)
コード例 #12
0
    def setUp(self):
        self.spath = filepath.FilePath(self.mktemp() + ".axiom")
        self.store = Store(self.spath)
        self.substoreitem = SubStore.createNew(self.store,
                                               ["sub.axiom"])

        self.substore = self.substoreitem.open()
        # Not available yet.
        self.substore.attachToParent()
コード例 #13
0
ファイル: test_dependency.py プロジェクト: bne/squeal
 def test_requiresFromSiteNoDefault(self):
     """
     The default function shouldn't be needed or invoked if its value isn't
     going to be used.
     """
     dependency.installOn(RealGrid(store=self.store), self.store)
     substore = SubStore.createNew(self.store, ['sub']).open()
     self.assertEquals(SpecifiedBadDefaults(store=substore).pump(),
                       REAL_POWER)
コード例 #14
0
ファイル: test_substore.py プロジェクト: calston/tums
 def setUp(self):
     """
     Set up the tests by creating a store and a substore and opening them both.
     """
     self.topdb = topdb = Store(filepath.FilePath(self.mktemp()))
     self.ssitem = ssitem = SubStore.createNew(topdb,
                                               ["dontstartme", "really"])
     self.ss = ssitem.open()
     self.serviceStarted = False
コード例 #15
0
ファイル: test_upgrading.py プロジェクト: perkinslr/axiom-py3
 def openStore(self):
     self.currentTopStore = store.Store(self.topdbdir)
     if self.subStoreID is not None:
         self.currentSubStore = self.currentTopStore.getItemByID(self.subStoreID).open()
     else:
         ss = SubStore.createNew(self.currentTopStore,
                                 ['sub'])
         self.subStoreID = ss.storeID
         self.currentSubStore = ss.open()
     return self.currentSubStore
コード例 #16
0
 def test_requiresFromSiteDefault(self):
     """
     The value of a L{axiom.dependency.requiresFromSite} descriptor on an
     item in a user store ought to be the result of invoking its default
     factory parameter.
     """
     substore = SubStore.createNew(self.store, ['sub']).open()
     ps = PowerStrip(store=substore)
     self.assertEquals(ps.draw(1), FAKE_POWER)
     self.assertEquals(ps.grid.siteStore, self.store)
コード例 #17
0
ファイル: test_upgrading.py プロジェクト: perkinslr/axiom-py3
 def openStore(self):
     self.currentTopStore = store.Store(self.topdbdir)
     if self.subStoreID is not None:
         self.currentSubStore = self.currentTopStore.getItemByID(
             self.subStoreID).open()
     else:
         ss = SubStore.createNew(self.currentTopStore, ['sub'])
         self.subStoreID = ss.storeID
         self.currentSubStore = ss.open()
     return self.currentSubStore
コード例 #18
0
ファイル: test_substore.py プロジェクト: DalavanCloud/axiom-1
 def test_inheritParentConfiguration(self):
     """
     Substores use the debug and journal configuration of the parent store.
     """
     filesdir = filepath.FilePath(self.mktemp())
     s = Store(filesdir=filesdir, debug=True, journalMode=u'MEMORY')
     ss = SubStore.createNew(s, ['account', '*****@*****.**'])
     s2 = ss.open()
     self.assertEqual(s2.debug, True)
     self.assertEqual(s2.journalMode, u'MEMORY')
コード例 #19
0
ファイル: test_dependency.py プロジェクト: bne/squeal
 def test_requiresFromSiteDefault(self):
     """
     The value of a L{axiom.dependency.requiresFromSite} descriptor on an
     item in a user store ought to be the result of invoking its default
     factory parameter.
     """
     substore = SubStore.createNew(self.store, ['sub']).open()
     ps = PowerStrip(store=substore)
     self.assertEquals(ps.draw(1), FAKE_POWER)
     self.assertEquals(ps.grid.siteStore, self.store)
コード例 #20
0
def createDatabase(s):
    """
    Create a store which contains a substore-service-starter item powered up
    for IService, and a substore, which contains a service that should not be
    started after the upgrader runs.
    """
    ssi = SubStore.createNew(s, ["sub", "test"])
    ss = ssi.open()
    ds = DummyService(store=ss)
    ss.powerUp(ds, IService)
    ssss = SubStoreStartupService(store=s).installOn(s)
コード例 #21
0
def createDatabase(s):
    """
    Create a store which contains a substore-service-starter item powered up
    for IService, and a substore, which contains a service that should not be
    started after the upgrader runs.
    """
    ssi = SubStore.createNew(s, ["sub", "test"])
    ss = ssi.open()
    ds = DummyService(store=ss)
    ss.powerUp(ds, IService)
    ssss = SubStoreStartupService(store=s).installOn(s)
コード例 #22
0
 def test_listOffering(self):
     """
     Mantissa offerings are added as users with a 'username' but no domain.
     Check that the 'list' command prints these correctly.
     """
     name = 'offering-name'
     self.userbase('install')
     realm = IRealm(self.store)
     substoreItem = SubStore.createNew(self.store, ('app', name))
     realm.addAccount(name, None, None, internal=True, avatars=substoreItem)
     output = self.userbase('list')
     self.assertEquals(output, [name])
コード例 #23
0
ファイル: test_substore.py プロジェクト: bne/squeal
 def test_memorySubstoreFile(self):
     """
     In-memory substores whose stores have file directories should be able
     to create files.
     """
     filesdir = filepath.FilePath(self.mktemp())
     s = Store(filesdir=filesdir)
     ss = SubStore.createNew(s, ['account', '*****@*****.**'])
     s2 = ss.open()
     f = s2.newFile("test.txt")
     f.write("yay")
     f.close()
     self.assertEqual(open(f.finalpath.path).read(), "yay")
コード例 #24
0
ファイル: test_substore.py プロジェクト: DalavanCloud/axiom-1
 def test_memorySubstoreFile(self):
     """
     In-memory substores whose stores have file directories should be able
     to create files.
     """
     filesdir = filepath.FilePath(self.mktemp())
     s = Store(filesdir=filesdir)
     ss = SubStore.createNew(s, ['account', '*****@*****.**'])
     s2 = ss.open()
     f = s2.newFile("test.txt")
     f.write("yay")
     f.close()
     self.assertEqual(open(f.finalpath.path).read(), "yay")
コード例 #25
0
ファイル: test_dependency.py プロジェクト: bne/squeal
 def test_requiresFromSiteUnspecifiedException(self):
     """
     If a default factory function isn't supplied, an
     L{UnsatisfiedRequirement}, which should be a subtype of
     L{AttributeError}, should be raised when the descriptor is retrieved.
     """
     lung = IronLung(store=self.store)
     siteLung = IronLung(
         store=SubStore.createNew(self.store, ['sub']).open())
     self.assertRaises(UnsatisfiedRequirement, lambda : lung.grid)
     self.assertRaises(UnsatisfiedRequirement, lambda : siteLung.grid)
     default = object()
     self.assertIdentical(getattr(lung, 'grid', default), default)
コード例 #26
0
 def test_requiresFromSiteUnspecifiedException(self):
     """
     If a default factory function isn't supplied, an
     L{UnsatisfiedRequirement}, which should be a subtype of
     L{AttributeError}, should be raised when the descriptor is retrieved.
     """
     lung = IronLung(store=self.store)
     siteLung = IronLung(
         store=SubStore.createNew(self.store, ['sub']).open())
     self.assertRaises(UnsatisfiedRequirement, lambda: lung.grid)
     self.assertRaises(UnsatisfiedRequirement, lambda: siteLung.grid)
     default = object()
     self.assertIdentical(getattr(lung, 'grid', default), default)
コード例 #27
0
ファイル: test_userbase.py プロジェクト: perkinslr/axiom-py3
 def test_listOffering(self):
     """
     Mantissa offerings are added as users with a 'username' but no domain.
     Check that the 'list' command prints these correctly.
     """
     name = 'offering-name'
     self.userbase('install')
     realm = IRealm(self.store)
     substoreItem = SubStore.createNew(self.store, ('app', name))
     realm.addAccount(name, None, None, internal=True,
                      avatars=substoreItem)
     output = self.userbase('list')
     self.assertEqual(output, [name])
コード例 #28
0
 def test_navPage(self):
     """
     Test that L{webapp.GenericNavigationLivePage} supports theming of
     Athena's unsupported-browser page based on an L{ITemplateNameResolver}
     installed on the viewing user's store.
     """
     subStore = SubStore.createNew(self.siteStore,
                                   ['athena', 'unsupported']).open()
     stp = StubThemeProvider(store=subStore)
     installOn(stp, subStore)
     p = GenericNavigationAthenaPage(
         stp, LiveFragment(), _PageComponents([], None, None, None, None),
         None)
     self.assertEqual(p.renderUnsupported(None), flatten(CUSTOM_MSG))
コード例 #29
0
    def setUp(self):
        """
        Create a site store for the substore which will contain the IScheduler
        being tested.  Start its IService so any scheduled events will run.
        """
        self.storePath = filepath.FilePath(self.mktemp())
        self.siteStore = Store(self.storePath)
        super(SubSchedulerTests, self).setUp()

        substoreItem = SubStore.createNew(self.siteStore, ['scheduler_test'])
        self.substore = substoreItem.open()
        self.scheduler = scheduler = IScheduler(self.substore)
        self.stubTime(scheduler)

        self.store = self.substore
コード例 #30
0
    def setUp(self):
        self.clock = Clock()

        self.dbdir = filepath.FilePath(self.mktemp())
        self.store = Store(self.dbdir)
        self.substoreItem = SubStore.createNew(self.store, ['sub'])
        self.substore = self.substoreItem.open()

        self.scheduler = IScheduler(self.store)
        self.subscheduler = IScheduler(self.substore)

        self.scheduler.callLater = self.clock.callLater
        self.scheduler.now = lambda: Time.fromPOSIXTimestamp(self.clock.seconds())
        self.subscheduler.now = lambda: Time.fromPOSIXTimestamp(self.clock.seconds())

        IService(self.store).startService()
コード例 #31
0
ファイル: test_theme.py プロジェクト: fusionapp/mantissa
 def test_navPage(self):
     """
     Test that L{webapp.GenericNavigationAthenaPage} supports theming of
     Athena's unsupported-browser page based on an L{ITemplateNameResolver}
     installed on the viewing user's store.
     """
     subStore = SubStore.createNew(
         self.siteStore, ['athena', 'unsupported']).open()
     stp = StubThemeProvider(store=subStore)
     installOn(stp, subStore)
     p = GenericNavigationAthenaPage(stp,
                                     LiveFragment(),
                                     _PageComponents([], None, None,
                                                     None, None),
                                     None)
     self.assertEqual(p.renderUnsupported(None),
                      flatten(CUSTOM_MSG))
コード例 #32
0
ファイル: test_substore.py プロジェクト: bne/squeal
    def test_oneThingMemory(self):
        """
        Ensure that items put into in-memory substores are retrievable.
        """
        s = Store()
        ss = SubStore.createNew(s, ['account', '*****@*****.**'])
        s2 = ss.open()

        ssd = SubStored(store=s2, a=u'hello world', b='what, its text')
        oid = ss.storeID
        oid2 = ssd.storeID

        s2.close()
        self.assertIdentical(s.getItemByID(oid), ss)
        self.assertIdentical(ss.open(), s2)
        item = s2.getItemByID(oid2)
        self.assertEquals(item.a, u'hello world')
        self.assertEquals(item.b, 'what, its text')
コード例 #33
0
ファイル: test_substore.py プロジェクト: DalavanCloud/axiom-1
    def test_oneThingMemory(self):
        """
        Ensure that items put into in-memory substores are retrievable.
        """
        s = Store()
        ss = SubStore.createNew(s, ['account', '*****@*****.**'])
        s2 = ss.open()

        ssd = SubStored(store=s2, a=u'hello world', b='what, its text')
        oid = ss.storeID
        oid2 = ssd.storeID

        s2.close()
        self.assertIdentical(s.getItemByID(oid), ss)
        self.assertIdentical(ss.open(), s2)
        item = s2.getItemByID(oid2)
        self.assertEquals(item.a, u'hello world')
        self.assertEquals(item.b, 'what, its text')
コード例 #34
0
ファイル: test_substore.py プロジェクト: DalavanCloud/axiom-1
    def test_hereTodayGoneTomorrow(self):
        """
        Ensure that substores exist after closing them.
        """
        s = Store()
        ss = SubStore.createNew(s, ['account', '*****@*****.**'])
        s2 = ss.open()

        ssd = SubStored(store=s2, a=u'hello world', b='what, its text')
        oid = ss.storeID
        oid2 = ssd.storeID
        s2.close()
        #the following is done to mimic garbage collection of objects holding
        #on to substores
        del s2._openSubStore
        ss = s.getItemByID(oid)
        s2 = ss.open()
        item = s2.getItemByID(oid2)
        self.assertEquals(item.a, u'hello world')
        self.assertEquals(item.b, 'what, its text')
コード例 #35
0
ファイル: test_substore.py プロジェクト: bne/squeal
    def test_hereTodayGoneTomorrow(self):
        """
        Ensure that substores exist after closing them.
        """
        s = Store()
        ss = SubStore.createNew(s, ['account', '*****@*****.**'])
        s2 = ss.open()

        ssd = SubStored(store=s2, a=u'hello world', b='what, its text')
        oid = ss.storeID
        oid2 = ssd.storeID
        s2.close()
        #the following is done to mimic garbage collection of objects holding
        #on to substores
        del s2._openSubStore
        ss = s.getItemByID(oid)
        s2 = ss.open()
        item = s2.getItemByID(oid2)
        self.assertEquals(item.a, u'hello world')
        self.assertEquals(item.b, 'what, its text')
コード例 #36
0
    def testOneThing(self):
        topdb = self.mktemp()
        s = Store(topdb)
        ss = SubStore.createNew(s, ['account', '*****@*****.**'])
        s2 = ss.open()

        ssd = SubStored(store=s2, a=u'hello world', b='what, its text')
        oid = ss.storeID
        oid2 = ssd.storeID

        s2.close()
        s.close()

        reopens = Store(topdb)
        reopenss = reopens.getItemByID(oid)
        reopens2 = reopenss.open()
        reopenssd = reopens2.getItemByID(oid2)

        self.assertEquals(reopenssd.a, u'hello world')
        self.assertEquals(reopenssd.b, 'what, its text')
コード例 #37
0
ファイル: test_substore.py プロジェクト: bne/squeal
    def testOneThing(self):
        """
        Ensure that items can be inserted into substores and
        subsequently retrieved.
        """
        topdb = filepath.FilePath(self.mktemp())
        s = Store(topdb)
        ss = SubStore.createNew(s, ['account', '*****@*****.**'])
        s2 = ss.open()

        ssd = SubStored(store=s2, a=u'hello world', b='what, its text')
        oid = ss.storeID
        oid2 = ssd.storeID

        s2.close()
        s.close()

        reopens = Store(topdb)
        reopenss = reopens.getItemByID(oid)
        reopens2 = reopenss.open()
        reopenssd = reopens2.getItemByID(oid2)

        self.assertEquals(reopenssd.a, u'hello world')
        self.assertEquals(reopenssd.b, 'what, its text')
コード例 #38
0
ファイル: test_substore.py プロジェクト: DalavanCloud/axiom-1
    def testOneThing(self):
        """
        Ensure that items can be inserted into substores and
        subsequently retrieved.
        """
        topdb = filepath.FilePath(self.mktemp())
        s = Store(topdb)
        ss = SubStore.createNew(s, ['account', '*****@*****.**'])
        s2 = ss.open()

        ssd = SubStored(store=s2, a=u'hello world', b='what, its text')
        oid = ss.storeID
        oid2 = ssd.storeID

        s2.close()
        s.close()

        reopens = Store(topdb)
        reopenss = reopens.getItemByID(oid)
        reopens2 = reopenss.open()
        reopenssd = reopens2.getItemByID(oid2)

        self.assertEquals(reopenssd.a, u'hello world')
        self.assertEquals(reopenssd.b, 'what, its text')
コード例 #39
0
def createDatabase(store):
    sub = SubStore.createNew(store, ["substore"]).open()
    installOn(SubScheduler(store=sub), sub)
コード例 #40
0
 def setUp(self):
     store = Store()
     ss = SubStore.createNew(store, ['test']).open()
     self.pa = PrivateApplication(store=ss)
     installOn(self.pa, ss)
     self.webViewer = IWebViewer(ss)
コード例 #41
0
        def siteStoreTxn():
            Mantissa().installSite(self.siteStore, u"localhost", u"", False)

            self.userStore = SubStore.createNew(
                self.siteStore, ['child', 'lookup']).open()
コード例 #42
0
ファイル: test_scheduler.py プロジェクト: calston/tums
    def testSubScheduler(self):
        substoreItem = SubStore.createNew(self.store, ['scheduler_test'])
        substore = substoreItem.open()
        SubScheduler(store=substore).installOn(substore)

        return self._doTestScheduler(substore)
コード例 #43
0
ファイル: userbase.py プロジェクト: perkinslr/axiom-py3
 def makeAvatars(self, domain, username):
     return SubStore.createNew(self.store, ('account', domain, username + '.axiom'))
コード例 #44
0
ファイル: userbase.py プロジェクト: DalavanCloud/axiom-1
 def makeAvatars(self, domain, username):
     return SubStore.createNew(self.store,
                               ('account', domain, username + '.axiom'))