def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, GeositeName) # OSM Name/ID of the smallest containing administrative unit self.admin_name = ComplexFieldContainer(self, GeositeAdminName) self.admin_id = ComplexFieldContainer(self, GeositeAdminId) # Larger administrative units (name only) self.adminlevel1 = ComplexFieldContainer(self, GeositeAdminLevel1) self.adminlevel2 = ComplexFieldContainer(self, GeositeAdminLevel2) # Coordinates and OSM Name/ID of the exact location self.coordinates = ComplexFieldContainer(self, GeositeCoordinates) self.location_name = ComplexFieldContainer(self, GeositeLocationName) self.location_id = ComplexFieldContainer(self, GeositeLocationId) self.division_id = ComplexFieldContainer(self, GeositeDivisionId) self.complex_fields = [ self.name, self.admin_name, self.admin_id, self.adminlevel1, self.adminlevel2, self.coordinates, self.location_name, self.location_id, self.division_id ] self.complex_lists = [] self.required_fields = ["Geosite_GeositeName"]
class Emplacement(models.Model, BaseModel, SourcesMixin, SuperlativeDateMixin, GetComplexFieldNameMixin): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.startdate = ComplexFieldContainer(self, EmplacementStartDate) self.enddate = ComplexFieldContainer(self, EmplacementEndDate) self.realstart = ComplexFieldContainer(self, EmplacementRealStart) self.open_ended = ComplexFieldContainer(self, EmplacementOpenEnded) self.organization = ComplexFieldContainer(self, EmplacementOrganization) self.site = ComplexFieldContainer(self, EmplacementSite) self.aliases = ComplexFieldListContainer(self, EmplacementAlias) self.complex_fields = [ self.startdate, self.enddate, self.organization, self.site, self.open_ended, self.realstart ] self.complex_lists = [self.aliases] self.required_fields = [ "Emplacement_EmplacementOrganization", "Emplacement_EmplacementSite", ] def get_value(self): return '{0} ({1})'.format(self.organization.get_value(), self.site.get_value())
class Composition(models.Model, BaseModel, SourcesMixin, GetComplexFieldNameMixin): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.parent = ComplexFieldContainer(self, CompositionParent) self.child = ComplexFieldContainer(self, CompositionChild) self.startdate = ComplexFieldContainer(self, CompositionStartDate) self.realstart = ComplexFieldContainer(self, CompositionRealStart) self.enddate = ComplexFieldContainer(self, CompositionEndDate) self.open_ended = ComplexFieldContainer(self, CompositionOpenEnded) self.classification = ComplexFieldContainer(self, CompositionClassification) self.complex_fields = [ self.parent, self.child, self.startdate, self.realstart, self.enddate, self.open_ended, self.classification ] self.complex_lists = [] self.required_fields = [ "Composition_CompositionParent", "Composition_CompositionChild" ] def get_value(self): return '{0} parent of {1}'.format(self.parent.get_value(), self.child.get_value())
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.member = ComplexFieldContainer(self, MembershipPersonMember) self.organization = ComplexFieldContainer(self, MembershipPersonOrganization) self.role = ComplexFieldContainer(self, MembershipPersonRole) self.title = ComplexFieldContainer(self, MembershipPersonTitle) self.rank = ComplexFieldContainer(self, MembershipPersonRank) self.realstart = ComplexFieldContainer(self, MembershipPersonRealStart) self.realend = ComplexFieldContainer(self, MembershipPersonRealEnd) self.startcontext = ComplexFieldContainer(self, MembershipPersonStartContext) self.endcontext = ComplexFieldContainer(self, MembershipPersonEndContext) self.firstciteddate = ComplexFieldContainer(self, MembershipPersonFirstCitedDate) self.lastciteddate = ComplexFieldContainer(self, MembershipPersonLastCitedDate) self.complex_fields = [self.member, self.organization, self.role, self.title, self.rank, self.realstart, self.realend, self.startcontext, self.endcontext, self.firstciteddate, self.lastciteddate] self.complex_lists = [] self.required_fields = [ "MembershipPerson_MembershipPersonMember", "MembershipPerson_MembershipPersonOrganization", ]
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, PersonName) self.alias = ComplexFieldContainer(self, PersonAlias) self.deathdate = ComplexFieldContainer(self, PersonDeathDate) self.complex_fields = [self.name, self.alias, self.deathdate] self.required_fields = [ "Person_PersonName", ]
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.startdate = ComplexFieldContainer(self, AssociationStartDate) self.enddate = ComplexFieldContainer(self, AssociationEndDate) self.organization = ComplexFieldContainer(self, AssociationOrganization) self.area = ComplexFieldContainer(self, AssociationArea) self.complex_fields = [self.startdate, self.enddate, self.organization, self.area] self.required_fields = [ "Association_AssociationOrganization", "Association_AssociationArea", ]
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, AreaName) self.code = ComplexFieldContainer(self, AreaCode) self.geoname = ComplexFieldContainer(self, AreaGeoName) self.geometry = ComplexFieldContainer(self, AreaGeometry) self.complex_fields = [ self.name, self.code, self.geoname, self.geometry ] self.required_fields = [ "Area_AreaName", ]
class Area(models.Model, BaseModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, AreaName) self.code = ComplexFieldContainer(self, AreaCode) self.osmname = ComplexFieldContainer(self, AreaOSMName) self.osmid = ComplexFieldContainer(self, AreaOSMId) self.geometry = ComplexFieldContainer(self, AreaGeometry) self.division_id = ComplexFieldContainer(self, AreaDivisionId) self.complex_fields = [self.name, self.code, self.osmname, self.geometry, self.division_id, self.osmid] self.complex_lists = [] self.required_fields = [ "Area_AreaName", ] def get_value(self): return self.name.get_value() def __str__(self): return str(self.name) @classmethod def from_id(cls, id_): try: area = cls.objects.get(id=id_) return area except cls.DoesNotExist: return None
def __init__(self, *args, **kwargs): self.name = ComplexFieldContainer(self, PersonName) self.aliases = ComplexFieldListContainer(self, PersonAlias) self.division_id = ComplexFieldContainer(self, PersonDivisionId) self.gender = ComplexFieldContainer(self, PersonGender) self.date_of_birth = ComplexFieldContainer(self, PersonDateOfBirth) self.date_of_death = ComplexFieldContainer(self, PersonDateOfDeath) self.deceased = ComplexFieldContainer(self, PersonDeceased) self.biography = ComplexFieldContainer(self, PersonBiography) self.notes = ComplexFieldContainer(self, PersonNotes) self.external_links = ComplexFieldListContainer(self, PersonExternalLink) self.complex_fields = [ self.name, self.division_id, self.gender, self.date_of_birth, self.date_of_death, self.deceased, self.biography, self.notes, ] self.complex_lists = [self.aliases, self.external_links] self.required_fields = [ "Person_PersonName", ] super().__init__(*args, **kwargs)
class Area(models.Model, BaseModel, GetComplexFieldNameMixin): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, AreaName) self.code = ComplexFieldContainer(self, AreaCode) self.osmname = ComplexFieldContainer(self, AreaOSMName) self.osmid = ComplexFieldContainer(self, AreaOSMId) self.geometry = ComplexFieldContainer(self, AreaGeometry) self.division_id = ComplexFieldContainer(self, AreaDivisionId) self.complex_fields = [ self.name, self.code, self.osmname, self.geometry, self.division_id, self.osmid ] self.complex_lists = [] self.required_fields = [ "Area_AreaName", ] def get_value(self): return self.name.get_value() def __str__(self): return str(self.name) @classmethod def from_id(cls, id_): try: area = cls.objects.get(id=id_) return area except cls.DoesNotExist: return None
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.parent = ComplexFieldContainer(self, CompositionParent) self.child = ComplexFieldContainer(self, CompositionChild) self.startdate = ComplexFieldContainer(self, CompositionStartDate) self.enddate = ComplexFieldContainer(self, CompositionEndDate) self.classification = ComplexFieldContainer(self, CompositionClassification) self.complex_fields = [ self.parent, self.child, self.startdate, self.enddate, self.classification ] self.required_fields = [ "Composition_CompositionParent", "Composition_CompositionChild" ]
def revert_field(request, object_type, object_id, field_name): field = ComplexFieldContainer.field_from_str_and_id( object_type, object_id, field_name ) data = json.loads(request.POST.dict()['revert']) field.revert_field(data['lang'], data['id']) return HttpResponse(status=200)
def get_context_data(self, **kwargs): context = super(SourceView, self).get_context_data(**kwargs) field = ComplexFieldContainer.field_from_str_and_id( context.get('object_type'), context.get('object_id'), context.get('field_name'), context.get('field_id', None)) context['field'] = field return context
def __init__(self, *args, **kwargs): self.name = ComplexFieldContainer(self, PersonName) self.aliases = ComplexFieldListContainer(self, PersonAlias) self.division_id = ComplexFieldContainer(self, PersonDivisionId) self.notes = ComplexFieldContainer(self, PersonNotes) self.complex_fields = [ self.name, self.division_id, self.notes, ] self.complex_lists = [self.aliases] self.required_fields = [ "Person_PersonName", ] super().__init__(*args, **kwargs)
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.member = ComplexFieldContainer(self, MembershipOrganizationMember) self.organization = ComplexFieldContainer(self, MembershipOrganizationOrganization) self.firstciteddate = ComplexFieldContainer(self, MembershipOrganizationFirstCitedDate) self.realstart = ComplexFieldContainer(self, MembershipOrganizationRealStart) self.lastciteddate = ComplexFieldContainer(self, MembershipOrganizationLastCitedDate) self.realend = ComplexFieldContainer(self, MembershipOrganizationRealEnd) self.complex_fields = [self.member, self.organization, self.firstciteddate, self.lastciteddate, self.realstart, self.realend] self.complex_lists = [] self.required_fields = [ "MembershipOrganization_MembershipOrganizationMember", "MembershipOrganization_MembershipOrganizationOrganization", ]
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.parent = ComplexFieldContainer(self, CompositionParent) self.child = ComplexFieldContainer(self, CompositionChild) self.startdate = ComplexFieldContainer(self, CompositionStartDate) self.realstart = ComplexFieldContainer(self, CompositionRealStart) self.enddate = ComplexFieldContainer(self, CompositionEndDate) self.open_ended = ComplexFieldContainer(self, CompositionOpenEnded) self.classification = ComplexFieldContainer(self, CompositionClassification) self.complex_fields = [self.parent, self.child, self.startdate, self.realstart, self.enddate, self.open_ended, self.classification] self.complex_lists = [] self.required_fields = [ "Composition_CompositionParent", "Composition_CompositionChild" ]
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.startdate = ComplexFieldContainer(self, EmplacementStartDate) self.enddate = ComplexFieldContainer(self, EmplacementEndDate) self.realstart = ComplexFieldContainer(self, EmplacementRealStart) self.open_ended = ComplexFieldContainer(self, EmplacementOpenEnded) self.organization = ComplexFieldContainer(self, EmplacementOrganization) self.site = ComplexFieldContainer(self, EmplacementSite) self.aliases = ComplexFieldListContainer(self, EmplacementAlias) self.complex_fields = [self.startdate, self.enddate, self.organization, self.site, self.open_ended, self.realstart] self.complex_lists = [self.aliases] self.required_fields = [ "Emplacement_EmplacementOrganization", "Emplacement_EmplacementSite", ]
def __init__(self, *args, **kwargs): self.person = ComplexFieldContainer(self, PersonBiographyPerson) self.gender = ComplexFieldContainer(self, PersonBiographyGender) self.date_of_birth = ComplexFieldContainer(self, PersonBiographyDateOfBirth) self.date_of_death = ComplexFieldContainer(self, PersonBiographyDateOfDeath) self.deceased = ComplexFieldContainer(self, PersonBiographyDeceased) self.complex_fields = [ self.person, self.gender, self.date_of_birth, self.date_of_death, self.deceased, ] self.complex_lists = [] super().__init__(*args, **kwargs)
def get_field_model(cls, field_name): """ Return the ComplexField model corresponding to a field on this model. """ # Get the 0th ID instance, to indicate that we don't want a specific instance # (for more information on these methods, see the source code in the # complex_fields app) container = ComplexFieldContainer.field_from_str_and_id( cls.__name__.lower(), '0', field_name) return container.field_model()
def get_versions(request, object_type, object_id, field_name, field_id=None, lang=get_language()): field = ComplexFieldContainer.field_from_str_and_id( object_type, object_id, field_name, field_id ) if field.translated: versions = field.get_history_for_lang(lang) else: versions = field.get_history() return HttpResponse(json.dumps(versions))
def get_context_data(self, **kwargs): context = super(VersionView, self).get_context_data(**kwargs) field = ComplexFieldContainer.field_from_str_and_id( context.get('object_type'), context.get('object_id'), context.get('field_name'), context.get('field_id', None)) context['field'] = field context['history'] = field.get_history_for_lang() context['langs'] = field.get_langs_in_history() return context
class MembershipOrganization(models.Model, BaseModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.member = ComplexFieldContainer(self, MembershipOrganizationMember) self.organization = ComplexFieldContainer(self, MembershipOrganizationOrganization) self.firstciteddate = ComplexFieldContainer(self, MembershipOrganizationFirstCitedDate) self.realstart = ComplexFieldContainer(self, MembershipOrganizationRealStart) self.lastciteddate = ComplexFieldContainer(self, MembershipOrganizationLastCitedDate) self.realend = ComplexFieldContainer(self, MembershipOrganizationRealEnd) self.complex_fields = [self.member, self.organization, self.firstciteddate, self.lastciteddate, self.realstart, self.realend] self.complex_lists = [] self.required_fields = [ "MembershipOrganization_MembershipOrganizationMember", "MembershipOrganization_MembershipOrganizationOrganization", ] @classmethod def from_id(cls, id_): try: membership = cls.objects.get(id=id_) return membership except cls.DoesNotExist: return None def get_value(self): return '{0} member of {1}'.format(self.member.get_value(), self.organization.get_value()) @classmethod def create(cls, dict_values, lang=get_language()): membership = cls() membership.update(dict_values, lang) return membership
class MembershipOrganization(models.Model, BaseModel, SourcesMixin, GetComplexFieldNameMixin): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.member = ComplexFieldContainer(self, MembershipOrganizationMember) self.organization = ComplexFieldContainer(self, MembershipOrganizationOrganization) self.firstciteddate = ComplexFieldContainer(self, MembershipOrganizationFirstCitedDate) self.realstart = ComplexFieldContainer(self, MembershipOrganizationRealStart) self.lastciteddate = ComplexFieldContainer(self, MembershipOrganizationLastCitedDate) self.open_ended = ComplexFieldContainer(self, MembershipOrganizationOpenEnded) self.complex_fields = [self.member, self.organization, self.firstciteddate, self.lastciteddate, self.realstart, self.open_ended] self.complex_lists = [] self.required_fields = [ "MembershipOrganization_MembershipOrganizationMember", "MembershipOrganization_MembershipOrganizationOrganization", ] @classmethod def from_id(cls, id_): try: membership = cls.objects.get(id=id_) return membership except cls.DoesNotExist: return None def get_value(self): return '{0} member of {1}'.format(self.member.get_value(), self.organization.get_value()) @classmethod def create(cls, dict_values, lang=get_language()): membership = cls() membership.update(dict_values, lang) return membership
class Emplacement(models.Model, BaseModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.startdate = ComplexFieldContainer(self, EmplacementStartDate) self.enddate = ComplexFieldContainer(self, EmplacementEndDate) self.realstart = ComplexFieldContainer(self, EmplacementRealStart) self.open_ended = ComplexFieldContainer(self, EmplacementOpenEnded) self.organization = ComplexFieldContainer(self, EmplacementOrganization) self.site = ComplexFieldContainer(self, EmplacementSite) self.aliases = ComplexFieldListContainer(self, EmplacementAlias) self.complex_fields = [self.startdate, self.enddate, self.organization, self.site, self.open_ended, self.realstart] self.complex_lists = [self.aliases] self.required_fields = [ "Emplacement_EmplacementOrganization", "Emplacement_EmplacementSite", ] def get_value(self): return '{0} ({1})'.format(self.organization.get_value(), self.site.get_value())
class Composition(models.Model, BaseModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.parent = ComplexFieldContainer(self, CompositionParent) self.child = ComplexFieldContainer(self, CompositionChild) self.startdate = ComplexFieldContainer(self, CompositionStartDate) self.realstart = ComplexFieldContainer(self, CompositionRealStart) self.enddate = ComplexFieldContainer(self, CompositionEndDate) self.open_ended = ComplexFieldContainer(self, CompositionOpenEnded) self.classification = ComplexFieldContainer(self, CompositionClassification) self.complex_fields = [self.parent, self.child, self.startdate, self.realstart, self.enddate, self.open_ended, self.classification] self.complex_lists = [] self.required_fields = [ "Composition_CompositionParent", "Composition_CompositionChild" ] def get_value(self): return '{0} parent of {1}'.format(self.parent.get_value(), self.child.get_value())
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, AreaName) self.code = ComplexFieldContainer(self, AreaCode) self.osmname = ComplexFieldContainer(self, AreaOSMName) self.osmid = ComplexFieldContainer(self, AreaOSMId) self.geometry = ComplexFieldContainer(self, AreaGeometry) self.division_id = ComplexFieldContainer(self, AreaDivisionId) self.complex_fields = [self.name, self.code, self.osmname, self.geometry, self.division_id, self.osmid] self.complex_lists = [] self.required_fields = [ "Area_AreaName", ]
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, GeositeName) self.adminlevel1 = ComplexFieldContainer(self, GeositeAdminLevel1) self.adminlevel2 = ComplexFieldContainer(self, GeositeAdminLevel2) self.coordinates = ComplexFieldContainer(self, GeositeCoordinates) self.geoname = ComplexFieldContainer(self, GeositeGeoname) self.geonameid = ComplexFieldContainer(self, GeositeGeonameId) self.complex_fields = [ self.name, self.adminlevel1, self.adminlevel2, self.coordinates, self.geoname, self.geonameid ] self.required_fields = ["Geosite_GeositeName"]
def get_sources(request, object_type, object_id, field_name): field = ComplexFieldContainer.field_from_str_and_id( object_type, object_id, field_name ) sources = field.get_sources() sources_json = { "confidence": field.get_confidence(), "sources": [ { "source": source.source, "id": source.id } for source in sources ] } return HttpResponse(json.dumps(sources_json))
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.member = ComplexFieldContainer(self, MembershipOrganizationMember) self.organization = ComplexFieldContainer(self, MembershipOrganizationOrganization) self.firstciteddate = ComplexFieldContainer(self, MembershipOrganizationFirstCitedDate) self.realstart = ComplexFieldContainer(self, MembershipOrganizationRealStart) self.lastciteddate = ComplexFieldContainer(self, MembershipOrganizationLastCitedDate) self.open_ended = ComplexFieldContainer(self, MembershipOrganizationOpenEnded) self.complex_fields = [self.member, self.organization, self.firstciteddate, self.lastciteddate, self.realstart, self.open_ended] self.complex_lists = [] self.required_fields = [ "MembershipOrganization_MembershipOrganizationMember", "MembershipOrganization_MembershipOrganizationOrganization", ]
def translate(request, object_type, object_id, field_name): field = ComplexFieldContainer.field_from_str_and_id( object_type, object_id, field_name) if request.method == 'POST': data = json.loads(request.POST.dict()['translation']) try: field.translate(data['value'], data['lang']) return HttpResponse(status=200) except ValidationError as error: return HttpResponseServerError(str(error)) elif request.method == 'GET': translations = field.get_translations() return HttpResponse(json.dumps(translations)) return HttpResponse
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, OrganizationName) self.aliases = ComplexFieldListContainer(self, OrganizationAlias) self.classification = ComplexFieldListContainer(self, OrganizationClassification) self.division_id = ComplexFieldContainer(self, OrganizationDivisionId) self.headquarters = ComplexFieldContainer(self, OrganizationHeadquarters) self.firstciteddate = ComplexFieldContainer(self, OrganizationFirstCitedDate) self.lastciteddate = ComplexFieldContainer(self, OrganizationLastCitedDate) self.realstart = ComplexFieldContainer(self, OrganizationRealStart) self.open_ended = ComplexFieldContainer(self, OrganizationOpenEnded) self.complex_fields = [self.name, self.division_id, self.firstciteddate, self.lastciteddate, self.realstart, self.open_ended, self.headquarters] self.complex_lists = [self.aliases, self.classification] self.required_fields = [ "Organization_OrganizationName", ]
def get_sources(request): object_type = request.GET['object_type'] object_id = request.GET['object_id'] field_name = request.GET['field_name'] field = ComplexFieldContainer.field_from_str_and_id( object_type, object_id, field_name ) sources = field.get_sources() sources_json = { "confidence": field.get_confidence(), "sources": [], "field_name": field.field_name, } for source in sources: sources_json['sources'].append(extract_source(source)) return HttpResponse(json.dumps(sources_json), content_type='application/json')
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.startdate = ComplexFieldContainer(self, EmplacementStartDate) self.enddate = ComplexFieldContainer(self, EmplacementEndDate) self.realstart = ComplexFieldContainer(self, EmplacementRealStart) self.open_ended = ComplexFieldContainer(self, EmplacementOpenEnded) self.organization = ComplexFieldContainer(self, EmplacementOrganization) self.site = ComplexFieldContainer(self, EmplacementSite) self.aliases = ComplexFieldListContainer(self, EmplacementAlias) self.complex_fields = [ self.startdate, self.enddate, self.organization, self.site, self.open_ended, self.realstart ] self.complex_lists = [self.aliases] self.required_fields = [ "Emplacement_EmplacementOrganization", "Emplacement_EmplacementSite", ]
def get_sources(request): object_type = request.GET['object_type'] object_id = request.GET['object_id'] field_name = request.GET['field_name'] field = ComplexFieldContainer.field_from_str_and_id( object_type, object_id, field_name) sources = field.get_sources() sources_json = { "confidence": field.get_confidence(), "sources": [], "field_name": field.field_name, } for source in sources: sources_json['sources'].append(extract_source(source)) return HttpResponse(json.dumps(sources_json), content_type='application/json')
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, OrganizationName) self.aliases = ComplexFieldListContainer(self, OrganizationAlias) self.classification = ComplexFieldListContainer(self, OrganizationClassification) self.division_id = ComplexFieldContainer(self, OrganizationDivisionId) self.headquarters = ComplexFieldContainer(self, OrganizationHeadquarters) self.firstciteddate = ComplexFieldContainer(self, OrganizationFirstCitedDate) self.lastciteddate = ComplexFieldContainer(self, OrganizationLastCitedDate) self.realstart = ComplexFieldContainer(self, OrganizationRealStart) self.open_ended = ComplexFieldContainer(self, OrganizationOpenEnded) self.complex_fields = [self.name, self.division_id, self.firstciteddate, self.lastciteddate, self.realstart, self.open_ended, self.headquarters] self.complex_lists = [self.aliases, self.classification] self.required_fields = [ "Organization_OrganizationName", ]
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, AreaName) self.code = ComplexFieldContainer(self, AreaCode) self.osmname = ComplexFieldContainer(self, AreaOSMName) self.osmid = ComplexFieldContainer(self, AreaOSMId) self.geometry = ComplexFieldContainer(self, AreaGeometry) self.division_id = ComplexFieldContainer(self, AreaDivisionId) self.complex_fields = [ self.name, self.code, self.osmname, self.geometry, self.division_id, self.osmid ] self.complex_lists = [] self.required_fields = [ "Area_AreaName", ]
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, OrganizationName) self.alias = ComplexFieldContainer(self, OrganizationAlias) self.classification = ComplexFieldContainer( self, OrganizationClassification) self.foundingdate = ComplexFieldContainer(self, OrganizationFoundingDate) self.dissolutiondate = ComplexFieldContainer( self, OrganizationDissolutionDate) self.realfounding = ComplexFieldContainer(self, OrganizationRealFounding) self.realdissolution = ComplexFieldContainer( self, OrganizationRealDissolution) self.complex_fields = [ self.name, self.alias, self.classification, self.foundingdate, self.dissolutiondate, self.realfounding, self.realdissolution ] self.required_fields = [ "Organization_OrganizationName", ]
def __init__(self, *args, **kwargs): self.person = ComplexFieldContainer(self, PersonExtraPerson) self.account_type = ComplexFieldContainer(self, PersonExtraAccountType) self.account = ComplexFieldContainer(self, PersonExtraAccount) self.external_link_description = ComplexFieldContainer( self, PersonExtraExternalLinkDescription) self.media_description = ComplexFieldContainer( self, PersonExtraMediaDescription) self.notes = ComplexFieldContainer(self, PersonExtraNotes) self.complex_fields = [ self.person, self.account_type, self.account, self.external_link_description, self.media_description, self.notes ] self.complex_lists = [] super().__init__(*args, **kwargs)
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.startdate = ComplexFieldContainer(self, ViolationStartDate) self.enddate = ComplexFieldContainer(self, ViolationEndDate) self.locationdescription = ComplexFieldContainer( self, ViolationLocationDescription) self.adminlevel1 = ComplexFieldContainer(self, ViolationAdminLevel1) self.adminlevel2 = ComplexFieldContainer(self, ViolationAdminLevel2) self.geoname = ComplexFieldContainer(self, ViolationGeoname) self.geonameid = ComplexFieldContainer(self, ViolationGeonameId) self.location = ComplexFieldContainer(self, ViolationLocation) self.description = ComplexFieldContainer(self, ViolationDescription) self.perpetrator = ComplexFieldContainer(self, ViolationPerpetrator) self.perpetratororganization = ComplexFieldContainer( self, ViolationPerpetratorOrganization) self.complex_fields = [ self.startdate, self.enddate, self.locationdescription, self.adminlevel1, self.adminlevel2, self.geoname, self.geonameid, self.location, self.description, self.perpetrator, self.perpetratororganization ] self.required_fields = [] self.types = ComplexFieldListContainer(self, ViolationType) self.sources = models.ManyToManyField(Source) self.confidence = models.CharField(max_length=1, default=1, choices=CONFIDENCE_LEVELS)
class Organization(models.Model, BaseModel, VersionsMixin): uuid = models.UUIDField(default=uuid.uuid4, editable=False, db_index=True) published = models.BooleanField(default=False) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.name = ComplexFieldContainer(self, OrganizationName) self.aliases = ComplexFieldListContainer(self, OrganizationAlias) self.classification = ComplexFieldListContainer(self, OrganizationClassification) self.division_id = ComplexFieldContainer(self, OrganizationDivisionId) self.headquarters = ComplexFieldContainer(self, OrganizationHeadquarters) self.firstciteddate = ComplexFieldContainer(self, OrganizationFirstCitedDate) self.lastciteddate = ComplexFieldContainer(self, OrganizationLastCitedDate) self.realstart = ComplexFieldContainer(self, OrganizationRealStart) self.open_ended = ComplexFieldContainer(self, OrganizationOpenEnded) self.complex_fields = [self.name, self.division_id, self.firstciteddate, self.lastciteddate, self.realstart, self.open_ended, self.headquarters] self.complex_lists = [self.aliases, self.classification] self.required_fields = [ "Organization_OrganizationName", ] def get_value(self): return self.name.get_value() def __str__(self): return str(self.name) @property def associations(self): ''' Return all of this organization's associations, in a custom sorting order. Order by first cited date descending, then last cited date descending, with nulls last. ''' assocs = self.associationorganization_set\ .annotate(lcd=Coalesce('object_ref__associationstartdate__value', 'object_ref__associationenddate__value', models.Value('1000-0-0')))\ .order_by('-lcd') return assocs @property def emplacements(self): ''' Return all of this organization's emplacements, in a custom sorting order. Order by first cited date descending, then last cited date descending, with nulls last. ''' empls = self.emplacementorganization_set\ .annotate(lcd=Coalesce('object_ref__emplacementstartdate__value', 'object_ref__emplacementenddate__value', models.Value('1000-0-0')))\ .order_by('-lcd') return empls @property def personnel(self): ''' Returns all personnel ever assigned to a unit Objects returned are MembershipPerson objects ''' return [o.object_ref for o in self.membershippersonorganization_set.all()] @property def alias_list(self): return ', '.join(a.get_value().value for a in self.aliases.get_list())
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.member = ComplexFieldContainer(self, MembershipPersonMember) self.organization = ComplexFieldContainer(self, MembershipPersonOrganization) self.role = ComplexFieldContainer(self, MembershipPersonRole) self.title = ComplexFieldContainer(self, MembershipPersonTitle) self.rank = ComplexFieldContainer(self, MembershipPersonRank) self.realstart = ComplexFieldContainer(self, MembershipPersonRealStart) self.realend = ComplexFieldContainer(self, MembershipPersonRealEnd) self.startcontext = ComplexFieldContainer(self, MembershipPersonStartContext) self.endcontext = ComplexFieldContainer(self, MembershipPersonEndContext) self.firstciteddate = ComplexFieldContainer(self, MembershipPersonFirstCitedDate) self.lastciteddate = ComplexFieldContainer(self, MembershipPersonLastCitedDate) self.complex_fields = [self.member, self.organization, self.role, self.title, self.rank, self.realstart, self.realend, self.startcontext, self.endcontext, self.firstciteddate, self.lastciteddate] self.complex_lists = [] self.required_fields = [ "MembershipPerson_MembershipPersonMember", "MembershipPerson_MembershipPersonOrganization", ]
class Person(models.Model, BaseModel, VersionsMixin): uuid = models.UUIDField(default=uuid.uuid4, editable=False, db_index=True) published = models.BooleanField(default=False) def __init__(self, *args, **kwargs): self.name = ComplexFieldContainer(self, PersonName) self.aliases = ComplexFieldListContainer(self, PersonAlias) self.division_id = ComplexFieldContainer(self, PersonDivisionId) self.gender = ComplexFieldContainer(self, PersonGender) self.date_of_birth = ComplexFieldContainer(self, PersonDateOfBirth) self.date_of_death = ComplexFieldContainer(self, PersonDateOfDeath) self.deceased = ComplexFieldContainer(self, PersonDeceased) self.biography = ComplexFieldContainer(self, PersonBiography) self.notes = ComplexFieldContainer(self, PersonNotes) self.external_links = ComplexFieldListContainer(self, PersonExternalLink) self.complex_fields = [ self.name, self.division_id, self.gender, self.date_of_birth, self.date_of_death, self.deceased, self.biography, self.notes, ] self.complex_lists = [self.aliases, self.external_links] self.required_fields = [ "Person_PersonName", ] super().__init__(*args, **kwargs) def get_value(self): return self.name.get_value() def __str__(self): try: return str(self.personname_set.first().value) except AttributeError: return str(self.uuid) def get_absolute_url(self): return reverse('view-person', kwargs={'slug': self.uuid}) @cached_property def memberships(self): ''' Return all of this person's memberships, in a custom sorting order. Order by first cited date descending, then last cited date descending, with nulls last. ''' mems = self.membershippersonmember_set\ .select_related('object_ref')\ .annotate(lcd=Coalesce('object_ref__membershippersonfirstciteddate__value', 'object_ref__membershippersonlastciteddate__value', models.Value('1000-0-0')))\ .order_by('-lcd') return mems @property def last_cited(self): ''' Get the global last citation date for this person, leaving out nulls. ''' order = '-object_ref__membershippersonlastciteddate__value' memberships = self.membershippersonmember_set.order_by(order) for membership in memberships: # Filter nulls lcd = membership.object_ref.lastciteddate.get_value() if lcd: return lcd @property def first_cited(self): ''' Get the global first citation date for this person, leaving out nulls. ''' order = 'object_ref__membershippersonfirstciteddate__value' memberships = self.membershippersonmember_set.order_by(order) for membership in memberships: fcd = membership.object_ref.firstciteddate.get_value() if fcd: return fcd
class MembershipPerson(models.Model, BaseModel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.member = ComplexFieldContainer(self, MembershipPersonMember) self.organization = ComplexFieldContainer(self, MembershipPersonOrganization) self.role = ComplexFieldContainer(self, MembershipPersonRole) self.title = ComplexFieldContainer(self, MembershipPersonTitle) self.rank = ComplexFieldContainer(self, MembershipPersonRank) self.realstart = ComplexFieldContainer(self, MembershipPersonRealStart) self.realend = ComplexFieldContainer(self, MembershipPersonRealEnd) self.startcontext = ComplexFieldContainer(self, MembershipPersonStartContext) self.endcontext = ComplexFieldContainer(self, MembershipPersonEndContext) self.firstciteddate = ComplexFieldContainer(self, MembershipPersonFirstCitedDate) self.lastciteddate = ComplexFieldContainer(self, MembershipPersonLastCitedDate) self.complex_fields = [self.member, self.organization, self.role, self.title, self.rank, self.realstart, self.realend, self.startcontext, self.endcontext, self.firstciteddate, self.lastciteddate] self.complex_lists = [] self.required_fields = [ "MembershipPerson_MembershipPersonMember", "MembershipPerson_MembershipPersonOrganization", ] @property def short_description(self): ''' Get a description string (as HTML) for information on this membership, such as: "General Officer Commanding, Major General, Commander of 82 Division (Military/Army, Nigeria) on 1st January 2013" ''' obj = self # Start with the epithets (title, rank, and role) description = '<strong>' epithets = [obj.title.get_value(), obj.rank.get_value(), obj.role.get_value()] epithets = [str(ep.value) for ep in epithets if ep is not None] if len(epithets) == 1: description += epithets[0] + '</strong>' elif len(epithets) == 2 or len(epithets) == 3: separator = '</strong>, <strong>' description += separator.join(epithets) + '</strong>' else: # Length must be 0, so use a generic title description = _('Member') # Member organization description += ' ' organization = obj.organization.get_value().value href = reverse('view-organization', args=(organization.uuid,)) # Translators: This is part of the string "{Rank} of {unit}" joiner = _('of') org_string = joiner + ' <strong><a href="{href}">{org}</a></strong>' description += org_string.format(org=organization, href=href) # Classifications description += ' ' classifications = organization.classification.get_list() if classifications: classifications = '/'.join(str(clss) for clss in classifications if clss is not None) description += '(%s)' % classifications # Last cited date description += ' ' last_cited = obj.lastciteddate.get_value() if last_cited: # Translators: This is part of the "Last seen as" string for a person, # as in "last seen as {rank} of {unit} on {date}" date_joiner = _('on') date_string = date_joiner + ' <strong>%s</strong>' % last_cited description += date_string return description @classmethod def from_id(cls, id_): try: membership = cls.objects.get(id=id_) return membership except cls.DoesNotExist: return None def get_value(self): return '{0} member of {1}'.format(self.member.get_value(), self.organization.get_value()) @classmethod def create(cls, dict_values, lang=get_language()): membership = cls() membership.update(dict_values, lang) return membership
class Violation(models.Model, BaseModel, SourcesMixin, VersionsMixin, GetComplexFieldNameMixin): uuid = models.UUIDField(default=uuid.uuid4, editable=False, db_index=True) published = models.BooleanField(default=False) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Dates and status self.startdate = ComplexFieldContainer(self, ViolationStartDate) self.first_allegation = ComplexFieldContainer( self, ViolationFirstAllegation) self.enddate = ComplexFieldContainer(self, ViolationEndDate) self.last_update = ComplexFieldContainer(self, ViolationLastUpdate) self.status = ComplexFieldContainer(self, ViolationStatus) # Location fields self.locationdescription = ComplexFieldContainer( self, ViolationLocationDescription) self.adminlevel1 = ComplexFieldContainer(self, ViolationAdminLevel1) self.adminlevel2 = ComplexFieldContainer(self, ViolationAdminLevel2) self.osmname = ComplexFieldContainer(self, ViolationOSMName) self.osmid = ComplexFieldContainer(self, ViolationOSMId) self.division_id = ComplexFieldContainer(self, ViolationDivisionId) self.location = ComplexFieldContainer(self, ViolationLocation) self.location_name = ComplexFieldContainer(self, ViolationLocationName) self.location_id = ComplexFieldContainer(self, ViolationLocationId) # Descriptions and other attributes self.description = ComplexFieldContainer(self, ViolationDescription) self.perpetrator = ComplexFieldListContainer(self, ViolationPerpetrator) self.perpetratororganization = ComplexFieldListContainer( self, ViolationPerpetratorOrganization) self.perpetratorclassification = ComplexFieldListContainer( self, ViolationPerpetratorClassification) self.types = ComplexFieldListContainer(self, ViolationType) self.complex_fields = [ self.startdate, self.first_allegation, self.enddate, self.last_update, self.status, self.locationdescription, self.adminlevel1, self.adminlevel2, self.location, self.description, self.division_id ] self.complex_lists = [ self.perpetrator, self.perpetratororganization, self.perpetratorclassification, self.types ] self.required_fields = [self.description, self.startdate, self.enddate] def get_value(self): return self.description.get_value() @property def related_entities(self): """ Return a list of dicts with metadata for all of the entities linked to this Violation. Metadata dicts must have the following keys: - name - entity_type - url (a link to edit the entity) """ related_entities = [] # Second-highest administrative level for the location of the violation. if self.adminlevel1.get_value(): location = self.adminlevel1.get_value().value related_entities.append({ 'name': location.name, 'entity_type': _('AdminLevel1'), 'url': reverse('edit-violation', args=[self.uuid]) }) # Highest administrative level for the location of the violation. if self.adminlevel2.get_value(): location = self.adminlevel2.get_value().value related_entities.append({ 'name': location.name, 'entity_type': _('AdminLevel2'), 'url': reverse('edit-violation', args=[self.uuid]) }) # The location of the violation. if self.location.get_value(): location = self.location.get_value().value related_entities.append({ 'name': location.name, 'entity_type': _('Location'), 'url': reverse('edit-violation', args=[self.uuid]) }) # The perpetrators of the violation (personnel). perpetrators = self.perpetrator.get_list() if perpetrators: perpetrators = [ perp.get_value() for perp in perpetrators if perp.get_value() ] for perpetrator in perpetrators: person = perpetrator.value related_entities.append({ 'name': person.name.get_value().value, 'entity_type': _('Perpetrator'), 'url': reverse('edit-violation', args=[self.uuid]) }) # The perpetrators of the violation (organizations). perpetratororganizations = self.perpetratororganization.get_list() if perpetratororganizations: perpetrators = [ perp.get_value() for perp in perpetratororganizations if perp.get_value() ] for perpetrator in perpetrators: org = perpetrator.value related_entities.append({ 'name': org.name.get_value().value, 'entity_type': _('PerpetratorOrganization'), 'url': reverse('edit-violation', args=[self.uuid]) }) return related_entities
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Dates and status self.startdate = ComplexFieldContainer(self, ViolationStartDate) self.first_allegation = ComplexFieldContainer( self, ViolationFirstAllegation) self.enddate = ComplexFieldContainer(self, ViolationEndDate) self.last_update = ComplexFieldContainer(self, ViolationLastUpdate) self.status = ComplexFieldContainer(self, ViolationStatus) # Location fields self.locationdescription = ComplexFieldContainer( self, ViolationLocationDescription) self.adminlevel1 = ComplexFieldContainer(self, ViolationAdminLevel1) self.adminlevel2 = ComplexFieldContainer(self, ViolationAdminLevel2) self.osmname = ComplexFieldContainer(self, ViolationOSMName) self.osmid = ComplexFieldContainer(self, ViolationOSMId) self.division_id = ComplexFieldContainer(self, ViolationDivisionId) self.location = ComplexFieldContainer(self, ViolationLocation) self.location_name = ComplexFieldContainer(self, ViolationLocationName) self.location_id = ComplexFieldContainer(self, ViolationLocationId) # Descriptions and other attributes self.description = ComplexFieldContainer(self, ViolationDescription) self.perpetrator = ComplexFieldListContainer(self, ViolationPerpetrator) self.perpetratororganization = ComplexFieldListContainer( self, ViolationPerpetratorOrganization) self.perpetratorclassification = ComplexFieldListContainer( self, ViolationPerpetratorClassification) self.types = ComplexFieldListContainer(self, ViolationType) self.complex_fields = [ self.startdate, self.first_allegation, self.enddate, self.last_update, self.status, self.locationdescription, self.adminlevel1, self.adminlevel2, self.location, self.description, self.division_id ] self.complex_lists = [ self.perpetrator, self.perpetratororganization, self.perpetratorclassification, self.types ] self.required_fields = [self.description, self.startdate, self.enddate]