]> git.parisson.com Git - telemeta_mcm.git/commitdiff
Add models for all documents type
authorThomas Fillon <thomas@parisson.com>
Fri, 22 Jul 2016 22:16:26 +0000 (00:16 +0200)
committerThomas Fillon <thomas@parisson.com>
Fri, 22 Jul 2016 22:16:26 +0000 (00:16 +0200)
mcm/admin.py
mcm/management/commands/import_xml.py
mcm/migrations/0001_initial.py
mcm/models.py

index ff80824b804527a7dca970d96e194f03ddb71d7b..91a9a4baff9cac0fae7c4c3163df59eba3852d80 100644 (file)
@@ -5,8 +5,8 @@ from .models import Author, Keyword, Reference
 from .models import Event, EventEdition, EventType, EventVenue
 from .models import GeographicalClassification
 from .models import Document
-from .models import Notice
-
+from .models import Notice, Disc, Video, VideoFile, BookThesis, Journal
+from .models import Article, Photo, PosterBooklet, Object 
 
 class AuthorAdmin(admin.ModelAdmin):
     list_filter = ('name',)
@@ -43,7 +43,7 @@ class GeoAdmin(admin.ModelAdmin):
     search_fields = ['name']
     ordering = ['name']
             
-class NoticeAdmin(admin.ModelAdmin):
+class DocumentAdmin(admin.ModelAdmin):
     list_display = ('code', 'title')
     list_filter = ('code', 'title')
     search_fields = ['title', 'code']
@@ -64,5 +64,14 @@ admin.site.register(EventType, EventTypeAdmin)
 admin.site.register(EventVenue, EventVenueAdmin)
 admin.site.register(GeographicalClassification, GeoAdmin)
 
-admin.site.register(Document)
-admin.site.register(Notice, NoticeAdmin)
+#admin.site.register(Document)
+admin.site.register(Notice, DocumentAdmin)
+admin.site.register(Disc, DocumentAdmin)
+admin.site.register(Video, DocumentAdmin)
+admin.site.register(VideoFile, DocumentAdmin)
+admin.site.register(BookThesis, DocumentAdmin)
+admin.site.register(Journal, DocumentAdmin)
+admin.site.register(Article, DocumentAdmin)
+admin.site.register(Photo, DocumentAdmin)
+admin.site.register(PosterBooklet, DocumentAdmin)
+                    
index b50836193949e485d8ec5513ae790e9fc3d432b8..de7dbc4225aab6fd0629a0f89d11e51010bdc549 100644 (file)
@@ -3,7 +3,8 @@
 from django.core.management.base import BaseCommand, CommandError
 
 from ...models import Document
-from ...models import Notice
+from ...models import Notice, Disc, Video, VideoFile, BookThesis, Journal
+from ...models import Article, Photo, PosterBooklet, Object 
 from ...models import Author, Keyword, Reference
 from ...models import Event, EventEdition, EventType, EventVenue
 from ...models import GeographicalClassification
@@ -69,25 +70,78 @@ class Command(BaseCommand):
         document_non_traite = 0
         erreur_date_parution = 0
         erreur_date_indexation = 0
+
         
+        # <Type>a-Notice spectacle</Type>
+        # <Type>b-Disque</Type>
+        # <Type>c-Vidéo DVD&#38;VHS</Type>
+        # <Type>d-Vid&#233;o en ligne</Type>
+        # <Type>f-Ouvrage &#38; Th&#232;se</Type>
+        # <Type>g-Revue</Type>
+        # <Type>h-Article</Type>
+        # <Type>i-Photo</Type>
+        # <Type>j-Affiche - Brochure</Type>
+        # <Type>k-P&#233;dagogique</Type>
+        # <Type>l-Objet</Type>
+
+        DOCUMENT_CLASS  = {'a-Notice spectacle': Notice,
+                           'b-Disque': Disc,
+                           u'c-Vidéo DVD&VHS': Video,
+                           u'd-Vidéo en ligne': VideoFile,
+                           u'f-Ouvrage & Thèse': BookThesis,
+                           'g-Revue': Journal,
+                           'h-Article': Article,
+                           'i-Photo': Photo,
+                           'j-Affiche - Brochure': PosterBooklet,
+                           'l-Objet': Object
+                           }
+
+
+
+        skip_document_types = ['e-Site Internet', 'l-Objet', u'k-Pédagogique']
+
+        doc_types = []
+
+        import HTMLParser
+        h = HTMLParser.HTMLParser()
+                
         for document in root.iter('Document'):
             #print '------------'
