# -*- coding: UTF-8 -*-
# Code generated by lark suite oapi sdk gen

from typing import *

from ....api import Request, Response, set_timeout, set_tenant_key, set_user_access_token, set_path_params, \
    set_query_params, set_response_stream, set_is_response_stream, FormData, FormDataFile
from ....config import Config
from ....consts import ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER, ACCESS_TOKEN_TYPE_APP
from .model import *


class Service(object):
    def __init__(self, conf):
        # type: (Config) -> None
        self.conf = conf
        self.spreadsheetss = SpreadsheetsService(self)
        



class SpreadsheetsService(object):
    def __init__(self, service):
        # type: (Service) -> None
        self.service = service

    def condition_formats_batch_create(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsConditionFormatsBatchCreateReqBody, str, str, int) -> SpreadsheetsConditionFormatsBatchCreateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsConditionFormatsBatchCreateReqCall(self, body, request_opts=request_opts)

    def condition_formats_batch_delete(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsConditionFormatsBatchDeleteReqBody, str, str, int) -> SpreadsheetsConditionFormatsBatchDeleteReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsConditionFormatsBatchDeleteReqCall(self, body, request_opts=request_opts)

    def condition_formats_batch_get(self, tenant_key=None, user_access_token=None, timeout=None):
        # type: (str, str, int) -> SpreadsheetsConditionFormatsBatchGetReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsConditionFormatsBatchGetReqCall(self, request_opts=request_opts)

    def condition_formats_batch_update(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsConditionFormatsBatchUpdateReqBody, str, str, int) -> SpreadsheetsConditionFormatsBatchUpdateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsConditionFormatsBatchUpdateReqCall(self, body, request_opts=request_opts)

    def data_validation_create(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsDataValidationCreateReqBody, str, str, int) -> SpreadsheetsDataValidationCreateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsDataValidationCreateReqCall(self, body, request_opts=request_opts)

    def data_validation_delete(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsDataValidationDeleteReqBody, str, str, int) -> SpreadsheetsDataValidationDeleteReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsDataValidationDeleteReqCall(self, body, request_opts=request_opts)

    def data_validation_get(self, tenant_key=None, user_access_token=None, timeout=None):
        # type: (str, str, int) -> SpreadsheetsDataValidationGetReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsDataValidationGetReqCall(self, request_opts=request_opts)

    def data_validation_update(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsDataValidationUpdateReqBody, str, str, int) -> SpreadsheetsDataValidationUpdateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsDataValidationUpdateReqCall(self, body, request_opts=request_opts)

    def dimension_range_add(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsDimensionRangeAddReqBody, str, str, int) -> SpreadsheetsDimensionRangeAddReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsDimensionRangeAddReqCall(self, body, request_opts=request_opts)

    def dimension_range_delete(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsDimensionRangeDeleteReqBody, str, str, int) -> SpreadsheetsDimensionRangeDeleteReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsDimensionRangeDeleteReqCall(self, body, request_opts=request_opts)

    def dimension_range_update(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsDimensionRangeUpdateReqBody, str, str, int) -> SpreadsheetsDimensionRangeUpdateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsDimensionRangeUpdateReqCall(self, body, request_opts=request_opts)

    def import_(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsImportReqBody, str, str, int) -> SpreadsheetsImportReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsImportReqCall(self, body, request_opts=request_opts)

    def import_result(self, tenant_key=None, user_access_token=None, timeout=None):
        # type: (str, str, int) -> SpreadsheetsImportResultReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsImportResultReqCall(self, request_opts=request_opts)

    def insert_dimension_range(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsInsertDimensionRangeReqBody, str, str, int) -> SpreadsheetsInsertDimensionRangeReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsInsertDimensionRangeReqCall(self, body, request_opts=request_opts)

    def merge_cells(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsMergeCellsReqBody, str, str, int) -> SpreadsheetsMergeCellsReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsMergeCellsReqCall(self, body, request_opts=request_opts)

    def metainfo(self, tenant_key=None, user_access_token=None, timeout=None):
        # type: (str, str, int) -> SpreadsheetsMetainfoReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsMetainfoReqCall(self, request_opts=request_opts)

    def protected_range_batch_create(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsProtectedRangeBatchCreateReqBody, str, str, int) -> SpreadsheetsProtectedRangeBatchCreateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsProtectedRangeBatchCreateReqCall(self, body, request_opts=request_opts)

    def protected_range_batch_delete(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsProtectedRangeBatchDeleteReqBody, str, str, int) -> SpreadsheetsProtectedRangeBatchDeleteReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsProtectedRangeBatchDeleteReqCall(self, body, request_opts=request_opts)

    def protected_range_batch_get(self, tenant_key=None, user_access_token=None, timeout=None):
        # type: (str, str, int) -> SpreadsheetsProtectedRangeBatchGetReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsProtectedRangeBatchGetReqCall(self, request_opts=request_opts)

    def protected_range_batch_update(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsProtectedRangeBatchUpdateReqBody, str, str, int) -> SpreadsheetsProtectedRangeBatchUpdateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsProtectedRangeBatchUpdateReqCall(self, body, request_opts=request_opts)

    def sheets_batch_update(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsSheetsBatchUpdateReqBody, str, str, int) -> SpreadsheetsSheetsBatchUpdateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsSheetsBatchUpdateReqCall(self, body, request_opts=request_opts)

    def sheets_update_properties(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsSheetsUpdatePropertiesReqBody, str, str, int) -> SpreadsheetsSheetsUpdatePropertiesReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsSheetsUpdatePropertiesReqCall(self, body, request_opts=request_opts)

    def style_update(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsStyleUpdateReqBody, str, str, int) -> SpreadsheetsStyleUpdateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsStyleUpdateReqCall(self, body, request_opts=request_opts)

    def styles_batch_update(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsStylesBatchUpdateReqBody, str, str, int) -> SpreadsheetsStylesBatchUpdateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsStylesBatchUpdateReqCall(self, body, request_opts=request_opts)

    def unmerge_cells(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsUnmergeCellsReqBody, str, str, int) -> SpreadsheetsUnmergeCellsReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsUnmergeCellsReqCall(self, body, request_opts=request_opts)

    def values_append(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsValuesAppendReqBody, str, str, int) -> SpreadsheetsValuesAppendReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsValuesAppendReqCall(self, body, request_opts=request_opts)

    def values_batch_get(self, tenant_key=None, user_access_token=None, timeout=None):
        # type: (str, str, int) -> SpreadsheetsValuesBatchGetReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsValuesBatchGetReqCall(self, request_opts=request_opts)

    def values_batch_update(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsValuesBatchUpdateReqBody, str, str, int) -> SpreadsheetsValuesBatchUpdateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsValuesBatchUpdateReqCall(self, body, request_opts=request_opts)

    def values_get(self, tenant_key=None, user_access_token=None, timeout=None):
        # type: (str, str, int) -> SpreadsheetsValuesGetReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsValuesGetReqCall(self, request_opts=request_opts)

    def values_image(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsValuesImageReqBody, str, str, int) -> SpreadsheetsValuesImageReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsValuesImageReqCall(self, body, request_opts=request_opts)

    def values_prepend(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsValuesPrependReqBody, str, str, int) -> SpreadsheetsValuesPrependReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsValuesPrependReqCall(self, body, request_opts=request_opts)

    def values_update(self, body, tenant_key=None, user_access_token=None, timeout=None):
        # type: (SpreadsheetsValuesUpdateReqBody, str, str, int) -> SpreadsheetsValuesUpdateReqCall

        request_opts = []   # type: List[Callable[[Any], Any]]

        if timeout is not None:
            request_opts += [set_timeout(timeout)]

        if tenant_key is not None:
            request_opts += [set_tenant_key(tenant_key)]

        if user_access_token is not None:
            request_opts += [set_user_access_token(user_access_token)]

        return SpreadsheetsValuesUpdateReqCall(self, body, request_opts=request_opts)



