Commit f5e46594607947896747bf90fe172b8e43b1f4bd

Authored by Marcel Kawski
1 parent 46b15167

Add script changing Documents for Magazines

collector/storage/admin.py
... ... @@ -2,7 +2,8 @@ from django.contrib import admin
2 2  
3 3 from admin_numeric_filter.admin import RangeNumericFilter
4 4  
5   -from storage.models import Chunk, Document, Keyword, Metadata, Participant, Annotation
  5 +from storage.models import Chunk, Document, Keyword, Metadata, Participant, Annotation, Magazine, \
  6 + BookWithMultipleAuthors, Article, Chapter
6 7  
7 8  
8 9 class ChunkInline(admin.StackedInline):
... ... @@ -38,7 +39,7 @@ class DocumentAdmin(admin.ModelAdmin):
38 39 filter_horizontal = ('keywords',)
39 40 inlines = [MetadataInline, ParticipantsInline, ChunkInline]
40 41 list_filter = (('unk_coverage', RangeNumericFilter), 'broken_source', 'image', 'in_effect', 'new', 'changed',
41   - 'indexed', 'pipeline__project', 'pipeline', 'publisher', 'status', 'type',)
  42 + 'indexed', 'pipeline__project', 'pipeline', 'status', 'type',)
42 43 readonly_fields = ('creation_time',)
43 44 search_fields = ['id', 'title']
44 45  
... ... @@ -49,6 +50,10 @@ class AnnotationAdmin(admin.ModelAdmin):
49 50  
50 51 admin.site.register(Chunk, ChunkAdmin)
51 52 admin.site.register(Document, DocumentAdmin)
  53 +admin.site.register(Magazine)
  54 +admin.site.register(BookWithMultipleAuthors)
  55 +admin.site.register(Article)
  56 +admin.site.register(Chapter)
52 57 admin.site.register(Keyword)
53 58 admin.site.register(Participant)
54 59 admin.site.register(Annotation, AnnotationAdmin)
... ...
collector/storage/models.py
... ... @@ -44,14 +44,14 @@ class Document(models.Model):
44 44 parent = models.ForeignKey("self", null=True, default=None, on_delete=models.CASCADE)
45 45 sequence = models.PositiveIntegerField(default=0)
46 46  
47   - def delete(self, *args, **kwargs):
48   - super().delete(*args, **kwargs)
49   - if self.parent is not None:
50   - bigger_subdocs = Document.objects.filter(parent=self.parent,
51   - sequence__gt=self.sequence).order_by('sequence')
52   - for subdoc in bigger_subdocs:
53   - subdoc.sequence -= 1
54   - subdoc.save()
  47 + # def delete(self, *args, **kwargs):
  48 + # super().delete(*args, **kwargs)
  49 + # if self.parent is not None:
  50 + # bigger_subdocs = Document.objects.filter(parent=self.parent,
  51 + # sequence__gt=self.sequence).order_by('sequence')
  52 + # for subdoc in bigger_subdocs:
  53 + # subdoc.sequence -= 1
  54 + # subdoc.save()
55 55  
56 56 def annotated(self):
57 57 for chunk in self.chunks.all():
... ... @@ -145,9 +145,9 @@ class Document(models.Model):
145 145 class Meta:
146 146 db_table = 'document'
147 147 ordering = ['id']
148   - constraints = [
149   - models.UniqueConstraint(fields=['name', 'sequence'], name='unique subdocument sequence')
150   - ]
  148 + # constraints = [
  149 + # models.UniqueConstraint(fields=['name', 'sequence'], name='unique subdocument sequence')
  150 + # ]
151 151  
152 152 def __str__(self):
153 153 return f'{self.name}-{self.id}'
... ...
collector/storage/views.py
... ... @@ -23,7 +23,7 @@ from functools import partial, wraps
23 23  
24 24 from .forms import ChunkForm, ParticipantForm, SubchunkForm, MetadataForm, DocDetailsForm, KeywordForm, DocSplitForm, \
25 25 ChunkMoveForm, SubDocDetailsForm, AuthorForm, ChunkMergeForm, ChunkSplitForm
26   -from .models import Chunk, Document, Participant, Metadata, Keyword, Annotation
  26 +from .models import Chunk, Document, Participant, Metadata, Keyword, Annotation, Magazine, Article
