Skip to content

Commit 6d7733d

Browse files
Add api endpoints to trigger async github/bitbucket repo syncing
1 parent d8b8560 commit 6d7733d

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

readthedocs/oauth/tasks.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from django.contrib.auth.models import User
2+
from djcelery import celery as celery_app
3+
4+
from rtd.utils.tasks import PublicTask
5+
from rtd.utils.tasks import permission_check
6+
from rtd.utils.tasks import user_id_matches
7+
from .utils import import_bitbucket
8+
from .utils import import_github
9+
10+
11+
@permission_check(user_id_matches)
12+
class SyncGitHubRepositories(PublicTask):
13+
public_name = 'sync_github_repositories'
14+
15+
def run_public(self, user_id):
16+
user = User.objects.get(pk=user_id)
17+
import_github(user, sync=True)
18+
19+
20+
sync_github_repositories = celery_app.tasks[SyncGitHubRepositories.name]
21+
22+
23+
@permission_check(user_id_matches)
24+
class SyncBitBucketRepositories(PublicTask):
25+
public_name = 'sync_bitbucket_repositories'
26+
27+
def run_public(self, user_id):
28+
user = User.objects.get(pk=user_id)
29+
import_bitbucket(user, sync=True)
30+
31+
32+
sync_bitbucket_repositories = celery_app.tasks[SyncBitBucketRepositories.name]

readthedocs/restapi/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@
2525
url(r'search/project/$', 'restapi.views.search_views.project_search', name='api_project_search'),
2626
url(r'search/section/$', 'restapi.views.search_views.section_search', name='api_section_search'),
2727
url(r'jobs/status/(?P<task_id>[^/]+)/', 'restapi.views.task_views.job_status', name='api_job_status'),
28+
url(r'jobs/sync-github-repositories/', 'restapi.views.task_views.sync_github_repositories', name='api_sync_github_repositories'),
29+
url(r'jobs/sync-bitbucket-repositories/', 'restapi.views.task_views.sync_bitbucket_repositories', name='api_sync_bitbucket_repositories'),
2830
)

readthedocs/restapi/views/task_views.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import logging
22

3+
from django.core.urlresolvers import reverse
34
from rest_framework import decorators, permissions
45
from rest_framework.renderers import JSONPRenderer, JSONRenderer, BrowsableAPIRenderer
56
from rest_framework.response import Response
67

78
from rtd.utils.tasks import TaskNoPermission
89
from rtd.utils.tasks import get_public_task_data
10+
import oauth.tasks
911

1012

1113
log = logging.getLogger(__name__)
@@ -39,3 +41,31 @@ def job_status(request, task_id):
3941
get_status_data('unknown', 'PENDING', {}))
4042
return Response(
4143
get_status_data(task_name, state, public_data))
44+
45+
46+
@decorators.api_view(['POST'])
47+
@decorators.permission_classes((permissions.IsAuthenticated,))
48+
@decorators.renderer_classes(
49+
(JSONRenderer, JSONPRenderer, BrowsableAPIRenderer))
50+
def sync_github_repositories(request):
51+
result = oauth.tasks.sync_github_repositories.delay(
52+
user_id=request.user.id)
53+
task_id = result.task_id
54+
return Response({
55+
'task_id': task_id,
56+
'url': reverse('api_job_status', kwargs={'task_id': task_id}),
57+
})
58+
59+
60+
@decorators.api_view(['POST'])
61+
@decorators.permission_classes((permissions.IsAuthenticated,))
62+
@decorators.renderer_classes(
63+
(JSONRenderer, JSONPRenderer, BrowsableAPIRenderer))
64+
def sync_bitbucket_repositories(request):
65+
result = oauth.tasks.sync_bitbucket_repositories.delay(
66+
user_id=request.user.id)
67+
task_id = result.task_id
68+
return Response({
69+
'task_id': task_id,
70+
'url': reverse('api_job_status', kwargs={'task_id': task_id}),
71+
})

0 commit comments

Comments
 (0)