Example #1
0
 def payloadToDict(self):
     buildCfg = freeze('BuildConfiguration', self.payload.buildCfg)
     trove = freeze('BuildTrove', self.payload.trove)
     d = dict(buildCfg=buildCfg, trove=trove, logData=self.payload.logData)
     if self.payload.logData is None:
         d['logData'] = ''
     return d
Example #2
0
    def testResolveResult(self):
        trv = self.addComponent('foo:runtime', '1.0', 'ssl')
        tup = trv.getNameVersionFlavor()
        job = (tup[0], (None, None), (tup[1], tup[2]), False)

        r = resolver.ResolveResult()
        r.troveResolved([job], [], [])
        r2 = thaw('ResolveResult', freeze('ResolveResult', r))
        assert(r2.getBuildReqs() == [ job  ])
        assert(r2.success)
        assert(not r2.inCycle)

        r = resolver.ResolveResult(inCycle=True)
        r.troveMissingBuildReqs(True, [('foo', None, parseFlavor('ssl'))])
        r2 = thaw('ResolveResult', freeze('ResolveResult', r))
        assert(not r2.hasMissingDeps())
        assert(r2.hasMissingBuildReqs())
        assert(r2.getMissingBuildReqs() == [(True, ('foo', '', parseFlavor('ssl')))])
        assert(not r2.success)
        assert(r2.inCycle)

        r = resolver.ResolveResult(inCycle=True)
        r.troveMissingDependencies(True, [(trv.getNameVersionFlavor(), 
                                     parseDep('trove: foo trove: bar'))])
        r2 = thaw('ResolveResult', freeze('ResolveResult', r))
        assert(r.getMissingDeps() == r2.getMissingDeps())
        assert(r2.hasMissingDeps())
        assert(not r2.success)
        assert(r2.inCycle)
Example #3
0
 def __freeze__(self):
     return {
         'session_id': self.session_id,
         'jobs': freeze('ImageJobs', self.jobs),
         'slots': self.slots,
         'machine_info': freeze('MachineInformation', self.machine_info),
     }
Example #4
0
 def __freeze__(self):
     d = dict(trove=freeze('BuildTrove', self.trove),
              buildCfg=freeze('BuildConfiguration', self.buildCfg),
              builtTroves=freeze('troveTupleList', self.builtTroves),
              crossTroves=freeze('troveTupleList', self.crossTroves),
              inCycle=self.inCycle)
     return d
Example #5
0
 def __freeze__(self):
     return dict(hostname=self.hostname,
                 flavors=[freeze('flavor', x) for x in self.flavors],
                 name=self.name,
                 active=self.active,
                 slots=self.slots,
                 chroots=[freeze('Chroot', x) for x in self.chroots])
Example #6
0
 def freeze_JOB_LOADED(class_, apiVer, data):
     return [
         data[0],
         [(freeze('troveContextTuple',
                  trove), freeze('LoadTroveResult', result))
          for (trove, result) in data[1].iteritems()]
     ]
Example #7
0
 def __freeze__(self):
     d = dict(trove=freeze('BuildTrove', self.trove),
              buildCfg=freeze('BuildConfiguration', self.buildCfg),
              builtTroves=freeze('troveTupleList', self.builtTroves),
              crossTroves=freeze('troveTupleList', self.crossTroves),
              inCycle=self.inCycle)
     return d
Example #8
0
 def __freeze__(self):
     return {
             'session_id': self.session_id,
             'jobs': freeze('ImageJobs', self.jobs),
             'slots': self.slots,
             'machine_info': freeze('MachineInformation',
                 self.machine_info),
             }
Example #9
0
 def __freeze__(self):
     d = self.__dict__.copy()
     d.update(missingBuildReqs=[(x[0], freeze("troveSpec", x[1])) for x in self.missingBuildReqs])
     d.update(buildReqs=freeze("installJobList", self.buildReqs))
     d.update(crossReqs=freeze("installJobList", self.crossReqs))
     d.update(bootstrapReqs=freeze("installJobList", self.bootstrapReqs))
     d.update(missingDeps=freeze("dependencyMissingList", self.missingDeps))
     return d
