コード例 #1
0
ファイル: job.py プロジェクト: pombredanne/launchpad-3
    def get(ujob_id):
        """Return the named job database class.

        :param ujob_id: A tuple of Job.id, module name, class name for the
            class to retrieve.
        Return derived job class.
        """
        job_id, module_name, class_name = ujob_id
        bc_module = __import__(module_name, fromlist=[class_name])
        db_class = getattr(bc_module, class_name)
        factory = getattr(db_class, 'makeInstance', None)
        if factory is not None:
            return factory(job_id)
        # This method can be called with two distinct types of Jobs:
        # - Jobs that are backed by a DB table with a foreign key onto Job.
        # - Jobs that have no backing, and are only represented by a row in
        #   the Job table, but the class name we are given is the abstract
        #   job class.
        # If there is no __storm_table__, it is the second type, and we have
        # to look it up via the Job table.
        if getattr(db_class, '__storm_table__', None) is None:
            db_job = IStore(Job).find(Job, Job.id == job_id).one()
            # Job.makeDerived() would be a mess of circular imports, so it is
            # cleaner to just return the bare Job wrapped in the class.
            return db_class(db_job)
        # Otherwise, we have the concrete DB class, so use its FK.
        db_job = IStore(db_class).find(db_class, db_class.job == job_id).one()
        if db_job is None:
            return None
        return db_job.makeDerived()
コード例 #2
0
ファイル: job.py プロジェクト: vitaminmoo/unnaturalcode
    def get(ujob_id):
        """Return the named job database class.

        :param ujob_id: A tuple of Job.id, module name, class name for the
            class to retrieve.
        Return derived job class.
        """
        job_id, module_name, class_name = ujob_id
        bc_module = __import__(module_name, fromlist=[class_name])
        db_class = getattr(bc_module, class_name)
        factory = getattr(db_class, "makeInstance", None)
        if factory is not None:
            return factory(job_id)
        # This method can be called with two distinct types of Jobs:
        # - Jobs that are backed by a DB table with a foreign key onto Job.
        # - Jobs that have no backing, and are only represented by a row in
        #   the Job table, but the class name we are given is the abstract
        #   job class.
        # If there is no __storm_table__, it is the second type, and we have
        # to look it up via the Job table.
        if getattr(db_class, "__storm_table__", None) is None:
            db_job = IStore(Job).find(Job, Job.id == job_id).one()
            # Job.makeDerived() would be a mess of circular imports, so it is
            # cleaner to just return the bare Job wrapped in the class.
            return db_class(db_job)
        # Otherwise, we have the concrete DB class, so use its FK.
        db_job = IStore(db_class).find(db_class, db_class.job == job_id).one()
        if db_job is None:
            return None
        return db_job.makeDerived()
コード例 #3
0
 def test_mergeProposalMergeDetected(self):
     # A merge proposal that is merged has the proposal itself marked as
     # merged, and the source branch lifecycle status set as merged.
     product = self.factory.makeProduct()
     proposal = self.factory.makeBranchMergeProposal(product=product)
     product.development_focus.branch = proposal.target_branch
     self.assertNotEqual(BranchMergeProposalStatus.MERGED,
                         proposal.queue_status)
     self.assertNotEqual(BranchLifecycleStatus.MERGED,
                         proposal.source_branch.lifecycle_status)
     _, [event] = self.assertNotifies([ObjectModifiedEvent], True,
                                      mergedetection.merge_detected,
                                      logging.getLogger(),
                                      proposal.source_branch,
                                      proposal.target_branch, proposal)
     self.assertEqual(BranchMergeProposalStatus.MERGED,
                      proposal.queue_status)
     self.assertEqual(BranchLifecycleStatus.MERGED,
                      proposal.source_branch.lifecycle_status)
     self.assertEqual(proposal, event.object)
     self.assertEqual(BranchMergeProposalStatus.WORK_IN_PROGRESS,
                      event.object_before_modification.queue_status)
     self.assertEqual(BranchMergeProposalStatus.MERGED,
                      event.object.queue_status)
     job = IStore(proposal).find(
         BranchMergeProposalJob,
         BranchMergeProposalJob.branch_merge_proposal == proposal,
         BranchMergeProposalJob.job_type ==
         BranchMergeProposalJobType.MERGE_PROPOSAL_UPDATED).one()
     derived_job = job.makeDerived()
     derived_job.run()
     notifications = pop_notifications()
     self.assertIn('Work in progress => Merged',
                   notifications[0].get_payload(decode=True))
     self.assertEqual(config.canonical.noreply_from_address,
                      notifications[0]['From'])
     recipients = set(msg['x-envelope-to'] for msg in notifications)
     expected = set([
         proposal.source_branch.registrant.preferredemail.email,
         proposal.target_branch.registrant.preferredemail.email
     ])
     self.assertEqual(expected, recipients)
コード例 #4
0
 def test_mergeProposalMergeDetected(self):
     # A merge proposal that is merged has the proposal itself marked as
     # merged, and the source branch lifecycle status set as merged.
     product = self.factory.makeProduct()
     proposal = self.factory.makeBranchMergeProposal(product=product)
     product.development_focus.branch = proposal.target_branch
     self.assertNotEqual(
         BranchMergeProposalStatus.MERGED, proposal.queue_status)
     self.assertNotEqual(
         BranchLifecycleStatus.MERGED,
         proposal.source_branch.lifecycle_status)
     mergedetection.merge_detected(
         logging.getLogger(),
         proposal.source_branch, proposal.target_branch, proposal)
     self.assertEqual(
         BranchMergeProposalStatus.MERGED, proposal.queue_status)
     self.assertEqual(
         BranchLifecycleStatus.MERGED,
         proposal.source_branch.lifecycle_status)
     job = IStore(proposal).find(
         BranchMergeProposalJob,
         BranchMergeProposalJob.branch_merge_proposal == proposal,
         BranchMergeProposalJob.job_type ==
         BranchMergeProposalJobType.MERGE_PROPOSAL_UPDATED).one()
     derived_job = job.makeDerived()
     derived_job.run()
     notifications = pop_notifications()
     self.assertIn('Work in progress => Merged',
                   notifications[0].get_payload(decode=True))
     self.assertEqual(
         config.canonical.noreply_from_address, notifications[0]['From'])
     recipients = set(msg['x-envelope-to'] for msg in notifications)
     expected = set(
         [proposal.source_branch.registrant.preferredemail.email,
          proposal.target_branch.registrant.preferredemail.email])
     self.assertEqual(expected, recipients)