def _from_data(cls, message_length: int, header: MessageHeader, data: io.BytesIO): # bit vector of query options flags = int.from_bytes(data.read(4), byteorder='little', signed=False) # "dbname.collection_name" full_collection_name = decode_cstring(data) # number of documents to skip number_to_skip = int.from_bytes(data.read(4), byteorder='little', signed=True) # number of documents to return in the first OP_REPLY batch number_to_return = int.from_bytes(data.read(4), byteorder='little', signed=True) # query object query = bson.decode_object(data) data_left = data.getvalue() if data_left: # Optional. Selector indicating the fields to return. return_fields_selector = bson.decode_object(data_left) else: return_fields_selector = None return cls(header=header, flags=flags, full_collection_name=full_collection_name, number_to_skip=number_to_skip, number_to_return=number_to_return, query=query, return_fields_selector=return_fields_selector)
def _from_data(cls, message_length: int, header: MessageHeader, data: io.BytesIO) -> 'OpUpdate': data.seek(4, io.SEEK_CUR) # 0 - reserved for future use full_collection_name = decode_cstring(data) # "dbname.collectionname" flags = int(data.read(4)) # bit vector selector = bson.decode_object(data) # the query to select the document update = bson.decode_object( data) # specification of the update to perform return cls(header=header, full_collection_name=full_collection_name, flags=flags, selector=selector, update=update)
def _from_data(cls, message_length: int, header: MessageHeader, data: io.BytesIO) -> 'OpGetMore': data.seek(4, io.SEEK_CUR) # 0 - reserved for future use full_collection_name = bson.decode_object(data) # "dbname.collectionname" number_to_return = int(data.read(4)) # number of documents to return cursor_id = int(data.read(8)) # cursorID from the OP_REPLY return cls(header=header, full_collection_name=full_collection_name, number_to_return=number_to_return, cursor_id=cursor_id)
def _from_data(cls, message_length: int, header: MessageHeader, data: io.BytesIO): data.seek(4, io.SEEK_CUR) # 0 - reserved for future use full_collection_name = decode_cstring(data) # "dbname.collectionname" flags = int(data.read(4)) # bit vector selector = bson.decode_object(data) # query object. return cls(header=header, full_collection_name=full_collection_name, flags=flags, selector=selector)
def _from_data(cls, message_length: int, header: MessageHeader, data: io.BytesIO): flags = int.from_bytes(data.read(4), byteorder='little', signed=True) # bit vector full_collection_name = decode_cstring(data) # "dbname.collectionname" documents = bson.decode_object( data) # one or more documents to insert into the collection return cls(header=header, flags=flags, full_collection_name=full_collection_name, documents=documents)