Example #10
0
 def payloadToDict(self):
     job = freeze('BuildJob', self.payload.job)
     loadTroves = [
         freeze('troveContextTuple', x) for x in self.payload.loadTroves
     ]
     return dict(job=job,
                 loadTroves=loadTroves,
                 reposName=self.payload.reposName)
Example #11
0
 def payloadToDict(self):
     buildCfg = freeze('BuildConfiguration', self.payload.buildCfg)
     trove = freeze('BuildTrove', self.payload.trove)
     d = dict(buildCfg=buildCfg,
              trove=trove,
              logData=self.payload.logData)
     if self.payload.logData is None:
         d['logData'] = ''
     return d
Example #12
0
 def __freeze__(self):
     d = self.__dict__.copy()
     d.update(missingBuildReqs=[(x[0], freeze('troveSpec', x[1]))
                                for x in self.missingBuildReqs])
     d.update(buildReqs=freeze('installJobList', self.buildReqs))
     d.update(crossReqs=freeze('installJobList', self.crossReqs))
     d.update(bootstrapReqs=freeze('installJobList', self.bootstrapReqs))
     d.update(missingDeps=freeze('dependencyMissingList', self.missingDeps))
     return d
Example #13
0
 def __freeze__(self):
     d = self.__dict__.copy()
     d['pid'] = self.pid
     d['version'] = str(self.version)
     d['flavorList'] = [ x.freeze() for x in self.flavorList ]
     d['failureReason'] = freeze('FailureReason', self.failureReason)
     return d
Example #14
0
 def __freeze__(self):
     d = self.__dict__.copy()
     if self.troveTuple:
         d['troveTuple'] = freeze('troveTuple', self.troveTuple)
     else:
         d['troveTuple'] = ''
     return d
Example #15
0
 def testFreeze(self):
     cfg = buildcfg.BuildConfiguration(readConfigFiles=False)
     os.environ['HOME'] = self.workDir
     cfg.configLine('policyDirs ~/policy')
     newCfg = apiutils.thaw('BuildConfiguration',
                            apiutils.freeze('BuildConfiguration', cfg))
     assert(newCfg.policyDirs[0]._getUnexpanded() == self.workDir + '/policy')
Example #16
0
 def addJob(self, job):
     cu = self.db.cursor()
     cu.execute(
         "INSERT INTO Jobs (uuid, state, owner) "
         "VALUES ( ?, ?, ? )", job.uuid, job.state, job.owner)
     jobId = int(cu.lastrowid)
     for trove in job.iterTroves():
         trove.jobId = jobId
         (troveName, version, flavor,
          context) = trove.getNameVersionFlavor(True)
         cu.execute(
             """INSERT INTO BuildTroves
                    (jobId, troveName, version, flavor,
                     state, context, buildType, troveType)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?)""",
             (jobId, troveName, version.freeze(), flavor.freeze(),
              TROVE_STATE_INIT, context, trove.buildType, trove.troveType))
         troveId = cu.lastrowid
         className, settings = freeze('TroveSettings', trove.settings)
         settings['_class'] = [className]
         for key, values in settings.iteritems():
             for idx, value in enumerate(values):
                 cu.execute(
                     '''INSERT INTO TroveSettings
                               (jobId, troveId, key, ord, value)
                               VALUES (?, ?, ?, ?, ?)''', jobId, troveId,
                     key, idx, value)
     for context, jobConfig in job.getConfigDict().items():
         self.addJobConfig(jobId, context, jobConfig)
     self.db.commit()
     job.jobId = jobId
     return jobId
Example #17
0
 def testJob(self):
     db = self.openRmakeDatabase()
     trv = self.addComponent('foo:source', '1.0', '!flavor')
     job = buildjob.NewBuildJob(db, [trv.getNameVersionFlavor()])
     job2 = apiutils.thaw('BuildJob', apiutils.freeze('BuildJob', job))
     assert(job2.jobId ==  job.jobId)
     assert(list(job2.iterTroveList()) == list(job.iterTroveList()))
Example #18
0
 def testJob(self):
     db = self.openRmakeDatabase()
     trv = self.addComponent('foo:source', '1.0', '!flavor')
     job = buildjob.NewBuildJob(db, [trv.getNameVersionFlavor()])
     job2 = apiutils.thaw('BuildJob', apiutils.freeze('BuildJob', job))
     assert (job2.jobId == job.jobId)
     assert (list(job2.iterTroveList()) == list(job.iterTroveList()))
