# coding: utf-8

"""
    Street Manager GeoJSON API

    See API specification Resource Guide > GeoJSON API for more information on endpoints NOTE: Swagger Editor/UI does not display all description text for enumerations and child elements, check swagger.json for full description text  # noqa: E501

    OpenAPI spec version: 1.0.0
    
    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 ..api_client import ApiClient


class DefaultApi(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 get_activities_intersecting_bounds(self, min_easting, min_northing, max_easting, max_northing, **kwargs):  # noqa: E501
        """get_activities_intersecting_bounds  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get activities endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_activities_intersecting_bounds(min_easting, min_northing, max_easting, max_northing, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param datetime start_date:
        :param datetime end_date:
        :return: ActivityResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_activities_intersecting_bounds_with_http_info(min_easting, min_northing, max_easting, max_northing, **kwargs)  # noqa: E501
        else:
            (data) = self.get_activities_intersecting_bounds_with_http_info(min_easting, min_northing, max_easting, max_northing, **kwargs)  # noqa: E501
            return data

    def get_activities_intersecting_bounds_with_http_info(self, min_easting, min_northing, max_easting, max_northing, **kwargs):  # noqa: E501
        """get_activities_intersecting_bounds  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get activities endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_activities_intersecting_bounds_with_http_info(min_easting, min_northing, max_easting, max_northing, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param datetime start_date:
        :param datetime end_date:
        :return: ActivityResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['min_easting', 'min_northing', 'max_easting', 'max_northing', 'start_date', 'end_date']  # 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_activities_intersecting_bounds" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'min_easting' is set
        if ('min_easting' not in params or
                params['min_easting'] is None):
            raise ValueError("Missing the required parameter `min_easting` when calling `get_activities_intersecting_bounds`")  # noqa: E501
        # verify the required parameter 'min_northing' is set
        if ('min_northing' not in params or
                params['min_northing'] is None):
            raise ValueError("Missing the required parameter `min_northing` when calling `get_activities_intersecting_bounds`")  # noqa: E501
        # verify the required parameter 'max_easting' is set
        if ('max_easting' not in params or
                params['max_easting'] is None):
            raise ValueError("Missing the required parameter `max_easting` when calling `get_activities_intersecting_bounds`")  # noqa: E501
        # verify the required parameter 'max_northing' is set
        if ('max_northing' not in params or
                params['max_northing'] is None):
            raise ValueError("Missing the required parameter `max_northing` when calling `get_activities_intersecting_bounds`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []
        if 'min_easting' in params:
            query_params.append(('minEasting', params['min_easting']))  # noqa: E501
        if 'min_northing' in params:
            query_params.append(('minNorthing', params['min_northing']))  # noqa: E501
        if 'max_easting' in params:
            query_params.append(('maxEasting', params['max_easting']))  # noqa: E501
        if 'max_northing' in params:
            query_params.append(('maxNorthing', params['max_northing']))  # noqa: E501
        if 'start_date' in params:
            query_params.append(('start_date', params['start_date']))  # noqa: E501
        if 'end_date' in params:
            query_params.append(('end_date', params['end_date']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['token']  # noqa: E501

        return self.api_client.call_api(
            '/activities', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='ActivityResponse',  # 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_ancillary_information_intersect_bounding_box(self, min_easting, min_northing, max_easting, max_northing, **kwargs):  # noqa: E501
        """get_ancillary_information_intersect_bounding_box  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get AncillaryInformations endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_ancillary_information_intersect_bounding_box(min_easting, min_northing, max_easting, max_northing, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param datetime start_date:
        :param datetime end_date:
        :param str ancillary_info_reference_number:
        :return: AncillaryInfoResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_ancillary_information_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, **kwargs)  # noqa: E501
        else:
            (data) = self.get_ancillary_information_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, **kwargs)  # noqa: E501
            return data

    def get_ancillary_information_intersect_bounding_box_with_http_info(self, min_easting, min_northing, max_easting, max_northing, **kwargs):  # noqa: E501
        """get_ancillary_information_intersect_bounding_box  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get AncillaryInformations endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_ancillary_information_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param datetime start_date:
        :param datetime end_date:
        :param str ancillary_info_reference_number:
        :return: AncillaryInfoResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['min_easting', 'min_northing', 'max_easting', 'max_northing', 'start_date', 'end_date', 'ancillary_info_reference_number']  # 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_ancillary_information_intersect_bounding_box" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'min_easting' is set
        if ('min_easting' not in params or
                params['min_easting'] is None):
            raise ValueError("Missing the required parameter `min_easting` when calling `get_ancillary_information_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'min_northing' is set
        if ('min_northing' not in params or
                params['min_northing'] is None):
            raise ValueError("Missing the required parameter `min_northing` when calling `get_ancillary_information_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'max_easting' is set
        if ('max_easting' not in params or
                params['max_easting'] is None):
            raise ValueError("Missing the required parameter `max_easting` when calling `get_ancillary_information_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'max_northing' is set
        if ('max_northing' not in params or
                params['max_northing'] is None):
            raise ValueError("Missing the required parameter `max_northing` when calling `get_ancillary_information_intersect_bounding_box`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []
        if 'min_easting' in params:
            query_params.append(('minEasting', params['min_easting']))  # noqa: E501
        if 'min_northing' in params:
            query_params.append(('minNorthing', params['min_northing']))  # noqa: E501
        if 'max_easting' in params:
            query_params.append(('maxEasting', params['max_easting']))  # noqa: E501
        if 'max_northing' in params:
            query_params.append(('maxNorthing', params['max_northing']))  # noqa: E501
        if 'start_date' in params:
            query_params.append(('start_date', params['start_date']))  # noqa: E501
        if 'end_date' in params:
            query_params.append(('end_date', params['end_date']))  # noqa: E501
        if 'ancillary_info_reference_number' in params:
            query_params.append(('ancillary_info_reference_number', params['ancillary_info_reference_number']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['token']  # noqa: E501

        return self.api_client.call_api(
            '/ancillary-informations', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='AncillaryInfoResponse',  # 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_forward_plans_intersect_bounding_box(self, min_easting, min_northing, max_easting, max_northing, **kwargs):  # noqa: E501
        """get_forward_plans_intersect_bounding_box  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get ForwardPlans endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_forward_plans_intersect_bounding_box(min_easting, min_northing, max_easting, max_northing, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param datetime start_date:
        :param datetime end_date:
        :param str forward_plan_reference_number:
        :return: ForwardPlanResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_forward_plans_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, **kwargs)  # noqa: E501
        else:
            (data) = self.get_forward_plans_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, **kwargs)  # noqa: E501
            return data

    def get_forward_plans_intersect_bounding_box_with_http_info(self, min_easting, min_northing, max_easting, max_northing, **kwargs):  # noqa: E501
        """get_forward_plans_intersect_bounding_box  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get ForwardPlans endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_forward_plans_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param datetime start_date:
        :param datetime end_date:
        :param str forward_plan_reference_number:
        :return: ForwardPlanResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['min_easting', 'min_northing', 'max_easting', 'max_northing', 'start_date', 'end_date', 'forward_plan_reference_number']  # 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_forward_plans_intersect_bounding_box" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'min_easting' is set
        if ('min_easting' not in params or
                params['min_easting'] is None):
            raise ValueError("Missing the required parameter `min_easting` when calling `get_forward_plans_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'min_northing' is set
        if ('min_northing' not in params or
                params['min_northing'] is None):
            raise ValueError("Missing the required parameter `min_northing` when calling `get_forward_plans_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'max_easting' is set
        if ('max_easting' not in params or
                params['max_easting'] is None):
            raise ValueError("Missing the required parameter `max_easting` when calling `get_forward_plans_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'max_northing' is set
        if ('max_northing' not in params or
                params['max_northing'] is None):
            raise ValueError("Missing the required parameter `max_northing` when calling `get_forward_plans_intersect_bounding_box`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []
        if 'min_easting' in params:
            query_params.append(('minEasting', params['min_easting']))  # noqa: E501
        if 'min_northing' in params:
            query_params.append(('minNorthing', params['min_northing']))  # noqa: E501
        if 'max_easting' in params:
            query_params.append(('maxEasting', params['max_easting']))  # noqa: E501
        if 'max_northing' in params:
            query_params.append(('maxNorthing', params['max_northing']))  # noqa: E501
        if 'start_date' in params:
            query_params.append(('start_date', params['start_date']))  # noqa: E501
        if 'end_date' in params:
            query_params.append(('end_date', params['end_date']))  # noqa: E501
        if 'forward_plan_reference_number' in params:
            query_params.append(('forward_plan_reference_number', params['forward_plan_reference_number']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['token']  # noqa: E501

        return self.api_client.call_api(
            '/forward-plans', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='ForwardPlanResponse',  # 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_hs2_act_limits_intersecting_bounds(self, min_easting, min_northing, max_easting, max_northing, phase, **kwargs):  # noqa: E501
        """get_hs2_act_limits_intersecting_bounds  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get Hs2ActLimits endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_hs2_act_limits_intersecting_bounds(min_easting, min_northing, max_easting, max_northing, phase, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param Hs2ActLimitPhase phase: (required)
        :return: Hs2ActLimitsResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_hs2_act_limits_intersecting_bounds_with_http_info(min_easting, min_northing, max_easting, max_northing, phase, **kwargs)  # noqa: E501
        else:
            (data) = self.get_hs2_act_limits_intersecting_bounds_with_http_info(min_easting, min_northing, max_easting, max_northing, phase, **kwargs)  # noqa: E501
            return data

    def get_hs2_act_limits_intersecting_bounds_with_http_info(self, min_easting, min_northing, max_easting, max_northing, phase, **kwargs):  # noqa: E501
        """get_hs2_act_limits_intersecting_bounds  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get Hs2ActLimits endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_hs2_act_limits_intersecting_bounds_with_http_info(min_easting, min_northing, max_easting, max_northing, phase, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param Hs2ActLimitPhase phase: (required)
        :return: Hs2ActLimitsResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['min_easting', 'min_northing', 'max_easting', 'max_northing', 'phase']  # 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_hs2_act_limits_intersecting_bounds" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'min_easting' is set
        if ('min_easting' not in params or
                params['min_easting'] is None):
            raise ValueError("Missing the required parameter `min_easting` when calling `get_hs2_act_limits_intersecting_bounds`")  # noqa: E501
        # verify the required parameter 'min_northing' is set
        if ('min_northing' not in params or
                params['min_northing'] is None):
            raise ValueError("Missing the required parameter `min_northing` when calling `get_hs2_act_limits_intersecting_bounds`")  # noqa: E501
        # verify the required parameter 'max_easting' is set
        if ('max_easting' not in params or
                params['max_easting'] is None):
            raise ValueError("Missing the required parameter `max_easting` when calling `get_hs2_act_limits_intersecting_bounds`")  # noqa: E501
        # verify the required parameter 'max_northing' is set
        if ('max_northing' not in params or
                params['max_northing'] is None):
            raise ValueError("Missing the required parameter `max_northing` when calling `get_hs2_act_limits_intersecting_bounds`")  # noqa: E501
        # verify the required parameter 'phase' is set
        if ('phase' not in params or
                params['phase'] is None):
            raise ValueError("Missing the required parameter `phase` when calling `get_hs2_act_limits_intersecting_bounds`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []
        if 'min_easting' in params:
            query_params.append(('minEasting', params['min_easting']))  # noqa: E501
        if 'min_northing' in params:
            query_params.append(('minNorthing', params['min_northing']))  # noqa: E501
        if 'max_easting' in params:
            query_params.append(('maxEasting', params['max_easting']))  # noqa: E501
        if 'max_northing' in params:
            query_params.append(('maxNorthing', params['max_northing']))  # noqa: E501
        if 'phase' in params:
            query_params.append(('phase', params['phase']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['token']  # noqa: E501

        return self.api_client.call_api(
            '/hs2-act-limits', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Hs2ActLimitsResponse',  # 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_material_classifications_intersect_bounding_box(self, **kwargs):  # noqa: E501
        """get_material_classifications_intersect_bounding_box  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get Material Classifications endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_material_classifications_intersect_bounding_box(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting:
        :param float min_northing:
        :param float max_easting:
        :param float max_northing:
        :param datetime sample_date_from:
        :param datetime sample_date_to:
        :param float usrn:
        :param MaterialClassificationClassification classification:
        :return: MaterialClassificationResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_material_classifications_intersect_bounding_box_with_http_info(**kwargs)  # noqa: E501
        else:
            (data) = self.get_material_classifications_intersect_bounding_box_with_http_info(**kwargs)  # noqa: E501
            return data

    def get_material_classifications_intersect_bounding_box_with_http_info(self, **kwargs):  # noqa: E501
        """get_material_classifications_intersect_bounding_box  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get Material Classifications endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_material_classifications_intersect_bounding_box_with_http_info(async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting:
        :param float min_northing:
        :param float max_easting:
        :param float max_northing:
        :param datetime sample_date_from:
        :param datetime sample_date_to:
        :param float usrn:
        :param MaterialClassificationClassification classification:
        :return: MaterialClassificationResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['min_easting', 'min_northing', 'max_easting', 'max_northing', 'sample_date_from', 'sample_date_to', 'usrn', 'classification']  # 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_material_classifications_intersect_bounding_box" % key
                )
            params[key] = val
        del params['kwargs']

        collection_formats = {}

        path_params = {}

        query_params = []
        if 'min_easting' in params:
            query_params.append(('minEasting', params['min_easting']))  # noqa: E501
        if 'min_northing' in params:
            query_params.append(('minNorthing', params['min_northing']))  # noqa: E501
        if 'max_easting' in params:
            query_params.append(('maxEasting', params['max_easting']))  # noqa: E501
        if 'max_northing' in params:
            query_params.append(('maxNorthing', params['max_northing']))  # noqa: E501
        if 'sample_date_from' in params:
            query_params.append(('sample_date_from', params['sample_date_from']))  # noqa: E501
        if 'sample_date_to' in params:
            query_params.append(('sample_date_to', params['sample_date_to']))  # noqa: E501
        if 'usrn' in params:
            query_params.append(('usrn', params['usrn']))  # noqa: E501
        if 'classification' in params:
            query_params.append(('classification', params['classification']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['token']  # noqa: E501

        return self.api_client.call_api(
            '/material-classifications', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='MaterialClassificationResponse',  # 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_section58s_intersect_bounding_box(self, min_easting, min_northing, max_easting, max_northing, **kwargs):  # noqa: E501
        """get_section58s_intersect_bounding_box  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get Section 58s endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_section58s_intersect_bounding_box(min_easting, min_northing, max_easting, max_northing, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param datetime start_date:
        :param datetime end_date:
        :param str section_58_reference_number:
        :return: Section58Response
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_section58s_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, **kwargs)  # noqa: E501
        else:
            (data) = self.get_section58s_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, **kwargs)  # noqa: E501
            return data

    def get_section58s_intersect_bounding_box_with_http_info(self, min_easting, min_northing, max_easting, max_northing, **kwargs):  # noqa: E501
        """get_section58s_intersect_bounding_box  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get Section 58s endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_section58s_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param datetime start_date:
        :param datetime end_date:
        :param str section_58_reference_number:
        :return: Section58Response
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['min_easting', 'min_northing', 'max_easting', 'max_northing', 'start_date', 'end_date', 'section_58_reference_number']  # 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_section58s_intersect_bounding_box" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'min_easting' is set
        if ('min_easting' not in params or
                params['min_easting'] is None):
            raise ValueError("Missing the required parameter `min_easting` when calling `get_section58s_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'min_northing' is set
        if ('min_northing' not in params or
                params['min_northing'] is None):
            raise ValueError("Missing the required parameter `min_northing` when calling `get_section58s_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'max_easting' is set
        if ('max_easting' not in params or
                params['max_easting'] is None):
            raise ValueError("Missing the required parameter `max_easting` when calling `get_section58s_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'max_northing' is set
        if ('max_northing' not in params or
                params['max_northing'] is None):
            raise ValueError("Missing the required parameter `max_northing` when calling `get_section58s_intersect_bounding_box`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []
        if 'min_easting' in params:
            query_params.append(('minEasting', params['min_easting']))  # noqa: E501
        if 'min_northing' in params:
            query_params.append(('minNorthing', params['min_northing']))  # noqa: E501
        if 'max_easting' in params:
            query_params.append(('maxEasting', params['max_easting']))  # noqa: E501
        if 'max_northing' in params:
            query_params.append(('maxNorthing', params['max_northing']))  # noqa: E501
        if 'start_date' in params:
            query_params.append(('start_date', params['start_date']))  # noqa: E501
        if 'end_date' in params:
            query_params.append(('end_date', params['end_date']))  # noqa: E501
        if 'section_58_reference_number' in params:
            query_params.append(('section_58_reference_number', params['section_58_reference_number']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['token']  # noqa: E501

        return self.api_client.call_api(
            '/section-58s', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Section58Response',  # 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_works_intersect_bounding_box(self, min_easting, min_northing, max_easting, max_northing, **kwargs):  # noqa: E501
        """get_works_intersect_bounding_box  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get works endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_works_intersect_bounding_box(min_easting, min_northing, max_easting, max_northing, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param datetime start_date:
        :param datetime end_date:
        :param str work_reference_number:
        :return: WorkResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_works_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, **kwargs)  # noqa: E501
        else:
            (data) = self.get_works_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, **kwargs)  # noqa: E501
            return data

    def get_works_intersect_bounding_box_with_http_info(self, min_easting, min_northing, max_easting, max_northing, **kwargs):  # noqa: E501
        """get_works_intersect_bounding_box  # noqa: E501

        See API specification Resource Guide > GeoJSON API > Get works endpoint for more information Authenticated user must have one of the following roles: Planner, Contractor, HighwayAuthority  # 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_works_intersect_bounding_box_with_http_info(min_easting, min_northing, max_easting, max_northing, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param float min_easting: (required)
        :param float min_northing: (required)
        :param float max_easting: (required)
        :param float max_northing: (required)
        :param datetime start_date:
        :param datetime end_date:
        :param str work_reference_number:
        :return: WorkResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        all_params = ['min_easting', 'min_northing', 'max_easting', 'max_northing', 'start_date', 'end_date', 'work_reference_number']  # 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_works_intersect_bounding_box" % key
                )
            params[key] = val
        del params['kwargs']
        # verify the required parameter 'min_easting' is set
        if ('min_easting' not in params or
                params['min_easting'] is None):
            raise ValueError("Missing the required parameter `min_easting` when calling `get_works_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'min_northing' is set
        if ('min_northing' not in params or
                params['min_northing'] is None):
            raise ValueError("Missing the required parameter `min_northing` when calling `get_works_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'max_easting' is set
        if ('max_easting' not in params or
                params['max_easting'] is None):
            raise ValueError("Missing the required parameter `max_easting` when calling `get_works_intersect_bounding_box`")  # noqa: E501
        # verify the required parameter 'max_northing' is set
        if ('max_northing' not in params or
                params['max_northing'] is None):
            raise ValueError("Missing the required parameter `max_northing` when calling `get_works_intersect_bounding_box`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []
        if 'min_easting' in params:
            query_params.append(('minEasting', params['min_easting']))  # noqa: E501
        if 'min_northing' in params:
            query_params.append(('minNorthing', params['min_northing']))  # noqa: E501
        if 'max_easting' in params:
            query_params.append(('maxEasting', params['max_easting']))  # noqa: E501
        if 'max_northing' in params:
            query_params.append(('maxNorthing', params['max_northing']))  # noqa: E501
        if 'start_date' in params:
            query_params.append(('start_date', params['start_date']))  # noqa: E501
        if 'end_date' in params:
            query_params.append(('end_date', params['end_date']))  # noqa: E501
        if 'work_reference_number' in params:
            query_params.append(('work_reference_number', params['work_reference_number']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['token']  # noqa: E501

        return self.api_client.call_api(
            '/works', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='WorkResponse',  # 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)
