def __init__(self, *, protocol_url=None, api_version=None,<EOL>default_resource=ME_RESOURCE,<EOL>casing_function=None, protocol_scope_prefix=None,<EOL>timezone=None, **kwargs):
if protocol_url is None or api_version is None:<EOL><INDENT>raise ValueError(<EOL>'<STR_LIT>')<EOL><DEDENT>self.protocol_url = protocol_url or self._protocol_url<EOL>self.protocol_scope_prefix = protocol_scope_prefix or '<STR_LIT>'<EOL>self.api_version = api_version<EOL>self.service_url = '<STR_LIT>'.format(protocol_url, api_version)<EOL>self.default_resource = default_resource<EOL>self.use_default_casing = True if casing_function is None else False<EOL>self.casing_function = casing_function or camelcase<EOL>self.timezone = timezone or get_localzone()  <EOL>self.max_top_value = <NUM_LIT>  <EOL>self.keyword_data_store = {}<EOL>
Create a new protocol object

        :param str protocol_url: the base url used to communicate with the
         server
        :param str api_version: the api version
        :param str default_resource: the default resource to use when there is
         nothing explicitly specified during the requests
        :param function casing_function: the casing transform function to be
         used on api keywords (camelcase / pascalcase)
        :param str protocol_scope_prefix: prefix url for scopes
        :param pytz.UTC timezone: preferred timezone, defaults to the
         system timezone
        :raises ValueError: if protocol_url or api_version are not supplied