Example #19
0
 def listTrovesByState(self, callData, jobId, state):
     jobId = self.db.convertToJobId(jobId)
     if state == '':
         state = None
     data = self.db.listTrovesByState(jobId, state)
     return [(x[0], freeze('troveContextTupleList', x[1]))
             for x in data.iteritems()]
Example #20
0
 def __freeze__(self):
     d = self.__dict__.copy()
     d['pid'] = self.pid
     d['version'] = str(self.version)
     d['flavorList'] = [x.freeze() for x in self.flavorList]
     d['failureReason'] = freeze('FailureReason', self.failureReason)
     return d
Example #21
0
 def addJob(self, job):
     cu = self.db.cursor()
     cu.execute("INSERT INTO Jobs (uuid, state, owner) "
                "VALUES ( ?, ?, ? )",
                job.uuid, job.state, job.owner)
     jobId = int(cu.lastrowid)
     for trove in job.iterTroves():
         trove.jobId = jobId
         (troveName, version,
             flavor, context) = trove.getNameVersionFlavor(True)
         cu.execute("""INSERT INTO BuildTroves
                    (jobId, troveName, version, flavor,
                     state, context, buildType, troveType)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?)""", (
             jobId, troveName, version.freeze(),
             flavor.freeze(), TROVE_STATE_INIT, context,
             trove.buildType, trove.troveType))
         troveId = cu.lastrowid
         className, settings = freeze('TroveSettings', trove.settings)
         settings['_class'] = [className]
         for key, values in settings.iteritems():
             for idx, value in enumerate(values):
                 cu.execute('''INSERT INTO TroveSettings
                               (jobId, troveId, key, ord, value)
                               VALUES (?, ?, ?, ?, ?)''', jobId, troveId,
                                                          key, idx, value)
     for context, jobConfig in job.getConfigDict().items():
         self.addJobConfig(jobId, context, jobConfig)
     self.db.commit()
     job.jobId = jobId
     return jobId
Example #22
0
 def put(self, result):
     if not result.jobHash:
         return
     path = os.path.join(self.path, result.jobHash)
     result = freeze('ResolveResult', result)
     fobj = util.AtomicFile(path, chmod=0644)
     fobj.write(xmlrpclib.dumps((result,)))
     fobj.commit()
Example #23
0
    def updateTrove(self, trove):
        cu = self.db.cursor()

        if trove.getChrootHost():
            chrootId = self.db._getChrootIdForTrove(trove)
        else:
            chrootId = 0

        failureTup = freeze('FailureReason', trove.getFailureReason())
        if failureTup[0] == '':
            failureTup = None, None
        kw = dict(pid=trove.pid,
                  start=trove.start,
                  finish=trove.finish,
                  logPath=trove.logPath,
                  status=trove.status,
                  state=trove.state,
                  failureReason=failureTup[0],
                  failureData=cu.binary(failureTup[1]),
                  recipeType=trove.recipeType,
                  buildType=trove.buildType,
                  chrootId=chrootId)
        fieldList = '=?, '.join(kw) + '=?'
        valueList = kw.values()
        valueList += (trove.jobId, trove.getName(),
                      trove.getVersion().freeze(), trove.getFlavor().freeze(),
                      trove.getContext())

        cu.execute(
            """UPDATE BuildTroves
                      SET %s
                      WHERE jobId=? AND troveName=? AND version=? 
                            AND flavor=? AND context=?
                   """ % fieldList, valueList)
        troveId = self._getTroveId(cu, trove.jobId,
                                   *trove.getNameVersionFlavor(True))
        className, settings = freeze('TroveSettings', trove.settings)
        settings['_class'] = [className]
        cu.execute('DELETE FROM TroveSettings WHERE troveId=?', troveId)
        for key, values in settings.iteritems():
            for idx, value in enumerate(values):
                cu.execute(
                    '''INSERT INTO TroveSettings
                              (jobId, troveId, key, ord, value)
                              VALUES (?, ?, ?, ?, ?)''', trove.jobId, troveId,
                    key, idx, value)
