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:
parent
0bde3df8a9
commit
c64602b3a4
@ -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) {
|
||||||
|
@ -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') }
|
||||||
),
|
),
|
||||||
|
@ -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'))
|
||||||
|
@ -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',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user