Ejemplo n.º 1
0
    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"]
Ejemplo n.º 2
0
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())
Ejemplo n.º 3
0
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())
Ejemplo n.º 4
0
    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",
        ]
Ejemplo n.º 5
0
    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",
        ]
Ejemplo n.º 6
0
    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",
        ]
Ejemplo n.º 7
0
    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",
        ]
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
    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"
        ]
Ejemplo n.º 12
0
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)
Ejemplo n.º 13
0
    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
Ejemplo n.º 14
0
    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)
Ejemplo n.º 15
0
    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",
        ]
Ejemplo n.º 16
0
    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"
        ]
Ejemplo n.º 17
0
    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",
        ]
Ejemplo n.º 18
0
    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)
Ejemplo n.º 19
0
 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()
Ejemplo n.º 20
0
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))
Ejemplo n.º 21
0
    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
Ejemplo n.º 22
0
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
Ejemplo n.º 23
0
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
Ejemplo n.º 24
0
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())
Ejemplo n.º 25
0
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())
Ejemplo n.º 26
0
    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",
        ]
Ejemplo n.º 27
0
    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"]
Ejemplo n.º 28
0
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))
Ejemplo n.º 29
0
    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",
        ]
Ejemplo n.º 30
0
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
Ejemplo n.º 31
0
    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",
        ]
Ejemplo n.º 32
0
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')
Ejemplo n.º 33
0
    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",
        ]
Ejemplo n.º 34
0
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')
Ejemplo n.º 35
0
    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",
        ]
Ejemplo n.º 36
0
    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",
        ]
Ejemplo n.º 37
0
    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",
        ]
Ejemplo n.º 38
0
    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)
Ejemplo n.º 39
0
    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)
Ejemplo n.º 40
0
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())
Ejemplo n.º 41
0
    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",
        ]
Ejemplo n.º 42
0
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
Ejemplo n.º 43
0
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
Ejemplo n.º 44
0
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
Ejemplo n.º 45
0
    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]