Exemplo n.º 1
0
    def handle_webhook(self):
        """
        Handle BitBucket events for push.

        BitBucket doesn't have a separate event for creation/deletion,
        instead it sets the new attribute (null if it is a deletion)
        and the old attribute (null if it is a creation).
        """
        event = self.request.META.get(BITBUCKET_EVENT_HEADER, BITBUCKET_PUSH)
        webhook_bitbucket.send(Project,
                               project=self.project,
                               data=self.request.data,
                               event=event)
        if event == BITBUCKET_PUSH:
            try:
                data = self.request.data
                changes = data['push']['changes']
                branches = []
                for change in changes:
                    old = change['old']
                    new = change['new']
                    # Normal push to master
                    if old is not None and new is not None:
                        branches.append(new['name'])
                # BitBuck returns an array of changes rather than
                # one webhook per change. If we have at least one normal push
                # we don't trigger the sync versions, because that
                # will be triggered with the normal push.
                if branches:
                    return self.get_response_push(self.project, branches)
                return self.sync_versions(self.project)
            except KeyError:
                raise ParseError('Invalid request')
        return None
Exemplo n.º 2
0
 def handle_webhook(self, request, project, data=None):
     # Get event and trigger other webhook events
     event = request.META.get('HTTP_X_EVENT_KEY', BITBUCKET_PUSH)
     webhook_bitbucket.send(Project, project=project, data=data, event=event)
     # Handle push events and trigger builds
     if event == BITBUCKET_PUSH:
         try:
             changes = data['push']['changes']
             branches = [change['new']['name']
                         for change in changes]
             return self.get_response_push(project, branches)
         except KeyError:
             raise ParseError('Invalid request')
Exemplo n.º 3
0
 def handle_webhook(self):
     # Get event and trigger other webhook events
     event = self.request.META.get('HTTP_X_EVENT_KEY', BITBUCKET_PUSH)
     webhook_bitbucket.send(Project, project=self.project,
                            data=self.request.data, event=event)
     # Handle push events and trigger builds
     if event == BITBUCKET_PUSH:
         try:
             changes = self.request.data['push']['changes']
             branches = [change['new']['name']
                         for change in changes]
             return self.get_response_push(self.project, branches)
         except KeyError:
             raise ParseError('Invalid request')
Exemplo n.º 4
0
    def handle_webhook(self):
        """
        Handle BitBucket events for push.

        BitBucket doesn't have a separate event for creation/deletion, instead
        it sets the new attribute (null if it is a deletion) and the old
        attribute (null if it is a creation).
        """
        event = self.request.META.get(BITBUCKET_EVENT_HEADER, BITBUCKET_PUSH)
        webhook_bitbucket.send(
            Project,
            project=self.project,
            data=self.request.data,
            event=event,
        )
        if event == BITBUCKET_PUSH:
            try:
                data = self.request.data
                changes = data['push']['changes']
                branches = []
                for change in changes:
                    old = change['old']
                    new = change['new']
                    # Normal push to master
                    if old is not None and new is not None:
                        branches.append(new['name'])
                # BitBuck returns an array of changes rather than
                # one webhook per change. If we have at least one normal push
                # we don't trigger the sync versions, because that
                # will be triggered with the normal push.
                if branches:
                    return self.get_response_push(self.project, branches)
                return self.sync_versions(self.project)
            except KeyError:
                raise ParseError('Invalid request')
        return None