27 27 from projects.ppc.models import Utterance
28 28 from pipeline.models import ProcessingStatus
29 29  
... ... @@ -1110,6 +1110,107 @@ class DraftListView(ListView):
1110 1110  
1111 1111 def get_context_data(self, **kwargs):
1112 1112 context = super(DraftListView, self).get_context_data(**kwargs)
  1113 +
  1114 + main_documents = Document.objects.filter(parent=None)
  1115 + for doc in main_documents:
  1116 + magazine = Magazine.objects.create(name=doc.name,
  1117 + source_id=doc.source_id,
  1118 + lang=doc.lang,
  1119 + original_lang=doc.original_lang,
  1120 + pipeline=doc.pipeline,
  1121 + image=doc.image,
  1122 + broken_source=doc.broken_source,
  1123 + in_effect=doc.in_effect,
  1124 + indexed=doc.indexed,
  1125 + changed=doc.changed,
  1126 + title=doc.title,
  1127 + publication_date=doc.publication_date,
  1128 + publication_place=doc.publication_place,
  1129 + number2=doc.number,
  1130 + creation_time=doc.creation_time,
  1131 + meta_url=doc.meta_url,
  1132 + source_url=doc.source_url,
  1133 + file_url=doc.file_url,
  1134 + path=doc.path,
  1135 + channel=doc.channel,
  1136 + type=doc.type,
  1137 + text_origin=doc.text_origin,
  1138 + status=doc.status,
  1139 + processing_status=doc.processing_status,
  1140 + new=doc.new,
  1141 + unk_coverage=doc.unk_coverage,
  1142 + sequence=1000000)
  1143 +
  1144 + magazine.keywords.add(*doc.keywords.all())
  1145 + for ch in doc.chunks.all():
  1146 + ch.document = magazine
  1147 + ch.save()
  1148 + for m in doc.metadata.all():
  1149 + m.document = magazine
  1150 + m.save()
  1151 + for p in doc.participants.all():
  1152 + p.document = magazine
  1153 + p.save()
  1154 + for a in doc.annotations.all():
  1155 + a.document = magazine
  1156 + a.save()
  1157 +
  1158 +
  1159 + subdocs = Document.objects.filter(parent=doc)
  1160 + for subdoc in subdocs:
  1161 + submagazine = Article.objects.create(name=subdoc.name,
  1162 + source_id=subdoc.source_id,
  1163 + lang=subdoc.lang,
  1164 + original_lang=subdoc.original_lang,
  1165 + pipeline=subdoc.pipeline,
  1166 + image=subdoc.image,
  1167 + broken_source=subdoc.broken_source,
  1168 + in_effect=subdoc.in_effect,
  1169 + indexed=subdoc.indexed,
  1170 + changed=subdoc.changed,
  1171 + title=subdoc.title,
  1172 + publication_date=subdoc.publication_date,
  1173 + publication_place=subdoc.publication_place,
  1174 + creation_time=subdoc.creation_time,
  1175 + meta_url=subdoc.meta_url,
  1176 + source_url=subdoc.source_url,
  1177 + file_url=subdoc.file_url,
  1178 + path=subdoc.path,
  1179 + channel=subdoc.channel,
  1180 + type=subdoc.type,
  1181 + text_origin=subdoc.text_origin,
  1182 + status=subdoc.status,
  1183 + processing_status=subdoc.processing_status,
  1184 + new=subdoc.new,
  1185 + unk_coverage=subdoc.unk_coverage,
  1186 + parent=magazine,
  1187 + sequence=1000001)
  1188 + submagazine.keywords.add(*subdoc.keywords.all())
  1189 + for ch in subdoc.chunks.all():
  1190 + ch.document = submagazine
  1191 + ch.save()
  1192 + for m in subdoc.metadata.all():
  1193 + m.document = submagazine
  1194 + m.save()
  1195 + for p in subdoc.participants.all():
  1196 + p.document = submagazine
  1197 + p.save()
  1198 + for a in subdoc.annotations.all():
  1199 + a.document = submagazine
  1200 + a.save()
  1201 + seq = subdoc.sequence
  1202 + subdoc.delete()
  1203 + submagazine.sequence = seq
  1204 + submagazine.save()
  1205 +
  1206 + seq = doc.sequence
  1207 + doc.delete()
  1208 + magazine.sequence = seq
  1209 + magazine.save()
  1210 +
  1211 +
  1212 +
  1213 +
1113 1214 drafts = [ann.document for ann in
1114 1215 Annotation.objects.filter(user=self.request.user, finished=False).order_by('start_time')
1115 1216 ]
... ...