docs: def fetch(self, url, pdata, store_to_self=True):
          """
              This does the bulk of the work for the wrapper.
  
              It will send a POST request, to the API URL, with
              all required data, as well as the api_key given,
              and will handle various replies, raising exceptions
              as required.
  
              :param url: the url segment to POST to (unbuilt url, e.g., /submit, /expand)
              :type url: str
              :param pdata: a dictionary of data to POST
              :type pdata: dict
              :param store_to_self: should we store the reply (if any) to self.reply?
              :type store_to_self: bool
              :return: the API reply data
              :rtype: dict
              :raises: chrw.exceptions.ApiDisabled,
                       chrw.exceptions.InvalidApiKey,
                       chrw.exceptions.PartialFormData,
                       chrw.exceptions.NonZeroException
          """
          url = self.schema + '://' + self.base + url
          post = dict(pdata.items() + {
              "api_key": self.api_key  
          }.items())
          self.post = post
          res = requests.post(url, post, headers={"User-Agent": self.user_agent})
          if self.require_200 and res.status_code != requests.codes.ok:
              raise chrw.exceptions.RequestFailed, "Got HTTP reply {0}, needed {1}".format(res.status_code, requests.codes.ok)
          
          if not res.json:
              raise chrw.exceptions.InvalidDataReturned, "Invalid JSON data was returned"
  
          if store_to_self:
              self.reply = res.json
  
          if res.json["enum"] == chrw.codes.api_disabled:
              raise chrw.exceptions.ApiDisabled, res.json["message"]
          elif res.json["enum"] == chrw.codes.no_such_key:
              raise chrw.exceptions.InvalidApiKey, res.json["message"]
          elif res.json["enum"] == chrw.codes.partial_form_data:
              raise chrw.exceptions.PartialFormData, res.json["message"]
          elif res.json["enum"] != chrw.codes.success:
              __ = "Non-zero reply {0}: {1}".format(res.json["enum"], res.json["message"])
              raise chrw.exceptions.NonZeroReply, __
  
          return res.json