Commit 050542ad authored by Michal Čihař's avatar Michal Čihař

Merge remote-tracking branch 'origin/master'

parents 3661a8a2 d096ae50
......@@ -83,8 +83,15 @@ Interacting with others
-----------------------
You can trigger update of underlaying git repository for every subproject by
accessing URL :file:`/hooks/p/project/subproject/update/`. This can be used for
example as as Post-Receive URLs on Github.
accessing URL :file:`/hooks/p/project/subproject/update/`.
For GitHub, there is a special URL :file:`/hooks/github/`, which parses GitHub
notifications and updates related projects automatically.
.. note::
The GitHub notification relies on Git urls you use to be in form
git://github.com/owner/repo.git
.. _privileges:
......
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotAllowed, HttpResponseNotFound, HttpResponseBadRequest
from trans.models import Project, SubProject, Translation, Unit, Suggestion, Check
from django.shortcuts import get_object_or_404
import json
import logging
logger = logging.getLogger('weblate')
@csrf_exempt
def update_subproject(request, project, subproject):
'''
API hook for updating git repos.
'''
if not settings.ENABLE_HOOKS:
return HttpResponseNotAllowed([])
obj = get_object_or_404(SubProject, slug = subproject, project__slug = project)
obj.update_branch()
obj.create_translations()
return HttpResponse('updated')
@csrf_exempt
def github_hook(request):
'''
API to handle commit hooks from Github.
'''
if not settings.ENABLE_HOOKS:
return HttpResponseNotAllowed([])
if request.method != 'POST':
return HttpResponseNotAllowed(['POST'])
try:
data = json.loads(request.raw_post_data)
except ValueError:
return HttpResponseBadRequest('could not parse json!')
repo = 'git://github.com/%s/%s.git' % (
data['repository']['owner']['name'],
data['repository']['name'],
)
logger.info('received GitHub notification on repository %s', repo)
for s in SubProject.objects.filter(repo = repo):
logger.info('GitHub notification will update %s', s)
s.update_branch()
s.create_translations()
return HttpResponse('updated')
......@@ -2,13 +2,11 @@ from django.shortcuts import render_to_response, get_object_or_404
from django.core.servers.basehttp import FileWrapper
from django.utils.translation import ugettext_lazy, ugettext as _
from django.template import RequestContext, loader
from django.conf import settings
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotAllowed, HttpResponseNotFound
from django.contrib import messages
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth.models import AnonymousUser
from django.db.models import Q
from django.views.decorators.csrf import csrf_exempt
from trans.models import Project, SubProject, Translation, Unit, Suggestion, Check
from lang.models import Language
......@@ -413,18 +411,6 @@ def upload_translation(request, project, subproject, lang):
return HttpResponseRedirect(obj.get_absolute_url())
@csrf_exempt
def update_subproject(request, project, subproject):
'''
API hook for updating git repos.
'''
if not settings.ENABLE_HOOKS:
return HttpResponseNotAllowed([])
obj = get_object_or_404(SubProject, slug = subproject, project__slug = project)
obj.update_branch()
obj.create_translations()
return HttpResponse('updated')
def not_found(request):
'''
Error handler showing list of available projects.
......
......@@ -30,7 +30,8 @@ urlpatterns = patterns('',
url(r'^languages/$', 'trans.views.show_languages'),
url(r'^languages/(?P<lang>[^/]*)/$', 'trans.views.show_language'),
url(r'^hooks/p/(?P<project>[^/]*)/(?P<subproject>[^/]*)/update/$', 'trans.views.update_subproject'),
url(r'^hooks/p/(?P<project>[^/]*)/(?P<subproject>[^/]*)/update/$', 'trans.api.update_subproject'),
url(r'^hooks/github/$', 'trans.api.github_hook'),
url(r'^js/get/(?P<checksum>[^/]*)/$', 'trans.views.get_string'),
url(r'^js/ignore-check/(?P<check_id>[0-9]*)/$', 'trans.views.ignore_check'),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment