diff --git a/frontend/frontend/static/frontend/assets/js/setup-tool-ext.js b/frontend/frontend/static/frontend/assets/js/setup-tool-ext.js index 833aad9..ca18d7d 100644 --- a/frontend/frontend/static/frontend/assets/js/setup-tool-ext.js +++ b/frontend/frontend/static/frontend/assets/js/setup-tool-ext.js @@ -52,7 +52,9 @@ function updateSelector(name, messages) { // show status and error messages function updateUIMessages(data) { - + updateSelector('parent', data[0]); + for (name in data[1]) + updateSelector(name, data[1][name]); } function updateUI(config) { diff --git a/frontend/frontend/static/frontend/assets/js/setup-tool.js b/frontend/frontend/static/frontend/assets/js/setup-tool.js index 62b6480..b01c5ab 100644 --- a/frontend/frontend/static/frontend/assets/js/setup-tool.js +++ b/frontend/frontend/static/frontend/assets/js/setup-tool.js @@ -406,7 +406,7 @@ function onCreateButtonClick() { //freeze UI loader(true); createFeed().then(function(data){ - if (typeof(data) == 'string')) + if (typeof(data) == 'string') window.location.href = data; // feed_page_url else ET.updateUI(data); @@ -430,7 +430,7 @@ function createFeed() { $.ajax({ type: 'POST', url: EI.active() ? "/setup_create_feed_ext" :"/setup_create_feed", - data: JSON.stringify(ET.active + data: JSON.stringify(ET.active() ? { selectors: ET.getUIConfig(), snapshot_time: snapshot_time, url:$('#create').data('page-url') } : { html: iframeHtmlJson, names: name_ids, url:$('#create').data('page-url') } ), diff --git a/frontend/frontend/urls.py b/frontend/frontend/urls.py index 53c3627..b59e308 100644 --- a/frontend/frontend/urls.py +++ b/frontend/frontend/urls.py @@ -29,3 +29,4 @@ urlpatterns = i18n_patterns( urlpatterns.append(url(r'^setup_get_selected_ids$', views.setup_get_selected_ids, name='setup_get_selected_ids')) urlpatterns.append(url(r'^setup_create_feed$', views.setup_create_feed, name='setup_create_feed')) +urlpatterns.append(url(r'^setup_create_feed_ext$', views.setup_create_feed, name='setup_create_feed_ext')) diff --git a/frontend/frontend/views.py b/frontend/frontend/views.py index ce44180..5692e36 100644 --- a/frontend/frontend/views.py +++ b/frontend/frontend/views.py @@ -12,6 +12,7 @@ from .forms import IndexForm from .settings import DOWNLOADER_PAGE_URL, FEED_PAGE_URL, FEED1_PAGE_URL from .setup_tool import get_selection_tag_ids, build_xpathes_for_items +from .setup_tool_ext import build_xpath_results from .models import Feed, Field, FeedField def index(request): @@ -124,6 +125,49 @@ def setup_create_feed(request): return HttpResponse(reverse('preview', args=(feed_id,))) +def _validate_selectors(selectors): + if not isinstance(selectors, list) or len(selectors) != 2: + return False + feed_xpath = xpathes[0] + item_xpathes = xpathes[1] + + if not isinstance(feed_xpath, basestring): + return False + + if not isinstance(item_xpathes, dict): + return False + + fields = Field.objects.all() + + item_xpathes_out = {} + + for field in fields: + if field.name in item_xpathes: + if not isinstance(item_xpath[field.name], basestring): + return False + else: + item_xpathes_out[field.name] = item_xpath[field.name] + return [feed_xpath. item_xpathes_out] + +def setup_create_feed_ext(request): + if request.method == 'POST': + obj = json.loads(request.body) + if 'selectors' not in obj or 'snapshot_time' not in obj or 'url' not in obj: + return HttpResponseBadRequest('"selectors", "snapshot_time" and "url" parameters are required') + + selectors = obj['selectors'] + snapshot_time = obj['snapshot_time'] + url = obj['url'] + + validated_selectors = _validate_selectors(selectors) + + if not validated_selectors: + return HttpResponseBadRequest('selectors are invalid') + + results = build_xpathes_results(validated_selectors, snapshot_time, url) + + return HttpResponse(json.dumps(results)) + def preview(request, feed_id): if request.method == 'GET': return render(request, 'frontend/preview.html',