Commit bd965883a57e6010da8e21bea4442412869c73eb

Authored by janek@kublik
1 parent 6960025a

osobna aplikacja do tabelek

--HG--
branch : beta
rename : dictionary/management/commands/export_template.py => tables/management/commands/export_template.py
rename : dictionary/management/commands/export_templates.py => tables/management/commands/export_templates.py
rename : dictionary/management/commands/import_template.py => tables/management/commands/import_template.py
rename : dictionary/management/commands/import_templates.py => tables/management/commands/import_templates.py
rename : dictionary/templates/inflection_table.html => tables/templates/inflection_table.html
rename : management/templates/table_preview.html => tables/templates/table_preview.html
dictionary/ajax_lexeme_view.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -from django.utils import timezone  
3 -  
4 from django.core.cache import cache 2 from django.core.cache import cache
  3 +from django.db.models import Max
5 from django.shortcuts import get_object_or_404 4 from django.shortcuts import get_object_or_404
  5 +from django.utils import timezone
6 from django.utils.encoding import force_unicode 6 from django.utils.encoding import force_unicode
7 from django.utils.translation import ugettext as _ 7 from django.utils.translation import ugettext as _
8 -from django.db.models import Max  
9 8
  9 +from common.decorators import ajax, AjaxError, render_ajax
  10 +from common.util import error_messages, bisect_left, format_date
10 from dictionary.ajax_lexeme_slickgrid import LexemeQuery 11 from dictionary.ajax_lexeme_slickgrid import LexemeQuery
11 from dictionary.auto_derivatives import lexeme_derivatives, create_derivative 12 from dictionary.auto_derivatives import lexeme_derivatives, create_derivative
12 -from dictionary.models import Lexeme, LexemeInflectionPattern, PartOfSpeech, \  
13 - Vocabulary, Qualifier, ClassificationValue, CrossReference, InputLexeme, \  
14 - CrossReferenceType, LexemeAttributeValue, Gender, LexemeAttribute, \  
15 - LexemeAV, LexemeCV, LexemeList  
16 -from dictionary.util import prepare_table  
17 -from patterns.models import Pattern, Ending  
18 from dictionary.forms import LexemeEditForm, LIPEditForm, ClassificationForm, \ 13 from dictionary.forms import LexemeEditForm, LIPEditForm, ClassificationForm, \
19 CrossReferenceForm, ActionFieldForm, ACTION_FIELDS,\ 14 CrossReferenceForm, ActionFieldForm, ACTION_FIELDS,\
20 LexemeOpenAttributeForm, LexemeClosedAttributeForm, \ 15 LexemeOpenAttributeForm, LexemeClosedAttributeForm, \
21 LexemeMultipleAttributeForm 16 LexemeMultipleAttributeForm
22 -from common.decorators import ajax, AjaxError, render_ajax  
23 -from common.util import error_messages, bisect_left, format_date 17 +from dictionary.models import Lexeme, LexemeInflectionPattern, PartOfSpeech, \
  18 + Vocabulary, Qualifier, ClassificationValue, CrossReference, InputLexeme, \
  19 + CrossReferenceType, LexemeAttributeValue, Gender, LexemeAttribute, \
  20 + LexemeAV, LexemeCV, LexemeList
  21 +from patterns.models import Ending
