from django.contrib import admin
from django.core import urlresolvers
from django.db.models import Q
from relatedwidget import RelatedWidgetWrapperBase
from corpus.models import (
IEDocument, IEDocumentMetadata, Entity, EntityKind, Relation,
EntityOccurrence, GazetteItem
)
admin.site.site_header = 'IEPY administration'
admin.site.site_title = 'IEPY'
admin.site.index_title = 'IEPY'
@admin.register(EntityKind)
class EntityKindAdmin(admin.ModelAdmin):
pass
@admin.register(EntityOccurrence)
class EntityOccurrenceAdmin(admin.ModelAdmin):
pass
@admin.register(Entity)
class EntityAdmin(admin.ModelAdmin):
list_per_page = 20
@admin.register(IEDocumentMetadata)
class IEDocumentMetadataAdmin(admin.ModelAdmin):
def has_delete_permission(self, request, obj=None):
return False
@admin.register(IEDocument)
class IEDocumentAdmin(RelatedWidgetWrapperBase, admin.ModelAdmin):
change_form_template = 'relatives/change_form.html'
list_display = ['id', 'human_identifier', 'link_to_document_navigation']
search_fields = ['text']
fieldsets = [
(None, {'fields': ['human_identifier', 'text', 'metadata']}),
('Preprocess output',
{'classes': ['collapse'],
'fields': ['tokens', 'offsets_to_text', 'tokenization_done_at',
'sentences', 'sentencer_done_at',
'lemmas', 'lemmatization_done_at',
'postags', 'tagging_done_at',
'ner_done_at', 'segmentation_done_at', 'syntactic_parsing_done_at'],
})]
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
metadata_field = form.base_fields['metadata']
if obj is None:
metadata_field.queryset = metadata_field.queryset.filter(
document__isnull=True)
# let's make this field not required during creating.
# This means that on save_model we'll create an empty metadata obj if needed
metadata_field.required = False
else:
metadata_field.queryset = metadata_field.queryset.filter(
Q(document__id=obj.id) | Q(document__isnull=True))
return form
def save_model(self, request, obj, form, change):
if obj.id is None and not change: # ie, creation
try:
obj.metadata
except IEDocumentMetadata.DoesNotExist:
obj.metadata = IEDocumentMetadata.objects.create()
return super().save_model(request, obj, form, change)
def link_to_document_navigation(self, obj):
return 'Rich View'.format(
urlresolvers.reverse('corpus:navigate_document', args=(obj.id,))
)
link_to_document_navigation.short_description = 'Rich View'
link_to_document_navigation.allow_tags = True
list_per_page = 20
@admin.register(Relation)
class RelationAdmin(admin.ModelAdmin):
list_display = ('name', 'left_entity_kind', 'right_entity_kind', 'link_to_label')
def link_to_label(self, obj):
return 'Label evidence'.format(
urlresolvers.reverse('corpus:next_document_to_label', args=(obj.id,))
)
link_to_label.short_description = 'Labeling'
link_to_label.allow_tags = True
def get_readonly_fields(self, request, obj=None):
if obj: # editing an existing object
return self.readonly_fields + ('left_entity_kind', 'right_entity_kind')
return self.readonly_fields
@admin.register(GazetteItem)
class GazetteAdmin(admin.ModelAdmin):
search_fields = ['text']
list_display = ('text', 'kind', 'from_freebase',)
list_filter = ('kind', 'from_freebase',)
readonly_fields = ('from_freebase', )