コード例 #1
0
    def collect_task_updates(self):
        """ Update the stories since the last time this method was called.
        """
        def getLastUpdated(project_id, version):
            new_last_updated = datetime.datetime.now() - datetime.timedelta(seconds=self.overlap_seconds)
            last_updated = self._get_last_updated(project_id, version)
            self._set_last_updated(new_last_updated, project_id, version)
            if __debug__:
                logger.debug('%s-%s: %s' % (project_id, version, last_updated))
            return last_updated

        for project_id in self.project_ids:
            last_updated = getLastUpdated(project_id, 'v3')
            activitiesxml = pt_api.get_project_activities_v3(project_id, last_updated, self.token)
            if activitiesxml is not None:
                activities = [activityxml for activityxml in activitiesxml.iterchildren()]
                activities.sort(key=operator.attrgetter('occurred_at'))
                for activityxml in activities:
                    self.process_activity(activityxml)

            last_updated = getLastUpdated(project_id, 'v4')
            activitiesxml = pt_api.get_project_activities(project_id, last_updated, self.token)
            if activitiesxml is not None:
                activities = [activityxml for activityxml in activitiesxml.iterchildren()]
                activities.sort(key=operator.attrgetter('occurred_at'))
                for activityxml in activities:
                    if activityxml.event_type in ['task_delete', 'task_edit', 'task_create', 'comment_delete']:
                        if __debug__:
                            logger.debug(pt_api.to_str(activityxml))
                        logger.info(activityxml.event_type)
                        self.process_activity(activityxml)
コード例 #2
0
    def process_activity(self, activity):
        ''' To be run in a thread, process all the activities in the queue
        '''
        with self.update_lock:
            if activity.id in self.processed_activities:
                if __debug__:
                    logger.debug('Ignoring repeat activity %s.' % activity.id)
                    return
            if __debug__:
                logger.debug(pt_api.to_str(activity))
            logger.info('--------------------')
            logger.info('')
            logger.info('--------------------')
            logger.info(activity.event_type)
            logger.info(activity.description)
            self.processed_activities.append(activity.id)
            if activity.event_type in ['story_update', 'move_into_project']:
                for storyxml in activity.stories.iterchildren():
                    story = self.getStory(storyxml)
                    if story:
                        logger.info('%s: %s' % (activity.event_type, storyxml.id))
                        story.update(activity, storyxml)
                        logger.info("<Updated Story> %s:%s" % (story.id, story.description))

            elif activity.event_type == 'story_create':
                for storyxml in activity.stories.iterchildren():
                    logger.info('%s: %s' % (activity.event_type, storyxml.id))
                    story = Story.create(activity.project_id, storyxml)
                    self.stories[story.id] = story
                    logger.info("<Added Story> %s:%s" % (story.id, story.description))

            elif activity.event_type in ['story_delete', 'multi_story_delete']:
                for storyxml in activity.stories.iterchildren():
                    logger.info('%s: %s' % (activity.event_type, storyxml.id))
                    story = self.getStory(storyxml)
                    if story:
                        del self.stories[storyxml.id]
                        logger.info("<Deleted Story> %s:%s" % (story.id, story.description))
            elif activity.event_type == 'note_create':
                for storyxml in activity.stories.iterchildren():
                    logger.info('%s: %s' % (activity.event_type, storyxml.id))
                    story = self.getStory(storyxml)
                    if story:
                        for notexml in storyxml.notes.iterchildren():
                            note = Note(notexml.id, notexml['text'].text, activity.author, activity.occurred_at)
                            story.notes[note.id] = note
                            logger.info("<Created Note> %s:%s" % (note.id, note.text))

            elif activity.event_type == 'task_create':
                        for storyxml in activity.stories.iterchildren():
                            logger.info('%s: %s' % (activity.event_type, storyxml.id))
                            story = self.getStory(storyxml)
                            if story:
                                for taskxml in storyxml.tasks.iterchildren():
                                    position = getattr(taskxml, 'position', None)
                                    complete = getattr(taskxml, 'complete', False)
                                    created_at = getattr(taskxml, 'created_at', None)
                                    task = Task(taskxml.id, taskxml.description, created_at, position=position, complete=complete)
                                    story.tasks[task.id] = task
                                    logger.info("<Created Task> %s:%s" % (task.id, task.description))

            elif activity.event_type == 'task_edit':
                for storyxml in activity.stories.iterchildren():
                    story = self.getStory(storyxml)
                    if story:
                        logger.info('%s: %s' % (activity.event_type, storyxml.id))
                        for taskxml in storyxml.tasks.iterchildren():
                            task = self.getTask(story, taskxml)
                            if task:
                                task.update(taskxml)
                                logger.info("<Updated Task> %s:%s" % (task.id, task.description))

            elif activity.event_type == 'task_delete':
                for storyxml in activity.stories.iterchildren():
                    story = self.getStory(storyxml)
                    if story:
                        logger.info('%s: %s' % (activity.event_type, storyxml.id))
                        for taskxml in storyxml.tasks.iterchildren():
                            task = self.getTask(story, taskxml)
                            if task:
                                del story.tasks[taskxml.id]
                                logger.info("<Deleted Task> %s:%s" % (task.id, task.description))

            elif activity.event_type == 'comment_delete':
                for storyxml in activity.stories.iterchildren():
                    story = self.getStory(storyxml)
                    if story:
                        logger.info('%s: %s' % (activity.event_type, storyxml.id))
                        for commentxml in storyxml.comments.iterchildren():
                            if commentxml.id in story.notes:
                                note = story.notes[commentxml.id]
                                del story.notes[commentxml.id]
                                logger.info("<Deleted Note> %s:%s" % (note.id, note.text))
                            else:
                                self.log_unknown_comment(commentxml)

            elif activity.event_type in ['move_from_project']:
                # because all the projects are mixed together move_from_project event_type can be ignored
                pass

            else:
                logger.warning('Unknown event type: %s' % activity.event_type)
                if __debug__:
                    logger.debug(pt_api.to_str(activity))
コード例 #3
0
 def log_unknown_task(self, taskxml):
         logger.warning('Task unknown: %s' % taskxml.id)
         if __debug__:
             logger.debug(pt_api.to_str(taskxml))
コード例 #4
0
 def log_unknown_comment(self, commentxml):
         logger.warning('Comment unknown: %s' % commentxml.id)
         if __debug__:
             logger.debug(pt_api.to_str(commentxml))
コード例 #5
0
 def log_unknown_story(self, storyxml):
         logger.warning('Story unknown: %s' % storyxml.id)
         if __debug__:
             logger.debug(pt_api.to_str(storyxml))