Example #24
0
 def testFreeze(self):
     cfg = buildcfg.BuildConfiguration(readConfigFiles=False)
     os.environ['HOME'] = self.workDir
     cfg.configLine('policyDirs ~/policy')
     newCfg = apiutils.thaw('BuildConfiguration',
                            apiutils.freeze('BuildConfiguration', cfg))
     assert (newCfg.policyDirs[0]._getUnexpanded() == self.workDir +
             '/policy')
Example #25
0
    def __freeze__(self, sanitize=False):
        d = {}
        for attr, attrType in self.attrTypes.iteritems():
            d[attr] = freeze(attrType, getattr(self, attr))
        if self.jobId is None:
            d['jobId'] = ''

        d['troves'] = [(freeze('troveContextTuple',
                               x[0]), x[1] and freeze('BuildTrove', x[1])
                        or '') for x in self.troves.iteritems()]
        if sanitize:
            freezeClass = 'SanitizedBuildConfiguration'
        else:
            freezeClass = 'BuildConfiguration'
        d['configs'] = [(x[0], freeze(freezeClass, x[1]))
                        for x in self.configs.items()]
        return d
Example #26
0
 def __freeze__(self):
     d = {}
     for attr, attrType in self.attrTypes.iteritems():
         d[attr] = freeze(attrType, getattr(self, attr))
     d['packages'] = list(d['packages'])
     if self.jobId is None:
         d['jobId'] = ''
     return d
Example #27
0
    def __freeze__(self, sanitize=False):
        d = {}
        for attr, attrType in self.attrTypes.iteritems():
            d[attr] = freeze(attrType, getattr(self, attr))
        if self.jobId is None:
            d['jobId'] = ''

        d['troves'] = [ (freeze('troveContextTuple', x[0]),
                         x[1] and freeze('BuildTrove', x[1]) or '')
                        for x in self.troves.iteritems() ]
        if sanitize:
            freezeClass = 'SanitizedBuildConfiguration'
        else:
            freezeClass = 'BuildConfiguration'
        d['configs'] = [ (x[0], freeze(freezeClass, x[1]))
                              for x in self.configs.items() ]
        return d
Example #28
0
 def put(self, result):
     if not result.jobHash:
         return
     path = os.path.join(self.path, result.jobHash)
     result = freeze('ResolveResult', result)
     fobj = util.AtomicFile(path, chmod=0644)
     fobj.write(xmlrpclib.dumps((result,)))
     fobj.commit()
Example #29
0
def _freezeException(err):
    try:
        frzMethod = None
        errorClass = err.__class__
        if apiutils.canHandle(str(errorClass), err):
            frzMethod = str(errorClass)
        elif apiutils.canHandle(errorClass.__name__, err):
            frzMethod = errorClass.__name__
        else:
            frzMethod = 'Exception'
        return frzMethod, apiutils.freeze(frzMethod, err)
    except Exception, err2:
        if frzMethod == 'Exception':
            raise
        err = err2
        frzMethod = 'Exception'
        return frzMethod, apiutils.freeze(frzMethod, err)
    def testTroveSettings(self):
        class MyTroveSettings(trovesettings.TroveSettings):
            cfgOption = cfgtypes.CfgString 

        xx = MyTroveSettings()
        xx.cfgOption = 'foobar'
        yy = apiutils.thaw('TroveSettings', apiutils.freeze('TroveSettings', xx))
        assert(yy.cfgOption == 'foobar')
Example #31
0
def _freezeException(err):
    try:
        frzMethod = None
        errorClass = err.__class__
        if apiutils.canHandle(str(errorClass), err):
            frzMethod = str(errorClass)
        elif apiutils.canHandle(errorClass.__name__, err):
            frzMethod = errorClass.__name__
        else:
            frzMethod = 'Exception'
        return frzMethod, apiutils.freeze(frzMethod, err)
    except Exception, err2:
        if frzMethod == 'Exception':
            raise
        err = err2
        frzMethod = 'Exception'
        return frzMethod, apiutils.freeze(frzMethod, err)
Example #32
0
 def __freeze__(self):
     d = {}
     for attr, attrType in self.attrTypes.iteritems():
         d[attr] = freeze(attrType, getattr(self, attr))
     d["packages"] = list(d["packages"])
     if self.jobId is None:
         d["jobId"] = ""
     return d
