docs: def generate_url(self, service_scope=None, state_value='', additional_fields=None):
  
          ''' a method to generate an authorization url to oauth2 service for client
  
          :param service_scope: [optional] list with scope of permissions for agent
          :param state_value: [optional] string with unique identifier for callback
          :param additional_fields: [optional] dictionary with key value strings for service
          :return: string with authorization url
          '''
  
          title = '%s.generate_url' % self.__class__.__name__
  
      # validate inputs
          input_fields = {
              'state_value': state_value,
              'service_scope': service_scope,
              'additional_fields': additional_fields
          }
          for key, value in input_fields.items():
              if value:
                  object_title = '%s(%s=%s)' % (title, key, str(value))
                  self.fields.validate(value, '.%s' % key, object_title)
  
      # validate additional fields
          if additional_fields:
              for key, value in additional_fields.items():
                  if not isinstance(value, str):
                      raise TypeError("%s(additional_fields={'%s':'...'}) must be a string datatype." % (title, key))
  
      # construct query parameters
          query_params = {
              'response_type': 'code',
              'client_id': self.client_id,
              'redirect_uri': self.redirect_uri
          }
          if state_value:
              query_params['state'] = state_value
          if service_scope:
              for item in service_scope:
                  if 'scope' not in query_params.keys():
                      query_params['scope'] = ''
                  if query_params['scope']:
                      query_params['scope'] += ' '
                  query_params['scope'] += item
          if additional_fields:
              query_params.update(**additional_fields)
  
      # encode query parameters
          from urllib.parse import urlencode
          url_string = '%s?%s' % (self.auth_endpoint, urlencode(query_params))
  
          return url_string