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',)
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']
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)
+
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
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&VHS</Type>
+ # <Type>d-Vidéo en ligne</Type>
+ # <Type>f-Ouvrage & Thèse</Type>
+ # <Type>g-Revue</Type>
+ # <Type>h-Article</Type>
+ # <Type>i-Photo</Type>
+ # <Type>j-Affiche - Brochure</Type>
+ # <Type>k-Pé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
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
# 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 '-*-*--*-*-*-*-*-*-*-*'
# -*- 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
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,
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(
'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',),
),
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'),
- ),
]
abstract = True
class Author(BaseMany):
- pass
+ alias = models.CharField(max_length=100, blank=True, default='')
+ comment = models.TextField(default='')
class Keyword(BaseMany):
pass
)
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é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érou</Classement_Geographique>
#<Support>Compact Disc Digital Audio</Support>
#<Duree>69'14</Duree>
#<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éâ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