Skip to content
Snippets Groups Projects
Commit 3e797193 authored by dcz's avatar dcz
Browse files

Extracting LU from unified frame.

Revert __init__.py files
parent 0148c6f4
Branches
No related tags found
No related merge requests found
...@@ -221,3 +221,25 @@ function show_unified_frame_lexical_units(frames) { ...@@ -221,3 +221,25 @@ function show_unified_frame_lexical_units(frames) {
$('#unified-frame-lexical-units').empty(); $('#unified-frame-lexical-units').empty();
$('#unified-frame-lexical-units').append($(lexical_units_dom)); $('#unified-frame-lexical-units').append($(lexical_units_dom));
} }
function extract_frames_to_new_frame(unified_frame_id, slowal_frame_ids, new_unified_frame_id) {
check_import_status();
clear_entry();
show_entry_spinners();
var data = { 'unified_frame_id' : unified_frame_id, 'slowal_frame_ids' : JSON.stringify(slowal_frame_ids), 'new_unified_frame_id': new_unified_frame_id };
$.ajax({
type : 'post',
url : '/' + lang + '/unifier/extract_frames_to_new_frame/',
dataType : 'json',
data : data,
timeout : 60000,
success : function(response) {
unified_frame_id = response.unified_frame_id;
},
error: function(request, errorType, errorMessage) {
show_error(errorType + ' (' + errorMessage + ')');
}
});
}
...@@ -44,9 +44,66 @@ ...@@ -44,9 +44,66 @@
<br> <br>
<div id="unified-frame"></div> <div id="unified-frame"></div>
<div id="unified-frame-lexical-units"></div> <div id="unified-frame-lexical-units"></div>
<br>
<table class="table-button-menu" cellspacing="1">
<tr style="background-color: white;">
<td id="wrong-frame" style="padding: 10px 15px 10px 15px; color: #000000;">
Błędna
</td>
<td id="extract-frame" style="padding: 10px 15px 10px 15px; color: #000000;"
onclick="extract_frames_to_new_frame(1, [1,2], null)">
Rozdziel
</td>
<td id="hide-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;">
Ukryj
</td>
<td id="ready-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;">
Gotowe
</td>
<td id="filter-slowal-frames" style="padding: 10px 15px 10px 15px; color: #000000;">
Filtruj
</td>
</tr>
<tr style="background-color: white;">
<td id="inccorect-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;">
Niepasująca
</td>
<td id="move-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;"
onclick="extract_frames_to_new_frame(7, [1], 1)">
Przerzuć
</td>
<td id="show-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;">
Pokaż
</td>
<td id="reollback-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;">
Przywróć
</td>
<td id="empty" style="padding: 10px 15px 10px 15px; color: #000000;">
</td>
</tr>
</table>
<br>
<div id="semantics-frames"></div> <div id="semantics-frames"></div>
</div> </div>
<div class="col h-100 px-1 pt-0 pb-0 overflow-auto" id="semantics-schemata-pane"> <div class="col h-100 px-1 pt-0 pb-0 overflow-auto" id="semantics-schemata-pane">
<ul class="nav nav-pills nav-justified p-1" id="entryTabs" role="tablist">
<li class="nav-item mr-1">
<a class="btn btn-sm btn-outline-dark nav-link active" id="unified-frame-semantics-tab" data-toggle="tab" href="#semantics" role="tab" aria-controls="semantics" aria-selected="true">
{% trans "Schematy" %}
</a>
</li>
<li class="nav-item mr-1">
<a class="btn btn-sm btn-outline-dark nav-link" id="unified-frame-view2-tab" data-toggle="tab" href="#syntax" role="tab" aria-controls="syntax" aria-selected="false">
{% trans "Podgląd ram" %}
</a>
</li>
<li class="nav-item mr-0">
<a class="btn btn-sm btn-outline-dark nav-link" id="unified-frame-notes-tab" data-toggle="tab" href="#examples" role="tab" aria-controls="examples" aria-selected="false">
{% trans "Notatki" %}
</a>
</li>
</ul>
<div id="semantics-schemata"></div> <div id="semantics-schemata"></div>
</div> </div>
</div> </div>
......
...@@ -35,9 +35,46 @@ class UnifiedFrame(models.Model): ...@@ -35,9 +35,46 @@ class UnifiedFrame(models.Model):
def extract_frames_to( def extract_frames_to(
self, slowal_frames: List[Frame], new_frame: Optional["UnifiedFrame"] = None self, slowal_frames: List[Frame], new_frame: Optional["UnifiedFrame"] = None
) -> "UnifiedFrame": ) -> "UnifiedFrame":
new_unified_frame_arguments = None
if not new_frame: if not new_frame:
new_frame = UnifiedFrame.objects.create(title=self.title) new_frame = UnifiedFrame.objects.create(title='[Kopia] '+self.title if self.title is not None else '[Kopia]')
raise NotImplementedError() # TODO move slowal frames to `new_frame` new_frame.save()
unified_frame_arguments = UnifiedFrameArgument.objects.filter(unified_frame=self)
cnt = UnifiedFrameArgument.objects.count()+1
old_2_new_argument_mapping = {}
for unified_frame_argument in unified_frame_arguments:
new_unified_frame_argument = UnifiedFrameArgument.objects.create(id=cnt,
role_type=unified_frame_argument.role_type,
role=unified_frame_argument.role,
unified_frame=new_frame)
new_unified_frame_argument.proposed_roles.set(unified_frame_argument.proposed_roles.all())
new_unified_frame_argument.save()
old_2_new_argument_mapping[unified_frame_argument.id] = new_unified_frame_argument.id
cnt = cnt + 1
else:
new_unified_frame_arguments = UnifiedFrameArgument.objects.filter(unified_frame=new_frame).all()
unified_frame_arguments = UnifiedFrameArgument.objects.filter(unified_frame=self).all()
if len(new_unified_frame_arguments) < len(unified_frame_arguments):
raise Exception('Target frame has to little arguments, required: ' + len(unified_frame_arguments)+', but found: '+len(new_unified_frame_arguments))
for slowal_frame in slowal_frames:
mapping = UnifiedFrame2SlowalFrameMapping.objects.get(unified_frame=self, slowal_frame=slowal_frame)
mapping.unified_frame = new_frame
mapping.save()
argument_mappings = UnifiedFrameArgumentSlowalFrameMapping.objects.filter(unified_frame_mapping=mapping)
for i, argument_mapping in enumerate(argument_mappings):
if new_unified_frame_arguments is None:
argument_mapping.unified_agrument_id = old_2_new_argument_mapping[argument_mapping.unified_agrument_id]
else:
argument_mapping.unified_agrument_id = new_unified_frame_arguments[i]
argument_mapping.save()
curr_mapping = UnifiedFrame2SlowalFrameMapping.objects.filter(unified_frame=self).all()
if len(curr_mapping) == 0:
unified_frame_arguments = UnifiedFrameArgument.objects.filter(unified_frame=self).all()
unified_frame_arguments.delete()
self.delete()
return new_frame return new_frame
......
...@@ -10,5 +10,6 @@ urlpatterns = [ ...@@ -10,5 +10,6 @@ urlpatterns = [
path('save_relational_selectional_preference/', views.save_relational_selectional_preference, name='save_relational_selectional_preference'), path('save_relational_selectional_preference/', views.save_relational_selectional_preference, name='save_relational_selectional_preference'),
path('get_unified_frames/', views.get_unified_frames, name='get_unified_frames'), path('get_unified_frames/', views.get_unified_frames, name='get_unified_frames'),
path('get_unified_frame/', views.get_unified_frame, name='get_unified_frame'), path('get_unified_frame/', views.get_unified_frame, name='get_unified_frame'),
path('extract_frames_to_new_frame/', views.extract_frames_to_new_frame, name='extract_frames_to_new_frame'),
] ]
import json
from django.http import JsonResponse from django.http import JsonResponse
from common.decorators import ajax_required from common.decorators import ajax_required
from entries.polish_strings import EXAMPLE_SOURCE, EXAMPLE_OPINION from entries.polish_strings import EXAMPLE_SOURCE, EXAMPLE_OPINION
from entries.views import get_scroller_params, get_alternations, get_prefs_list, schema2dict, frame2dict from entries.views import get_scroller_params, get_alternations, get_prefs_list, schema2dict, frame2dict
from semantics.models import Frame
from syntax.models import Schema from syntax.models import Schema
from unifier.models import UnifiedFrameArgument, UnifiedRelationalSelectionalPreference, UnifiedFrame, \ from unifier.models import UnifiedFrameArgument, UnifiedRelationalSelectionalPreference, UnifiedFrame, \
UnifiedFrame2SlowalFrameMapping UnifiedFrame2SlowalFrameMapping
...@@ -152,17 +155,7 @@ def get_examples(frames): ...@@ -152,17 +155,7 @@ def get_examples(frames):
examples.append(elem) examples.append(elem)
return sorted(examples, key=lambda x: x['sentence']) return sorted(examples, key=lambda x: x['sentence'])
@ajax_required def get_unified_frame_json(unifiedFrame, request):
def get_unified_frame(request):
if request.method == 'POST':
#TODO (*)
#form = EntryForm(request.POST)
unified_frame_id = request.POST['unified_frame_id']
#TODO (*)
if unified_frame_id.isdigit():# and form.is_valid():
unified_frame_id = int(unified_frame_id)
# TODO check that Entry has no import errors
unifiedFrame = UnifiedFrame.objects.get(id=unified_frame_id)
slowal_frames = [connection.slowal_frame for connection in unifiedFrame.unified_frame_2_slowal_frame.all()] slowal_frames = [connection.slowal_frame for connection in unifiedFrame.unified_frame_2_slowal_frame.all()]
...@@ -181,6 +174,34 @@ def get_unified_frame(request): ...@@ -181,6 +174,34 @@ def get_unified_frame(request):
unifiedFrame_dict = unifiedFrame2dict(unifiedFrame) unifiedFrame_dict = unifiedFrame2dict(unifiedFrame)
return { 'unified_frame_id': unifiedFrame.id, 'unified_frame': unifiedFrame_dict, 'subentries': subentries, 'frames' : slowal_frames_dict, 'alternations' : alternations, 'realisation_phrases' : realisation_phrases, 'realisation_descriptions' : realisation_descriptions, 'examples' : examples, 'last_visited' : request.session['last_visited'] }
@ajax_required
def get_unified_frame(request):
if request.method == 'POST':
#TODO (*)
#form = EntryForm(request.POST)
unified_frame_id = request.POST['unified_frame_id']
#TODO (*)
if unified_frame_id.isdigit():# and form.is_valid():
unified_frame_id = int(unified_frame_id)
request.session.modified = True request.session.modified = True
return JsonResponse({ 'unified_frame_id': unified_frame_id, 'unified_frame': unifiedFrame_dict, 'subentries': subentries, 'frames' : slowal_frames_dict, 'alternations' : alternations, 'realisation_phrases' : realisation_phrases, 'realisation_descriptions' : realisation_descriptions, 'examples' : examples, 'last_visited' : request.session['last_visited'] }) unifiedFrame = UnifiedFrame.objects.get(id=unified_frame_id)
return JsonResponse(get_unified_frame_json(unifiedFrame, request))
return JsonResponse({})
@ajax_required
def extract_frames_to_new_frame(request):
if request.method == 'POST':
unified_frame_id = request.POST['unified_frame_id']
new_unified_frame_id = request.POST['new_unified_frame_id']
slowal_frame_ids = json.loads(request.POST['slowal_frame_ids'])
unified_frame = UnifiedFrame.objects.get(id=unified_frame_id)
slowal_frames = Frame.objects.filter(id__in=slowal_frame_ids)
new_unified_frame = None
if new_unified_frame_id != '':
new_unified_frame = UnifiedFrame.objects.get(id=new_unified_frame_id)
new_frame_fullfiled_and_saved = unified_frame.extract_frames_to(slowal_frames=slowal_frames, new_frame=new_unified_frame)
return JsonResponse(get_unified_frame_json(new_frame_fullfiled_and_saved, request))
return JsonResponse({}) return JsonResponse({})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment