# coding: utf-8

"""
    Ed-Fi Operational Data Store API

    The Ed-Fi ODS / API enables applications to read and write education data stored in an Ed-Fi ODS through a secure REST interface.  ***  > *Note: Consumers of ODS / API information should sanitize all data for display and storage. The ODS / API provides reasonable safeguards against cross-site scripting attacks and other malicious content, but the platform does not and cannot guarantee that the data it contains is free of all potentially harmful content.*  ***   # noqa: E501

    OpenAPI spec version: 3
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six

from swagger_client.configuration import Configuration


class TpdmApplicant(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """

    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'id': 'str',
        'applicant_identifier': 'str',
        'person_reference': 'EdFiPersonReference',
        'teacher_candidate_reference': 'TpdmTeacherCandidateReference',
        'addresses': 'list[TpdmApplicantAddress]',
        'aids': 'list[TpdmApplicantAid]',
        'background_checks': 'list[TpdmApplicantBackgroundCheck]',
        'birth_date': 'date',
        'characteristics': 'list[TpdmApplicantCharacteristic]',
        'citizenship_status_descriptor': 'str',
        'disabilities': 'list[TpdmApplicantDisability]',
        'economic_disadvantaged': 'bool',
        'electronic_mails': 'list[TpdmApplicantElectronicMail]',
        'first_generation_student': 'bool',
        'first_name': 'str',
        'gender_descriptor': 'str',
        'generation_code_suffix': 'str',
        'hispanic_latino_ethnicity': 'bool',
        'identification_documents': 'list[TpdmApplicantIdentificationDocument]',
        'international_addresses': 'list[TpdmApplicantInternationalAddress]',
        'languages': 'list[TpdmApplicantLanguage]',
        'last_surname': 'str',
        'login_id': 'str',
        'maiden_name': 'str',
        'middle_name': 'str',
        'personal_identification_documents': 'list[TpdmApplicantPersonalIdentificationDocument]',
        'personal_title_prefix': 'str',
        'races': 'list[TpdmApplicantRace]',
        'sex_descriptor': 'str',
        'staff_identification_codes': 'list[TpdmApplicantStaffIdentificationCode]',
        'teacher_preparation_programs': 'list[TpdmApplicantTeacherPreparationProgram]',
        'telephones': 'list[TpdmApplicantTelephone]',
        'visas': 'list[TpdmApplicantVisa]',
        'etag': 'str'
    }

    attribute_map = {
        'id': 'id',
        'applicant_identifier': 'applicantIdentifier',
        'person_reference': 'personReference',
        'teacher_candidate_reference': 'teacherCandidateReference',
        'addresses': 'addresses',
        'aids': 'aids',
        'background_checks': 'backgroundChecks',
        'birth_date': 'birthDate',
        'characteristics': 'characteristics',
        'citizenship_status_descriptor': 'citizenshipStatusDescriptor',
        'disabilities': 'disabilities',
        'economic_disadvantaged': 'economicDisadvantaged',
        'electronic_mails': 'electronicMails',
        'first_generation_student': 'firstGenerationStudent',
        'first_name': 'firstName',
        'gender_descriptor': 'genderDescriptor',
        'generation_code_suffix': 'generationCodeSuffix',
        'hispanic_latino_ethnicity': 'hispanicLatinoEthnicity',
        'identification_documents': 'identificationDocuments',
        'international_addresses': 'internationalAddresses',
        'languages': 'languages',
        'last_surname': 'lastSurname',
        'login_id': 'loginId',
        'maiden_name': 'maidenName',
        'middle_name': 'middleName',
        'personal_identification_documents': 'personalIdentificationDocuments',
        'personal_title_prefix': 'personalTitlePrefix',
        'races': 'races',
        'sex_descriptor': 'sexDescriptor',
        'staff_identification_codes': 'staffIdentificationCodes',
        'teacher_preparation_programs': 'teacherPreparationPrograms',
        'telephones': 'telephones',
        'visas': 'visas',
        'etag': '_etag'
    }

    def __init__(self, id=None, applicant_identifier=None, person_reference=None, teacher_candidate_reference=None, addresses=None, aids=None, background_checks=None, birth_date=None, characteristics=None, citizenship_status_descriptor=None, disabilities=None, economic_disadvantaged=None, electronic_mails=None, first_generation_student=None, first_name=None, gender_descriptor=None, generation_code_suffix=None, hispanic_latino_ethnicity=None, identification_documents=None, international_addresses=None, languages=None, last_surname=None, login_id=None, maiden_name=None, middle_name=None, personal_identification_documents=None, personal_title_prefix=None, races=None, sex_descriptor=None, staff_identification_codes=None, teacher_preparation_programs=None, telephones=None, visas=None, etag=None, _configuration=None):  # noqa: E501
        """TpdmApplicant - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._id = None
        self._applicant_identifier = None
        self._person_reference = None
        self._teacher_candidate_reference = None
        self._addresses = None
        self._aids = None
        self._background_checks = None
        self._birth_date = None
        self._characteristics = None
        self._citizenship_status_descriptor = None
        self._disabilities = None
        self._economic_disadvantaged = None
        self._electronic_mails = None
        self._first_generation_student = None
        self._first_name = None
        self._gender_descriptor = None
        self._generation_code_suffix = None
        self._hispanic_latino_ethnicity = None
        self._identification_documents = None
        self._international_addresses = None
        self._languages = None
        self._last_surname = None
        self._login_id = None
        self._maiden_name = None
        self._middle_name = None
        self._personal_identification_documents = None
        self._personal_title_prefix = None
        self._races = None
        self._sex_descriptor = None
        self._staff_identification_codes = None
        self._teacher_preparation_programs = None
        self._telephones = None
        self._visas = None
        self._etag = None
        self.discriminator = None

        if id is not None:
            self.id = id
        self.applicant_identifier = applicant_identifier
        if person_reference is not None:
            self.person_reference = person_reference
        if teacher_candidate_reference is not None:
            self.teacher_candidate_reference = teacher_candidate_reference
        if addresses is not None:
            self.addresses = addresses
        if aids is not None:
            self.aids = aids
        if background_checks is not None:
            self.background_checks = background_checks
        if birth_date is not None:
            self.birth_date = birth_date
        if characteristics is not None:
            self.characteristics = characteristics
        if citizenship_status_descriptor is not None:
            self.citizenship_status_descriptor = citizenship_status_descriptor
        if disabilities is not None:
            self.disabilities = disabilities
        if economic_disadvantaged is not None:
            self.economic_disadvantaged = economic_disadvantaged
        if electronic_mails is not None:
            self.electronic_mails = electronic_mails
        if first_generation_student is not None:
            self.first_generation_student = first_generation_student
        self.first_name = first_name
        if gender_descriptor is not None:
            self.gender_descriptor = gender_descriptor
        if generation_code_suffix is not None:
            self.generation_code_suffix = generation_code_suffix
        if hispanic_latino_ethnicity is not None:
            self.hispanic_latino_ethnicity = hispanic_latino_ethnicity
        if identification_documents is not None:
            self.identification_documents = identification_documents
        if international_addresses is not None:
            self.international_addresses = international_addresses
        if languages is not None:
            self.languages = languages
        self.last_surname = last_surname
        if login_id is not None:
            self.login_id = login_id
        if maiden_name is not None:
            self.maiden_name = maiden_name
        if middle_name is not None:
            self.middle_name = middle_name
        if personal_identification_documents is not None:
            self.personal_identification_documents = personal_identification_documents
        if personal_title_prefix is not None:
            self.personal_title_prefix = personal_title_prefix
        if races is not None:
            self.races = races
        if sex_descriptor is not None:
            self.sex_descriptor = sex_descriptor
        if staff_identification_codes is not None:
            self.staff_identification_codes = staff_identification_codes
        if teacher_preparation_programs is not None:
            self.teacher_preparation_programs = teacher_preparation_programs
        if telephones is not None:
            self.telephones = telephones
        if visas is not None:
            self.visas = visas
        if etag is not None:
            self.etag = etag

    @property
    def id(self):
        """Gets the id of this TpdmApplicant.  # noqa: E501

          # noqa: E501

        :return: The id of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this TpdmApplicant.

          # noqa: E501

        :param id: The id of this TpdmApplicant.  # noqa: E501
        :type: str
        """

        self._id = id

    @property
    def applicant_identifier(self):
        """Gets the applicant_identifier of this TpdmApplicant.  # noqa: E501

        Identifier assigned to a person making formal application for an open staff position.  # noqa: E501

        :return: The applicant_identifier of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._applicant_identifier

    @applicant_identifier.setter
    def applicant_identifier(self, applicant_identifier):
        """Sets the applicant_identifier of this TpdmApplicant.

        Identifier assigned to a person making formal application for an open staff position.  # noqa: E501

        :param applicant_identifier: The applicant_identifier of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if self._configuration.client_side_validation and applicant_identifier is None:
            raise ValueError("Invalid value for `applicant_identifier`, must not be `None`")  # noqa: E501
        if (self._configuration.client_side_validation and
                applicant_identifier is not None and len(applicant_identifier) > 32):
            raise ValueError("Invalid value for `applicant_identifier`, length must be less than or equal to `32`")  # noqa: E501

        self._applicant_identifier = applicant_identifier

    @property
    def person_reference(self):
        """Gets the person_reference of this TpdmApplicant.  # noqa: E501


        :return: The person_reference of this TpdmApplicant.  # noqa: E501
        :rtype: EdFiPersonReference
        """
        return self._person_reference

    @person_reference.setter
    def person_reference(self, person_reference):
        """Sets the person_reference of this TpdmApplicant.


        :param person_reference: The person_reference of this TpdmApplicant.  # noqa: E501
        :type: EdFiPersonReference
        """

        self._person_reference = person_reference

    @property
    def teacher_candidate_reference(self):
        """Gets the teacher_candidate_reference of this TpdmApplicant.  # noqa: E501


        :return: The teacher_candidate_reference of this TpdmApplicant.  # noqa: E501
        :rtype: TpdmTeacherCandidateReference
        """
        return self._teacher_candidate_reference

    @teacher_candidate_reference.setter
    def teacher_candidate_reference(self, teacher_candidate_reference):
        """Sets the teacher_candidate_reference of this TpdmApplicant.


        :param teacher_candidate_reference: The teacher_candidate_reference of this TpdmApplicant.  # noqa: E501
        :type: TpdmTeacherCandidateReference
        """

        self._teacher_candidate_reference = teacher_candidate_reference

    @property
    def addresses(self):
        """Gets the addresses of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantAddresses. The set of elements that describes an address, including the street address, city, state, and ZIP code.  # noqa: E501

        :return: The addresses of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantAddress]
        """
        return self._addresses

    @addresses.setter
    def addresses(self, addresses):
        """Sets the addresses of this TpdmApplicant.

        An unordered collection of applicantAddresses. The set of elements that describes an address, including the street address, city, state, and ZIP code.  # noqa: E501

        :param addresses: The addresses of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantAddress]
        """

        self._addresses = addresses

    @property
    def aids(self):
        """Gets the aids of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantAids. This entity represents the financial aid a person is awarded.  # noqa: E501

        :return: The aids of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantAid]
        """
        return self._aids

    @aids.setter
    def aids(self, aids):
        """Sets the aids of this TpdmApplicant.

        An unordered collection of applicantAids. This entity represents the financial aid a person is awarded.  # noqa: E501

        :param aids: The aids of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantAid]
        """

        self._aids = aids

    @property
    def background_checks(self):
        """Gets the background_checks of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantBackgroundChecks. Applicant background check history and disposition.  # noqa: E501

        :return: The background_checks of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantBackgroundCheck]
        """
        return self._background_checks

    @background_checks.setter
    def background_checks(self, background_checks):
        """Sets the background_checks of this TpdmApplicant.

        An unordered collection of applicantBackgroundChecks. Applicant background check history and disposition.  # noqa: E501

        :param background_checks: The background_checks of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantBackgroundCheck]
        """

        self._background_checks = background_checks

    @property
    def birth_date(self):
        """Gets the birth_date of this TpdmApplicant.  # noqa: E501

        The month, day, and year on which an individual was born.  # noqa: E501

        :return: The birth_date of this TpdmApplicant.  # noqa: E501
        :rtype: date
        """
        return self._birth_date

    @birth_date.setter
    def birth_date(self, birth_date):
        """Sets the birth_date of this TpdmApplicant.

        The month, day, and year on which an individual was born.  # noqa: E501

        :param birth_date: The birth_date of this TpdmApplicant.  # noqa: E501
        :type: date
        """

        self._birth_date = birth_date

    @property
    def characteristics(self):
        """Gets the characteristics of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantCharacteristics. Reflects important characteristics of the applicant's home situation:      Displaced Homemaker, Immigrant, Migratory, Military Parent, Pregnant Teen, Single Parent, and Unaccompanied Youth.  # noqa: E501

        :return: The characteristics of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantCharacteristic]
        """
        return self._characteristics

    @characteristics.setter
    def characteristics(self, characteristics):
        """Sets the characteristics of this TpdmApplicant.

        An unordered collection of applicantCharacteristics. Reflects important characteristics of the applicant's home situation:      Displaced Homemaker, Immigrant, Migratory, Military Parent, Pregnant Teen, Single Parent, and Unaccompanied Youth.  # noqa: E501

        :param characteristics: The characteristics of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantCharacteristic]
        """

        self._characteristics = characteristics

    @property
    def citizenship_status_descriptor(self):
        """Gets the citizenship_status_descriptor of this TpdmApplicant.  # noqa: E501

        An indicator of whether or not the person is a U.S. citizen.  # noqa: E501

        :return: The citizenship_status_descriptor of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._citizenship_status_descriptor

    @citizenship_status_descriptor.setter
    def citizenship_status_descriptor(self, citizenship_status_descriptor):
        """Sets the citizenship_status_descriptor of this TpdmApplicant.

        An indicator of whether or not the person is a U.S. citizen.  # noqa: E501

        :param citizenship_status_descriptor: The citizenship_status_descriptor of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                citizenship_status_descriptor is not None and len(citizenship_status_descriptor) > 306):
            raise ValueError("Invalid value for `citizenship_status_descriptor`, length must be less than or equal to `306`")  # noqa: E501

        self._citizenship_status_descriptor = citizenship_status_descriptor

    @property
    def disabilities(self):
        """Gets the disabilities of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantDisabilities. The disability condition(s) that best describes an individual's impairment.  # noqa: E501

        :return: The disabilities of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantDisability]
        """
        return self._disabilities

    @disabilities.setter
    def disabilities(self, disabilities):
        """Sets the disabilities of this TpdmApplicant.

        An unordered collection of applicantDisabilities. The disability condition(s) that best describes an individual's impairment.  # noqa: E501

        :param disabilities: The disabilities of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantDisability]
        """

        self._disabilities = disabilities

    @property
    def economic_disadvantaged(self):
        """Gets the economic_disadvantaged of this TpdmApplicant.  # noqa: E501

        An indication of inadequate financial condition of an individual's family, as determined by family income, number of family members/dependents, participation in public assistance programs, and/or other characteristics considered relevant by federal, state, and local policy.  # noqa: E501

        :return: The economic_disadvantaged of this TpdmApplicant.  # noqa: E501
        :rtype: bool
        """
        return self._economic_disadvantaged

    @economic_disadvantaged.setter
    def economic_disadvantaged(self, economic_disadvantaged):
        """Sets the economic_disadvantaged of this TpdmApplicant.

        An indication of inadequate financial condition of an individual's family, as determined by family income, number of family members/dependents, participation in public assistance programs, and/or other characteristics considered relevant by federal, state, and local policy.  # noqa: E501

        :param economic_disadvantaged: The economic_disadvantaged of this TpdmApplicant.  # noqa: E501
        :type: bool
        """

        self._economic_disadvantaged = economic_disadvantaged

    @property
    def electronic_mails(self):
        """Gets the electronic_mails of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantElectronicMails. The numbers, letters, and symbols used to identify an electronic mail (e-mail) user within the network to which the individual or organization belongs.  # noqa: E501

        :return: The electronic_mails of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantElectronicMail]
        """
        return self._electronic_mails

    @electronic_mails.setter
    def electronic_mails(self, electronic_mails):
        """Sets the electronic_mails of this TpdmApplicant.

        An unordered collection of applicantElectronicMails. The numbers, letters, and symbols used to identify an electronic mail (e-mail) user within the network to which the individual or organization belongs.  # noqa: E501

        :param electronic_mails: The electronic_mails of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantElectronicMail]
        """

        self._electronic_mails = electronic_mails

    @property
    def first_generation_student(self):
        """Gets the first_generation_student of this TpdmApplicant.  # noqa: E501

        Indicator of whether individual is a first generation college student.  # noqa: E501

        :return: The first_generation_student of this TpdmApplicant.  # noqa: E501
        :rtype: bool
        """
        return self._first_generation_student

    @first_generation_student.setter
    def first_generation_student(self, first_generation_student):
        """Sets the first_generation_student of this TpdmApplicant.

        Indicator of whether individual is a first generation college student.  # noqa: E501

        :param first_generation_student: The first_generation_student of this TpdmApplicant.  # noqa: E501
        :type: bool
        """

        self._first_generation_student = first_generation_student

    @property
    def first_name(self):
        """Gets the first_name of this TpdmApplicant.  # noqa: E501

        A name given to an individual at birth, baptism, or during another naming ceremony, or through legal change.  # noqa: E501

        :return: The first_name of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._first_name

    @first_name.setter
    def first_name(self, first_name):
        """Sets the first_name of this TpdmApplicant.

        A name given to an individual at birth, baptism, or during another naming ceremony, or through legal change.  # noqa: E501

        :param first_name: The first_name of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if self._configuration.client_side_validation and first_name is None:
            raise ValueError("Invalid value for `first_name`, must not be `None`")  # noqa: E501
        if (self._configuration.client_side_validation and
                first_name is not None and len(first_name) > 75):
            raise ValueError("Invalid value for `first_name`, length must be less than or equal to `75`")  # noqa: E501

        self._first_name = first_name

    @property
    def gender_descriptor(self):
        """Gets the gender_descriptor of this TpdmApplicant.  # noqa: E501

        The gender with which a person associates.  # noqa: E501

        :return: The gender_descriptor of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._gender_descriptor

    @gender_descriptor.setter
    def gender_descriptor(self, gender_descriptor):
        """Sets the gender_descriptor of this TpdmApplicant.

        The gender with which a person associates.  # noqa: E501

        :param gender_descriptor: The gender_descriptor of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                gender_descriptor is not None and len(gender_descriptor) > 306):
            raise ValueError("Invalid value for `gender_descriptor`, length must be less than or equal to `306`")  # noqa: E501

        self._gender_descriptor = gender_descriptor

    @property
    def generation_code_suffix(self):
        """Gets the generation_code_suffix of this TpdmApplicant.  # noqa: E501

        An appendage, if any, used to denote an individual's generation in his family (e.g., Jr., Sr., III).  # noqa: E501

        :return: The generation_code_suffix of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._generation_code_suffix

    @generation_code_suffix.setter
    def generation_code_suffix(self, generation_code_suffix):
        """Sets the generation_code_suffix of this TpdmApplicant.

        An appendage, if any, used to denote an individual's generation in his family (e.g., Jr., Sr., III).  # noqa: E501

        :param generation_code_suffix: The generation_code_suffix of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                generation_code_suffix is not None and len(generation_code_suffix) > 10):
            raise ValueError("Invalid value for `generation_code_suffix`, length must be less than or equal to `10`")  # noqa: E501

        self._generation_code_suffix = generation_code_suffix

    @property
    def hispanic_latino_ethnicity(self):
        """Gets the hispanic_latino_ethnicity of this TpdmApplicant.  # noqa: E501

        An indication that the individual traces his or her origin or descent to Mexico, Puerto Rico, Cuba, Central, and South America, and other Spanish cultures, regardless of race. The term, \"Spanish origin,\" can be used in addition to \"Hispanic or Latino\".  # noqa: E501

        :return: The hispanic_latino_ethnicity of this TpdmApplicant.  # noqa: E501
        :rtype: bool
        """
        return self._hispanic_latino_ethnicity

    @hispanic_latino_ethnicity.setter
    def hispanic_latino_ethnicity(self, hispanic_latino_ethnicity):
        """Sets the hispanic_latino_ethnicity of this TpdmApplicant.

        An indication that the individual traces his or her origin or descent to Mexico, Puerto Rico, Cuba, Central, and South America, and other Spanish cultures, regardless of race. The term, \"Spanish origin,\" can be used in addition to \"Hispanic or Latino\".  # noqa: E501

        :param hispanic_latino_ethnicity: The hispanic_latino_ethnicity of this TpdmApplicant.  # noqa: E501
        :type: bool
        """

        self._hispanic_latino_ethnicity = hispanic_latino_ethnicity

    @property
    def identification_documents(self):
        """Gets the identification_documents of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantIdentificationDocuments. Describe the documentation of citizenship.  # noqa: E501

        :return: The identification_documents of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantIdentificationDocument]
        """
        return self._identification_documents

    @identification_documents.setter
    def identification_documents(self, identification_documents):
        """Sets the identification_documents of this TpdmApplicant.

        An unordered collection of applicantIdentificationDocuments. Describe the documentation of citizenship.  # noqa: E501

        :param identification_documents: The identification_documents of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantIdentificationDocument]
        """

        self._identification_documents = identification_documents

    @property
    def international_addresses(self):
        """Gets the international_addresses of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantInternationalAddresses. The set of elements that describes an international address.  # noqa: E501

        :return: The international_addresses of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantInternationalAddress]
        """
        return self._international_addresses

    @international_addresses.setter
    def international_addresses(self, international_addresses):
        """Sets the international_addresses of this TpdmApplicant.

        An unordered collection of applicantInternationalAddresses. The set of elements that describes an international address.  # noqa: E501

        :param international_addresses: The international_addresses of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantInternationalAddress]
        """

        self._international_addresses = international_addresses

    @property
    def languages(self):
        """Gets the languages of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantLanguages. The language(s) the individual uses to communicate.  # noqa: E501

        :return: The languages of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantLanguage]
        """
        return self._languages

    @languages.setter
    def languages(self, languages):
        """Sets the languages of this TpdmApplicant.

        An unordered collection of applicantLanguages. The language(s) the individual uses to communicate.  # noqa: E501

        :param languages: The languages of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantLanguage]
        """

        self._languages = languages

    @property
    def last_surname(self):
        """Gets the last_surname of this TpdmApplicant.  # noqa: E501

        The name borne in common by members of a family.  # noqa: E501

        :return: The last_surname of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._last_surname

    @last_surname.setter
    def last_surname(self, last_surname):
        """Sets the last_surname of this TpdmApplicant.

        The name borne in common by members of a family.  # noqa: E501

        :param last_surname: The last_surname of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if self._configuration.client_side_validation and last_surname is None:
            raise ValueError("Invalid value for `last_surname`, must not be `None`")  # noqa: E501
        if (self._configuration.client_side_validation and
                last_surname is not None and len(last_surname) > 75):
            raise ValueError("Invalid value for `last_surname`, length must be less than or equal to `75`")  # noqa: E501

        self._last_surname = last_surname

    @property
    def login_id(self):
        """Gets the login_id of this TpdmApplicant.  # noqa: E501

        The login ID for the user; used for security access control interface.  # noqa: E501

        :return: The login_id of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._login_id

    @login_id.setter
    def login_id(self, login_id):
        """Sets the login_id of this TpdmApplicant.

        The login ID for the user; used for security access control interface.  # noqa: E501

        :param login_id: The login_id of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                login_id is not None and len(login_id) > 60):
            raise ValueError("Invalid value for `login_id`, length must be less than or equal to `60`")  # noqa: E501

        self._login_id = login_id

    @property
    def maiden_name(self):
        """Gets the maiden_name of this TpdmApplicant.  # noqa: E501

        The person's maiden name.  # noqa: E501

        :return: The maiden_name of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._maiden_name

    @maiden_name.setter
    def maiden_name(self, maiden_name):
        """Sets the maiden_name of this TpdmApplicant.

        The person's maiden name.  # noqa: E501

        :param maiden_name: The maiden_name of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                maiden_name is not None and len(maiden_name) > 75):
            raise ValueError("Invalid value for `maiden_name`, length must be less than or equal to `75`")  # noqa: E501

        self._maiden_name = maiden_name

    @property
    def middle_name(self):
        """Gets the middle_name of this TpdmApplicant.  # noqa: E501

        A secondary name given to an individual at birth, baptism, or during another naming ceremony.  # noqa: E501

        :return: The middle_name of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._middle_name

    @middle_name.setter
    def middle_name(self, middle_name):
        """Sets the middle_name of this TpdmApplicant.

        A secondary name given to an individual at birth, baptism, or during another naming ceremony.  # noqa: E501

        :param middle_name: The middle_name of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                middle_name is not None and len(middle_name) > 75):
            raise ValueError("Invalid value for `middle_name`, length must be less than or equal to `75`")  # noqa: E501

        self._middle_name = middle_name

    @property
    def personal_identification_documents(self):
        """Gets the personal_identification_documents of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantPersonalIdentificationDocuments. The documents presented as evident to verify one's personal identity; for example: drivers license, passport, birth certificate, etc.  # noqa: E501

        :return: The personal_identification_documents of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantPersonalIdentificationDocument]
        """
        return self._personal_identification_documents

    @personal_identification_documents.setter
    def personal_identification_documents(self, personal_identification_documents):
        """Sets the personal_identification_documents of this TpdmApplicant.

        An unordered collection of applicantPersonalIdentificationDocuments. The documents presented as evident to verify one's personal identity; for example: drivers license, passport, birth certificate, etc.  # noqa: E501

        :param personal_identification_documents: The personal_identification_documents of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantPersonalIdentificationDocument]
        """

        self._personal_identification_documents = personal_identification_documents

    @property
    def personal_title_prefix(self):
        """Gets the personal_title_prefix of this TpdmApplicant.  # noqa: E501

        A prefix used to denote the title, degree, position, or seniority of the person.  # noqa: E501

        :return: The personal_title_prefix of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._personal_title_prefix

    @personal_title_prefix.setter
    def personal_title_prefix(self, personal_title_prefix):
        """Sets the personal_title_prefix of this TpdmApplicant.

        A prefix used to denote the title, degree, position, or seniority of the person.  # noqa: E501

        :param personal_title_prefix: The personal_title_prefix of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                personal_title_prefix is not None and len(personal_title_prefix) > 30):
            raise ValueError("Invalid value for `personal_title_prefix`, length must be less than or equal to `30`")  # noqa: E501

        self._personal_title_prefix = personal_title_prefix

    @property
    def races(self):
        """Gets the races of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantRaces. The general racial category which most clearly reflects the individual's recognition of his or her community or with which the individual most identifies. The way this data element is listed, it must allow for multiple entries so that each individual can specify all appropriate races.  # noqa: E501

        :return: The races of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantRace]
        """
        return self._races

    @races.setter
    def races(self, races):
        """Sets the races of this TpdmApplicant.

        An unordered collection of applicantRaces. The general racial category which most clearly reflects the individual's recognition of his or her community or with which the individual most identifies. The way this data element is listed, it must allow for multiple entries so that each individual can specify all appropriate races.  # noqa: E501

        :param races: The races of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantRace]
        """

        self._races = races

    @property
    def sex_descriptor(self):
        """Gets the sex_descriptor of this TpdmApplicant.  # noqa: E501

        A person's gender.  # noqa: E501

        :return: The sex_descriptor of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._sex_descriptor

    @sex_descriptor.setter
    def sex_descriptor(self, sex_descriptor):
        """Sets the sex_descriptor of this TpdmApplicant.

        A person's gender.  # noqa: E501

        :param sex_descriptor: The sex_descriptor of this TpdmApplicant.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                sex_descriptor is not None and len(sex_descriptor) > 306):
            raise ValueError("Invalid value for `sex_descriptor`, length must be less than or equal to `306`")  # noqa: E501

        self._sex_descriptor = sex_descriptor

    @property
    def staff_identification_codes(self):
        """Gets the staff_identification_codes of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantStaffIdentificationCodes. A unique number or alphanumeric code assigned to an applicant by a school, school system, a state, or other agency or entity.  # noqa: E501

        :return: The staff_identification_codes of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantStaffIdentificationCode]
        """
        return self._staff_identification_codes

    @staff_identification_codes.setter
    def staff_identification_codes(self, staff_identification_codes):
        """Sets the staff_identification_codes of this TpdmApplicant.

        An unordered collection of applicantStaffIdentificationCodes. A unique number or alphanumeric code assigned to an applicant by a school, school system, a state, or other agency or entity.  # noqa: E501

        :param staff_identification_codes: The staff_identification_codes of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantStaffIdentificationCode]
        """

        self._staff_identification_codes = staff_identification_codes

    @property
    def teacher_preparation_programs(self):
        """Gets the teacher_preparation_programs of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantTeacherPreparationPrograms. The Teacher Preparation Program(s) completed by the teacher.  # noqa: E501

        :return: The teacher_preparation_programs of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantTeacherPreparationProgram]
        """
        return self._teacher_preparation_programs

    @teacher_preparation_programs.setter
    def teacher_preparation_programs(self, teacher_preparation_programs):
        """Sets the teacher_preparation_programs of this TpdmApplicant.

        An unordered collection of applicantTeacherPreparationPrograms. The Teacher Preparation Program(s) completed by the teacher.  # noqa: E501

        :param teacher_preparation_programs: The teacher_preparation_programs of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantTeacherPreparationProgram]
        """

        self._teacher_preparation_programs = teacher_preparation_programs

    @property
    def telephones(self):
        """Gets the telephones of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantTelephones. The 10-digit telephone number, including the area code, for the person.  # noqa: E501

        :return: The telephones of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantTelephone]
        """
        return self._telephones

    @telephones.setter
    def telephones(self, telephones):
        """Sets the telephones of this TpdmApplicant.

        An unordered collection of applicantTelephones. The 10-digit telephone number, including the area code, for the person.  # noqa: E501

        :param telephones: The telephones of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantTelephone]
        """

        self._telephones = telephones

    @property
    def visas(self):
        """Gets the visas of this TpdmApplicant.  # noqa: E501

        An unordered collection of applicantVisas. An indicator of a non-US citizen's Visa type.  # noqa: E501

        :return: The visas of this TpdmApplicant.  # noqa: E501
        :rtype: list[TpdmApplicantVisa]
        """
        return self._visas

    @visas.setter
    def visas(self, visas):
        """Sets the visas of this TpdmApplicant.

        An unordered collection of applicantVisas. An indicator of a non-US citizen's Visa type.  # noqa: E501

        :param visas: The visas of this TpdmApplicant.  # noqa: E501
        :type: list[TpdmApplicantVisa]
        """

        self._visas = visas

    @property
    def etag(self):
        """Gets the etag of this TpdmApplicant.  # noqa: E501

        A unique system-generated value that identifies the version of the resource.  # noqa: E501

        :return: The etag of this TpdmApplicant.  # noqa: E501
        :rtype: str
        """
        return self._etag

    @etag.setter
    def etag(self, etag):
        """Sets the etag of this TpdmApplicant.

        A unique system-generated value that identifies the version of the resource.  # noqa: E501

        :param etag: The etag of this TpdmApplicant.  # noqa: E501
        :type: str
        """

        self._etag = etag

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value
        if issubclass(TpdmApplicant, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, TpdmApplicant):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, TpdmApplicant):
            return True

        return self.to_dict() != other.to_dict()
