'Execute a command or raise ConnectionFailure or OperationFailure.
:Parameters:
- `dbname`: name of the database on which to run the command
- `spec`: a command document as a dict, SON, or mapping object
- `slave_ok`: whether to set the SlaveOkay wire protocol bit
- `read_preference`: a read preference
- `codec_options`: a CodecOptions instance
- `check`: raise OperationFailure if there are errors
- `allowable_errors`: errors to ignore if `check` is True
- `check_keys`: if True, check `spec` for invalid keys
- `read_concern`: The read concern for this command.
- `write_concern`: The write concern for this command.
- `parse_write_concern_error`: Whether to parse the
``writeConcernError`` field in the command response.
- `collation`: The collation for this command.'

def command(self, dbname, spec, slave_ok=False, read_preference=ReadPreference.PRIMARY, codec_options=DEFAULT_CODEC_OPTIONS, check=True, allowable_errors=None, check_keys=False, read_concern=DEFAULT_READ_CONCERN, write_concern=None, parse_write_concern_error=False, collation=None):

    if ((self.max_wire_version < 4) and (not read_concern.ok_for_legacy)):
        raise ConfigurationError(('read    concern    level    of    %s    is    not    valid    with    a    max    wire    version    of    %d.' % (read_concern.level, self.max_wire_version)))
    if (not ((write_concern is None) or write_concern.acknowledged or (collation is None))):
        raise ConfigurationError('Collation    is    unsupported    for    unacknowledged    writes.')
    if ((self.max_wire_version >= 5) and write_concern):
        spec['writeConcern'] = write_concern.document
    elif ((self.max_wire_version < 5) and (collation is not None)):
        raise ConfigurationError('Must    be    connected    to    MongoDB    3.4+    to    use    a    collation.')
    try:
        return command(self.sock, dbname, spec, slave_ok, self.is_mongos, read_preference, codec_options, check, allowable_errors, self.address, check_keys, self.listeners, self.max_bson_size, read_concern, parse_write_concern_error=parse_write_concern_error, collation=collation)
    except OperationFailure:
        raise
    except BaseException as error:
        self._raise_connection_failure(error)
