mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# vim:fenc=utf-8
 | 
						|
from typing import Any, Dict, Optional
 | 
						|
 | 
						|
from django.http import HttpRequest, HttpResponse
 | 
						|
 | 
						|
from zerver.decorator import webhook_view
 | 
						|
from zerver.lib.request import REQ, has_request_variables
 | 
						|
from zerver.lib.webhooks.common import get_http_headers_from_filename
 | 
						|
from zerver.lib.webhooks.git import get_pull_request_event_message
 | 
						|
from zerver.models import UserProfile
 | 
						|
 | 
						|
# Gitea is a fork of Gogs, and so the webhook implementation is nearly the same.
 | 
						|
from zerver.webhooks.gogs.view import gogs_webhook_main
 | 
						|
 | 
						|
fixture_to_headers = get_http_headers_from_filename("HTTP_X_GITEA_EVENT")
 | 
						|
 | 
						|
 | 
						|
def format_pull_request_event(payload: Dict[str, Any], include_title: bool = False) -> str:
 | 
						|
    assignee = payload["pull_request"]["assignee"]
 | 
						|
    data = {
 | 
						|
        "user_name": payload["pull_request"]["user"]["username"],
 | 
						|
        "action": payload["action"],
 | 
						|
        "url": payload["pull_request"]["html_url"],
 | 
						|
        "number": payload["pull_request"]["number"],
 | 
						|
        "target_branch": payload["pull_request"]["head"]["ref"],
 | 
						|
        "base_branch": payload["pull_request"]["base"]["ref"],
 | 
						|
        "title": payload["pull_request"]["title"] if include_title else None,
 | 
						|
        "assignee": assignee["login"] if assignee else None,
 | 
						|
    }
 | 
						|
 | 
						|
    if payload["pull_request"]["merged"]:
 | 
						|
        data["user_name"] = payload["pull_request"]["merged_by"]["username"]
 | 
						|
        data["action"] = "merged"
 | 
						|
 | 
						|
    return get_pull_request_event_message(**data)
 | 
						|
 | 
						|
 | 
						|
@webhook_view("Gitea")
 | 
						|
@has_request_variables
 | 
						|
def api_gitea_webhook(
 | 
						|
    request: HttpRequest,
 | 
						|
    user_profile: UserProfile,
 | 
						|
    payload: Dict[str, Any] = REQ(argument_type="body"),
 | 
						|
    branches: Optional[str] = REQ(default=None),
 | 
						|
    user_specified_topic: Optional[str] = REQ("topic", default=None),
 | 
						|
) -> HttpResponse:
 | 
						|
    return gogs_webhook_main(
 | 
						|
        "Gitea",
 | 
						|
        "X_GITEA_EVENT",
 | 
						|
        format_pull_request_event,
 | 
						|
        request,
 | 
						|
        user_profile,
 | 
						|
        payload,
 | 
						|
        branches,
 | 
						|
        user_specified_topic,
 | 
						|
    )
 |