Example #33
0
 def __freeze__(self):
     d = {}
     for attr, attrType in self.attrTypes.iteritems():
         d[attr] = freeze(attrType, getattr(self, attr))
     d['packages'] = list(d['packages'])
     if self.jobId is None:
         d['jobId'] = ''
     return d
Example #34
0
def _buildFailed(failureFd, errMsg, traceBack=''):
    log.error(errMsg)
    frz = '\002'.join(str(x) for x in freeze('FailureReason',
                                BuildFailed(errMsg, traceBack)))
    if failureFd is not None:
        os.write(failureFd, frz)
        os.close(failureFd)
    os._exit(1)
Example #35
0
    def updateTrove(self, trove):
        cu = self.db.cursor()

        if trove.getChrootHost():
            chrootId = self.db._getChrootIdForTrove(trove)
        else:
            chrootId = 0

        failureTup = freeze('FailureReason', trove.getFailureReason())
        if failureTup[0] == '':
            failureTup = None, None
        kw = dict(pid=trove.pid, 
                  start=trove.start,
                  finish=trove.finish,
                  logPath=trove.logPath,
                  status=trove.status,
                  state=trove.state,
                  failureReason=failureTup[0],
                  failureData=cu.binary(failureTup[1]),
                  recipeType=trove.recipeType,
                  buildType=trove.buildType,
                  chrootId=chrootId)
        fieldList = '=?, '.join(kw) + '=?'
        valueList = kw.values()
        valueList += (trove.jobId, trove.getName(),
                      trove.getVersion().freeze(),
                      trove.getFlavor().freeze(),
                      trove.getContext())

        cu.execute("""UPDATE BuildTroves
                      SET %s
                      WHERE jobId=? AND troveName=? AND version=? 
                            AND flavor=? AND context=?
                   """ % fieldList, valueList)
        troveId = self._getTroveId(cu, trove.jobId,
                                   *trove.getNameVersionFlavor(True))
        className, settings = freeze('TroveSettings', trove.settings)
        settings['_class'] = [className]
        cu.execute('DELETE FROM TroveSettings WHERE troveId=?', troveId)
        for key, values in settings.iteritems():
            for idx, value in enumerate(values):
                cu.execute('''INSERT INTO TroveSettings
                              (jobId, troveId, key, ord, value)
                              VALUES (?, ?, ?, ?, ?)''', trove.jobId, troveId,
                                                         key, idx, value)
Example #36
0
def _buildFailed(failureFd, errMsg, traceBack=''):
    log.error(errMsg)
    frz = '\002'.join(
        str(x)
        for x in freeze('FailureReason', BuildFailed(errMsg, traceBack)))
    if failureFd is not None:
        os.write(failureFd, frz)
        os.close(failureFd)
    os._exit(1)
Example #37
0
    def payloadToDict(self):
        buildCfg = freeze('BuildConfiguration', self.payload.buildCfg)
        trove = freeze('BuildTrove', self.payload.trove)
        targetLabel = freeze('label', self.payload.targetLabel)
        builtTroves = freeze('troveTupleList', self.payload.builtTroves)
        d = dict(buildCfg=buildCfg,
                 trove=trove,
                 targetLabel=targetLabel,
                 builtTroves=builtTroves,
                 logData=self.payload.logData)

        for name in ('buildReqs', 'crossReqs', 'bootstrapReqs'):
            tuples = [((x[0],) + x[2]) for x in getattr(self.payload, name)]
            d[name] = freeze('troveTupleList', tuples)

        if self.payload.logData is None:
            d['logData'] = ''
        return d
Example #38
0
    def payloadToDict(self):
        buildCfg = freeze('BuildConfiguration', self.payload.buildCfg)
        trove = freeze('BuildTrove', self.payload.trove)
        targetLabel = freeze('label', self.payload.targetLabel)
        builtTroves = freeze('troveTupleList', self.payload.builtTroves)
        d = dict(buildCfg=buildCfg,
                 trove=trove,
                 targetLabel=targetLabel,
                 builtTroves=builtTroves,
                 logData=self.payload.logData)

        for name in ('buildReqs', 'crossReqs', 'bootstrapReqs'):
            tuples = [((x[0], ) + x[2]) for x in getattr(self.payload, name)]
            d[name] = freeze('troveTupleList', tuples)

        if self.payload.logData is None:
            d['logData'] = ''
        return d