-            doc_type = document.find('Type').text
+            doc_type = h.unescape(document.findtext('Type'))
             #print doc_type
+            if doc_type in skip_document_types:
+                if doc_type == 'l-Objet':
+                    document_non_traite += 1
+                continue
+
+            document_traite +=1
+            record_no = document.findtext('record_no')
+            code =  document.findtext('Cote')
+            doc_class = DOCUMENT_CLASS[doc_type]     
+            doc, c = doc_class.objects.get_or_create(old_id=record_no,
+                                                     code=code)
+            # Title
+            doc.title = document.findtext('Titre')
+            doc.save()
+            # Keywords
+            for keyword in document.findall('Mots-cles'):
+                    keyword_obj, keyword_c = Keyword.objects.get_or_create(
+                            name=keyword.text)
+                    doc.keywords.add(keyword_obj)
+            
             if doc_type == 'a-Notice spectacle':
-                document_traite +=1
-                record_no = document.findtext('record_no')
-                code =  document.findtext('Cote')
 
                 event_type = document.findtext('Type_Manifestation')
                 if event_type is not None:
-                    event_type_obj, c = EventType.objects.get_or_create(name=event_type)
+                    event_type_obj, c = EventType.objects.get_or_create(
+                        name=event_type)
                 else:
                     event_type_obj = None
 
                 event_venue = document.findtext('Lieu_Manifestation')
                 if event_venue is not None:
-                    event_venue_obj, c = EventVenue.objects.get_or_create(name=event_venue)
+                    event_venue_obj, c = EventVenue.objects.get_or_create(
+                        name=event_venue)
                 else:
                     event_venue_obj = None
                     
@@ -97,32 +151,34 @@ class Command(BaseCommand):
                     
                     edition = document.findtext('No_edition')
                     try:
-                        event_edition_obj, c = EventEdition.objects.get_or_create(event=event_obj, edition=edition)
+                        event_edition_obj, c = EventEdition.objects.get_or_create(
+                            event=event_obj, edition=edition)
                     except ValueError:
                         print code, edition
-                        event_edition_obj, c = EventEdition.objects.get_or_create(event=event_obj, edition=None)
+                        event_edition_obj, c = EventEdition.objects.get_or_create(
+                            event=event_obj, edition=None)
                 else:
                     event_edition_obj = None
 
-                notice, c = Notice.objects.get_or_create(old_id=record_no,
-                                                         code=code,
-                                                         event_edition=event_edition_obj,
-                                                         event_type=event_type_obj,
-                                                         event_venue=event_venue_obj)
+                doc.event_edition = event_edition_obj
+                doc.event_type = event_type_obj
+                doc.event_venue = event_venue_obj
  
-                notice.title = document.findtext('Titre')
+
                 
  
                 import datetime
                 try:
-                    release_date = datetime.datetime.strptime(document.find('Date_de_parution').text,'%d/%m/%y').date()
+                    release_date = datetime.datetime.strptime(
+                        document.find('Date_de_parution').text,'%d/%m/%y').date()
                 except ValueError:
                     #if document.find('Date_de_parution').text == '2015/09/08':
                     #    release_date = datetime.datetime.strptime('08/09/2015','%d/%m/%y').date()
                     release_date = None
                     erreur_date_parution += 1
                 try:
-                   indexation_date = datetime.datetime.strptime(document.find('Date_d_indexation').text,'%d/%m/%y').date()
+                   indexation_date = datetime.datetime.strptime(
+                       document.find('Date_d_indexation').text,'%d/%m/%y').date()
                 except ValueError:
                     indexation_date = None
                     erreur_date_indexation +=1 
@@ -136,24 +192,23 @@ class Command(BaseCommand):
 
                 # Authors
                 for author in document.findall('auteurs'):
-                    author_obj, auth_c = Author.objects.get_or_create(name=author.text)
-                    notice.authors.add(author_obj)
-                # Keywords
-                for keyword in document.findall('Mots-cles'):
-                    keyword_obj, keyword_c = Keyword.objects.get_or_create(name=keyword.text)
-                    notice.keywords.add(keyword_obj)
+                    author_obj, auth_c = Author.objects.get_or_create(
+                        name=author.text)
+                    doc.authors.add(author_obj)
+
                 # Referencess
                 for ref in document.findall('Reference'):
