def decorate_HTTP_verb_method(method):
    """Prepare and Post-Process HTTP VERB method for BigIP-RESTServer request.

    This function decorates all of the HTTP VERB methods in the
    iControlRESTSession class.  It provides the core logic for this module.
    If necessary it validates and assembles a uri from parts with a call to
    `generate_bigip_uri`.

    Then it:

    1. pre-logs the details of the request
    2. submits the request
    3. logs the response, included expected status codes
    4. raises exceptions for unexpected status codes. (i.e. not doc'd as BigIP
       RESTServer codes.)
    """
    @functools.wraps(method)
    def wrapper(self, RIC_base_uri, **kwargs):
        partition = kwargs.pop('partition', '')
        sub_path = kwargs.pop('subPath', '')
        suffix = kwargs.pop('suffix', '')
        identifier, kwargs = _unique_resource_identifier_from_kwargs(**kwargs)
        uri_as_parts = kwargs.pop('uri_as_parts', False)
        transform_name = kwargs.pop('transform_name', False)
        transform_subpath = kwargs.pop('transform_subpath', False)
        if uri_as_parts:
            REST_uri = generate_bigip_uri(RIC_base_uri, partition, identifier,
                                          sub_path, suffix,
                                          transform_name=transform_name,
                                          transform_subpath=transform_subpath,
                                          **kwargs)
        else:
            REST_uri = RIC_base_uri
        pre_message = "%s WITH uri: %s AND suffix: %s AND kwargs: %s" %\
            (method.__name__, REST_uri, suffix, kwargs)

        logger = logging.getLogger(__name__)
        logger.debug(pre_message)
        response = method(self, REST_uri, **kwargs)
        post_message =\
            "RESPONSE::STATUS: %s Content-Type: %s Content-Encoding:"\
            " %s\nText: %r" % (response.status_code,
                               response.headers.get('Content-Type', None),
                               response.headers.get('Content-Encoding', None),
                               response.text)
        logger.debug(post_message)
        if response.status_code not in range(200, 207):
            error_message = '%s Unexpected Error: %s for uri: %s\nText: %r' %\
                            (response.status_code,
                             response.reason,
                             response.url,
                             response.text)
            raise iControlUnexpectedHTTPError(error_message, response=response)
        return response
    return wrapper
Prepare and Post-Process HTTP VERB method for BigIP-RESTServer request.

    This function decorates all of the HTTP VERB methods in the
    iControlRESTSession class.  It provides the core logic for this module.
    If necessary it validates and assembles a uri from parts with a call to
    `generate_bigip_uri`.

    Then it:

    1. pre-logs the details of the request
    2. submits the request
    3. logs the response, included expected status codes
    4. raises exceptions for unexpected status codes. (i.e. not doc'd as BigIP
       RESTServer codes.)