Source code for vocabularies.models

from django.db import models
from reversion import revisions as reversion
from django.contrib.auth.models import User
from django.utils.functional import cached_property
import re

import unicodedata



[docs]@reversion.register() class VocabNames(models.Model): """List of Vocabulary names to allow the easy retrieval of Vovcabulary names and classes from the VocabsBaseClass""" name = models.CharField(max_length=255) def get_vocab_label(self): return re.sub( r"([A-Z])", r" \1", self.name).strip()
[docs]@reversion.register() class VocabsBaseClass(models.Model): """ An abstract base class for other classes which contain so called 'controlled vocablury' to describe subtypes of main temporalized entites""" choices_status = (('rej', 'rejected'), ('ac', 'accepted'), ('can', 'candidate'), ('del', 'deleted')) name = models.CharField(max_length=255, verbose_name='Name') description = models.TextField( blank=True, help_text="Brief description of the used term.") parent_class = models.ForeignKey('self', blank=True, null=True) status = models.CharField(max_length=4, choices=choices_status, default='can') userAdded = models.ForeignKey(User, blank=True, null=True) #changed from default=12 vocab_name = models.ForeignKey(VocabNames, blank=True, null=True) def __str__(self): return self.name def save(self, *args, **kwargs): d, created = VocabNames.objects.get_or_create(name=type(self).__name__) self.vocab_name = d if self.name != unicodedata.normalize('NFC', self.name): #secure correct unicode encoding self.name = unicodedata.normalize('NFC', self.name) super(VocabsBaseClass, self).save(*args, **kwargs) return self @cached_property def label(self): d = self res = self.name while d.parent_class: res = d.parent_class.name + ' >> ' + res d = d.parent_class return res
[docs]@reversion.register(follow=['vocabsbaseclass_ptr']) class RelationBaseClass(VocabsBaseClass): """ An abstract base class for other classes which contain so called 'controlled vocablury' to describe the relations between main temporalized entites ('db_')""" name_reverse = models.CharField( max_length=255, verbose_name='Name reverse', help_text='Inverse relation like: "is sub-class of" vs. "is super-class of".', blank=True) def __str__(self): return self.name @cached_property def label_reverse(self): d = self if len(self.name_reverse) < 1: res = '(' + self.name + ')' else: res = self.name_reverse while d.parent_class: try: t = RelationBaseClass.objects.get(pk=d.parent_class.pk).name_reverse if len(t) < 1: t = '(' + d.parent_class.name + ')' except: t = '(' + d.parent_class.name + ')' res = t + ' >> ' + res d = d.parent_class return res def save(self, *args, **kwargs): if self.name_reverse != unicodedata.normalize('NFC', self.name_reverse): #secure correct unicode encoding self.name_reverse = unicodedata.normalize('NFC', self.name_reverse) super(RelationBaseClass, self).save(*args, **kwargs) return self
[docs]@reversion.register() class VocabsUri(models.Model): """Class to store URIs for imported types. URI class from metainfo is not used in order to keep the vocabularies module/app seperated from the rest of the application. """ uri = models.URLField() domain = models.CharField(max_length=255, blank=True) rdf_link = models.URLField(blank=True) vocab = models.ForeignKey(VocabsBaseClass, blank=True, null=True) # loaded: set to True when RDF was loaded and parsed into the data model loaded = models.BooleanField(default=False) # loaded_time: Timestamp when file was loaded and parsed loaded_time = models.DateTimeField(blank=True, null=True) def __str__(self): return self.uri
####################################################################### # # entity types # #######################################################################
[docs]@reversion.register(follow=['vocabsbaseclass_ptr']) class WorkType(VocabsBaseClass): """Holds controlled vocabularies about work-types""" pass
[docs]@reversion.register(follow=['vocabsbaseclass_ptr']) class Title(VocabsBaseClass): """A person´s (academic) title""" abbreviation = models.CharField(max_length=10, blank=True)
[docs]@reversion.register(follow=['vocabsbaseclass_ptr']) class ProfessionType(VocabsBaseClass): """Holds controlled vocabularies about profession-types""" pass
[docs]@reversion.register(follow=['vocabsbaseclass_ptr']) class PlaceType(VocabsBaseClass): """Holds controlled vocabularies about place-types""" pass
[docs]@reversion.register(follow=['vocabsbaseclass_ptr']) class InstitutionType(VocabsBaseClass): """Holds controlled vocabularies about institution-types""" pass
[docs]@reversion.register(follow=['vocabsbaseclass_ptr']) class EventType(VocabsBaseClass): """Holds controlled vocabularies about event-types""" pass
[docs]@reversion.register(follow=['vocabsbaseclass_ptr']) class LabelType(VocabsBaseClass): """Holds controlled vocabularies about label-types""" pass
[docs]@reversion.register(follow=['vocabsbaseclass_ptr']) class CollectionType(VocabsBaseClass): """e.g. reseachCollection, importCollection """ pass
[docs]@reversion.register(follow=['vocabsbaseclass_ptr']) class TextType(VocabsBaseClass): """used to store the Text types for the forms""" entity = models.CharField(max_length=255) collections = models.ManyToManyField('metainfo.Collection', blank=True)
####################################################################### # # relation types # ####################################################################### ####################################################################### # Person-Relation-Types #######################################################################
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class PersonPersonRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Persons and Persons""" pass
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class PersonPlaceRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Persons and Places""" pass
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class PersonInstitutionRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Persons and Persons""" pass
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class PersonEventRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Persons and Events""" pass
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class PersonWorkRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Persons and Works""" pass
####################################################################### # Institution-Relation-Types #######################################################################
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class InstitutionEventRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Institutions and Events.""" pass
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class InstitutionPlaceRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Institutions and Places.""" pass
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class InstitutionInstitutionRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Institutions and Institutions.""" pass
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class InstitutionWorkRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Institutions and Works.""" pass
####################################################################### # Place-Relation-Types #######################################################################
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class PlacePlaceRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Places and Places""" pass
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class PlaceEventRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Places and Events""" pass
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class PlaceWorkRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Places and Works""" pass
####################################################################### # Event-Relation-Types #######################################################################
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class EventEventRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Events and Events""" pass
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class EventWorkRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Events and Works""" pass
####################################################################### # Work-Relation-Types #######################################################################
[docs]@reversion.register(follow=['relationbaseclass_ptr']) class WorkWorkRelation(RelationBaseClass): """Holds controlled vocabularies relation types of Works and Works""" pass