Example #39
0
    def testTroveSettings(self):
        class MyTroveSettings(trovesettings.TroveSettings):
            cfgOption = cfgtypes.CfgString

        xx = MyTroveSettings()
        xx.cfgOption = 'foobar'
        yy = apiutils.thaw('TroveSettings',
                           apiutils.freeze('TroveSettings', xx))
        assert (yy.cfgOption == 'foobar')
Example #40
0
    def commitSucceeded(self, commitMap):
        """
            Notify server that a job successfully committed.

            @param commitMap: jobId -> troveTuple -> binaries
            Mapping from jobId -> build trove -> list of binaries created by
            that build trove.
            @type troveTupleList: {int : {troveTuple : [troveTuple]}} dict.
            @raises: JobNotFound if job does not exist.
        """
        jobIds = []
        finalMap = []
        for jobId, troveMap in commitMap.items():
            troveMap = [ (freeze('troveContextTuple', x[0]),
                          freeze('troveTupleList', x[1]))
                          for x in troveMap.items() ]
            finalMap.append(troveMap)
            jobIds.append(jobId)
        self.proxy.commitSucceeded(jobIds, finalMap)
Example #41
0
    def commitSucceeded(self, commitMap):
        """
            Notify server that a job successfully committed.

            @param commitMap: jobId -> troveTuple -> binaries
            Mapping from jobId -> build trove -> list of binaries created by
            that build trove.
            @type troveTupleList: {int : {troveTuple : [troveTuple]}} dict.
            @raises: JobNotFound if job does not exist.
        """
        jobIds = []
        finalMap = []
        for jobId, troveMap in commitMap.items():
            troveMap = [(freeze('troveContextTuple',
                                x[0]), freeze('troveTupleList', x[1]))
                        for x in troveMap.items()]
            finalMap.append(troveMap)
            jobIds.append(jobId)
        self.proxy.commitSucceeded(jobIds, finalMap)
Example #42
0
    def addTrove(self, trove):
        cu = self.db.cursor()
        if not trove.logPath:
            trove.logPath = self.db.logStore.hashTrove(trove)

        failureTup = freeze('FailureReason', trove.getFailureReason())
        if failureTup[0] == '':
            failureTup = None, None
        kw = dict(jobId=trove.jobId,
                  troveName=trove.getName(),
                  version=trove.getVersion().freeze(),
                  flavor=trove.getFlavor().freeze(),
                  pid=trove.pid,
                  start=trove.start,
                  finish=trove.finish,
                  logPath=trove.logPath,
                  recipeType=trove.recipeType,
                  status=trove.status,
                  state=trove.state,
                  failureReason=failureTup[0],
                  failureData=cu.binary(failureTup[1]),
                  buildType=trove.buildType,
                  troveType=trove.troveType,
                  context=trove.getContext())
        fieldList = ', '.join(kw.keys())
        valueList = kw.values()
        qList = ','.join('?' for x in xrange(len(kw.keys())))

        cu.execute(
            """INSERT INTO BuildTroves
                      (%s) VALUES (%s)
                   """ % (fieldList, qList), valueList)
        troveId = cu.lastrowid
        className, settings = freeze('TroveSettings', trove.settings)
        settings['_class'] = [className]
        for key, values in settings.iteritems():
            for idx, value in enumerate(values):
                cu.execute(
                    '''INSERT INTO TroveSettings
                              (jobId, troveId, key, ord, value)
                              VALUES (?, ?, ?, ?, ?)''', trove.jobId, troveId,
                    key, idx, value)
Example #43
0
    def testRegisterFreezableClassmap(self):
        class Freezable(object):
            def __freeze__(self):
                return {}

            @classmethod
            def __thaw__(class_, d):
                return class_()

        class Foo(Freezable):
            pass

        class Bar(Freezable):
            pass

        apiutils.register_freezable_classmap("mytype", Foo)
        apiutils.register_freezable_classmap("mytype", Bar)

        assert apiutils.thaw("mytype", apiutils.freeze("mytype", Foo())).__class__ == Foo
        assert apiutils.thaw("mytype", apiutils.freeze("mytype", Bar())).__class__ == Bar
