Exemple #1
0
    def _import_comment(self, bug, comment_id, author, timestamp):
        """
        Import comment into `bug'.

        @arg bug btinfo.models.Bug object to import comment for
        @arg comment_id String representing comment ID
        @arg author Jira user
        @arg timestamp String timestamp in iso8601 form

        @returns True if comment was created, otherwise false
        """
        timestamp = str_to_datetime(timestamp)

        name = author['displayName']
        email = author.get('emailAddress', None)

        author = get_participant(name, email)

        _, created = bug.comments.get_or_create(comment_id=comment_id,
                                                defaults={
                                                    'author': author,
                                                    'timestamp': timestamp
                                                })

        if created:
            self.record_timestamp(timestamp)

        return created
Exemple #2
0
    def get_user(self, userdata):
        username = userdata['login']
        try:
            return self.users[username]
        except KeyError:
            pass

        # Sometimes github sends over these keys with null values
        retval = get_participant(
            userdata.get('name') or '',
            userdata.get('email') or '')
        self.users[username] = retval
        return retval
Exemple #3
0
    def get_committer(self, name=None, email=None, userid=None):
        if name is not None:
            name = coerce_unicode(name)

        if email is not None:
            email = coerce_unicode(email)

        if userid is None:
            if name is None or email is None:
                raise TypeError("Either userid must be provided, "
                                "or both name and email must be provided.")

            userid = u"{0} <{1}>".format(name, email)

        else:
            userid = coerce_unicode(userid)
            name = name or ''
            email = email or ''

            if not name and not email:
                name, email = self.parseaddr(userid)
                if not name and '@' not in email:
                    name = email
                    email = ''

        # the following segment is lifted from .get_or_create(), with
        # lazy-constructed Participant.
        try:
            return self.object.committers.get(userid=userid)

        except self.object.committers.model.DoesNotExist:
            # race prone so try again if we fail to create this
            # basically a manual get_or_create with deferred
            try:
                with transaction.atomic():
                    participant = get_participant(name, email)
                    return self.object \
                               .committers \
                               .create(participant=participant,
                                       userid=userid)

            except DatabaseError:
                _, ei, tb = sys.exc_info()

                try:
                    return self.object.committers.get(userid=userid)
                except self.object.committers.model.DoesNotExist:
                    raise ei.with_traceback(tb)
Exemple #4
0
    def getuser(self, rmuser):
        try:
            return self.usercache[rmuser['id']]
        except (KeyError, AttributeError):  # Sometimes rmuser is None
            name = ' '.join([
                getresource(rmuser, 'firstname', ''),
                getresource(rmuser, 'lastname', '')
            ])
            email = getresource(rmuser, 'mail', '')

            user = get_participant(name, email)

            if rmuser:
                self.usercache[rmuser['id']] = user

            return user
Exemple #5
0
    def get_participant(author):
        name, email = parseaddr(author)

        return get_participant(name, email) if '@' in email else None
Exemple #6
0
 def get_participant(self):
     """
     Get participant or create corresponding participant for author of this
     message.
     """
     return get_participant(self.author_name, self.author_email)