# HG changeset patch # User ymh # Date 1377878315 -7200 # Node ID 6296aa12fd71817f4c7eb7b0393cf0d339991d17 # Parent 57efd01f17154adb30bd2f549b313a2e04ef13a1 model simplification, correct import on language. We do not try to impose a language when none is found. add forgotten abstract field on import. diff -r 57efd01f1715 -r 6296aa12fd71 src/p4l/management/commands/import_record.py --- a/src/p4l/management/commands/import_record.py Fri Aug 30 17:09:14 2013 +0200 +++ b/src/p4l/management/commands/import_record.py Fri Aug 30 17:58:35 2013 +0200 @@ -4,7 +4,7 @@ from django.db import reset_queries, transaction from optparse import make_option from p4l.models import Record, Language -from p4l.utils import show_progress, get_code_from_language_uri +from p4l.utils import show_progress from rdflib import Graph, Namespace, BNode, URIRef from rdflib.plugins.sparql import prepareQuery import logging @@ -100,20 +100,6 @@ return False return bool(val) - def convert_lang(self, val, default_lang): - return unicode(val) if (val is not None and len(unicode(val))>0) else default_lang - - - def get_record_default_language(self, g, record_uri): - lang_uri = self.extract_single_value_form_graph(g, DEFAULT_LANGUAGE_QUERY, bindings={'s': URIRef(record_uri)}) - if not lang_uri: - lang_uri = DEFAULT_LANGUAGE_URI - lang_code = get_code_from_language_uri(lang_uri) - if lang_code is None: - logger.warn("get_record_default_language: no code found for %s in record %s" % (lang_uri, record_uri)) - return get_code_from_language_uri(DEFAULT_LANGUAGE_URI) - return lang_code - def add_to_related_collection(self, coll, graph, fields, q, bindings={}, convert=lambda v: unicode(v) if v is not None else None, through_fields=None): @@ -146,7 +132,6 @@ def build_record(self, graph): record_uri = self.extract_single_value_form_graph(graph,"SELECT DISTINCT ?s WHERE { ?s rdf:type iiep:Record .}") - default_language_code = self.get_record_default_language(graph, record_uri) record = Record() record.uri = record_uri @@ -176,7 +161,6 @@ ['label','lang'], "SELECT DISTINCT ?o ( lang(?o) as ?l) WHERE { ?s iiep:periodical ?o .}", bindings={'s':URIRef(record.uri)}, - convert={'lang':lambda l: self.convert_lang(l, default_language_code)}, through_fields = ['lang'] ) @@ -185,7 +169,7 @@ graph, ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear', 'lang'], "SELECT ?l ?mn ?mp ?md ?my (lang(COALESCE(?l,?nm, ?mp,?md,?my)) as ?lang) WHERE { [iiep:meeting ?bnode]. OPTIONAL { ?bnode rdfs:label ?l }. OPTIONAL { ?bnode iiep:meetingNumber ?mn }. OPTIONAL { ?bnode iiep:meetingPlace ?mp }. OPTIONAL { ?bnode iiep:meetingDate ?md }. OPTIONAL { ?bnode iiep:meetingYear ?my }}", - convert={'lang':lambda l: self.convert_lang(l, default_language_code), 'meetingYear' : lambda y: int(y) if y is not None else None}, + convert={'meetingYear' : lambda y: int(y) if y is not None else None}, through_fields = ['lang'] ) @@ -194,7 +178,6 @@ graph, ['title', 'volume', 'lang'], "SELECT ?t ?vol (lang(COALESCE(?t,?vol)) as ?lang) WHERE { [iiep:serie ?bnode]. OPTIONAL { ?bnode dct:title ?t }. OPTIONAL { ?bnode iiep:volume ?vol } }", - convert={'lang':lambda l: self.convert_lang(l, default_language_code)}, through_fields = ['lang'] ) @@ -226,7 +209,6 @@ ['issn', 'lang'], "SELECT ?issn (lang(COALESCE(?issn)) as ?lang) WHERE { ?s iiep:issn ?issn . }", bindings={'s':URIRef(record.uri)}, - convert={'lang':lambda l: self.convert_lang(l, default_language_code)} ) self.add_to_related_collection( @@ -235,7 +217,6 @@ ['isbn', 'lang'], "SELECT ?isbn (lang(COALESCE(?isbn)) as ?lang) WHERE { ?s iiep:isbn ?isbn . }", bindings={'s':URIRef(record.uri)}, - convert={'lang':lambda l: self.convert_lang(l, default_language_code)} ) self.add_to_related_collection( @@ -244,7 +225,6 @@ ['documentCode', 'lang'], "SELECT ?c (lang(COALESCE(?c)) as ?lang) WHERE { ?s iiep:documentCode ?c . }", bindings={'s':URIRef(record.uri)}, - convert={'lang':lambda l: self.convert_lang(l, default_language_code)} ) self.add_to_related_collection( @@ -253,7 +233,14 @@ ['title', 'lang'], "SELECT ?t (lang(COALESCE(?t)) as ?lang) WHERE { ?s dct:title ?t . }", bindings={'s':URIRef(record.uri)}, - convert={'lang':lambda l: self.convert_lang(l, default_language_code)} + ) + + self.add_to_related_collection( + record.abstracts, + graph, + ['abstract', 'lang'], + "SELECT ?t (lang(COALESCE(?t)) as ?lang) WHERE { ?s dct:abstract ?t . }", + bindings={'s':URIRef(record.uri)}, ) self.add_to_related_collection( @@ -262,7 +249,6 @@ ['title', 'lang'], "SELECT ?t (lang(COALESCE(?t)) as ?lang) WHERE { ?s iiep:addedTitle ?t . }", bindings={'s':URIRef(record.uri)}, - convert={'lang':lambda l: self.convert_lang(l, default_language_code)} ) self.add_to_related_collection( @@ -271,7 +257,6 @@ ['title', 'lang'], "SELECT ?t (lang(COALESCE(?t)) as ?lang) WHERE { ?s iiep:titleMainDocument ?t . }", bindings={'s':URIRef(record.uri)}, - convert={'lang':lambda l: self.convert_lang(l, default_language_code)} ) self.add_to_related_collection( @@ -279,7 +264,6 @@ graph, ['imprintCity', 'publisher', 'imprintDate', 'lang'], "SELECT ?c ?p ?d (lang(COALESCE(?c, ?p, ?d)) as ?lang) WHERE { [ iiep:imprint ?bnode ]. OPTIONAL { ?bnode iiep:imprintCity ?c }. OPTIONAL { ?bnode dct:publisher ?p }. OPTIONAL { ?bnode iiep:imprintDate ?d }}", - convert={'lang':lambda l: self.convert_lang(l, default_language_code)} ) self.add_to_related_collection( @@ -288,7 +272,6 @@ ['collation', 'lang'], "SELECT ?c (lang(COALESCE(?c)) as ?lang) WHERE { ?s iiep:collation ?c . }", bindings={'s':URIRef(record.uri)}, - convert={'lang':lambda l: self.convert_lang(l, default_language_code)} ) self.add_to_related_collection( @@ -296,7 +279,6 @@ graph, ['volume', 'number', 'lang'], "SELECT ?v ?n (lang(COALESCE(?v, ?n)) as ?lang) WHERE { [ iiep:volumeIssue ?bnode ]. OPTIONAL { ?bnode iiep:volume ?v }. OPTIONAL { ?bnode iiep:number ?n }}", - convert={'lang':lambda l: self.convert_lang(l, default_language_code)} ) self.add_to_related_collection( @@ -358,7 +340,7 @@ # def process_url(self, records_url, options): # #open graph with rdflib - # #TODO: manage memory + # # g = Graph() # print("Loading %s" % records_url) # g.parse(records_url) diff -r 57efd01f1715 -r 6296aa12fd71 src/p4l/migrations/0001_initial.py --- a/src/p4l/migrations/0001_initial.py Fri Aug 30 17:09:14 2013 +0200 +++ b/src/p4l/migrations/0001_initial.py Fri Aug 30 17:58:35 2013 +0200 @@ -22,26 +22,13 @@ # Adding model 'Serie' db.create_table(u'p4l_serie', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('lang', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=15, null=True, blank=True)), + ('record', self.gf('django.db.models.fields.related.ForeignKey')(related_name='series', to=orm['p4l.Record'])), ('title', self.gf('django.db.models.fields.CharField')(max_length=2048, db_index=True)), ('volume', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=2048, null=True, blank=True)), )) db.send_create_signal('p4l', ['Serie']) - # Adding unique constraint on 'Serie', fields ['title', 'volume'] - db.create_unique(u'p4l_serie', ['title', 'volume']) - - # Adding model 'RecordSerie' - db.create_table(u'p4l_recordserie', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('lang', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=15, null=True, blank=True)), - ('record', self.gf('django.db.models.fields.related.ForeignKey')(related_name='series+', to=orm['p4l.Record'])), - ('serie', self.gf('django.db.models.fields.related.ForeignKey')(related_name='records', to=orm['p4l.Serie'])), - )) - db.send_create_signal('p4l', ['RecordSerie']) - - # Adding unique constraint on 'RecordSerie', fields ['record', 'serie'] - db.create_unique(u'p4l_recordserie', ['record_id', 'serie_id']) - # Adding model 'ProjectName' db.create_table(u'p4l_projectname', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), @@ -56,14 +43,12 @@ # Adding model 'CorporateAuthor' db.create_table(u'p4l_corporateauthor', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('record', self.gf('django.db.models.fields.related.ForeignKey')(related_name='corporateAuthors', to=orm['p4l.Record'])), ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, db_index=True)), ('acronym', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=2048, null=True, blank=True)), )) db.send_create_signal('p4l', ['CorporateAuthor']) - # Adding unique constraint on 'CorporateAuthor', fields ['label', 'acronym'] - db.create_unique(u'p4l_corporateauthor', ['label', 'acronym']) - # Adding model 'Url' db.create_table(u'p4l_url', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), @@ -191,36 +176,28 @@ # Adding model 'Author' db.create_table(u'p4l_author', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=2048, db_index=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=2048, db_index=True)), + ('record', self.gf('django.db.models.fields.related.ForeignKey')(related_name='authors', to=orm['p4l.Record'])), )) db.send_create_signal('p4l', ['Author']) # Adding model 'SubjectPerson' db.create_table(u'p4l_subjectperson', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=2048, db_index=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=2048, db_index=True)), + ('record', self.gf('django.db.models.fields.related.ForeignKey')(related_name='subjectPersons', to=orm['p4l.Record'])), )) db.send_create_signal('p4l', ['SubjectPerson']) # Adding model 'Periodical' db.create_table(u'p4l_periodical', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=2048, db_index=True)), + ('lang', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=15, null=True, blank=True)), + ('record', self.gf('django.db.models.fields.related.ForeignKey')(related_name='periodicals', to=orm['p4l.Record'])), + ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, db_index=True)), )) db.send_create_signal('p4l', ['Periodical']) - # Adding model 'RecordPeriodical' - db.create_table(u'p4l_recordperiodical', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('lang', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=15, null=True, blank=True)), - ('record', self.gf('django.db.models.fields.related.ForeignKey')(related_name='periodicals+', to=orm['p4l.Record'])), - ('periodical', self.gf('django.db.models.fields.related.ForeignKey')(related_name='records', to=orm['p4l.Periodical'])), - )) - db.send_create_signal('p4l', ['RecordPeriodical']) - - # Adding unique constraint on 'RecordPeriodical', fields ['record', 'periodical'] - db.create_unique(u'p4l_recordperiodical', ['record_id', 'periodical_id']) - # Adding model 'Meeting' db.create_table(u'p4l_meeting', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), @@ -229,24 +206,11 @@ ('meetingPlace', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=2048, null=True, blank=True)), ('meetingDate', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=2048, null=True, blank=True)), ('meetingYear', self.gf('django.db.models.fields.PositiveSmallIntegerField')(db_index=True, null=True, blank=True)), + ('lang', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=15, null=True, blank=True)), + ('record', self.gf('django.db.models.fields.related.ForeignKey')(related_name='meetings', to=orm['p4l.Record'])), )) db.send_create_signal('p4l', ['Meeting']) - # Adding unique constraint on 'Meeting', fields ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear'] - db.create_unique(u'p4l_meeting', ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear']) - - # Adding model 'RecordMeeting' - db.create_table(u'p4l_recordmeeting', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('lang', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=15, null=True, blank=True)), - ('record', self.gf('django.db.models.fields.related.ForeignKey')(related_name='meetings+', to=orm['p4l.Record'])), - ('meeting', self.gf('django.db.models.fields.related.ForeignKey')(related_name='records', to=orm['p4l.Meeting'])), - )) - db.send_create_signal('p4l', ['RecordMeeting']) - - # Adding unique constraint on 'RecordMeeting', fields ['record', 'meeting'] - db.create_unique(u'p4l_recordmeeting', ['record_id', 'meeting_id']) - # Adding model 'SubjectMeeting' db.create_table(u'p4l_subjectmeeting', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), @@ -255,12 +219,10 @@ ('meetingPlace', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=2048, null=True, blank=True)), ('meetingDate', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=2048, null=True, blank=True)), ('meetingYear', self.gf('django.db.models.fields.PositiveSmallIntegerField')(db_index=True, null=True, blank=True)), + ('record', self.gf('django.db.models.fields.related.ForeignKey')(related_name='subjectMeetings', to=orm['p4l.Record'])), )) db.send_create_signal('p4l', ['SubjectMeeting']) - # Adding unique constraint on 'SubjectMeeting', fields ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear'] - db.create_unique(u'p4l_subjectmeeting', ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear']) - # Adding model 'CorporateBody' db.create_table(u'p4l_corporatebody', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), @@ -325,22 +287,6 @@ )) db.create_unique(u'p4l_record_projectNames', ['record_id', 'projectname_id']) - # Adding M2M table for field authors on 'Record' - db.create_table(u'p4l_record_authors', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('record', models.ForeignKey(orm['p4l.record'], null=False)), - ('author', models.ForeignKey(orm['p4l.author'], null=False)) - )) - db.create_unique(u'p4l_record_authors', ['record_id', 'author_id']) - - # Adding M2M table for field subjectPersons on 'Record' - db.create_table(u'p4l_record_subjectPersons', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('record', models.ForeignKey(orm['p4l.record'], null=False)), - ('subjectperson', models.ForeignKey(orm['p4l.subjectperson'], null=False)) - )) - db.create_unique(u'p4l_record_subjectPersons', ['record_id', 'subjectperson_id']) - # Adding M2M table for field subjectCorporateBodies on 'Record' db.create_table(u'p4l_record_subjectCorporateBodies', ( ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), @@ -349,22 +295,6 @@ )) db.create_unique(u'p4l_record_subjectCorporateBodies', ['record_id', 'corporatebody_id']) - # Adding M2M table for field subjectMeetings on 'Record' - db.create_table(u'p4l_record_subjectMeetings', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('record', models.ForeignKey(orm['p4l.record'], null=False)), - ('subjectmeeting', models.ForeignKey(orm['p4l.subjectmeeting'], null=False)) - )) - db.create_unique(u'p4l_record_subjectMeetings', ['record_id', 'subjectmeeting_id']) - - # Adding M2M table for field corporateAuthors on 'Record' - db.create_table(u'p4l_record_corporateAuthors', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('record', models.ForeignKey(orm['p4l.record'], null=False)), - ('corporateauthor', models.ForeignKey(orm['p4l.corporateauthor'], null=False)) - )) - db.create_unique(u'p4l_record_corporateAuthors', ['record_id', 'corporateauthor_id']) - # Adding model 'User' db.create_table(u'p4l_user', ( (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), @@ -403,39 +333,15 @@ # Removing unique constraint on 'CorporateBody', fields ['label', 'acronym'] db.delete_unique(u'p4l_corporatebody', ['label', 'acronym']) - # Removing unique constraint on 'SubjectMeeting', fields ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear'] - db.delete_unique(u'p4l_subjectmeeting', ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear']) - - # Removing unique constraint on 'RecordMeeting', fields ['record', 'meeting'] - db.delete_unique(u'p4l_recordmeeting', ['record_id', 'meeting_id']) - - # Removing unique constraint on 'Meeting', fields ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear'] - db.delete_unique(u'p4l_meeting', ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear']) - - # Removing unique constraint on 'RecordPeriodical', fields ['record', 'periodical'] - db.delete_unique(u'p4l_recordperiodical', ['record_id', 'periodical_id']) - - # Removing unique constraint on 'CorporateAuthor', fields ['label', 'acronym'] - db.delete_unique(u'p4l_corporateauthor', ['label', 'acronym']) - # Removing unique constraint on 'ProjectName', fields ['label', 'acronym'] db.delete_unique(u'p4l_projectname', ['label', 'acronym']) - # Removing unique constraint on 'RecordSerie', fields ['record', 'serie'] - db.delete_unique(u'p4l_recordserie', ['record_id', 'serie_id']) - - # Removing unique constraint on 'Serie', fields ['title', 'volume'] - db.delete_unique(u'p4l_serie', ['title', 'volume']) - # Deleting model 'Imprint' db.delete_table(u'p4l_imprint') # Deleting model 'Serie' db.delete_table(u'p4l_serie') - # Deleting model 'RecordSerie' - db.delete_table(u'p4l_recordserie') - # Deleting model 'ProjectName' db.delete_table(u'p4l_projectname') @@ -493,15 +399,9 @@ # Deleting model 'Periodical' db.delete_table(u'p4l_periodical') - # Deleting model 'RecordPeriodical' - db.delete_table(u'p4l_recordperiodical') - # Deleting model 'Meeting' db.delete_table(u'p4l_meeting') - # Deleting model 'RecordMeeting' - db.delete_table(u'p4l_recordmeeting') - # Deleting model 'SubjectMeeting' db.delete_table(u'p4l_subjectmeeting') @@ -526,21 +426,9 @@ # Removing M2M table for field projectNames on 'Record' db.delete_table('p4l_record_projectNames') - # Removing M2M table for field authors on 'Record' - db.delete_table('p4l_record_authors') - - # Removing M2M table for field subjectPersons on 'Record' - db.delete_table('p4l_record_subjectPersons') - # Removing M2M table for field subjectCorporateBodies on 'Record' db.delete_table('p4l_record_subjectCorporateBodies') - # Removing M2M table for field subjectMeetings on 'Record' - db.delete_table('p4l_record_subjectMeetings') - - # Removing M2M table for field corporateAuthors on 'Record' - db.delete_table('p4l_record_corporateAuthors') - # Deleting model 'User' db.delete_table(u'p4l_user') @@ -589,7 +477,8 @@ 'p4l.author': { 'Meta': {'object_name': 'Author'}, u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}) + 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'db_index': 'True'}), + 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'authors'", 'to': "orm['p4l.Record']"}) }, 'p4l.collation': { 'Meta': {'object_name': 'Collation'}, @@ -599,10 +488,11 @@ 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'collations'", 'to': "orm['p4l.Record']"}) }, 'p4l.corporateauthor': { - 'Meta': {'unique_together': "(['label', 'acronym'],)", 'object_name': 'CorporateAuthor'}, + 'Meta': {'object_name': 'CorporateAuthor'}, 'acronym': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'db_index': 'True'}) + 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'db_index': 'True'}), + 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'corporateAuthors'", 'to': "orm['p4l.Record']"}) }, 'p4l.corporatebody': { 'Meta': {'unique_together': "(['label', 'acronym'],)", 'object_name': 'CorporateBody'}, @@ -613,7 +503,8 @@ 'p4l.country': { 'Meta': {'object_name': 'Country'}, 'country': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}) }, 'p4l.documentcode': { 'Meta': {'object_name': 'DocumentCode'}, @@ -648,21 +539,26 @@ 'p4l.language': { 'Meta': {'object_name': 'Language'}, u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), 'language': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}) }, 'p4l.meeting': { - 'Meta': {'unique_together': "(['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear'],)", 'object_name': 'Meeting'}, + 'Meta': {'object_name': 'Meeting'}, u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'db_index': 'True'}), + 'lang': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '15', 'null': 'True', 'blank': 'True'}), 'meetingDate': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), 'meetingNumber': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), 'meetingPlace': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), - 'meetingYear': ('django.db.models.fields.PositiveSmallIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}) + 'meetingYear': ('django.db.models.fields.PositiveSmallIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'meetings'", 'to': "orm['p4l.Record']"}) }, 'p4l.periodical': { 'Meta': {'object_name': 'Periodical'}, u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}) + 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'db_index': 'True'}), + 'lang': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'periodicals'", 'to': "orm['p4l.Record']"}) }, 'p4l.projectname': { 'Meta': {'unique_together': "(['label', 'acronym'],)", 'object_name': 'ProjectName'}, @@ -672,77 +568,55 @@ }, 'p4l.record': { 'Meta': {'object_name': 'Record'}, - 'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.Author']", 'symmetrical': 'False'}), - 'corporateAuthors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.CorporateAuthor']", 'symmetrical': 'False'}), 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.Country']", 'symmetrical': 'False'}), 'editionStatement': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'identifier': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128', 'db_index': 'True'}), 'isDocumentPart': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'language': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['p4l.Language']", 'null': 'True', 'blank': 'True'}), - 'meetings': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.Meeting']", 'through': "orm['p4l.RecordMeeting']", 'symmetrical': 'False'}), 'notes': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), 'otherLanguages': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'otherLanguage_record'", 'symmetrical': 'False', 'to': "orm['p4l.Language']"}), - 'periodicals': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.Periodical']", 'through': "orm['p4l.RecordPeriodical']", 'symmetrical': 'False'}), 'projectNames': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.ProjectName']", 'symmetrical': 'False'}), 'recordType': ('django.db.models.fields.URLField', [], {'max_length': '2048'}), - 'series': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.Serie']", 'through': "orm['p4l.RecordSerie']", 'symmetrical': 'False'}), 'subjectCorporateBodies': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.CorporateBody']", 'symmetrical': 'False'}), - 'subjectMeetings': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.SubjectMeeting']", 'symmetrical': 'False'}), - 'subjectPersons': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.SubjectPerson']", 'symmetrical': 'False'}), 'subjects': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.Subject']", 'symmetrical': 'False'}), 'themes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['p4l.Theme']", 'symmetrical': 'False'}), 'uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}) }, - 'p4l.recordmeeting': { - 'Meta': {'unique_together': "(['record', 'meeting'],)", 'object_name': 'RecordMeeting'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lang': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '15', 'null': 'True', 'blank': 'True'}), - 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'records'", 'to': "orm['p4l.Meeting']"}), - 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'meetings+'", 'to': "orm['p4l.Record']"}) - }, - 'p4l.recordperiodical': { - 'Meta': {'unique_together': "(['record', 'periodical'],)", 'object_name': 'RecordPeriodical'}, + 'p4l.serie': { + 'Meta': {'object_name': 'Serie'}, u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'lang': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '15', 'null': 'True', 'blank': 'True'}), - 'periodical': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'records'", 'to': "orm['p4l.Periodical']"}), - 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'periodicals+'", 'to': "orm['p4l.Record']"}) - }, - 'p4l.recordserie': { - 'Meta': {'unique_together': "(['record', 'serie'],)", 'object_name': 'RecordSerie'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lang': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '15', 'null': 'True', 'blank': 'True'}), - 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'series+'", 'to': "orm['p4l.Record']"}), - 'serie': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'records'", 'to': "orm['p4l.Serie']"}) - }, - 'p4l.serie': { - 'Meta': {'unique_together': "(['title', 'volume'],)", 'object_name': 'Serie'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'series'", 'to': "orm['p4l.Record']"}), 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'db_index': 'True'}), 'volume': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}) }, 'p4l.subject': { 'Meta': {'object_name': 'Subject'}, u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), 'subject': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}) }, 'p4l.subjectmeeting': { - 'Meta': {'unique_together': "(['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear'],)", 'object_name': 'SubjectMeeting'}, + 'Meta': {'object_name': 'SubjectMeeting'}, u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'db_index': 'True'}), 'meetingDate': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), 'meetingNumber': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), 'meetingPlace': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), - 'meetingYear': ('django.db.models.fields.PositiveSmallIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}) + 'meetingYear': ('django.db.models.fields.PositiveSmallIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'subjectMeetings'", 'to': "orm['p4l.Record']"}) }, 'p4l.subjectperson': { 'Meta': {'object_name': 'SubjectPerson'}, u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}) + 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'db_index': 'True'}), + 'record': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'subjectPersons'", 'to': "orm['p4l.Record']"}) }, 'p4l.theme': { 'Meta': {'object_name': 'Theme'}, u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), 'theme': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}) }, 'p4l.title': { diff -r 57efd01f1715 -r 6296aa12fd71 src/p4l/models/data.py --- a/src/p4l/models/data.py Fri Aug 30 17:09:14 2013 +0200 +++ b/src/p4l/models/data.py Fri Aug 30 17:58:35 2013 +0200 @@ -11,18 +11,10 @@ imprintDate = models.CharField(max_length=512, blank=True, null=True, db_index=True) -class Serie(P4lModel): +class Serie(P4lModelLang): + record = models.ForeignKey('p4l.Record', related_name="series") title = models.CharField(max_length=2048, blank=False, null=False, db_index=True) volume = models.CharField(max_length=2048, blank=True, null=True, db_index=True) - class Meta(P4lModel.Meta): - unique_together = ['title', 'volume'] - -class RecordSerie(P4lModelLang): - record = models.ForeignKey('p4l.Record', related_name="series+") - serie = models.ForeignKey('p4l.Serie', related_name="records") - class Meta(P4lModelLang.Meta): - unique_together = ['record','serie'] - class ProjectName(P4lModel): @@ -33,14 +25,13 @@ class CorporateAuthor(P4lModel): + record = models.ForeignKey('p4l.Record', related_name="corporateAuthors", db_index=True) label = models.CharField(max_length=2048, blank=False, null=False, db_index=True) acronym = models.CharField(max_length=2048, blank=True, null=True, db_index=True) #iiep:acronym - class Meta(P4lModel.Meta): - unique_together = ['label', 'acronym'] class Url(P4lModel): - record = models.ForeignKey('p4l.Record', related_name="urls") + record = models.ForeignKey('p4l.Record', related_name="urls", db_index=True) address = models.CharField(max_length=2048, blank=False, null=False, db_index=True) #iiep:address display = models.CharField(max_length=2048, blank=True, null=True, db_index=True) #iiep:display accessLevel = models.CharField(max_length=512, blank=True, null=True, db_index=True) #iiep:accessLevel @@ -61,16 +52,16 @@ class Isbn(P4lModelLang): - record = models.ForeignKey('p4l.Record', related_name="isbns") + record = models.ForeignKey('p4l.Record', related_name="isbns", db_index=True) isbn = models.CharField(max_length=128) #iiep:isbn class Issn(P4lModelLang): - record = models.ForeignKey('p4l.Record', related_name="issns") + record = models.ForeignKey('p4l.Record', related_name="issns", db_index=True) issn = models.CharField(max_length=128) #iiep:issn class DocumentCode(P4lModelLang): - record = models.ForeignKey('p4l.Record', related_name="documentCodes") + record = models.ForeignKey('p4l.Record', related_name="documentCodes", db_index=True) documentCode = models.CharField(max_length=128) #iiep:issn class Language(P4lModel): @@ -85,52 +76,46 @@ abstract = True class Title(BaseTitle): - record = models.ForeignKey('p4l.Record', related_name="titles") + record = models.ForeignKey('p4l.Record', related_name="titles", db_index=True) class AddedTitle(BaseTitle): - record = models.ForeignKey('p4l.Record', related_name="addedTitles") + record = models.ForeignKey('p4l.Record', related_name="addedTitles", db_index=True) class TitleMainDocument(BaseTitle): - record = models.ForeignKey('p4l.Record', related_name="titlesMainDocument") + record = models.ForeignKey('p4l.Record', related_name="titlesMainDocument", db_index=True) class Abstract(P4lModelLang): - record = models.ForeignKey('p4l.Record', related_name="abstracts") + record = models.ForeignKey('p4l.Record', related_name="abstracts", db_index=True) abstract = models.TextField(blank=True, null=True) class Collation(P4lModelLang): - record = models.ForeignKey('p4l.Record', related_name="collations") + record = models.ForeignKey('p4l.Record', related_name="collations", db_index=True) collation = models.CharField(max_length=1024, blank=False, null=False, db_index=True) class VolumeIssue(P4lModelLang): - record = models.ForeignKey('p4l.Record', related_name="volumeIssues") + record = models.ForeignKey('p4l.Record', related_name="volumeIssues", db_index=True) volume = models.CharField(max_length=1024, blank=True, null=True, db_index=True) #iiep:volume number = models.CharField(max_length=1024, blank=True, null=True, db_index=True) #iiep:number class P4lPerson(P4lModel): - name = models.CharField(max_length=2048, blank=False, null=False, db_index=True, unique=True) + name = models.CharField(max_length=2048, blank=False, null=False, db_index=True) class Meta(P4lModel.Meta): abstract = True class Author(P4lPerson): - pass + record = models.ForeignKey('p4l.Record', related_name="authors", db_index=True) class SubjectPerson(P4lPerson): - pass - - -class Periodical(P4lModel): - label = models.CharField(max_length=2048, blank=False, null=False, db_index=True, unique=True) #iiep:periodical + record = models.ForeignKey('p4l.Record', related_name="subjectPersons", db_index=True) -class RecordPeriodical(P4lModelLang): - record = models.ForeignKey('p4l.Record', related_name="periodicals+") - periodical = models.ForeignKey('p4l.Periodical', related_name="records") - class Meta(P4lModelLang.Meta): - unique_together = ['record','periodical'] +class Periodical(P4lModelLang): + record = models.ForeignKey('p4l.Record', related_name="periodicals", db_index=True) + label = models.CharField(max_length=2048, blank=False, null=False, db_index=True) #iiep:periodical class BaseMeeting(P4lModel): @@ -141,21 +126,15 @@ meetingYear = models.PositiveSmallIntegerField(blank=True, null=True, db_index=True) #iiep:meetingYear class Meta(P4lModel.Meta): abstract = True - unique_together = ['label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear'] class Meeting(BaseMeeting): - pass - -class RecordMeeting(P4lModelLang): - record = models.ForeignKey('p4l.Record', related_name="meetings+") - meeting = models.ForeignKey('p4l.Meeting', related_name="records") - class Meta(P4lModelLang.Meta): - unique_together = ['record','meeting'] + lang = models.CharField(max_length=15, blank=True, null=True, db_index=True) #@xml:lang + record = models.ForeignKey('p4l.Record', related_name="meetings") class SubjectMeeting(BaseMeeting): - pass + record = models.ForeignKey('p4l.Record', related_name="subjectMeetings", db_index=True) class CorporateBody(P4lModel): @@ -177,6 +156,7 @@ language = models.ForeignKey('p4l.Language', blank=True, null=True) #dct:language # Language otherLanguages = models.ManyToManyField('p4l.Language', related_name='otherLanguage_record') #iiep:otherLanguage # Language #titles foreign Key from Title #dct:title + #abstracts foreign Key from Abstract #dct:abstract #addedTitles foreign Key from AddedTitle #iiep:addedTitle #titlesMainDocument foreign Key from TitleMainDocument #iiep:titleMainDocument editionStatement = models.CharField(max_length=1024, blank=True, null=True) #iiep:editionStatement @@ -184,14 +164,14 @@ #collations = foreign Key from Collation #iiep:collation #volumeIssues = foreign Key from VolumeIssue #iiep:volumeIssue projectNames = models.ManyToManyField('p4l.ProjectName') #iiep:projectName - periodicals = models.ManyToManyField('p4l.Periodical', through='p4l.RecordPeriodical') #iiep:periodical - meetings = models.ManyToManyField('p4l.Meeting', through='p4l.RecordMeeting') #iiep:meeting - series = models.ManyToManyField('p4l.Serie', through='p4l.RecordSerie') #iiep:serie - authors = models.ManyToManyField('p4l.Author') #iiep:author - subjectPersons = models.ManyToManyField('p4l.SubjectPerson') #iiep:subjectPerson + #periodicals = foreign key from 'p4l.Periodical' #iiep:periodical + #meetings = foreign key from 'p4l.Meeting' #iiep:meeting + #series = foreign key from 'p4l.Serie' #iiep:serie + #authors = foreign key from 'p4l.Author' #iiep:author + #subjectPersons = foreign key from 'p4l.SubjectPerson' #iiep:subjectPerson subjectCorporateBodies = models.ManyToManyField('p4l.CorporateBody') #iiep:subjectCorporateBody # Organisation ? - subjectMeetings = models.ManyToManyField('p4l.SubjectMeeting') #iiep:subjectMeeting - corporateAuthors = models.ManyToManyField('p4l.CorporateAuthor') #iiep:corporateAuthor # Organisation ? + #subjectMeetings = foreign key from 'p4l.SubjectMeeting' #iiep:subjectMeeting + #corporateAuthors = foreign key from 'p4l.CorporateAuthor' #iiep:corporateAuthor # Organisation ? #urls foreign Key from Url #iiep:url recordType = models.URLField(max_length=2048) #dct:type isDocumentPart = models.BooleanField() #iiep:isDocumentPart