diff --git a/.environment-dev b/.environment-dev index d92b941dcad49a7f5b8c08a21898151a6e73df59..0a39c2a248192ade2af049e5337a4dcbfc85d844 100644 --- a/.environment-dev +++ b/.environment-dev @@ -1,4 +1,4 @@ -ALLOWED_HOSTS=localhost,127.0.0.1 +ALLOWED_HOSTS=localhost,127.0.0.1,10.1.49.248 DATABASE_HOST=shellvalier-postgresql DATABASE_NAME=shellvalier DATABASE_PASSWORD=shellvalier diff --git a/entries/static/entries/js/components/LexicalUnitDisplay.js b/entries/static/entries/js/components/LexicalUnitDisplay.js index f64ba1ad52a57ea1c60f03b2c1d742e3516f1095..f975605299b10ab40f056e06d61d4da037e09eb7 100644 --- a/entries/static/entries/js/components/LexicalUnitDisplay.js +++ b/entries/static/entries/js/components/LexicalUnitDisplay.js @@ -14,14 +14,6 @@ export default { goToEdit (unifiedFrameId, entryId, lexicalUnitId) { window.location = `/${lang}/entries/unification?unified_frame_id=${unifiedFrameId}&entry_id=${entryId}&lexical_unit_id=${lexicalUnitId}`; }, - markAsInvalid () { - $.ajax({ - type: 'post', - url: `/${lang}/semantics/frame_mark_as_invalid/${this.frame.id}/`, - dataType: 'json', - timeout: 60000, - }).then(() => { this.setup(); this.$emit('refreshEntriesList'); }); - }, take () { $.ajax({ type : 'post', @@ -37,21 +29,31 @@ export default { } }); }, - confirmInvalid () { + statusChange(api_method) { $.ajax({ type: 'post', - url: `/${lang}/semantics/frame_confirm_invalid/${this.frame.id}/`, + url: `/${lang}/semantics/${api_method}/${this.frame.id}/`, dataType: 'json', timeout: 60000, }).then(() => { this.setup(); this.$emit('refreshEntriesList'); }); }, + markAsInvalid () { + this.statusChange('frame_mark_as_invalid'); + }, + markAsBad () { + this.statusChange('frame_mark_as_bad'); + }, + confirmInvalid () { + this.statusChange('frame_confirm_invalid'); + }, + frame_confirm_as_not_matching_unified_frame () { + this.statusChange('frame_confirm_as_not_matching_unified_frame'); + }, rejectInvalid () { - $.ajax({ - type: 'post', - url: `/${lang}/semantics/frame_reject_invalid/${this.frame.id}/`, - dataType: 'json', - timeout: 60000, - }).then(() => { this.setup(); this.$emit('refreshEntriesList'); }); + this.statusChange('frame_reject_invalid'); + }, + frame_reject_as_not_matching_unified_frame () { + this.statusChange('frame_reject_as_not_matching_unified_frame'); }, isReadyToProcess () { return (!this.isLeksykograf() && this.unifiedFrame?.status === 'G') || (this.isLeksykograf() && this.frame?.status === 'O'); @@ -97,7 +99,7 @@ export default { <div id="semantics-frames"></div> <div class="text-center mb-3"> <div> - <a class="btn btn-sm btn-outline-dark mr-2" v-if="frame?.status === 'N'" @click="markAsInvalid">{{ !isLeksykograf() ? gettext('Zła') : gettext('Błędna') }}</a> + <a class="btn btn-sm btn-outline-dark mr-2" v-if="frame?.status === 'N'" @click="isLeksykograf() ? markAsInvalid() : markAsBad()">{{ !isLeksykograf() ? gettext('Zła') : gettext('Błędna') }}</a> <a class="btn btn-sm btn-outline-dark mr-2" v-if="isReadyToGet() && unifiedFrame === null" @click="take">{{ gettext('Pobierz') }}</a> <a class="btn btn-sm btn-outline-dark mr-2" @@ -115,15 +117,15 @@ export default { </a> <a class="btn btn-sm btn-outline-dark mr-2" - v-if="(frame?.status === 'B' || frame?.status === 'Z') && hasPermission('semantics.manage_invalid_lexical_units')" - @click="confirmInvalid" + v-if="(frame?.status === 'B' || frame?.status === 'C') && hasPermission('semantics.manage_invalid_lexical_units')" + @click="frame?.status === 'C' ? frame_confirm_as_not_matching_unified_frame() : confirmInvalid()" > {{ gettext('Potwierdź') }} </a> <a class="btn btn-sm btn-outline-dark mr-2" - v-if="frame?.status === 'B' && hasPermission('semantics.manage_invalid_lexical_units')" - @click="rejectInvalid" + v-if="(frame?.status === 'B' || frame?.status === 'C') && hasPermission('semantics.manage_invalid_lexical_units')" + @click="frame?.status === 'C' ? frame_reject_as_not_matching_unified_frame() : rejectInvalid()" > {{ gettext('Odrzuć') }} </a> diff --git a/entries/static/entries/js/components/LexicalUnitEdit.js b/entries/static/entries/js/components/LexicalUnitEdit.js index 1439170b82d732d626007223ef07bd775153e480..12ef716a8dce0bab23cc5340e78564d8a2cc8a0d 100644 --- a/entries/static/entries/js/components/LexicalUnitEdit.js +++ b/entries/static/entries/js/components/LexicalUnitEdit.js @@ -625,6 +625,8 @@ Object.assign(LexicalUnitEdit, { show_error(errorType + ' (' + errorMessage + ')'); } }); + } else { + alert(gettext("Zamiany pozycji argumentu w ramie wymaga zaznaczenia dokładnie 2 argumentów.")); } }, isSuperLeksykograf() { @@ -698,7 +700,7 @@ Object.assign(LexicalUnitEdit, { }); }, isFrameVisible(status) { - return (status != 'B' && status != 'Z') || this.isSuperLeksykograf(); + return (status != 'B' && status != 'C') || this.isSuperLeksykograf(); }, changeStatusButtonTitleToDefault() { const isSuperLeksykograf = this.isSuperLeksykograf(); @@ -946,27 +948,22 @@ Object.assign(LexicalUnitEdit, { <div id="semantics-slowal-frames-pane" class="col w-100 p-0 overflow-auto"> <table v-if="!readOnly && unified_frame.id" class="table-button-menu sticky-top" cellspacing="1"> <tr style="background-color: white;"> - <td id="wrong-frame" style="padding: 10px 15px 10px 15px; color: #000000;" @click="change_slowal_frame_status('Z')">Błędna</td> - <td - style="padding: 10px 15px 10px 15px; color: #000000;" - > - Rozdziel - </td> - <td id="hide-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;" @click="changeShowVerifiedFrames(false)">Ukryj</td> + <td id="wrong-frame" style="padding: 10px 15px 10px 15px; color: #000000;" @click="change_slowal_frame_status('B')">Błędna</td> + <td id="hide-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;" @click="changeShowVerifiedFrames(false)">Ukryj gotowe</td> <td id="ready-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;" @click="slowal_frame_ready_rollback">{{ statusButtonTitle }}</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;" @click="change_slowal_frame_status('B')"> + <td id="inccorect-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;" @click="change_slowal_frame_status('C')"> Niepasująca </td> + <td id="show-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;" @click="changeShowVerifiedFrames(true)"> + Pokaż wszystkie + </td> <td id="move-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;" @click="extract_frame_to_preview_frame()"> Przerzuć </td> - <td id="show-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;" @click="changeShowVerifiedFrames(true)"> - Pokaż - </td> <td id="reollback-slowal-frame" style="padding: 10px 15px 10px 15px; color: #000000;"> Przywróć </td> diff --git a/entries/static/entries/js/components/UnificationEntriesList.js b/entries/static/entries/js/components/UnificationEntriesList.js index 8a0b4527a83021cb5c962205cb2b96af84b63519..5bec7892450fd2a2ddb67da7a9a1bb5e292c4dc3 100644 --- a/entries/static/entries/js/components/UnificationEntriesList.js +++ b/entries/static/entries/js/components/UnificationEntriesList.js @@ -20,12 +20,11 @@ export default { return { gettext: window.gettext, canViewAssignment: has_permission("users.view_assignment"), - datatableObject: Object, } }, emits: ['lexicalUnitSelected'], mounted () { - this.datatableObject = setup_entries_list({ + setup_entries_list({ table: this.$refs.table, lexicalUnitSelected: (entryId, lexicalUnitId) => { this.$emit('lexicalUnitSelected', entryId, lexicalUnitId); }, selectEntryId: this.initialEntryId diff --git a/importer/WalentyXML.py b/importer/WalentyXML.py index 189910e4ebe33854a628ee43922923b882a91795..4978ae4ca4e2e8e2a7531e6edcab23f969ce1454 100644 --- a/importer/WalentyXML.py +++ b/importer/WalentyXML.py @@ -75,7 +75,10 @@ class WalentyTeiHandler(handler.ContentHandler): base = self._subtree._children[0]._children[0]._content try: entry = Entry(self._subtree, self._entry_meanings, self._meanings, self._frames, self._examples_in, self._examples_out, self._misconnected_out) - entry.store(self._meanings, self._stored_positions) + if entry._status == '(S) sprawdzone' or entry._status == '(S) gotowe': + entry.store(self._meanings, self._stored_positions) + else: + print("Odrzucono niegotowe: {}, status: {}".format(entry._base, entry._status)) except Exception as e: #raise traceback.print_exc() diff --git a/reset_db.sh b/reset_db.sh index 1e129ccc7ae7bdad890bed8cbae58d84c586d749..db532906f04c20af4c130512f4b6781ab109d527 100755 --- a/reset_db.sh +++ b/reset_db.sh @@ -18,7 +18,6 @@ time python manage.py start_import time python manage.py import_expansions time python manage.py import_plWordnet time python manage.py import_tei -time python manage.py import_unification head import.log wc import.log diff --git a/semantics/choices.py b/semantics/choices.py index 2d644ab334711dccf2e8ada0855c350872397bae..bb13df51ee9ce1ab9a798a2e387959ae42b1a364 100644 --- a/semantics/choices.py +++ b/semantics/choices.py @@ -8,4 +8,6 @@ class FrameStatus(models.TextChoices): READY = "G", _("gotowe") VERIFIED = "S", _("sprawdzone") INVALID = "B", _("błędna") # set by lexicographs + NOT_MATCHING_UNIFIED_FRAME = "C", _("niepasująca") # set by lexicographs BAD = "Z", _("zła") # confirmed by super lexicographs + diff --git a/semantics/urls.py b/semantics/urls.py index 8386f8f334a06e39d3f2af2761d3774b1f573666..85f92f130469dce42f7791effd62dc58bbf0203b 100644 --- a/semantics/urls.py +++ b/semantics/urls.py @@ -8,4 +8,8 @@ urlpatterns = [ path('frame_mark_as_invalid/<int:frame_pk>/', views.frame_mark_as_invalid, name='frame_mark_as_invalid'), path('frame_confirm_invalid/<int:frame_pk>/', views.frame_confirm_invalid, name='frame_confirm_invalid'), path('frame_reject_invalid/<int:frame_pk>/', views.frame_reject_invalid, name='frame_reject_invalid'), + path('frame_mark_as_bad/<int:frame_pk>/', views.frame_mark_as_bad, name='frame_mark_as_bad'), + path('frame_reject_as_not_matching_unified_frame/<int:frame_pk>/', views.frame_reject_as_not_matching_unified_frame, name='frame_reject_as_not_matching_unified_frame'), + path('frame_confirm_as_not_matching_unified_frame/<int:frame_pk>/', views.frame_confirm_as_not_matching_unified_frame, name='frame_confirm_as_not_matching_unified_frame'), + ] diff --git a/semantics/views.py b/semantics/views.py index f2043b90c2033f2c75fe1b561cb22d99aa35e0dd..9b6f7cee0f0b8320fb300113238699eaf08a4f86 100644 --- a/semantics/views.py +++ b/semantics/views.py @@ -4,7 +4,7 @@ from django.db import transaction from django.shortcuts import get_object_or_404 from common.decorators import ajax -from unifier.models import UnifiedFrame, UnifiedFrame2SlowalFrameMapping +from unifier.models import UnifiedFrame, UnifiedFrame2SlowalFrameMapping, UnifiedFrameArgumentSlowalFrameMapping from users.models import Assignment from . import choices @@ -26,6 +26,7 @@ def frame_confirm_invalid(request, frame_pk): frame = get_object_or_404(Frame.objects.filter(status=choices.FrameStatus.INVALID).select_for_update(), pk=frame_pk) frame.status = choices.FrameStatus.BAD frame.save() + removeSlovalFrameMappingsAndAssigments(frame_pk) return {} @@ -36,4 +37,45 @@ def frame_reject_invalid(request, frame_pk): frame = get_object_or_404(Frame.objects.filter(status=choices.FrameStatus.INVALID).select_for_update(), pk=frame_pk) frame.status = choices.FrameStatus.NEW frame.save() + removeSlovalFrameMappingsAndAssigments(frame_pk) return {} + +@ajax(login_required=True, method='post') +@transaction.atomic +@permission_required('semantics.manage_invalid_lexical_units') +def frame_mark_as_bad(request, frame_pk): + frame = get_object_or_404(Frame.objects.filter(status=choices.FrameStatus.NEW).select_for_update(), pk=frame_pk) + frame.status = choices.FrameStatus.BAD + frame.save() + removeSlovalFrameMappingsAndAssigments(frame_pk) + return {} + +def removeSlovalFrameMappingsAndAssigments(frame_pk): + #odpianie z ramy zunifikowanej + unifiedFrame2SlowalFrameMappings = UnifiedFrame2SlowalFrameMapping.objects.filter(slowal_frame_id=frame_pk) + for unifiedFrame2SlowalFrameMapping in unifiedFrame2SlowalFrameMappings: + unifiedFrameArgumentSlowalFrameMappings = UnifiedFrameArgumentSlowalFrameMapping.objects.filter(unified_frame_mapping=unifiedFrame2SlowalFrameMapping) + for unifiedFrameArgumentSlowalFrameMapping in unifiedFrameArgumentSlowalFrameMappings: + unifiedFrameArgumentSlowalFrameMapping.delete() + unifiedFrame2SlowalFrameMapping.delete() + Assignment.delete(subject_id=frame_pk) + +@ajax(login_required=True, method='post') +@transaction.atomic +@permission_required('semantics.manage_invalid_lexical_units') +def frame_reject_as_not_matching_unified_frame(request, frame_pk): + frame = get_object_or_404(Frame.objects.filter(status=choices.FrameStatus.NOT_MATCHING_UNIFIED_FRAME).select_for_update(), pk=frame_pk) + frame.status = choices.FrameStatus.PROCESSING + frame.save() + return {} + +@ajax(login_required=True, method='post') +@transaction.atomic +@permission_required('semantics.manage_invalid_lexical_units') +def frame_confirm_as_not_matching_unified_frame(request, frame_pk): + frame = get_object_or_404(Frame.objects.filter(status=choices.FrameStatus.NOT_MATCHING_UNIFIED_FRAME).select_for_update(), pk=frame_pk) + frame.status = choices.FrameStatus.NEW + frame.save() + removeSlovalFrameMappingsAndAssigments(frame_pk) + return {} + diff --git a/syntax/management/commands/import_tei.py b/syntax/management/commands/import_tei.py index 98c3916ef81b62dfd8daa8fd9b243b0ca9d74b64..e030440a753cab3edab1fb9626631772f7ad814b 100644 --- a/syntax/management/commands/import_tei.py +++ b/syntax/management/commands/import_tei.py @@ -34,8 +34,10 @@ def import_tei(): logging.basicConfig(filename='import.log', level=logging.DEBUG) #xml_file = os.path.join(BASE_DIR, 'data', 'walenty', 'walenty_20200926_smaller.xml') - xml_file = os.path.join(BASE_DIR, 'data', 'walenty', 'walenty_20210913_smaller.xml') + # xml_file = os.path.join(BASE_DIR, 'data', 'walenty', 'walenty_20210913_smaller.xml') # xml_file = os.path.join(BASE_DIR, 'data', 'walenty', 'walenty_20210913_smallest.xml') + xml_file = os.path.join(BASE_DIR, 'data', 'walenty', 'walenty_20210913.xml') + xml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), xml_file) diff --git a/users/models.py b/users/models.py index 6d99a10abd10c4f4c0c624e7cf82d2630d3fc3c7..b6dde51edf2a228d23d74358f44f992ff1f294e0 100644 --- a/users/models.py +++ b/users/models.py @@ -24,6 +24,12 @@ class Assignment(models.Model): subject_id=subject.pk, ) + @classmethod + def delete(cls, subject_id): + Assignment.objects.filter( + subject_id=subject_id, + ).delete() + class NoteQuerySet(models.QuerySet): def for_user(self, user):