24 22
25 23
26 @render_ajax( 24 @render_ajax(
@@ -56,43 +54,6 @@ def inflection_tables(request, variant, lexeme_id): @@ -56,43 +54,6 @@ def inflection_tables(request, variant, lexeme_id):
56 } 54 }
57 55
58 56
59 -@render_ajax(template='table_preview.html', method='get')  
60 -def table_preview(request, lexeme_id, lip_id, pattern, attr_data=None,  
61 - gender=None, entry=None, pos=None):  
62 - lexeme = Lexeme.all_objects.get(pk=lexeme_id)  
63 - if not lexeme.perm(request.user, 'view'):  
64 - raise AjaxError('access denied')  
65 - if pos is not None:  
66 - part_of_speech = PartOfSpeech.objects.get(symbol=pos)  
67 - else:  
68 - part_of_speech = lexeme.part_of_speech  
69 - try:  
70 - if entry is not None:  
71 - lexeme.entry = entry  
72 - pattern = Pattern.objects.get(name=pattern)  
73 - gender = Gender.objects.get(id=gender) if gender else None  
74 - if attr_data:  
75 - attr_vals = LexemeAttributeValue.objects.filter(  
76 - id__in=attr_data)  
77 - else:  
78 - attr_vals = None  
79 - if lip_id.startswith('lip_add'):  
80 - lip = LexemeInflectionPattern(lexeme=lexeme, index=0)  
81 - else:  
82 - lip = LexemeInflectionPattern.objects.get(pk=int(lip_id[3:]))  
83 - lip.pattern = pattern  
84 - lip.gender = gender  
85 - lip.root = lip.get_root()  
86 - qualifiers = Qualifier.visible_qualifiers(request.user)  
87 - table = lip.inflection_table(  
88 - '0', separated=True, qualifiers=qualifiers, edit_view=True,  
89 - attr_vals=attr_vals, pos=part_of_speech)  
90 - prepare_table(table)  
91 - except Pattern.DoesNotExist:  
92 - table = None  
93 - return {'table': table, 'color_scheme': part_of_speech.color_scheme}  
94 -  
95 -  
96 @ajax(template='odm_forms.html', method='get') 57 @ajax(template='odm_forms.html', method='get')
97 def odm_forms(request, lexeme_id): 58 def odm_forms(request, lexeme_id):
98 to_return = {} 59 to_return = {}
dictionary/models.py
@@ -12,7 +12,7 @@ from django.utils.translation import ugettext_lazy as _, get_language @@ -12,7 +12,7 @@ from django.utils.translation import ugettext_lazy as _, get_language
12 from accounts.util import users_with_perm 12 from accounts.util import users_with_perm
13 from common.models import NotDeletedManager 13 from common.models import NotDeletedManager
14 from common.util import no_history 14 from common.util import no_history
15 -from dictionary.util import prepare_table 15 +from tables.util import prepare_table
16 from patterns.models import InflectionType, BaseFormLabel, PatternType, Pattern 16 from patterns.models import InflectionType, BaseFormLabel, PatternType, Pattern
17 17
18 18
dictionary/urls.py
@@ -25,7 +25,6 @@ urlpatterns += patterns( @@ -25,7 +25,6 @@ urlpatterns += patterns(
25 url(r'^ajax/odm-forms/$', 'odm_forms'), 25 url(r'^ajax/odm-forms/$', 'odm_forms'),
26 url(r'^ajax/lexeme-edit-form/$', 'lexeme_edit_form'), 26 url(r'^ajax/lexeme-edit-form/$', 'lexeme_edit_form'),
27 url(r'^ajax/update-lexeme/$', 'update_lexeme'), 27 url(r'^ajax/update-lexeme/$', 'update_lexeme'),
28 - url(r'^ajax/table-preview/$', 'table_preview'),  
29 url(r'^ajax/new-lip-row/$', 'new_lip_edit_row'), 28 url(r'^ajax/new-lip-row/$', 'new_lip_edit_row'),
30 url(r'^ajax/new-cr-row/$', 'new_cross_reference_row'), 29 url(r'^ajax/new-cr-row/$', 'new_cross_reference_row'),
31 url(r'^ajax/delete-lexeme/$', 'delete_lexeme'), 30 url(r'^ajax/delete-lexeme/$', 'delete_lexeme'),
dictionary/util.py
@@ -58,36 +58,3 @@ def check_query_params(request, query_params): @@ -58,36 +58,3 @@ def check_query_params(request, query_params):
58 reader = query_params.get('reader', True) 58 reader = query_params.get('reader', True)
59 if not request.user.is_authenticated() and not reader: 59 if not request.user.is_authenticated() and not reader:
60 raise AjaxError('access denied') 60 raise AjaxError('access denied')
61 -  
62 -  
63 -def prepare_table(table):  
64 - for row in table:  
65 - for cell in row:  
66 - if type(cell) == dict and 'forms' in cell:  
67 - cell['forms'].sort()  
68 - seen_forms = []  
69 - unique_forms = []  
70 - form_patterns = {}  
71 - for form in cell['forms']:  
72 - if form[1] not in seen_forms:  
73 - seen_forms.append(form[1])  
74 - unique_forms.append(form)  
75 - form_patterns[form[1]] = set()  
76 - form_patterns[form[1]].add(form[3])  
77 - cell['forms'] = [  
78 - {  
79 - 'form': form,  
80 - 'qualifiers': qualifiers,  
81 - 'patterns': form_patterns[form],  
82 - }  
83 - for (key, form, qualifiers, pattern) in unique_forms]  
84 - elif type(cell) == dict and 'label' in cell:  
85 - seen_labels = []  
86 -  
87 - def is_new(label):  
88 - new = label not in seen_labels  
89 - seen_labels.append(label)  
90 - return new  
91 -  
92 - cell['label'] = filter(is_new, cell['label'])  
93 - return table  
94 \ No newline at end of file 61 \ No newline at end of file
settings.py
@@ -123,6 +123,7 @@ INSTALLED_APPS = ( @@ -123,6 +123,7 @@ INSTALLED_APPS = (
123 # aplikacje projektu 123 # aplikacje projektu
124 'dictionary', 124 'dictionary',
125 'patterns', 125 'patterns',
  126 + 'tables',
126 'management', 127 'management',
127 'export', 128 'export',
128 'accounts', 129 'accounts',
tables/__init__.py 0 → 100644
tables/management/__init__.py 0 → 100644
tables/management/commands/__init__.py 0 → 100644
dictionary/management/commands/export_template.py renamed to tables/management/commands/export_template.py
dictionary/management/commands/export_templates.py renamed to tables/management/commands/export_templates.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 from django.core.management.base import BaseCommand 2 from django.core.management.base import BaseCommand
  3 +
3 from common.util import uniprint, json_encode 4 from common.util import uniprint, json_encode
4 -from dictionary.management.commands.export_template import export_template  
5 from dictionary.models import TableTemplate 5 from dictionary.models import TableTemplate
  6 +from tables.management.commands.export_template import export_template
6 7
7 8
8 class Command(BaseCommand): 9 class Command(BaseCommand):
dictionary/management/commands/import_template.py renamed to tables/management/commands/import_template.py
dictionary/management/commands/import_templates.py renamed to tables/management/commands/import_templates.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 import json 2 import json
  3 +
3 from django.core.management.base import BaseCommand 4 from django.core.management.base import BaseCommand
4 -from dictionary.management.commands.import_template import import_template 5 +
5 from dictionary.models import TableTemplate, LexemeAttribute, \ 6 from dictionary.models import TableTemplate, LexemeAttribute, \
6 LexemeAttributeValue 7 LexemeAttributeValue
7 from patterns.models import PatternType 8 from patterns.models import PatternType
  9 +from tables.management.commands.import_template import import_template
8 10
9 11
10 class Command(BaseCommand): 12 class Command(BaseCommand):
tables/migrations/__init__.py 0 → 100644
tables/models.py 0 → 100644
  1 +from django.db import models
  2 +
  3 +# Create your models here.
dictionary/templates/inflection_table.html renamed to tables/templates/inflection_table.html
management/templates/table_preview.html renamed to tables/templates/table_preview.html
tables/tests.py 0 → 100644
  1 +from django.test import TestCase
  2 +
  3 +# Create your tests here.
tables/urls.py 0 → 100644
  1 +# -*- coding: utf-8 -*-
  2 +
  3 +from django.conf.urls import patterns
  4 +from common.util import url
  5 +
  6 +
  7 +urlpatterns = patterns(
  8 + 'tables.views',
  9 + url(r'^ajax/table-preview/$', 'table_preview'),
  10 +)
0 \ No newline at end of file 11 \ No newline at end of file
tables/util.py 0 → 100644
  1 +# -*- coding: utf-8 -*-
  2 +
  3 +
  4 +def prepare_table(table):
  5 + for row in table:
  6 + for cell in row:
  7 + if type(cell) == dict and 'forms' in cell:
  8 + cell['forms'].sort()
  9 + seen_forms = []
  10 + unique_forms = []
  11 + form_patterns = {}
  12 + for form in cell['forms']:
  13 + if form[1] not in seen_forms:
  14 + seen_forms.append(form[1])
  15 + unique_forms.append(form)
  16 + form_patterns[form[1]] = set()
  17 + form_patterns[form[1]].add(form[3])
  18 + cell['forms'] = [
  19 + {
  20 + 'form': form,
  21 + 'qualifiers': qualifiers,
  22 + 'patterns': form_patterns[form],
  23 + }
  24 + for (key, form, qualifiers, pattern) in unique_forms]
  25 + elif type(cell) == dict and 'label' in cell:
  26 + seen_labels = []
  27 +
  28 + def is_new(label):
  29 + new = label not in seen_labels
  30 + seen_labels.append(label)
  31 + return new
  32 +
  33 + cell['label'] = filter(is_new, cell['label'])
  34 + return table
tables/views.py 0 → 100644
  1 +# -*- coding: utf-8 -*-
  2 +from django.shortcuts import render
  3 +
  4 +from common.decorators import render_ajax, AjaxError
  5 +from dictionary.models import Lexeme, PartOfSpeech, Gender, \
  6 + LexemeAttributeValue, LexemeInflectionPattern, Qualifier
  7 +from tables.util import prepare_table
  8 +from patterns.models import Pattern
  9 +
  10 +
  11 +@render_ajax(template='table_preview.html', method='get')
  12 +def table_preview(request, lexeme_id, lip_id, pattern, attr_data=None,
  13 + gender=None, entry=None, pos=None):
  14 + lexeme = Lexeme.all_objects.get(pk=lexeme_id)
  15 + if not lexeme.perm(request.user, 'view'):
  16 + raise AjaxError('access denied')
  17 + if pos is not None:
  18 + part_of_speech = PartOfSpeech.objects.get(symbol=pos)
  19 + else:
  20 + part_of_speech = lexeme.part_of_speech
  21 + try:
  22 + if entry is not None:
  23 + lexeme.entry = entry
  24 + pattern = Pattern.objects.get(name=pattern)
  25 + gender = Gender.objects.get(id=gender) if gender else None
  26 + if attr_data:
  27 + attr_vals = LexemeAttributeValue.objects.filter(
  28 + id__in=attr_data)
  29 + else:
  30 + attr_vals = None
  31 + if lip_id.startswith('lip_add'):
  32 + lip = LexemeInflectionPattern(lexeme=lexeme, index=0)
  33 + else:
  34 + lip = LexemeInflectionPattern.objects.get(pk=int(lip_id[3:]))
  35 + lip.pattern = pattern
  36 + lip.gender = gender
  37 + lip.root = lip.get_root()
  38 + qualifiers = Qualifier.visible_qualifiers(request.user)
  39 + table = lip.inflection_table(
  40 + '0', separated=True, qualifiers=qualifiers, edit_view=True,
  41 + attr_vals=attr_vals, pos=part_of_speech)
  42 + prepare_table(table)
  43 + except Pattern.DoesNotExist:
  44 + table = None
  45 + return {'table': table, 'color_scheme': part_of_speech.color_scheme}
0 \ No newline at end of file 46 \ No newline at end of file
@@ -36,4 +36,5 @@ urlpatterns = patterns( @@ -36,4 +36,5 @@ urlpatterns = patterns(
36 (r'^paginer/', include('paginer.urls')), 36 (r'^paginer/', include('paginer.urls')),
37 (r'^historia/', include('history.urls')), 37 (r'^historia/', include('history.urls')),
38 (r'^eksport/', include('export.urls')), 38 (r'^eksport/', include('export.urls')),
  39 + (r'^tables/', include('tables.urls')),
39 ) 40 )