-                    ref_obj, ref_c = Reference.objects.get_or_create(name=ref.text)
-                    notice.references.add(ref_obj)
+                    ref_obj, ref_c = Reference.objects.get_or_create(
+                        name=ref.text)
+                    doc.references.add(ref_obj)
                 # GeographicalClassification
                 geo = document.findtext('Classement_Geographique')
                 if geo is not None:
-                    geo_obj,c = GeographicalClassification.objects.get_or_create(name=geo)
-                    notice.geographic_classification = geo_obj
-                notice.save()
-            else:
-                document_non_traite += 1
+                    geo_obj,c = GeographicalClassification.objects.get_or_create(
+                        name=geo)
+                    doc.geographic_classification = geo_obj
+                doc.save()
+            
             if DEBUG & (document_traite > 100):
                 break
         print '-*-*--*-*-*-*-*-*-*-*'
index bc0ffab3fb03c583bded55207b4a60e643ff8c4b..ce2db4c9dcef045f7e285ae7e8ce4b8a4a315079 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.9.2 on 2016-07-19 15:51
+# Generated by Django 1.9.2 on 2016-07-22 21:58
 from __future__ import unicode_literals
 
 from django.db import migrations, models
@@ -19,6 +19,8 @@ class Migration(migrations.Migration):
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('name', models.CharField(max_length=100, unique=True)),
+                ('alias', models.CharField(blank=True, default='', max_length=100)),
+                ('comment', models.TextField(default='')),
             ],
             options={
                 'abstract': False,
@@ -28,12 +30,9 @@ class Migration(migrations.Migration):
             name='Document',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
                 ('title', models.CharField(max_length=200, verbose_name='title')),
                 ('old_id', models.IntegerField(unique=True)),
-                ('release_date', models.DateField(blank=True, null=True, verbose_name='release date')),
                 ('text', models.TextField(default='')),
-                ('indexation_date', models.DateField(blank=True, null=True, verbose_name='indexation date')),
             ],
         ),
         migrations.CreateModel(
@@ -104,13 +103,89 @@ class Migration(migrations.Migration):
                 'abstract': False,
             },
         ),
+        migrations.CreateModel(
+            name='Article',
+            fields=[
+                ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
+                ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
+            ],
+            bases=('mcm.document',),
+        ),
+        migrations.CreateModel(
+            name='BookThesis',
+            fields=[
+                ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
+                ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
+            ],
+            bases=('mcm.document',),
+        ),
+        migrations.CreateModel(
+            name='Disc',
+            fields=[
+                ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
+                ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
+            ],
+            bases=('mcm.document',),
+        ),
+        migrations.CreateModel(
+            name='Journal',
+            fields=[
+                ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
+                ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
+            ],
+            bases=('mcm.document',),
+        ),
         migrations.CreateModel(
             name='Notice',
             fields=[
                 ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
+                ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
+                ('release_date', models.DateField(blank=True, null=True, verbose_name='release date')),
+                ('indexation_date', models.DateField(blank=True, null=True, verbose_name='indexation date')),
                 ('event_edition', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.EventEdition')),
                 ('event_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.EventType')),
                 ('event_venue', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.EventVenue')),
+                ('geographic_classification', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.GeographicalClassification')),
+                ('references', models.ManyToManyField(to='mcm.Reference')),
+            ],
+            bases=('mcm.document',),
+        ),
+        migrations.CreateModel(
+            name='Object',
+            fields=[
+                ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
+            ],
+            bases=('mcm.document',),
+        ),
+        migrations.CreateModel(
+            name='Photo',
+            fields=[
+                ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
+                ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
+            ],
+            bases=('mcm.document',),
+        ),
+        migrations.CreateModel(
+            name='PosterBooklet',
+            fields=[
+                ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
+                ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
+            ],
+            bases=('mcm.document',),
+        ),
+        migrations.CreateModel(
+            name='Video',
+            fields=[
+                ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
+                ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
+            ],
+            bases=('mcm.document',),
+        ),
+        migrations.CreateModel(
+            name='VideoFile',
+            fields=[
+                ('document_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mcm.Document')),
+                ('code', models.CharField(blank=True, max_length=200, verbose_name='code')),
             ],
             bases=('mcm.document',),
         ),
@@ -119,19 +194,9 @@ class Migration(migrations.Migration):
             name='authors',
             field=models.ManyToManyField(to='mcm.Author'),
         ),
