'Validate and use the given id for this ObjectId.
Raises TypeError if id is not an instance of
(:class:`basestring` (:class:`str` or :class:`bytes`
in python 3), ObjectId) and InvalidId if it is not a
valid ObjectId.
:Parameters:
- `oid`: a valid ObjectId'

def __validate(self, oid):

    if isinstance(oid, ObjectId):
        self.__id = oid.binary
    elif isinstance(oid, string_type):
        if (len(oid) == 24):
            try:
                self.__id = bytes_from_hex(oid)
            except (TypeError, ValueError):
                _raise_invalid_id(oid)
        else:
            _raise_invalid_id(oid)
    else:
        raise TypeError(('id    must    be    an    instance    of    (bytes,    %s,    ObjectId),    not    %s' % (text_type.__name__, type(oid))))