Example #44
0
 def startChrootSession(self, chrootPath, command, superUser=False, 
                        buildTrove=None):
     """
         Starts a chroot session on the given node.
     """
     if buildTrove is None:
         buildTrove = ''
     else:
         buildTrove = freeze('BuildTrove', buildTrove)
     return self.proxy.startChrootSession(chrootPath, command, superUser, 
                                         buildTrove)
Example #45
0
 def listChroots(self, callData):
     chroots = self.db.listChroots()
     chrootNames = self.worker.listChrootsWithHost()
     finalChroots = []
     for chroot in chroots:
         if (chroot.host, chroot.path) not in chrootNames:
             # this has been removed from the file system
             self.db.removeChroot(chroot.host, chroot.path)
         else:
             finalChroots.append(chroot)
     return [ freeze('Chroot', x) for x in finalChroots ]
Example #46
0
 def addJobConfig(self, jobId, context, jobConfig):
     cu = self.db.cursor()
     cu.execute('DELETE FROM JobConfig where jobId=? and context=?', jobId,
                 context)
     d = freeze('BuildConfiguration', jobConfig)
     for key, values in d.iteritems():
         for idx, value in enumerate(values):
             cu.execute('''INSERT INTO JobConfig 
                           (jobId, context, key, ord, value)
                           VALUES (?, ?, ?, ?, ?)''', jobId, context, key,
                                                   idx, value)
Example #47
0
 def testBuildTrove(self):
     trv = self.addComponent('blah:source', '1.0')
     bt = buildtrove.BuildTrove(1, trv.getName(), trv.getVersion(),
                                trv.getFlavor())
     f = failure.MissingDependencies([(trv.getNameVersionFlavor(),
                           deps.parseDep('trove: blam trove:foo'))])
     bt.setFailureReason(f)
     frz = apiutils.freeze('BuildTrove', bt)
     bt2 = apiutils.thaw('BuildTrove', frz)
     assert(bt2.getFailureReason() == bt.getFailureReason())
     assert(bt2.getFlavor() == bt.getFlavor())
Example #48
0
 def __freeze__(loadSpecs):
     d = {}
     stack = [(loadSpecs, d)]
     while stack:
         loadDict, frozenDict = stack.pop()
         for spec, (troveTup, subLoadDict) in loadDict.iteritems():
             newFrzDict = {}
             frozenDict[spec] = (freeze("troveTuple", troveTup), newFrzDict)
             if subLoadDict:
                 stack.append((subLoadDict, newFrzDict))
     return d
Example #49
0
 def __freeze__(loadSpecs):
     d = {}
     stack = [(loadSpecs, d)]
     while stack:
         loadDict, frozenDict = stack.pop()
         for spec, (troveTup, subLoadDict) in loadDict.iteritems():
             newFrzDict = {}
             frozenDict[spec] = (freeze('troveTuple', troveTup), newFrzDict)
             if subLoadDict:
                 stack.append((subLoadDict, newFrzDict))
     return d
Example #50
0
 def updateJob(self, job):
     cu = self.db.cursor()
     failureTup = freeze('FailureReason', job.getFailureReason())
     if failureTup[0] == '':
         failureTup = None, None
     cu.execute("""UPDATE Jobs set pid = ?, state = ?, status = ?, 
                                   start = ?, finish = ?, failureReason = ?, 
                                   failureData = ?
                    WHERE jobId = ?""",
                (job.pid, job.state, job.status, job.start, job.finish, 
                 failureTup[0], cu.binary(failureTup[1]), job.jobId))
Example #51
0
 def listChroots(self, callData):
     chroots = self.db.listChroots()
     chrootNames = self.worker.listChrootsWithHost()
     finalChroots = []
     for chroot in chroots:
         if (chroot.host, chroot.path) not in chrootNames:
             # this has been removed from the file system
             self.db.removeChroot(chroot.host, chroot.path)
         else:
             finalChroots.append(chroot)
     return [freeze('Chroot', x) for x in finalChroots]
