Commit f5e46594607947896747bf90fe172b8e43b1f4bd
1 parent
46b15167
Add script changing Documents for Magazines
Showing
3 changed files
with
120 additions
and
14 deletions
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 | ] |
... | ... |