text: # 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
  """
  
  
  from __future__ import absolute_import
  
  import re  # noqa: F401
  
  # python 2 and python 3 compatibility library
  import six
  
  from swagger_client.api_client import ApiClient
  
  
  class StudentsApi(object):
      """NOTE: This class is auto generated by the swagger code generator program.
  
      Do not edit the class manually.
      Ref: https://github.com/swagger-api/swagger-codegen
      """
  
      def __init__(self, api_client=None):
          if api_client is None:
              api_client = ApiClient()
          self.api_client = api_client
  
      def delete_student_by_id(self, id, **kwargs):  # noqa: E501
          """Deletes an existing resource using the resource identifier.  # noqa: E501
  
          The DELETE operation is used to delete an existing resource by identifier. If the resource doesn't exist, an error will result (the resource will not be found).  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.delete_student_by_id(id, async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param str id: A resource identifier that uniquely identifies the resource. (required)
          :param str if_match: The ETag header value used to prevent the DELETE from removing a resource modified by another consumer.
          :return: None
                   If the method is called asynchronously,
                   returns the request thread.
          """
          kwargs['_return_http_data_only'] = True
          if kwargs.get('async_req'):
              return self.delete_student_by_id_with_http_info(id, **kwargs)  # noqa: E501
          else:
              (data) = self.delete_student_by_id_with_http_info(id, **kwargs)  # noqa: E501
              return data
  
      def delete_student_by_id_with_http_info(self, id, **kwargs):  # noqa: E501
          """Deletes an existing resource using the resource identifier.  # noqa: E501
  
          The DELETE operation is used to delete an existing resource by identifier. If the resource doesn't exist, an error will result (the resource will not be found).  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.delete_student_by_id_with_http_info(id, async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param str id: A resource identifier that uniquely identifies the resource. (required)
          :param str if_match: The ETag header value used to prevent the DELETE from removing a resource modified by another consumer.
          :return: None
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['id', 'if_match']  # noqa: E501
          all_params.append('async_req')
          all_params.append('_return_http_data_only')
          all_params.append('_preload_content')
          all_params.append('_request_timeout')
  
          params = locals()
          for key, val in six.iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method delete_student_by_id" % key
                  )
              params[key] = val
          del params['kwargs']
          # verify the required parameter 'id' is set
          if self.api_client.client_side_validation and ('id' not in params or
                                                         params['id'] is None):  # noqa: E501
              raise ValueError("Missing the required parameter `id` when calling `delete_student_by_id`")  # noqa: E501
  
          collection_formats = {}
  
          path_params = {}
          if 'id' in params:
              path_params['id'] = params['id']  # noqa: E501
  
          query_params = []
  
          header_params = {}
          if 'if_match' in params:
              header_params['If-Match'] = params['if_match']  # noqa: E501
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])  # noqa: E501
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
              ['application/json'])  # noqa: E501
  
          # Authentication setting
          auth_settings = ['oauth2_client_credentials']  # noqa: E501
  
          return self.api_client.call_api(
              '/ed-fi/students/{id}', 'DELETE',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type=None,  # noqa: E501
              auth_settings=auth_settings,
              async_req=params.get('async_req'),
              _return_http_data_only=params.get('_return_http_data_only'),
              _preload_content=params.get('_preload_content', True),
              _request_timeout=params.get('_request_timeout'),
              collection_formats=collection_formats)
  
      def deletes_students(self, **kwargs):  # noqa: E501
          """Retrieves deleted resources based on change version.  # noqa: E501
  
          The DELETES operation is used to retrieve deleted resources.  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.deletes_students(async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param int offset: Indicates how many items should be skipped before returning results.
          :param int limit: Indicates the maximum number of items that should be returned in the results.
          :param int min_change_version: Used in synchronization to set sequence minimum ChangeVersion
          :param int max_change_version: Used in synchronization to set sequence maximum ChangeVersion
          :param str snapshot_identifier: Indicates the Snapshot-Identifier that should be used.
          :return: list[DeletedResource]
                   If the method is called asynchronously,
                   returns the request thread.
          """
          kwargs['_return_http_data_only'] = True
          if kwargs.get('async_req'):
              return self.deletes_students_with_http_info(**kwargs)  # noqa: E501
          else:
              (data) = self.deletes_students_with_http_info(**kwargs)  # noqa: E501
              return data
  
      def deletes_students_with_http_info(self, **kwargs):  # noqa: E501
          """Retrieves deleted resources based on change version.  # noqa: E501
  
          The DELETES operation is used to retrieve deleted resources.  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.deletes_students_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param int offset: Indicates how many items should be skipped before returning results.
          :param int limit: Indicates the maximum number of items that should be returned in the results.
          :param int min_change_version: Used in synchronization to set sequence minimum ChangeVersion
          :param int max_change_version: Used in synchronization to set sequence maximum ChangeVersion
          :param str snapshot_identifier: Indicates the Snapshot-Identifier that should be used.
          :return: list[DeletedResource]
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['offset', 'limit', 'min_change_version', 'max_change_version', 'snapshot_identifier']  # noqa: E501
          all_params.append('async_req')
          all_params.append('_return_http_data_only')
          all_params.append('_preload_content')
          all_params.append('_request_timeout')
  
          params = locals()
          for key, val in six.iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method deletes_students" % key
                  )
              params[key] = val
          del params['kwargs']
  
          if self.api_client.client_side_validation and ('limit' in params and params['limit'] > 500):  # noqa: E501
              raise ValueError("Invalid value for parameter `limit` when calling `deletes_students`, must be a value less than or equal to `500`")  # noqa: E501
          if self.api_client.client_side_validation and ('limit' in params and params['limit'] < 0):  # noqa: E501
              raise ValueError("Invalid value for parameter `limit` when calling `deletes_students`, must be a value greater than or equal to `0`")  # noqa: E501
          collection_formats = {}
  
          path_params = {}
  
          query_params = []
          if 'offset' in params:
              query_params.append(('offset', params['offset']))  # noqa: E501
          if 'limit' in params:
              query_params.append(('limit', params['limit']))  # noqa: E501
          if 'min_change_version' in params:
              query_params.append(('minChangeVersion', params['min_change_version']))  # noqa: E501
          if 'max_change_version' in params:
              query_params.append(('maxChangeVersion', params['max_change_version']))  # noqa: E501
  
          header_params = {}
          if 'snapshot_identifier' in params:
              header_params['Snapshot-Identifier'] = params['snapshot_identifier']  # noqa: E501
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])  # noqa: E501
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
              ['application/json'])  # noqa: E501
  
          # Authentication setting
          auth_settings = ['oauth2_client_credentials']  # noqa: E501
  
          return self.api_client.call_api(
              '/ed-fi/students/deletes', 'GET',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='list[DeletedResource]',  # noqa: E501
              auth_settings=auth_settings,
              async_req=params.get('async_req'),
              _return_http_data_only=params.get('_return_http_data_only'),
              _preload_content=params.get('_preload_content', True),
              _request_timeout=params.get('_request_timeout'),
              collection_formats=collection_formats)
  
      def get_students(self, **kwargs):  # noqa: E501
          """Retrieves specific resources using the resource's property values (using the \"Get\" pattern).  # noqa: E501
  
          This GET operation provides access to resources using the \"Get\" search pattern.  The values of any properties of the resource that are specified will be used to return all matching results (if it exists).  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.get_students(async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param int offset: Indicates how many items should be skipped before returning results.
          :param int limit: Indicates the maximum number of items that should be returned in the results.
          :param int min_change_version: Used in synchronization to set sequence minimum ChangeVersion
          :param int max_change_version: Used in synchronization to set sequence maximum ChangeVersion
          :param bool total_count: Indicates if the total number of items available should be returned in the 'Total-Count' header of the response.  If set to false, 'Total-Count' header will not be provided.
          :param str student_unique_id: A unique alphanumeric code assigned to a student.
          :param str person_id: A unique alphanumeric code assigned to a person.
          :param str source_system_descriptor: This descriptor defines the originating record source system for the person.
          :param str citizenship_status_descriptor: An indicator of whether or not the person is a U.S. citizen.
          :param str birth_country_descriptor: The country in which an individual is born. It is strongly recommended that entries use only ISO 3166 2-letter country codes.
          :param str birth_sex_descriptor: A person's gender at birth.
          :param str birth_state_abbreviation_descriptor: The abbreviation for the name of the state (within the United States) or extra-state jurisdiction in which an individual was born.
          :param str birth_city: The city the student was born in.
          :param date birth_date: The month, day, and year on which an individual was born.
          :param str birth_international_province: For students born outside of the U.S., the Province or jurisdiction in which an individual is born.
          :param date date_entered_us: For students born outside of the U.S., the date the student entered the U.S.
          :param str first_name: A name given to an individual at birth, baptism, or during another naming ceremony, or through legal change.
          :param str generation_code_suffix: An appendage, if any, used to denote an individual's generation in his family (e.g., Jr., Sr., III).
          :param str id: 
          :param str last_surname: The name borne in common by members of a family.
          :param str maiden_name: The person's maiden name.
          :param str middle_name: A secondary name given to an individual at birth, baptism, or during another naming ceremony.
          :param bool multiple_birth_status: Indicator of whether the student was born with other siblings (i.e., twins, triplets, etc.)
          :param str personal_title_prefix: A prefix used to denote the title, degree, position, or seniority of the person.
          :param str snapshot_identifier: Indicates the Snapshot-Identifier that should be used.
          :return: list[EdFiStudent]
                   If the method is called asynchronously,
                   returns the request thread.
          """
          kwargs['_return_http_data_only'] = True
          if kwargs.get('async_req'):
              return self.get_students_with_http_info(**kwargs)  # noqa: E501
          else:
              (data) = self.get_students_with_http_info(**kwargs)  # noqa: E501
              return data
  
      def get_students_with_http_info(self, **kwargs):  # noqa: E501
          """Retrieves specific resources using the resource's property values (using the \"Get\" pattern).  # noqa: E501
  
          This GET operation provides access to resources using the \"Get\" search pattern.  The values of any properties of the resource that are specified will be used to return all matching results (if it exists).  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.get_students_with_http_info(async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param int offset: Indicates how many items should be skipped before returning results.
          :param int limit: Indicates the maximum number of items that should be returned in the results.
          :param int min_change_version: Used in synchronization to set sequence minimum ChangeVersion
          :param int max_change_version: Used in synchronization to set sequence maximum ChangeVersion
          :param bool total_count: Indicates if the total number of items available should be returned in the 'Total-Count' header of the response.  If set to false, 'Total-Count' header will not be provided.
          :param str student_unique_id: A unique alphanumeric code assigned to a student.
          :param str person_id: A unique alphanumeric code assigned to a person.
          :param str source_system_descriptor: This descriptor defines the originating record source system for the person.
          :param str citizenship_status_descriptor: An indicator of whether or not the person is a U.S. citizen.
          :param str birth_country_descriptor: The country in which an individual is born. It is strongly recommended that entries use only ISO 3166 2-letter country codes.
          :param str birth_sex_descriptor: A person's gender at birth.
          :param str birth_state_abbreviation_descriptor: The abbreviation for the name of the state (within the United States) or extra-state jurisdiction in which an individual was born.
          :param str birth_city: The city the student was born in.
          :param date birth_date: The month, day, and year on which an individual was born.
          :param str birth_international_province: For students born outside of the U.S., the Province or jurisdiction in which an individual is born.
          :param date date_entered_us: For students born outside of the U.S., the date the student entered the U.S.
          :param str first_name: A name given to an individual at birth, baptism, or during another naming ceremony, or through legal change.
          :param str generation_code_suffix: An appendage, if any, used to denote an individual's generation in his family (e.g., Jr., Sr., III).
          :param str id: 
          :param str last_surname: The name borne in common by members of a family.
          :param str maiden_name: The person's maiden name.
          :param str middle_name: A secondary name given to an individual at birth, baptism, or during another naming ceremony.
          :param bool multiple_birth_status: Indicator of whether the student was born with other siblings (i.e., twins, triplets, etc.)
          :param str personal_title_prefix: A prefix used to denote the title, degree, position, or seniority of the person.
          :param str snapshot_identifier: Indicates the Snapshot-Identifier that should be used.
          :return: list[EdFiStudent]
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['offset', 'limit', 'min_change_version', 'max_change_version', 'total_count', 'student_unique_id', 'person_id', 'source_system_descriptor', 'citizenship_status_descriptor', 'birth_country_descriptor', 'birth_sex_descriptor', 'birth_state_abbreviation_descriptor', 'birth_city', 'birth_date', 'birth_international_province', 'date_entered_us', 'first_name', 'generation_code_suffix', 'id', 'last_surname', 'maiden_name', 'middle_name', 'multiple_birth_status', 'personal_title_prefix', 'snapshot_identifier']  # noqa: E501
          all_params.append('async_req')
          all_params.append('_return_http_data_only')
          all_params.append('_preload_content')
          all_params.append('_request_timeout')
  
          params = locals()
          for key, val in six.iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method get_students" % key
                  )
              params[key] = val
          del params['kwargs']
  
          if self.api_client.client_side_validation and ('limit' in params and params['limit'] > 500):  # noqa: E501
              raise ValueError("Invalid value for parameter `limit` when calling `get_students`, must be a value less than or equal to `500`")  # noqa: E501
          if self.api_client.client_side_validation and ('limit' in params and params['limit'] < 0):  # noqa: E501
              raise ValueError("Invalid value for parameter `limit` when calling `get_students`, must be a value greater than or equal to `0`")  # noqa: E501
          if self.api_client.client_side_validation and ('student_unique_id' in params and
                                                         len(params['student_unique_id']) > 32):
              raise ValueError("Invalid value for parameter `student_unique_id` when calling `get_students`, length must be less than or equal to `32`")  # noqa: E501
          if self.api_client.client_side_validation and ('person_id' in params and
                                                         len(params['person_id']) > 32):
              raise ValueError("Invalid value for parameter `person_id` when calling `get_students`, length must be less than or equal to `32`")  # noqa: E501
          if self.api_client.client_side_validation and ('source_system_descriptor' in params and
                                                         len(params['source_system_descriptor']) > 306):
              raise ValueError("Invalid value for parameter `source_system_descriptor` when calling `get_students`, length must be less than or equal to `306`")  # noqa: E501
          if self.api_client.client_side_validation and ('citizenship_status_descriptor' in params and
                                                         len(params['citizenship_status_descriptor']) > 306):
              raise ValueError("Invalid value for parameter `citizenship_status_descriptor` when calling `get_students`, length must be less than or equal to `306`")  # noqa: E501
          if self.api_client.client_side_validation and ('birth_country_descriptor' in params and
                                                         len(params['birth_country_descriptor']) > 306):
              raise ValueError("Invalid value for parameter `birth_country_descriptor` when calling `get_students`, length must be less than or equal to `306`")  # noqa: E501
          if self.api_client.client_side_validation and ('birth_sex_descriptor' in params and
                                                         len(params['birth_sex_descriptor']) > 306):
              raise ValueError("Invalid value for parameter `birth_sex_descriptor` when calling `get_students`, length must be less than or equal to `306`")  # noqa: E501
          if self.api_client.client_side_validation and ('birth_state_abbreviation_descriptor' in params and
                                                         len(params['birth_state_abbreviation_descriptor']) > 306):
              raise ValueError("Invalid value for parameter `birth_state_abbreviation_descriptor` when calling `get_students`, length must be less than or equal to `306`")  # noqa: E501
          if self.api_client.client_side_validation and ('birth_city' in params and
                                                         len(params['birth_city']) > 30):
              raise ValueError("Invalid value for parameter `birth_city` when calling `get_students`, length must be less than or equal to `30`")  # noqa: E501
          if self.api_client.client_side_validation and ('birth_international_province' in params and
                                                         len(params['birth_international_province']) > 150):
              raise ValueError("Invalid value for parameter `birth_international_province` when calling `get_students`, length must be less than or equal to `150`")  # noqa: E501
          if self.api_client.client_side_validation and ('first_name' in params and
                                                         len(params['first_name']) > 75):
              raise ValueError("Invalid value for parameter `first_name` when calling `get_students`, length must be less than or equal to `75`")  # noqa: E501
          if self.api_client.client_side_validation and ('generation_code_suffix' in params and
                                                         len(params['generation_code_suffix']) > 10):
              raise ValueError("Invalid value for parameter `generation_code_suffix` when calling `get_students`, length must be less than or equal to `10`")  # noqa: E501
          if self.api_client.client_side_validation and ('last_surname' in params and
                                                         len(params['last_surname']) > 75):
              raise ValueError("Invalid value for parameter `last_surname` when calling `get_students`, length must be less than or equal to `75`")  # noqa: E501
          if self.api_client.client_side_validation and ('maiden_name' in params and
                                                         len(params['maiden_name']) > 75):
              raise ValueError("Invalid value for parameter `maiden_name` when calling `get_students`, length must be less than or equal to `75`")  # noqa: E501
          if self.api_client.client_side_validation and ('middle_name' in params and
                                                         len(params['middle_name']) > 75):
              raise ValueError("Invalid value for parameter `middle_name` when calling `get_students`, length must be less than or equal to `75`")  # noqa: E501
          if self.api_client.client_side_validation and ('personal_title_prefix' in params and
                                                         len(params['personal_title_prefix']) > 30):
              raise ValueError("Invalid value for parameter `personal_title_prefix` when calling `get_students`, length must be less than or equal to `30`")  # noqa: E501
          collection_formats = {}
  
          path_params = {}
  
          query_params = []
          if 'offset' in params:
              query_params.append(('offset', params['offset']))  # noqa: E501
          if 'limit' in params:
              query_params.append(('limit', params['limit']))  # noqa: E501
          if 'min_change_version' in params:
              query_params.append(('minChangeVersion', params['min_change_version']))  # noqa: E501
          if 'max_change_version' in params:
              query_params.append(('maxChangeVersion', params['max_change_version']))  # noqa: E501
          if 'total_count' in params:
              query_params.append(('totalCount', params['total_count']))  # noqa: E501
          if 'student_unique_id' in params:
              query_params.append(('studentUniqueId', params['student_unique_id']))  # noqa: E501
          if 'person_id' in params:
              query_params.append(('personId', params['person_id']))  # noqa: E501
          if 'source_system_descriptor' in params:
              query_params.append(('sourceSystemDescriptor', params['source_system_descriptor']))  # noqa: E501
          if 'citizenship_status_descriptor' in params:
              query_params.append(('citizenshipStatusDescriptor', params['citizenship_status_descriptor']))  # noqa: E501
          if 'birth_country_descriptor' in params:
              query_params.append(('birthCountryDescriptor', params['birth_country_descriptor']))  # noqa: E501
          if 'birth_sex_descriptor' in params:
              query_params.append(('birthSexDescriptor', params['birth_sex_descriptor']))  # noqa: E501
          if 'birth_state_abbreviation_descriptor' in params:
              query_params.append(('birthStateAbbreviationDescriptor', params['birth_state_abbreviation_descriptor']))  # noqa: E501
          if 'birth_city' in params:
              query_params.append(('birthCity', params['birth_city']))  # noqa: E501
          if 'birth_date' in params:
              query_params.append(('birthDate', params['birth_date']))  # noqa: E501
          if 'birth_international_province' in params:
              query_params.append(('birthInternationalProvince', params['birth_international_province']))  # noqa: E501
          if 'date_entered_us' in params:
              query_params.append(('dateEnteredUS', params['date_entered_us']))  # noqa: E501
          if 'first_name' in params:
              query_params.append(('firstName', params['first_name']))  # noqa: E501
          if 'generation_code_suffix' in params:
              query_params.append(('generationCodeSuffix', params['generation_code_suffix']))  # noqa: E501
          if 'id' in params:
              query_params.append(('id', params['id']))  # noqa: E501
          if 'last_surname' in params:
              query_params.append(('lastSurname', params['last_surname']))  # noqa: E501
          if 'maiden_name' in params:
              query_params.append(('maidenName', params['maiden_name']))  # noqa: E501
          if 'middle_name' in params:
              query_params.append(('middleName', params['middle_name']))  # noqa: E501
          if 'multiple_birth_status' in params:
              query_params.append(('multipleBirthStatus', params['multiple_birth_status']))  # noqa: E501
          if 'personal_title_prefix' in params:
              query_params.append(('personalTitlePrefix', params['personal_title_prefix']))  # noqa: E501
  
          header_params = {}
          if 'snapshot_identifier' in params:
              header_params['Snapshot-Identifier'] = params['snapshot_identifier']  # noqa: E501
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])  # noqa: E501
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
              ['application/json'])  # noqa: E501
  
          # Authentication setting
          auth_settings = ['oauth2_client_credentials']  # noqa: E501
  
          return self.api_client.call_api(
              '/ed-fi/students', 'GET',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='list[EdFiStudent]',  # noqa: E501
              auth_settings=auth_settings,
              async_req=params.get('async_req'),
              _return_http_data_only=params.get('_return_http_data_only'),
              _preload_content=params.get('_preload_content', True),
              _request_timeout=params.get('_request_timeout'),
              collection_formats=collection_formats)
  
      def get_students_by_id(self, id, **kwargs):  # noqa: E501
          """Retrieves a specific resource using the resource's identifier (using the \"Get By Id\" pattern).  # noqa: E501
  
          This GET operation retrieves a resource by the specified resource identifier.  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.get_students_by_id(id, async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param str id: A resource identifier that uniquely identifies the resource. (required)
          :param str if_none_match: The previously returned ETag header value, used here to prevent the unnecessary data transfer of an unchanged resource.
          :param str snapshot_identifier: Indicates the Snapshot-Identifier that should be used.
          :return: EdFiStudent
                   If the method is called asynchronously,
                   returns the request thread.
          """
          kwargs['_return_http_data_only'] = True
          if kwargs.get('async_req'):
              return self.get_students_by_id_with_http_info(id, **kwargs)  # noqa: E501
          else:
              (data) = self.get_students_by_id_with_http_info(id, **kwargs)  # noqa: E501
              return data
  
      def get_students_by_id_with_http_info(self, id, **kwargs):  # noqa: E501
          """Retrieves a specific resource using the resource's identifier (using the \"Get By Id\" pattern).  # noqa: E501
  
          This GET operation retrieves a resource by the specified resource identifier.  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.get_students_by_id_with_http_info(id, async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param str id: A resource identifier that uniquely identifies the resource. (required)
          :param str if_none_match: The previously returned ETag header value, used here to prevent the unnecessary data transfer of an unchanged resource.
          :param str snapshot_identifier: Indicates the Snapshot-Identifier that should be used.
          :return: EdFiStudent
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['id', 'if_none_match', 'snapshot_identifier']  # noqa: E501
          all_params.append('async_req')
          all_params.append('_return_http_data_only')
          all_params.append('_preload_content')
          all_params.append('_request_timeout')
  
          params = locals()
          for key, val in six.iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method get_students_by_id" % key
                  )
              params[key] = val
          del params['kwargs']
          # verify the required parameter 'id' is set
          if self.api_client.client_side_validation and ('id' not in params or
                                                         params['id'] is None):  # noqa: E501
              raise ValueError("Missing the required parameter `id` when calling `get_students_by_id`")  # noqa: E501
  
          collection_formats = {}
  
          path_params = {}
          if 'id' in params:
              path_params['id'] = params['id']  # noqa: E501
  
          query_params = []
  
          header_params = {}
          if 'if_none_match' in params:
              header_params['If-None-Match'] = params['if_none_match']  # noqa: E501
          if 'snapshot_identifier' in params:
              header_params['Snapshot-Identifier'] = params['snapshot_identifier']  # noqa: E501
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])  # noqa: E501
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
              ['application/json'])  # noqa: E501
  
          # Authentication setting
          auth_settings = ['oauth2_client_credentials']  # noqa: E501
  
          return self.api_client.call_api(
              '/ed-fi/students/{id}', 'GET',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type='EdFiStudent',  # noqa: E501
              auth_settings=auth_settings,
              async_req=params.get('async_req'),
              _return_http_data_only=params.get('_return_http_data_only'),
              _preload_content=params.get('_preload_content', True),
              _request_timeout=params.get('_request_timeout'),
              collection_formats=collection_formats)
  
      def post_student(self, student, **kwargs):  # noqa: E501
          """Creates or updates resources based on the natural key values of the supplied resource.  # noqa: E501
  
          The POST operation can be used to create or update resources. In database terms, this is often referred to as an \"upsert\" operation (insert + update). Clients should NOT include the resource \"id\" in the JSON body because it will result in an error. The web service will identify whether the resource already exists based on the natural key values provided, and update or create the resource appropriately. It is recommended to use POST for both create and update except while updating natural key of a resource in which case PUT operation must be used.  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.post_student(student, async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param EdFiStudent student: The JSON representation of the \"student\" resource to be created or updated. (required)
          :return: None
                   If the method is called asynchronously,
                   returns the request thread.
          """
          kwargs['_return_http_data_only'] = True
          if kwargs.get('async_req'):
              return self.post_student_with_http_info(student, **kwargs)  # noqa: E501
          else:
              (data) = self.post_student_with_http_info(student, **kwargs)  # noqa: E501
              return data
  
      def post_student_with_http_info(self, student, **kwargs):  # noqa: E501
          """Creates or updates resources based on the natural key values of the supplied resource.  # noqa: E501
  
          The POST operation can be used to create or update resources. In database terms, this is often referred to as an \"upsert\" operation (insert + update). Clients should NOT include the resource \"id\" in the JSON body because it will result in an error. The web service will identify whether the resource already exists based on the natural key values provided, and update or create the resource appropriately. It is recommended to use POST for both create and update except while updating natural key of a resource in which case PUT operation must be used.  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.post_student_with_http_info(student, async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param EdFiStudent student: The JSON representation of the \"student\" resource to be created or updated. (required)
          :return: None
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['student']  # noqa: E501
          all_params.append('async_req')
          all_params.append('_return_http_data_only')
          all_params.append('_preload_content')
          all_params.append('_request_timeout')
  
          params = locals()
          for key, val in six.iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method post_student" % key
                  )
              params[key] = val
          del params['kwargs']
          # verify the required parameter 'student' is set
          if self.api_client.client_side_validation and ('student' not in params or
                                                         params['student'] is None):  # noqa: E501
              raise ValueError("Missing the required parameter `student` when calling `post_student`")  # noqa: E501
  
          collection_formats = {}
  
          path_params = {}
  
          query_params = []
  
          header_params = {}
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          if 'student' in params:
              body_params = params['student']
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])  # noqa: E501
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
              ['application/json'])  # noqa: E501
  
          # Authentication setting
          auth_settings = ['oauth2_client_credentials']  # noqa: E501
  
          return self.api_client.call_api(
              '/ed-fi/students', 'POST',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type=None,  # noqa: E501
              auth_settings=auth_settings,
              async_req=params.get('async_req'),
              _return_http_data_only=params.get('_return_http_data_only'),
              _preload_content=params.get('_preload_content', True),
              _request_timeout=params.get('_request_timeout'),
              collection_formats=collection_formats)
  
      def put_student(self, id, student, **kwargs):  # noqa: E501
          """Updates a resource based on the resource identifier.  # noqa: E501
  
          The PUT operation is used to update a resource by identifier. If the resource identifier (\"id\") is provided in the JSON body, it will be ignored. Additionally, this API resource is not configured for cascading natural key updates. Natural key values for this resource cannot be changed using PUT operation and will not be modified in the database, and so recommendation is to use POST as that supports upsert behavior.  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.put_student(id, student, async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param str id: A resource identifier that uniquely identifies the resource. (required)
          :param EdFiStudent student: The JSON representation of the \"student\" resource to be created or updated. (required)
          :param str if_match: The ETag header value used to prevent the PUT from updating a resource modified by another consumer.
          :return: None
                   If the method is called asynchronously,
                   returns the request thread.
          """
          kwargs['_return_http_data_only'] = True
          if kwargs.get('async_req'):
              return self.put_student_with_http_info(id, student, **kwargs)  # noqa: E501
          else:
              (data) = self.put_student_with_http_info(id, student, **kwargs)  # noqa: E501
              return data
  
      def put_student_with_http_info(self, id, student, **kwargs):  # noqa: E501
          """Updates a resource based on the resource identifier.  # noqa: E501
  
          The PUT operation is used to update a resource by identifier. If the resource identifier (\"id\") is provided in the JSON body, it will be ignored. Additionally, this API resource is not configured for cascading natural key updates. Natural key values for this resource cannot be changed using PUT operation and will not be modified in the database, and so recommendation is to use POST as that supports upsert behavior.  # noqa: E501
          This method makes a synchronous HTTP request by default. To make an
          asynchronous HTTP request, please pass async_req=True
          >>> thread = api.put_student_with_http_info(id, student, async_req=True)
          >>> result = thread.get()
  
          :param async_req bool
          :param str id: A resource identifier that uniquely identifies the resource. (required)
          :param EdFiStudent student: The JSON representation of the \"student\" resource to be created or updated. (required)
          :param str if_match: The ETag header value used to prevent the PUT from updating a resource modified by another consumer.
          :return: None
                   If the method is called asynchronously,
                   returns the request thread.
          """
  
          all_params = ['id', 'student', 'if_match']  # noqa: E501
          all_params.append('async_req')
          all_params.append('_return_http_data_only')
          all_params.append('_preload_content')
          all_params.append('_request_timeout')
  
          params = locals()
          for key, val in six.iteritems(params['kwargs']):
              if key not in all_params:
                  raise TypeError(
                      "Got an unexpected keyword argument '%s'"
                      " to method put_student" % key
                  )
              params[key] = val
          del params['kwargs']
          # verify the required parameter 'id' is set
          if self.api_client.client_side_validation and ('id' not in params or
                                                         params['id'] is None):  # noqa: E501
              raise ValueError("Missing the required parameter `id` when calling `put_student`")  # noqa: E501
          # verify the required parameter 'student' is set
          if self.api_client.client_side_validation and ('student' not in params or
                                                         params['student'] is None):  # noqa: E501
              raise ValueError("Missing the required parameter `student` when calling `put_student`")  # noqa: E501
  
          collection_formats = {}
  
          path_params = {}
          if 'id' in params:
              path_params['id'] = params['id']  # noqa: E501
  
          query_params = []
  
          header_params = {}
          if 'if_match' in params:
              header_params['If-Match'] = params['if_match']  # noqa: E501
  
          form_params = []
          local_var_files = {}
  
          body_params = None
          if 'student' in params:
              body_params = params['student']
          # HTTP header `Accept`
          header_params['Accept'] = self.api_client.select_header_accept(
              ['application/json'])  # noqa: E501
  
          # HTTP header `Content-Type`
          header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
              ['application/json'])  # noqa: E501
  
          # Authentication setting
          auth_settings = ['oauth2_client_credentials']  # noqa: E501
  
          return self.api_client.call_api(
              '/ed-fi/students/{id}', 'PUT',
              path_params,
              query_params,
              header_params,
              body=body_params,
              post_params=form_params,
              files=local_var_files,
              response_type=None,  # noqa: E501
              auth_settings=auth_settings,
              async_req=params.get('async_req'),
              _return_http_data_only=params.get('_return_http_data_only'),
              _preload_content=params.get('_preload_content', True),
              _request_timeout=params.get('_request_timeout'),
              collection_formats=collection_formats)
  