(run, full_result, result, index)
Merge a result from a legacy opcode into the full results.
Merge a result from a legacy opcode into the full results.
Merge a result from a legacy opcode into the full results .
def _merge_legacy(run, full_result, result, index):
    """Merge a result from a legacy opcode into the full results.
    """
    affected = result.get('n', 0)

    errmsg = result.get("errmsg", result.get("err", ""))
    if errmsg:
        # wtimeout is not considered a hard failure in
        # MongoDB 2.6 so don't treat it like one here.
        if result.get("wtimeout"):
            error_doc = {'errmsg': errmsg, 'code': _WRITE_CONCERN_ERROR}
            full_result['writeConcernErrors'].append(error_doc)
        else:
            code = result.get("code", _UNKNOWN_ERROR)
            error = _make_error(run.index(index), code, errmsg, run.ops[index])
            if "errInfo" in result:
                error["errInfo"] = result["errInfo"]
            full_result["writeErrors"].append(error)
            return
    if run.op_type == _INSERT:
        full_result['nInserted'] += 1
    elif run.op_type == _UPDATE:
        if "upserted" in result:
            doc = {_UINDEX: run.index(index), _UID: result["upserted"]}
            full_result["upserted"].append(doc)
            full_result['nUpserted'] += affected
        # Versions of MongoDB before 2.6 don't return the _id for an
        # upsert if _id is not an ObjectId.
        elif result.get("updatedExisting") is False and affected == 1:
            op = run.ops[index]
            # If _id is in both the update document *and* the query spec
            # the update document _id takes precedence.
            _id = op['u'].get('_id', op['q'].get('_id'))
            doc = {_UINDEX: run.index(index), _UID: _id}
            full_result["upserted"].append(doc)
            full_result['nUpserted'] += affected
        else:
            full_result['nMatched'] += affected

    elif run.op_type == _DELETE:
        full_result['nRemoved'] += affected
def _merge_legacy ( run , full_result , result , index ) : affected = result . get ( 'n' , 0 ) errmsg = result . get ( "errmsg" , result . get ( "err" , "" ) ) if errmsg : # wtimeout is not considered a hard failure in # MongoDB 2.6 so don't treat it like one here. if result . get ( "wtimeout" ) : error_doc = { 'errmsg' : errmsg , 'code' : _WRITE_CONCERN_ERROR } full_result [ 'writeConcernErrors' ] . append ( error_doc ) else : code = result . get ( "code" , _UNKNOWN_ERROR ) error = _make_error ( run . index ( index ) , code , errmsg , run . ops [ index ] ) if "errInfo" in result : error [ "errInfo" ] = result [ "errInfo" ] full_result [ "writeErrors" ] . append ( error ) return if run . op_type == _INSERT : full_result [ 'nInserted' ] += 1 elif run . op_type == _UPDATE : if "upserted" in result : doc = { _UINDEX : run . index ( index ) , _UID : result [ "upserted" ] } full_result [ "upserted" ] . append ( doc ) full_result [ 'nUpserted' ] += affected # Versions of MongoDB before 2.6 don't return the _id for an # upsert if _id is not an ObjectId. elif result . get ( "updatedExisting" ) is False and affected == 1 : op = run . ops [ index ] # If _id is in both the update document *and* the query spec # the update document _id takes precedence. _id = op [ 'u' ] . get ( '_id' , op [ 'q' ] . get ( '_id' ) ) doc = { _UINDEX : run . index ( index ) , _UID : _id } full_result [ "upserted" ] . append ( doc ) full_result [ 'nUpserted' ] += affected else : full_result [ 'nMatched' ] += affected elif run . op_type == _DELETE : full_result [ 'nRemoved' ] += affected