v/pol
1
0
mirror of https://github.com/taroved/pol synced 2025-05-20 08:00:14 -07:00

xpath editor in progress

This commit is contained in:
Alexandr Nesterenko 2017-07-30 20:13:37 +00:00
parent 0bde3df8a9
commit c64602b3a4
4 changed files with 50 additions and 3 deletions

View File

@ -52,7 +52,9 @@ function updateSelector(name, messages) {
// show status and error messages // show status and error messages
function updateUIMessages(data) { function updateUIMessages(data) {
updateSelector('parent', data[0]);
for (name in data[1])
updateSelector(name, data[1][name]);
} }
function updateUI(config) { function updateUI(config) {

View File

@ -406,7 +406,7 @@ function onCreateButtonClick() {
//freeze UI //freeze UI
loader(true); loader(true);
createFeed().then(function(data){ createFeed().then(function(data){
if (typeof(data) == 'string')) if (typeof(data) == 'string')
window.location.href = data; // feed_page_url window.location.href = data; // feed_page_url
else else
ET.updateUI(data); ET.updateUI(data);
@ -430,7 +430,7 @@ function createFeed() {
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
url: EI.active() ? "/setup_create_feed_ext" :"/setup_create_feed", 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') } ? { selectors: ET.getUIConfig(), snapshot_time: snapshot_time, url:$('#create').data('page-url') }
: { html: iframeHtmlJson, names: name_ids, url:$('#create').data('page-url') } : { html: iframeHtmlJson, names: name_ids, url:$('#create').data('page-url') }
), ),

View File

@ -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_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$', 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'))

View File

@ -12,6 +12,7 @@ from .forms import IndexForm
from .settings import DOWNLOADER_PAGE_URL, FEED_PAGE_URL, FEED1_PAGE_URL 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 import get_selection_tag_ids, build_xpathes_for_items
from .setup_tool_ext import build_xpath_results
from .models import Feed, Field, FeedField from .models import Feed, Field, FeedField
def index(request): def index(request):
@ -124,6 +125,49 @@ def setup_create_feed(request):
return HttpResponse(reverse('preview', args=(feed_id,))) 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): def preview(request, feed_id):
if request.method == 'GET': if request.method == 'GET':
return render(request, 'frontend/preview.html', return render(request, 'frontend/preview.html',