<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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