diff --git a/requirements.txt b/requirements.txt index f633c2a..f0f43a8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,10 @@ elastic-git>=0.3.3 unicore.content +unicore.google +unicore.distribute pyramid pyramid_jinja2 -pyramid_celery +pyramid_celery>=2.0.0rc4 pyyaml waitress python-dateutil diff --git a/springboard/config.py b/springboard/config.py index d0ddbf5..26e1fc9 100644 --- a/springboard/config.py +++ b/springboard/config.py @@ -4,4 +4,5 @@ def includeme(config): config.add_route('category', '/category/{uuid}/') config.add_route('page', '/page/{uuid}/') config.add_route('flat_page', '/{slug}/') + config.add_route('api_notify', '/api/notify/', request_method='POST') config.scan(".views") diff --git a/springboard/tests/test_views.py b/springboard/tests/test_views.py index ccc3101..698da1b 100644 --- a/springboard/tests/test_views.py +++ b/springboard/tests/test_views.py @@ -3,6 +3,8 @@ from pyramid import testing +import mock + class TestViews(SpringboardTestCase): @@ -55,3 +57,16 @@ def test_flatpage(self): self.mk_request(matchdict={'slug': page.slug})) context = views.flat_page() self.assertEqual(context['page'].uuid, page.uuid) + + @mock.patch('unicore.distribute.tasks.fastforward.delay') + def test_api_notify(self, mock_delay): + request = self.mk_request() + request.method = 'POST' + + views = SpringboardViews(request) + response = views.api_notify() + mock_delay.assert_called_once() + (working_dir, index_prefix), _ = mock_delay.call_args_list[0] + self.assertEqual(response, {}) + self.assertEqual(working_dir, self.workspace.working_dir) + self.assertEqual(index_prefix, self.workspace.index_prefix) diff --git a/springboard/views.py b/springboard/views.py index 26a5959..82f0697 100644 --- a/springboard/views.py +++ b/springboard/views.py @@ -7,6 +7,7 @@ from springboard.utils import parse_repo_name from unicore.content.models import Category, Page +from unicore.distribute.tasks import fastforward from slugify import slugify @@ -64,3 +65,9 @@ def flat_page(self): slug = self.request.matchdict['slug'] [page] = self.all_pages.filter(language=self.language, slug=slug) return self.context(page=page) + + @view_config(route_name='api_notify', renderer='json') + def api_notify(self): + fastforward.delay(self.workspace.working_dir, + self.workspace.index_prefix) + return {}