-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathurls.py
executable file
·307 lines (272 loc) · 23.1 KB
/
urls.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
from django.conf.urls import *
from django.contrib.auth.decorators import login_required, permission_required
from django.urls import re_path, path, include
from signbank.dictionary.models import *
from signbank.dictionary.forms import *
from signbank.dictionary.adminviews import (GlossListView, GlossDetailView, GlossFrequencyView, GlossRelationsDetailView, MorphemeDetailView,
MorphemeListView, HandshapeDetailView, HandshapeListView, LemmaListView, LemmaCreateView, LemmaDeleteView, LemmaFrequencyView,
create_lemma_for_gloss, LemmaUpdateView, SemanticFieldDetailView, SemanticFieldListView, DerivationHistoryDetailView,
DerivationHistoryListView, GlossVideosView, KeywordListView, AnnotatedSentenceDetailView, AnnotatedSentenceListView)
from signbank.dictionary.views import create_citation_image, generate_video_stills_for_gloss
# These are needed for the urls below
import signbank.dictionary.views
import signbank.dictionary.tagviews
import signbank.dictionary.adminviews
import signbank.dictionary.update
import signbank.api_interface
import signbank.manage_videos
import signbank.abstract_machine
import signbank.csv_interface
import signbank.gloss_update
import signbank.dictionary.batch_edit
import signbank.gloss_morphology_update
import signbank.frequency
import signbank.dataset_operations
import signbank.dictionary.gloss_revision
app_name = 'dictionary'
urlpatterns = [
re_path(r'^tag/(?P<tag>[^/]*)/?$', signbank.dictionary.tagviews.taglist),
# an alternate view for direct display of a gloss
re_path(r'gloss/(?P<glossid>\d+).html$', GlossDetailView.as_view(), {'public': True}, name='public_gloss'),
re_path(r'morpheme/(?P<glossid>\d+).html$', signbank.dictionary.views.morpheme, name='public_morpheme'),
re_path(r'^update/gloss/(?P<glossid>\d+)$', signbank.dictionary.update.update_gloss, name='update_gloss'),
re_path(r'^update/handshape/(?P<handshapeid>\d+)$', signbank.dictionary.update.update_handshape, name='update_handshape'),
re_path(r'^update/morpheme/(?P<morphemeid>\d+)$', signbank.dictionary.update.update_morpheme, name='update_morpheme'),
re_path(r'^update/tag/(?P<glossid>\d+)$', signbank.dictionary.update.add_tag, name='add_tag'),
re_path(r'^update/affiliation/(?P<glossid>\d+)$', signbank.dictionary.update.add_affiliation, name='add_affiliation'),
re_path(r'^update/morphemetag/(?P<morphemeid>\d+)$', signbank.dictionary.update.add_morphemetag, name='add_morphemetag'),
re_path(r'^update/definition/(?P<glossid>\d+)$', signbank.dictionary.update.add_definition, name='add_definition'),
re_path(r'^update/relation/$', signbank.dictionary.update.add_relation, name='add_relation'),
re_path(r'^update/relationtoforeignsign/$', signbank.dictionary.update.add_relationtoforeignsign, name='add_relationtoforeignsign'),
re_path(r'^update/morphologydefinition/$', signbank.dictionary.update.add_morphology_definition, name='add_morphologydefinition'),
re_path(r'^update/morphemedefinition/(?P<glossid>\d+)$', signbank.dictionary.update.add_morpheme_definition, name='add_morphemedefinition'),
re_path(r'^update/othermedia/', signbank.dictionary.update.add_othermedia, name='add_othermedia'),
re_path(r'^update/gloss/', signbank.dictionary.update.add_gloss, name='add_gloss'),
re_path(r'^update/assign_lemma_dataset_to_gloss/(?P<glossid>\d+)$', signbank.dictionary.update.assign_lemma_dataset_to_gloss,
name='assign_lemma_dataset_to_gloss'),
re_path(r'^update/sense/(?P<senseid>\d+)$', signbank.dictionary.update.update_sense, name='update_sense'),
re_path(r'^update/linksense/(?P<senseid>\d+)$', signbank.dictionary.update.link_sense, name='link_sense'),
re_path(r'^update/addsense/(?P<glossid>\d+)$', signbank.dictionary.update.create_sense, name='create_sense'),
re_path(r'^update/sortsense/(?P<glossid>\d+)/(?P<order>\d+)/(?P<direction>\w+)$', signbank.dictionary.update.sort_sense, name='sort_sense'),
re_path(r'^update/sortexamplesentence/(?P<senseid>\d+)/(?P<glossid>\d+)/(?P<order>\d+)/(?P<direction>\w+)$', signbank.dictionary.update.sort_examplesentence, name='sort_examplesentence'),
re_path(r'^update/deletesense/(?P<glossid>\d+)$', signbank.dictionary.update.delete_sense, name='delete_sense'),
re_path(r'^update/examplesentence/(?P<examplesentenceid>\d+)$', signbank.dictionary.update.update_examplesentence, name='update_examplesentence'),
re_path(r'^update/addexamplesentence/(?P<senseid>\d+)$', signbank.dictionary.update.create_examplesentence, name='create_examplesentence'),
re_path(r'^update/deleteexamplesentence/(?P<senseid>\d+)$', signbank.dictionary.update.delete_examplesentence, name='delete_examplesentence'),
re_path(r'^update/addsentencevideo/(?P<glossid>\d+)/(?P<examplesentenceid>\d+)$', signbank.dictionary.update.add_sentence_video, name='add_sentence_video'),
re_path(r'^update/addannotatedmedia/(?P<glossid>\d+)$', signbank.dictionary.update.add_annotated_media, name='add_annotated_media'),
re_path(r'^update/updateannotatedsentence/(?P<glossid>\d+)/(?P<annotatedsentenceid>\d+)$', signbank.dictionary.update.edit_annotated_sentence, name='edit_annotated_sentence'),
re_path(r'^update/saveeditannotatedsentence/', signbank.dictionary.update.save_edit_annotated_sentence, name='save_edit_annotated_sentence'),
re_path(r'^update/deleteannotatedsentence/(?P<glossid>\d+)$', signbank.dictionary.update.delete_annotated_sentence, name='delete_annotated_sentence'),
re_path(r'^update/morpheme/', signbank.dictionary.update.add_morpheme, name='add_morpheme'),
re_path(r'^update/blenddefinition/(?P<glossid>\d+)$', signbank.dictionary.update.add_blend_definition, name='add_blenddefinition'),
re_path(r'^update/field_choice_color/(?P<category>.*)/(?P<fieldchoiceid>\d+)$', login_required(signbank.dictionary.update.update_field_choice_color),
name='update_field_choice_color'),
re_path(r'^update/query/(?P<queryid>\d+)$', signbank.dictionary.update.update_query, name='update_query'),
re_path(r'^update/semanticfield/(?P<semfieldid>\d+)$', signbank.dictionary.update.update_semfield, name='update_semfield'),
re_path(r'^update/group_keywords/(?P<glossid>\d+)$', signbank.dictionary.update.group_keywords,
name='group_keywords'),
re_path(r'^update/edit_keywords/(?P<glossid>\d+)$', signbank.dictionary.update.edit_keywords,
name='edit_keywords'),
re_path(r'^update/add_keyword/(?P<glossid>\d+)$', signbank.dictionary.update.add_keyword,
name='add_keyword'),
re_path(r'^update/edit_senses_matrix/(?P<glossid>\d+)$', signbank.dictionary.update.edit_senses_matrix,
name='edit_senses_matrix'),
re_path(r'^update/toggle_sense_tag/(?P<glossid>\d+)$', signbank.dictionary.update.toggle_sense_tag,
name='toggle_sense_tag'),
re_path(r'^update/toggle_tag/(?P<glossid>\d+)/(?P<tagid>.*)$', signbank.dictionary.update.toggle_tag,
name='toggle_tag'),
re_path(r'^update/toggle_semantics/(?P<glossid>\d+)/(?P<semanticfield>.*)$', signbank.dictionary.update.toggle_semantic_field,
name='toggle_semantic_field'),
re_path(r'^update/toggle_wordclass/(?P<glossid>\d+)/(?P<wordclass>.*)$',
signbank.dictionary.update.toggle_wordclass,
name='toggle_wordclass'),
re_path(r'^update/toggle_namedentity/(?P<glossid>\d+)/(?P<namedentity>.*)$',
signbank.dictionary.update.toggle_namedentity,
name='toggle_namedentity'),
re_path(r'^update/toggle_handedness/(?P<glossid>\d+)/(?P<handedness>.*)$',
signbank.dictionary.update.toggle_handedness,
name='toggle_handedness'),
re_path(r'^update/toggle_domhndsh/(?P<glossid>\d+)/(?P<domhndsh>.*)$',
signbank.dictionary.update.toggle_domhndsh,
name='toggle_domhndsh'),
re_path(r'^update/toggle_subhndsh/(?P<glossid>\d+)/(?P<subhndsh>.*)$',
signbank.dictionary.update.toggle_subhndsh,
name='toggle_subhndsh'),
re_path(r'^update/toggle_handCh/(?P<glossid>\d+)/(?P<handCh>.*)$',
signbank.dictionary.update.toggle_handCh,
name='toggle_handCh'),
re_path(r'^update/toggle_relatArtic/(?P<glossid>\d+)/(?P<relatArtic>.*)$',
signbank.dictionary.update.toggle_relatArtic,
name='toggle_relatArtic'),
re_path(r'^update/toggle_locprim/(?P<glossid>\d+)/(?P<locprim>.*)$',
signbank.dictionary.update.toggle_locprim,
name='toggle_locprim'),
re_path(r'^update/toggle_contType/(?P<glossid>\d+)/(?P<contType>.*)$',
signbank.dictionary.update.toggle_contType,
name='toggle_contType'),
re_path(r'^update/toggle_movSh/(?P<glossid>\d+)/(?P<movSh>.*)$',
signbank.dictionary.update.toggle_movSh,
name='toggle_movSh'),
re_path(r'^update/toggle_movDir/(?P<glossid>\d+)/(?P<movDir>.*)$',
signbank.dictionary.update.toggle_movDir,
name='toggle_movDir'),
re_path(r'^update/toggle_repeat/(?P<glossid>\d+)/(?P<repeat>.*)$',
signbank.dictionary.update.toggle_repeat,
name='toggle_repeat'),
re_path(r'^update/toggle_altern/(?P<glossid>\d+)/(?P<altern>.*)$',
signbank.dictionary.update.toggle_altern,
name='toggle_altern'),
re_path(r'^update/toggle_relOriMov/(?P<glossid>\d+)/(?P<relOriMov>.*)$',
signbank.dictionary.update.toggle_relOriMov,
name='toggle_relOriMov'),
re_path(r'^update/toggle_relOriLoc/(?P<glossid>\d+)/(?P<relOriLoc>.*)$',
signbank.dictionary.update.toggle_relOriLoc,
name='toggle_relOriLoc'),
re_path(r'^update/toggle_oriCh/(?P<glossid>\d+)/(?P<oriCh>.*)$',
signbank.dictionary.update.toggle_oriCh,
name='toggle_oriCh'),
re_path(r'^update/quick_create_sense/(?P<glossid>\d+)$',
signbank.dictionary.update.quick_create_sense,
name='quick_create_sense'),
re_path(r'^update/toggle_language_fields/(?P<glossid>\d+)$',
signbank.dictionary.update.toggle_language_fields,
name='toggle_language_fields'),
re_path(r'^gloss_revision/cleanup/(?P<glossid>\d+)$',
signbank.dictionary.gloss_revision.cleanup,
name='gloss_revision_cleanup'),
# The next one does not have a permission check because it should be accessible from a cronjob
re_path(r'^update_ecv/', GlossListView.as_view(only_export_ecv=True)),
re_path(r'^update/variants_of_gloss/$', signbank.dictionary.update.variants_of_gloss, name='variants_of_gloss'),
re_path(r'^switch_to_language/(?P<language>[\-a-z]{2,20})$', signbank.dictionary.views.switch_to_language,name='switch_to_language'),
# Ajax urls
re_path(r'^ajax/tags/$', signbank.dictionary.tagviews.taglist_json),
re_path(r'^ajax/gloss/(?P<prefix>.*)$', signbank.dictionary.adminviews.gloss_ajax_complete, name='gloss_complete'),
re_path(r'^ajax/similarglosses/(?P<gloss_id>.*)$', signbank.dictionary.batch_edit.similarglosses, name='similarglosses'),
re_path(r'^ajax/handshape/(?P<prefix>.*)$', signbank.dictionary.adminviews.handshape_ajax_complete, name='handshape_complete'),
re_path(r'^ajax/morph/(?P<prefix>.*)$', signbank.dictionary.adminviews.morph_ajax_complete, name='morph_complete'),
re_path(r'^ajax/user/(?P<prefix>.*)$', permission_required('dictionary.change_gloss')(signbank.dictionary.adminviews.user_ajax_complete), name='user_complete'),
re_path(r'^ajax/searchresults/$',signbank.dictionary.adminviews.gloss_ajax_search_results, name='ajax_search_results'),
re_path(r'^ajax/handshapesearchresults/$', signbank.dictionary.adminviews.handshape_ajax_search_results, name='handshape_ajax_search_results'),
re_path(r'^ajax/lemmasearchresults/$', signbank.dictionary.adminviews.lemma_ajax_search_results, name='lemma_ajax_search_results'),
re_path(r'^ajax/annotatedsearchresults/$', signbank.dictionary.adminviews.annotatedsentence_ajax_search_results, name='annotatedsentence_ajax_search_results'),
re_path(r'^ajax/lemma/(?P<dataset_id>.*)/(?P<language_code>.*)/(?P<q>.*)$', permission_required('dictionary.change_gloss')(signbank.dictionary.adminviews.lemma_ajax_complete), name='lemma_complete'),
re_path(r'^ajax/sensetranslation/(?P<dataset_id>.*)/(?P<language_code>.*)/(?P<q>.*)$', permission_required('dictionary.change_gloss')(signbank.dictionary.adminviews.sensetranslation_ajax_complete), name='sensetranslation_complete'),
re_path(r'^ajax/homonyms/(?P<gloss_id>.*)/$', signbank.dictionary.adminviews.homonyms_ajax_complete, name='homonyms_ajax_complete'),
re_path(r'^ajax/minimalpairs/(?P<gloss_id>.*)/$', signbank.dictionary.adminviews.minimalpairs_ajax_complete, name='minimalpairs_ajax_complete'),
re_path(r'^ajax/glossrow/(?P<gloss_id>.*)/$', signbank.dictionary.adminviews.glosslist_ajax_complete, name='glosslist_ajax_complete'),
re_path(r'^ajax/glosslistheader/$', signbank.dictionary.adminviews.glosslistheader_ajax, name='glosslistheader_ajax'),
re_path(r'^ajax/senserow/(?P<sense_id>.*)/$', signbank.dictionary.adminviews.senselist_ajax_complete, name='senselist_ajax_complete'),
re_path(r'^ajax/senselistheader/$', signbank.dictionary.adminviews.senselistheader_ajax, name='senselistheader_ajax'),
re_path(r'^ajax/lemmaglossrow/(?P<gloss_id>.*)/$', signbank.dictionary.adminviews.lemmaglosslist_ajax_complete, name='lemmaglosslist_ajax_complete'),
re_path(r'^ajax/fetch_video_stills_for_gloss/(?P<gloss_id>.*)/$', signbank.dictionary.adminviews.fetch_video_stills_for_gloss, name='fetch_video_stills_for_gloss'),
re_path(r'^ajax/annotatedglosslistheader/$', signbank.dictionary.adminviews.annotatedglosslistheader_ajax,
name='annotatedglosslistheader_ajax'),
re_path(r'^ajax/annotatedglossrow/(?P<annotatedgloss_id>\d+)/$', signbank.dictionary.adminviews.annotatedglosslist_ajax_complete,
name='annotatedglosslist_ajax_complete'),
re_path(r'^ajax/choice_lists/$', signbank.dictionary.views.choice_lists,name='choice_lists'),
re_path(r'^missingvideo.html$', signbank.dictionary.views.missing_video_view),
re_path(r'update_corpus_document_counts/(?P<dataset_id>.*)/(?P<document_id>.*)/$',
permission_required('dictionary.change_gloss')(signbank.frequency.update_document_counts)),
re_path(r'update_corpora/$',
permission_required('dictionary.change_gloss')(signbank.frequency.update_corpora)),
re_path(r'find_and_save_variants/$',login_required(signbank.dictionary.views.find_and_save_variants), name='find_and_save_variants'),
re_path(r'export_csv_template/$', signbank.csv_interface.export_csv_template,
name='export_csv_template'),
re_path(r'get_unused_videos/$',permission_required('dictionary.change_gloss')(signbank.dictionary.views.get_unused_videos)),
re_path(r'package/$', signbank.dictionary.views.package),
re_path(r'get_gloss_data/(?P<datasetid>\d+)/(?P<glossid>\d+)/$',
signbank.api_interface.get_gloss_data_json, name='get_gloss_data_json'),
re_path(r'get_fields_data/(?P<datasetid>\d+)/$',
signbank.api_interface.get_fields_data_json, name='get_fields_data_json'),
re_path(r'get_unzipped_video_files_json/(?P<datasetid>\d+)/$',
signbank.api_interface.get_unzipped_video_files_json, name='get_unzipped_video_files_json'),
re_path(r'upload_zipped_videos_folder_json/(?P<datasetid>\d+)/$',
signbank.api_interface.upload_zipped_videos_folder_json, name='upload_zipped_videos_folder_json'),
re_path(r'upload_zipped_videos_archive/(?P<datasetid>\d+)/$',
signbank.api_interface.upload_zipped_videos_archive, name='upload_zipped_videos_archive'),
re_path(r'upload_videos_to_glosses/(?P<datasetid>\d+)/$',
signbank.api_interface.upload_videos_to_glosses, name='upload_videos_to_glosses'),
re_path(r'upload_zipped_videos_folder/$',
signbank.manage_videos.upload_zipped_videos_folder, name='upload_zipped_videos_folder'),
re_path(r'import_video_to_gloss_json/$',
signbank.manage_videos.import_video_to_gloss_json, name='import_video_to_gloss_json'),
re_path(r'api_create_gloss/(?P<datasetid>\d+)/$',
signbank.abstract_machine.api_create_gloss, name='api_create_gloss'),
re_path(r'test_abstract_machine/(?P<datasetid>\d+)/$',
signbank.dictionary.views.test_abstract_machine, name='test_abstract_machine'),
re_path(r'api_update_gloss/(?P<datasetid>\d+)/(?P<glossid>\d+)/$',
signbank.gloss_update.api_update_gloss, name='api_update_gloss'),
re_path(r'api_delete_gloss/(?P<datasetid>\d+)/(?P<glossid>\d+)/$',
signbank.gloss_update.api_delete_gloss, name='api_delete_gloss'),
re_path(r'api_restore_gloss/(?P<datasetid>\d+)/(?P<glossid>\d+)/$',
signbank.gloss_update.api_restore_gloss, name='api_restore_gloss'),
re_path(r'test_am_update_gloss/(?P<datasetid>\d+)/(?P<glossid>\d+)/$',
signbank.dictionary.views.test_am_update_gloss, name='test_am_update_gloss'),
re_path(r'api_update_gloss_morphology/(?P<datasetid>\d+)/(?P<glossid>\d+)/$',
signbank.gloss_morphology_update.api_update_gloss_morphology, name='api_update_gloss'),
re_path(r'api_update_gloss_nmevideo/(?P<datasetid>\d+)/(?P<glossid>\d+)/(?P<videoid>\d+)/$',
signbank.gloss_update.api_update_gloss_nmevideo, name='api_update_gloss_nmevideo'),
re_path(r'api_create_gloss_nmevideo/(?P<datasetid>\d+)/(?P<glossid>\d+)/$',
signbank.gloss_update.api_create_gloss_nmevideo, name='api_create_gloss_nmevideo'),
re_path(r'api_delete_gloss_nmevideo/(?P<datasetid>\d+)/(?P<glossid>\d+)/(?P<videoid>\d+)/$',
signbank.gloss_update.api_delete_gloss_nmevideo, name='api_delete_gloss_nmevideo'),
re_path(r'api_create_annotated_sentence/(?P<datasetid>\d+)/$',
signbank.gloss_update.api_create_annotated_sentence, name='api_create_annotated_sentence'),
re_path(r'api_update_annotated_sentence/(?P<datasetid>\d+)/(?P<annotatedsentenceid>\d+)/$',
signbank.gloss_update.api_update_annotated_sentence, name='api_update_annotated_sentence'),
re_path(r'api_delete_annotated_sentence/(?P<datasetid>\d+)/(?P<annotatedsentenceid>\d+)/$',
signbank.gloss_update.api_delete_annotated_sentence, name='api_delete_annotated_sentence'),
re_path(r'get_annotated_sentences_of_gloss/(?P<datasetid>\d+)/(?P<glossid>\d+)/$',
signbank.api_interface.get_annotated_sentences_of_gloss_json, name='get_annotated_sentences_of_gloss_json'),
re_path(r'restore_gloss/(?P<glossid>\d+)/$',
signbank.dictionary.update.restore_gloss, name='restore_gloss'),
re_path(r'^trash_gloss/(?P<glossid>\d+)$', signbank.dictionary.update.trash_gloss, name='trash_gloss'),
re_path(r'update_gloss_video_backups/(?P<glossid>\d+)/$',
permission_required('dictionary.change_gloss')(signbank.dataset_operations.update_gloss_video_backups)),
re_path(r'info/$', signbank.dictionary.views.info),
re_path(r'protected_media/(?P<filename>.*)$', signbank.dictionary.views.protected_media, name='protected_media'),
# Admin views
re_path(r'^try/(?P<pk>\d+)$', signbank.dictionary.views.try_code), # View for the developer to view senses for a gloss
re_path(r'^gif_prototype/$', signbank.dictionary.views.gif_prototype),
re_path(r'^list/$', permission_required('dictionary.search_gloss')(GlossListView.as_view()), name='admin_gloss_list'),
re_path(r'^morphemes/$', permission_required('dictionary.search_gloss')(MorphemeListView.as_view()), name='admin_morpheme_list'),
re_path(r'^handshapes/$', permission_required('dictionary.search_gloss')(HandshapeListView.as_view()), name='admin_handshape_list'),
re_path(r'^gloss/(?P<gloss_pk>\d+)/history', signbank.dictionary.views.gloss_revision_history, name='gloss_revision_history'),
re_path(r'^gloss/(?P<pk>\d+)/glossvideos', GlossVideosView.as_view(), name='gloss_videos'),
re_path(r'^api_update_gloss/(?P<gloss_id>\d+)/video', signbank.api_interface.api_add_video, name='api_add_video'),
re_path(r'^api_update_gloss/(?P<gloss_id>\d+)/image', signbank.api_interface.api_add_image, name='api_add_image'),
re_path(r'^gloss/(?P<pk>\d+)', GlossDetailView.as_view(), {'public': False}, name='admin_gloss_view'),
re_path(r'^gloss_preview/(?P<pk>\d+)', GlossDetailView.as_view(), name='admin_gloss_view_colors'),
re_path(r'^gloss_frequency/(?P<gloss_id>.*)/$', GlossFrequencyView.as_view(), name='admin_frequency_gloss'),
re_path(r'^lemma_frequency/(?P<gloss_id>.*)/$', LemmaFrequencyView.as_view(), name='admin_frequency_lemma'),
re_path(r'^gloss_relations/(?P<pk>\d+)', GlossRelationsDetailView.as_view(), name='admin_gloss_relations_view'),
re_path(r'^morpheme/(?P<pk>\d+)', MorphemeDetailView.as_view(), name='admin_morpheme_view'),
re_path(r'^handshape/(?P<pk>\d+)/$', HandshapeDetailView.as_view(), name='admin_handshape_view'),
re_path(r'^semanticfield/(?P<pk>\d+)', SemanticFieldDetailView.as_view(), name='admin_semanticfield_view'),
re_path(r'^semanticfields/$', permission_required('dictionary.search_gloss')(SemanticFieldListView.as_view()), name='admin_semanticfield_list'),
re_path(r'^derivationhistory/(?P<pk>\d+)', DerivationHistoryDetailView.as_view(), name='admin_derivationhistory_view'),
re_path(r'^derivationhistory_list/$', permission_required('dictionary.search_gloss')(DerivationHistoryListView.as_view()),
name='admin_derivationhistory_list'),
# Lemma Idgloss views
re_path(r'^lemma/$', login_required(LemmaListView.as_view()), name='admin_lemma_list'),
re_path(r'^annotatedsentence/$', login_required(AnnotatedSentenceListView.as_view()), name='admin_annotatedsentence_list'),
re_path(r'^lemma/add/$', permission_required('dictionary.add_lemmaidgloss')(LemmaCreateView.as_view()), name='create_lemma'),
re_path(r'^lemma/delete/(?P<pk>\d+)', permission_required('dictionary.delete_lemmaidgloss')(LemmaDeleteView.as_view()), name='delete_lemma'),
re_path(r'lemma/add/(?P<glossid>\d+)$', signbank.dictionary.adminviews.create_lemma_for_gloss, name='create_lemma_gloss'),
re_path(r'lemma/update/(?P<pk>\d+)$', permission_required('dictionary.change_lemmaidgloss')(LemmaUpdateView.as_view()), name='change_lemma'),
re_path(r'^annotatedsentence/(?P<pk>\d+)', AnnotatedSentenceDetailView.as_view(), name='admin_annotated_sentence_view'),
re_path(r'^keywords/$', KeywordListView.as_view(), name='admin_keyword_list'),
re_path(r'find_interesting_frequency_examples',signbank.dictionary.views.find_interesting_frequency_examples),
re_path(r'missing_video_view', signbank.dictionary.views.missing_video_view),
re_path(r'createcitationimage/(?P<pk>\d+)',
permission_required('dictionary.change_gloss')(signbank.dictionary.views.create_citation_image),
name='create_citation_image'),
re_path(r'generate_video_stills_for_gloss/(?P<pk>\d+)',
permission_required('dictionary.change_gloss')(signbank.dictionary.views.generate_video_stills_for_gloss),
name='generate_video_stills_for_gloss'),
re_path(r'save_chosen_still_for_gloss/(?P<pk>\d+)',
permission_required('dictionary.change_gloss')(signbank.dictionary.views.save_chosen_still_for_gloss),
name='save_chosen_still_for_gloss'),
re_path(r'gloss/api/', signbank.dictionary.views.gloss_api_get_sign_name_and_media_info, name='gloss_api_get_info')
]