docs: def analyze(self,
                  itemId=None,
                  filePath=None,
                  text=None,
                  fileType="csv",
                  analyzeParameters=None):
          """
          The Analyze call helps a client analyze a CSV file prior to
          publishing or generating features using the Publish or Generate
          operation, respectively.
          Analyze returns information about the file including the fields
          present as well as sample records. Analyze attempts to detect the
          presence of location fields that may be present as either X,Y
          fields or address fields.
          Analyze packages its result so that publishParameters within the
          JSON response contains information that can be passed back to the
          server in a subsequent call to Publish or Generate. The
          publishParameters subobject contains properties that describe the
          resulting layer after publishing, including its fields, the desired
          renderer, and so on. Analyze will suggest defaults for the renderer.
          In a typical workflow, the client will present portions of the
          Analyze results to the user for editing before making the call to
          Publish or Generate.
          If the file to be analyzed currently exists in the portal as an
          item, callers can pass in its itemId. Callers can also directly
          post the file. In this case, the request must be a multipart post
          request pursuant to IETF RFC1867. The third option for text files
          is to pass the text in as the value of the text parameter.
  
          Inputs:
             itemid - The ID of the item to be analyzed.
             file - The file to be analyzed.
             text - The text in the file to be analyzed.
             filetype - The type of input file.
             analyzeParameters - A AnalyzeParameters object that provides
                                 geocoding information
          """
          files = []
          url = self._url + "/analyze"
          params = {
              "f" : "json"
  
          }
          fileType = "csv"
          params["fileType"] = fileType
          if analyzeParameters is not None and\
             isinstance(analyzeParameters, AnalyzeParameters):
              params['analyzeParameters'] = analyzeParameters.value
  
          if not (filePath is None) and \
             os.path.isfile(filePath):
              params['text'] = open(filePath, 'rb').read()
              return self._post(url=url, param_dict=params,
                                   securityHandler=self._securityHandler,
                                   proxy_url=self._proxy_url,
                                   proxy_port=self._proxy_port)
          elif itemId is not None:
              params["fileType"] = fileType
              params['itemId'] = itemId
              return self._post(url=url, param_dict=params,
                                   securityHandler=self._securityHandler,
                                   proxy_url=self._proxy_url,
                                   proxy_port=self._proxy_port)
          else:
              raise AttributeError("either an Item ID or a file path must be given.")