Example #52
0
 def addJobConfig(self, jobId, context, jobConfig):
     cu = self.db.cursor()
     cu.execute('DELETE FROM JobConfig where jobId=? and context=?', jobId,
                 context)
     d = freeze('BuildConfiguration', jobConfig)
     for key, values in d.iteritems():
         for idx, value in enumerate(values):
             cu.execute('''INSERT INTO JobConfig 
                           (jobId, context, key, ord, value)
                           VALUES (?, ?, ?, ?, ?)''', jobId, context, key,
                                                   idx, value)
Example #53
0
 def updateJob(self, job):
     cu = self.db.cursor()
     failureTup = freeze('FailureReason', job.getFailureReason())
     if failureTup[0] == '':
         failureTup = None, None
     cu.execute("""UPDATE Jobs set pid = ?, state = ?, status = ?, 
                                   start = ?, finish = ?, failureReason = ?, 
                                   failureData = ?
                    WHERE jobId = ?""",
                (job.pid, job.state, job.status, job.start, job.finish, 
                 failureTup[0], cu.binary(failureTup[1]), job.jobId))
Example #54
0
    def __freeze__(class_, eventList):
        apiVer, eventList = eventList
        newEventList = []
        for ((event, subevent), data) in eventList:
            if not isinstance(data[0], int):
                data = [(data[0][0], freeze('troveContextTuple', data[0][1]))] + data[1:]
            fn = getattr(class_, 'freeze_' + event, None)
            if fn is not None:
                data = fn(apiVer, data)

            newEventList.append(((event, subevent), data))
        return apiVer, newEventList
Example #55
0
    def addTrove(self, trove):
        cu = self.db.cursor()
        if not trove.logPath:
            trove.logPath = self.db.logStore.hashTrove(trove)

        failureTup = freeze('FailureReason', trove.getFailureReason())
        if failureTup[0] == '':
            failureTup = None, None
        kw = dict(jobId=trove.jobId,
                  troveName=trove.getName(),
                  version=trove.getVersion().freeze(),
                  flavor=trove.getFlavor().freeze(),
                  pid=trove.pid,
                  start=trove.start,
                  finish=trove.finish,
                  logPath=trove.logPath,
                  recipeType=trove.recipeType,
                  status=trove.status,
                  state=trove.state,
                  failureReason=failureTup[0],
                  failureData=cu.binary(failureTup[1]),
                  buildType=trove.buildType,
                  troveType=trove.troveType,
                  context=trove.getContext())
        fieldList = ', '.join(kw.keys())
        valueList = kw.values()
        qList = ','.join('?' for x in xrange(len(kw.keys())))

        cu.execute("""INSERT INTO BuildTroves
                      (%s) VALUES (%s)
                   """ % (fieldList, qList), valueList)
        troveId = cu.lastrowid
        className, settings = freeze('TroveSettings', trove.settings)
        settings['_class'] = [className]
        for key, values in settings.iteritems():
            for idx, value in enumerate(values):
                cu.execute('''INSERT INTO TroveSettings
                              (jobId, troveId, key, ord, value)
                              VALUES (?, ?, ?, ?, ?)''', trove.jobId, troveId,
                                                         key, idx, value)
Example #56
0
 def testBuildTrove(self):
     trv = self.addComponent('blah:source', '1.0')
     bt = buildtrove.BuildTrove(1, trv.getName(), trv.getVersion(),
                                trv.getFlavor())
     f = failure.MissingDependencies([
         (trv.getNameVersionFlavor(),
          deps.parseDep('trove: blam trove:foo'))
     ])
     bt.setFailureReason(f)
     frz = apiutils.freeze('BuildTrove', bt)
     bt2 = apiutils.thaw('BuildTrove', frz)
     assert (bt2.getFailureReason() == bt.getFailureReason())
     assert (bt2.getFlavor() == bt.getFlavor())
Example #57
0
 def checkResults(self, callData, name, version, flavorList, wait):
     flavorList = tuple(flavorList)
     if (name, version, flavorList) in self._results:
         results = self._results[name, version, flavorList]
     else:
         timeSpent = 0
         buildInfo = self._buildInfo[name, version, flavorList]
         while True:
             results = cook.getResults(*buildInfo)
             if results:
                 break
             elif wait and timeSpent < wait:
                 time.sleep(.1)
                 timeSpent += .1
             else:
                 return ''
         del self._buildInfo[name, version, flavorList]
     return freeze(cook.CookResults, results)