Package coprs :: Package views :: Package webhooks_ns :: Module webhooks_general
[hide private]
[frames] | no frames]

Source Code for Module coprs.views.webhooks_ns.webhooks_general

 1  import flask 
 2   
 3  from coprs import db, app 
 4  from coprs import helpers 
 5   
 6  from coprs.logic.builds_logic import BuildsLogic 
 7  from coprs.logic.complex_logic import ComplexLogic 
 8  from coprs.logic.coprs_logic import CoprsLogic 
 9  from coprs.logic.packages_logic import PackagesLogic 
10   
11  from coprs.exceptions import ObjectNotFound, AccessRestricted 
12   
13  from coprs.views.webhooks_ns import webhooks_ns 
14  from coprs.views.misc import page_not_found, access_restricted 
15   
16  import logging 
17  log = logging.getLogger(__name__) 
18   
19   
20  @webhooks_ns.route("/github/<copr_id>/<uuid>/", methods=["POST"]) 
21 -def webhooks_git_push(copr_id, uuid):
22 # For the documentation of the data we receive see: 23 # https://developer.github.com/v3/activity/events/types/#pushevent 24 try: 25 copr = ComplexLogic.get_copr_by_id_safe(copr_id) 26 except ObjectNotFound: 27 return page_not_found("Project does not exist") 28 29 if copr.webhook_secret != uuid: 30 return access_restricted("This webhook is not valid") 31 32 try: 33 payload = flask.request.json 34 clone_url = payload['repository']['clone_url'] 35 commits = [] 36 payload_commits = payload.get('commits', []) 37 for payload_commit in payload_commits: 38 commits.append({ 39 'added': payload_commit['added'], 40 'modified': payload_commit['modified'], 41 'removed': payload_commit['removed'], 42 }) 43 44 ref_type = payload.get('ref_type', '') 45 ref = payload.get('ref', '') 46 except KeyError: 47 return "Bad Request", 400 48 49 packages = PackagesLogic.get_for_webhook_rebuild(copr_id, uuid, clone_url, commits, ref_type, ref) 50 51 for package in packages: 52 BuildsLogic.rebuild_package(package) 53 54 db.session.commit() 55 56 return "OK", 200
57 58 @webhooks_ns.route("/gitlab/<copr_id>/<uuid>/", methods=["POST"])
59 -def webhooks_gitlab_push(copr_id, uuid):
60 # For the documentation of the data we receive see: 61 # https://gitlab.com/help/user/project/integrations/webhooks#events 62 try: 63 copr = ComplexLogic.get_copr_by_id_safe(copr_id) 64 except ObjectNotFound: 65 return page_not_found("Project does not exist") 66 67 if copr.webhook_secret != uuid: 68 return access_restricted("This webhook is not valid") 69 70 try: 71 payload = flask.request.json 72 clone_url = payload['project']['git_http_url'] 73 commits = [] 74 payload_commits = payload.get('commits', []) 75 for payload_commit in payload_commits: 76 commits.append({ 77 'added': payload_commit['added'], 78 'modified': payload_commit['modified'], 79 'removed': payload_commit['removed'], 80 }) 81 if payload['object_kind'] == 'tag_push': 82 ref_type = 'tag' 83 else: 84 ref_type = None 85 ref = payload.get('ref', '') 86 except KeyError: 87 return "Bad Request", 400 88 89 packages = PackagesLogic.get_for_webhook_rebuild(copr_id, uuid, clone_url, commits, ref_type, ref) 90 91 for package in packages: 92 BuildsLogic.rebuild_package(package) 93 94 db.session.commit() 95 96 return "OK", 200
97