-        migrations.AddField(
-            model_name='document',
-            name='geographic_classification',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mcm.GeographicalClassification'),
-        ),
         migrations.AddField(
             model_name='document',
             name='keywords',
             field=models.ManyToManyField(to='mcm.Keyword'),
         ),
-        migrations.AddField(
-            model_name='document',
-            name='references',
-            field=models.ManyToManyField(to='mcm.Reference'),
-        ),
     ]
index 35f97bf47bd5cd8328e987a433a5ef2e3c44c91f..c03e4a5037b3df5edaff922e5242aa851f23de04 100644 (file)
@@ -18,7 +18,8 @@ class BaseMany(models.Model):
         abstract = True
 
 class Author(BaseMany):
-    pass
+    alias =  models.CharField(max_length=100, blank=True, default='')
+    comment = models.TextField(default='')
 
 class Keyword(BaseMany):
     pass
@@ -65,18 +66,22 @@ DOCUMENT_TYPES = (
     )
     
 class Document(models.Model):
-    code =  models.CharField(_('code'), unique=False, blank=True,
-                             max_length=200)  #  Cote
+
     authors = models.ManyToManyField(Author)  # Auteur
     title =  models.CharField(_('title'),  max_length=200)  # Titre
-    #doc_type =  models.CharField(max_length=1,
-    #                             choices=DOCUMENT_TYPES)  # Type
     old_id = models.IntegerField(unique=True, blank=False)   # Record No
-    references = models.ManyToManyField(Reference)  #<Reference>Le Chant du Monde</Reference>
-    release_date = models.DateField(_('release date'), null=True, blank=True)#<Date_de_parution>1995</Date_de_parution>
-    #<Mots-cles>Musique d'Indon&#233;sie</Mots-cles>
     keywords = models.ManyToManyField(Keyword)  #<Mots-cles>Toraja</Mots-cles>
     text = models.TextField(default='')
+    # see also / Voir aussi
+
+    def __unicode__(self):
+        return self.title
+
+# Type : a-Notice spectacle
+class Notice(Document):
+    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #  Cote
+    references = models.ManyToManyField(Reference)  #<Reference>Le Chant du Monde</Reference>
+    release_date = models.DateField(_('release date'), null=True, blank=True)#<Date_de_parution>1995</Date_de_parution>
     geographic_classification =  models.ForeignKey(GeographicalClassification, null=True, blank=True)# <Classement_Geographique>P&#233;rou</Classement_Geographique>
     #<Support>Compact Disc Digital Audio</Support>
     #<Duree>69'14</Duree>
@@ -87,11 +92,47 @@ class Document(models.Model):
     #<Type>b-Disque</Type>
     #<[record_no]>2300703</[record_no]>
     #<aScript_Source_du_document>Le Chant du Monde ; Editions du CNRS, 1995</aScript_Source_du_document>
-    def __unicode__(self):
-        return self.title
-
-class Notice(Document):
+    
+    #---  Event - Manifestion            
     event_type = models.ForeignKey(EventType, blank=True, null=True)#<Type_Manifestation>Danse</Type_Manifestation>
     event_venue = models.ForeignKey(EventVenue, blank=True, null=True)#<Lieu_Manifestation>Le Rond Point, Th&#233;&#226;tre Renaud-Barrault, Paris</Lieu_Manifestation>
     event_edition = models.ForeignKey(EventEdition, blank=True, null=True)
-    
+
+# Type: b-Disque 
+class Disc(Document):
+    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #          
+# Type : c-Vidéo DVD&VHS
+class Video(Document):
+    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #    
+
+# Type : d-Vidéo en ligne
+class VideoFile(Document):
+    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #    
+        
+# Type : f-Ouvrage & Thèse
+class BookThesis(Document):
+    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #
+
+# Type : g-Revue
+class Journal(Document):
+    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #
+
+# Type : h-Article
+class Article(Document):
+    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #
+
+# Type : i-Photo
+class Photo(Document):
+    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #
+
+# Type : j-Affiche - Brochure
+class PosterBooklet(Document):
+    code =  models.CharField(_('code'), unique=False, blank=True, max_length=200)  #
+
+# Type :k-Pédagogique
+#class Educational(Document):
+#    pass
+
+# Type : l-Objet
+class Object(Document):
+    pass