class SpreadsheetsConditionFormatsBatchCreateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsConditionFormatsBatchCreateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsConditionFormatsBatchCreateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsConditionFormatsBatchCreateResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/condition_formats/batch_create', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsConditionFormatsBatchCreateResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsConditionFormatsBatchDeleteReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsConditionFormatsBatchDeleteReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsConditionFormatsBatchDeleteReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsConditionFormatsBatchDeleteResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/condition_formats/batch_delete', 'DELETE', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsConditionFormatsBatchDeleteResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsConditionFormatsBatchGetReqCall(object):
    def __init__(self, service, request_opts=None):
        # type: (SpreadsheetsService, List[Any]) -> None

        self.service = service
        
        self.path_params = {}   # type: Dict[str, Any]
        self.query_params = {}  # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsConditionFormatsBatchGetReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def set_sheet_ids(self, sheet_ids):
        # type: (List[str]) -> SpreadsheetsConditionFormatsBatchGetReqCall
        self.query_params['sheet_ids'] = sheet_ids
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsConditionFormatsBatchGetResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        self.request_opts += [set_query_params(self.query_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/condition_formats', 'GET', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      None, output_class=SpreadsheetsConditionFormatsBatchGetResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsConditionFormatsBatchUpdateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsConditionFormatsBatchUpdateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsConditionFormatsBatchUpdateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsConditionFormatsBatchUpdateResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/condition_formats/batch_update', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsConditionFormatsBatchUpdateResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsDataValidationCreateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsDataValidationCreateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsDataValidationCreateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[None]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/dataValidation', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsDataValidationDeleteReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsDataValidationDeleteReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsDataValidationDeleteReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsDataValidationDeleteResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/dataValidation', 'DELETE', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsDataValidationDeleteResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsDataValidationGetReqCall(object):
    def __init__(self, service, request_opts=None):
        # type: (SpreadsheetsService, List[Any]) -> None

        self.service = service
        
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsDataValidationGetReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsDataValidationGetResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/dataValidation', 'GET', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      None, output_class=SpreadsheetsDataValidationGetResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsDataValidationUpdateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsDataValidationUpdateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsDataValidationUpdateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def set_sheetId(self, sheet_id):
        # type: (str) -> SpreadsheetsDataValidationUpdateReqCall
        self.path_params['sheetId'] = sheet_id
        return self

    def set_dataValidationId(self, data_validation_id):
        # type: (int) -> SpreadsheetsDataValidationUpdateReqCall
        self.path_params['dataValidationId'] = data_validation_id
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsDataValidationUpdateResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/dataValidation/:sheetId/:dataValidationId', 'PUT', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsDataValidationUpdateResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsDimensionRangeAddReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsDimensionRangeAddReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsDimensionRangeAddReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsDimensionRangeAddResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/dimension_range', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsDimensionRangeAddResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsDimensionRangeDeleteReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsDimensionRangeDeleteReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsDimensionRangeDeleteReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsDimensionRangeDeleteResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/dimension_range', 'DELETE', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsDimensionRangeDeleteResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsDimensionRangeUpdateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsDimensionRangeUpdateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsDimensionRangeUpdateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[None]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/dimension_range', 'PUT', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsImportReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsImportReqBody, List[Any]) -> None

        self.service = service
        self.body = body

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def do(self):
        # type: () -> Response[SpreadsheetsImportResult]
        root_service = self.service.service

        conf = root_service.conf
        req = Request('sheets/v2/import', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsImportResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsImportResultReqCall(object):
    def __init__(self, service, request_opts=None):
        # type: (SpreadsheetsService, List[Any]) -> None

        self.service = service
        
        self.query_params = {}  # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_ticket(self, ticket):
        # type: (str) -> SpreadsheetsImportResultReqCall
        self.query_params['ticket'] = ticket
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsImportResultResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_query_params(self.query_params)]
        req = Request('sheets/v2/import/result', 'GET', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      None, output_class=SpreadsheetsImportResultResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsInsertDimensionRangeReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsInsertDimensionRangeReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsInsertDimensionRangeReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[None]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/insert_dimension_range', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsMergeCellsReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsMergeCellsReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsMergeCellsReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsMergeCellsResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/merge_cells', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsMergeCellsResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsMetainfoReqCall(object):
    def __init__(self, service, request_opts=None):
        # type: (SpreadsheetsService, List[Any]) -> None

        self.service = service
        
        self.path_params = {}   # type: Dict[str, Any]
        self.query_params = {}  # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsMetainfoReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def set_extFields(self, ext_fields):
        # type: (str) -> SpreadsheetsMetainfoReqCall
        self.query_params['extFields'] = ext_fields
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsMetainfoResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        self.request_opts += [set_query_params(self.query_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/metainfo', 'GET', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      None, output_class=SpreadsheetsMetainfoResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsProtectedRangeBatchCreateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsProtectedRangeBatchCreateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsProtectedRangeBatchCreateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsProtectedRangeBatchCreateResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/protected_dimension', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsProtectedRangeBatchCreateResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsProtectedRangeBatchDeleteReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsProtectedRangeBatchDeleteReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsProtectedRangeBatchDeleteReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsProtectedRangeBatchDeleteResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/protected_range_batch_del', 'DELETE', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsProtectedRangeBatchDeleteResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsProtectedRangeBatchGetReqCall(object):
    def __init__(self, service, request_opts=None):
        # type: (SpreadsheetsService, List[Any]) -> None

        self.service = service
        
        self.path_params = {}   # type: Dict[str, Any]
        self.query_params = {}  # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsProtectedRangeBatchGetReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def set_protectIds(self, protect_ids):
        # type: (List[str]) -> SpreadsheetsProtectedRangeBatchGetReqCall
        self.query_params['protectIds'] = protect_ids
        return self

    def set_memberType(self, member_type):
        # type: (str) -> SpreadsheetsProtectedRangeBatchGetReqCall
        self.query_params['memberType'] = member_type
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsProtectedRangeBatchGetResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        self.request_opts += [set_query_params(self.query_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/protected_range_batch_get', 'GET', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      None, output_class=SpreadsheetsProtectedRangeBatchGetResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsProtectedRangeBatchUpdateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsProtectedRangeBatchUpdateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsProtectedRangeBatchUpdateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsProtectedRangeBatchUpdateResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/protected_range_batch_update', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsProtectedRangeBatchUpdateResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsSheetsBatchUpdateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsSheetsBatchUpdateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsSheetsBatchUpdateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsSheetsBatchUpdateResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/sheets_batch_update', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsSheetsBatchUpdateResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsSheetsUpdatePropertiesReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsSheetsUpdatePropertiesReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsSheetsUpdatePropertiesReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsSheetsUpdatePropertiesResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/properties', 'PUT', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsSheetsUpdatePropertiesResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsStyleUpdateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsStyleUpdateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsStyleUpdateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsStyleUpdateResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/style', 'PUT', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsStyleUpdateResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsStylesBatchUpdateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsStylesBatchUpdateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsStylesBatchUpdateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsStylesBatchUpdateResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/styles_batch_update', 'PUT', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsStylesBatchUpdateResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsUnmergeCellsReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsUnmergeCellsReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsUnmergeCellsReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsUnmergeCellsResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/unmerge_cells', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsUnmergeCellsResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsValuesAppendReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsValuesAppendReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]
        self.query_params = {}  # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsValuesAppendReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def set_insertDataOption(self, insert_data_option):
        # type: (str) -> SpreadsheetsValuesAppendReqCall
        self.query_params['insertDataOption'] = insert_data_option
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsValuesAppendResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        self.request_opts += [set_query_params(self.query_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/values_append', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsValuesAppendResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsValuesBatchGetReqCall(object):
    def __init__(self, service, request_opts=None):
        # type: (SpreadsheetsService, List[Any]) -> None

        self.service = service
        
        self.path_params = {}   # type: Dict[str, Any]
        self.query_params = {}  # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsValuesBatchGetReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def set_ranges(self, ranges):
        # type: (List[str]) -> SpreadsheetsValuesBatchGetReqCall
        self.query_params['ranges'] = ranges
        return self

    def set_valueRenderOption(self, value_render_option):
        # type: (str) -> SpreadsheetsValuesBatchGetReqCall
        self.query_params['valueRenderOption'] = value_render_option
        return self

    def set_dateTimeRenderOption(self, date_time_render_option):
        # type: (str) -> SpreadsheetsValuesBatchGetReqCall
        self.query_params['dateTimeRenderOption'] = date_time_render_option
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsValuesBatchGetResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        self.request_opts += [set_query_params(self.query_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/values_batch_get', 'GET', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      None, output_class=SpreadsheetsValuesBatchGetResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsValuesBatchUpdateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsValuesBatchUpdateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsValuesBatchUpdateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsValuesBatchUpdateResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/values_batch_update', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsValuesBatchUpdateResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsValuesGetReqCall(object):
    def __init__(self, service, request_opts=None):
        # type: (SpreadsheetsService, List[Any]) -> None

        self.service = service
        
        self.path_params = {}   # type: Dict[str, Any]
        self.query_params = {}  # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (SpreadsheetToken) -> SpreadsheetsValuesGetReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def set_range(self, range):
        # type: (SpreadsheetToken) -> SpreadsheetsValuesGetReqCall
        self.path_params['range'] = range
        return self

    def set_valueRenderOption(self, value_render_option):
        # type: (str) -> SpreadsheetsValuesGetReqCall
        self.query_params['valueRenderOption'] = value_render_option
        return self

    def set_dateTimeRenderOption(self, date_time_render_option):
        # type: (str) -> SpreadsheetsValuesGetReqCall
        self.query_params['dateTimeRenderOption'] = date_time_render_option
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsValuesGetResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        self.request_opts += [set_query_params(self.query_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/values/:range', 'GET', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      None, output_class=SpreadsheetsValuesGetResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsValuesImageReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsValuesImageReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsValuesImageReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsValuesImageResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/values_image', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsValuesImageResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsValuesPrependReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsValuesPrependReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsValuesPrependReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsValuesPrependResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/values_prepend', 'POST', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsValuesPrependResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp


class SpreadsheetsValuesUpdateReqCall(object):
    def __init__(self, service, body, request_opts=None):
        # type: (SpreadsheetsService, SpreadsheetsValuesUpdateReqBody, List[Any]) -> None

        self.service = service
        self.body = body
        self.path_params = {}   # type: Dict[str, Any]

        if request_opts:
            self.request_opts = request_opts
        else:
            self.request_opts = []  # type: List[Any]

    def set_spreadsheetToken(self, spreadsheet_token):
        # type: (str) -> SpreadsheetsValuesUpdateReqCall
        self.path_params['spreadsheetToken'] = spreadsheet_token
        return self

    def do(self):
        # type: () -> Response[SpreadsheetsValuesUpdateResult]
        root_service = self.service.service

        conf = root_service.conf
        self.request_opts += [set_path_params(self.path_params)]
        req = Request('sheets/v2/spreadsheets/:spreadsheetToken/values', 'PUT', [ACCESS_TOKEN_TYPE_TENANT, ACCESS_TOKEN_TYPE_USER],
                      self.body, output_class=SpreadsheetsValuesUpdateResult, request_opts=self.request_opts)
        resp = req.do(conf)
        return resp

