Preprocess the `dt` with `localize()` and `astz()`

def preprocess(self, dt):
        """ Preprocess the `dt` with `localize()` and `astz()` """
        # Process
        try:  # this block should not raise errors, and if it does -- they should not be wrapped with `Invalid`
            # localize
            if self.localize and dt.tzinfo is None:
                dt = self.localize(dt)

            # astimezone
            if self.astz and dt.tzinfo is not None:
                dt = self.astz(dt)

            # Finish
            return dt
        except Exception as e:
            if isinstance(e, Invalid):
                raise
            six.reraise(RuntimeError, e)