Exemple #1
0
def get_more(collection_name, num_to_return, cursor_id):
    """Get a **getMore** message.
    """
    data = __ZERO
    data += bson._make_c_string(collection_name)
    data += struct.pack("<i", num_to_return)
    data += struct.pack("<q", cursor_id)
    return __pack_message(2005, data)
def get_more(collection_name, num_to_return, cursor_id):
    """Get a **getMore** message.
    """
    data = __ZERO
    data += bson._make_c_string(collection_name)
    data += struct.pack("<i", num_to_return)
    data += struct.pack("<q", cursor_id)
    return __pack_message(2005, data)
Exemple #3
0
 def insert(col, doc_or_docs):
     try:
         doc_or_docs.fromkeys
         doc_or_docs = [doc_or_docs]
     except AttributeError:
         pass
     doc_data = "".join(BSON.from_dict(doc) for doc in doc_or_docs)
     colname = _make_c_string(col)
     return "%s%s%s" % (_ZERO, colname, doc_data)
Exemple #4
0
 def query(col, spec, fields, skip, limit):
     data = [
         _ZERO, 
         _make_c_string(col), 
         struct.pack('<ii', skip, limit),
         BSON.from_dict(spec or {}),
     ]
     if fields:
         data.append(BSON.from_dict(dict.fromkeys(fields, 1)))
     return "".join(data)
Exemple #5
0
 def update(col, spec, doc, upsert, multi):
     colname = _make_c_string(col)
     flags = 0
     if upsert:
         flags |= 1 << 0
     if multi:
         flags |= 1 << 1
     fmt = '<i%dsi' % len(colname)
     part = struct.pack(fmt, 0, colname, flags)
     return "%s%s%s" % (part, BSON.from_dict(spec), BSON.from_dict(doc))
Exemple #6
0
 def subscribe(self, col, spec):
     """Subscribe to updates of document in col identified by spec."""
     data = [
         "\x00\x00\x00\x00",
         _make_c_string("%s@%s" % (self._pubsub_id, col)), 
         struct.pack('<ii', 0, 0),
         BSON.from_dict(spec),
     ]
     msg = "".join(data)
     yield self._put_request(OP_SUBSCRIBE, msg)
     yield response('')
Exemple #7
0
def query(options, collection_name,
          num_to_skip, num_to_return, query, field_selector=None):
    """Get a **query** message.
    """
    data = struct.pack("<I", options)
    data += bson._make_c_string(collection_name)
    data += struct.pack("<i", num_to_skip)
    data += struct.pack("<i", num_to_return)
    data += bson.BSON.from_dict(query)
    if field_selector is not None:
        data += bson.BSON.from_dict(field_selector)
    return __pack_message(2004, data)
def query(options, collection_name,
          num_to_skip, num_to_return, query, field_selector=None):
    """Get a **query** message.
    """
    data = struct.pack("<I", options)
    data += bson._make_c_string(collection_name)
    data += struct.pack("<i", num_to_skip)
    data += struct.pack("<i", num_to_return)
    data += bson.BSON.from_dict(query)
    if field_selector is not None:
        data += bson.BSON.from_dict(field_selector)
    return __pack_message(2004, data)
def insert(collection_name, docs, check_keys, safe):
    """Get an **insert** message.
    """
    data = __ZERO
    data += bson._make_c_string(collection_name)
    data += "".join([bson.BSON.from_dict(doc, check_keys)
                     for doc in docs])
    if safe:
        (_, insert_message) = __pack_message(2002, data)
        (request_id, error_message) = __last_error()
        return (request_id, insert_message + error_message)
    else:
        return __pack_message(2002, data)
def delete(collection_name, spec, safe):
    """Get a **delete** message.
    """
    data = __ZERO
    data += bson._make_c_string(collection_name)
    data += __ZERO
    data += bson.BSON.from_dict(spec)
    if safe:
        (_, remove_message) = __pack_message(2006, data)
        (request_id, error_message) = __last_error()
        return (request_id, remove_message + error_message)
    else:
        return __pack_message(2006, data)
Exemple #11
0
def delete(collection_name, spec, safe):
    """Get a **delete** message.
    """
    data = __ZERO
    data += bson._make_c_string(collection_name)
    data += __ZERO
    data += bson.BSON.from_dict(spec)
    if safe:
        (_, remove_message) = __pack_message(2006, data)
        (request_id, error_message) = __last_error()
        return (request_id, remove_message + error_message)
    else:
        return __pack_message(2006, data)
Exemple #12
0
def insert(collection_name, docs, check_keys, safe):
    """Get an **insert** message.
    """
    data = __ZERO
    data += bson._make_c_string(collection_name)
    data += "".join([bson.BSON.from_dict(doc, check_keys)
                     for doc in docs])
    if safe:
        (_, insert_message) = __pack_message(2002, data)
        (request_id, error_message) = __last_error()
        return (request_id, insert_message + error_message)
    else:
        return __pack_message(2002, data)
def insert(collection_name, docs, check_keys, safe):
    """Get an **insert** message.
    """
    data = __ZERO
    data += bson._make_c_string(collection_name)
    bson_data = "".join([bson.BSON.from_dict(doc, check_keys)
                     for doc in docs])
    if not bson_data:
        raise InvalidOperation("cannot do an empty bulk insert")
    data += bson_data
    if safe:
        (_, insert_message) = __pack_message(2002, data)
        (request_id, error_message) = __last_error()
        return (request_id, insert_message + error_message)
    else:
        return __pack_message(2002, data)
Exemple #14
0
 def wait(self, collection=''):
     """Wait for events to be published on subscribed docs in collection.
     
     If no collection is given, the proxy will notify for all subscribed
     docs across collections.
     """
     data = "\x00\x00\x00\x00%s%s" % (
             _make_c_string(collection),
             self._pubsub_id, 
     )
     yield self._put_request(OP_WAIT, data)
     doclen = struct.unpack('<i', (yield bytes(4)))[0]
     rawdoc = yield bytes(doclen)
     objs = []
     while rawdoc:
         obj, rawdoc = _bson_to_dict(rawdoc)
         objs.append(obj)
     yield response(objs)
def update(collection_name, upsert, multi, spec, doc, safe):
    """Get an **update** message.
    """
    options = 0
    if upsert:
        options += 1
    if multi:
        options += 2

    data = __ZERO
    data += bson._make_c_string(collection_name)
    data += struct.pack("<i", options)
    data += bson.BSON.from_dict(spec)
    data += bson.BSON.from_dict(doc)
    if safe:
        (_, update_message) = __pack_message(2001, data)
        (request_id, error_message) = __last_error()
        return (request_id, update_message + error_message)
    else:
        return __pack_message(2001, data)
Exemple #16
0
def update(collection_name, upsert, multi, spec, doc, safe):
    """Get an **update** message.
    """
    options = 0
    if upsert:
        options += 1
    if multi:
        options += 2

    data = __ZERO
    data += bson._make_c_string(collection_name)
    data += struct.pack("<i", options)
    data += bson.BSON.from_dict(spec)
    data += bson.BSON.from_dict(doc)
    if safe:
        (_, update_message) = __pack_message(2001, data)
        (request_id, error_message) = __last_error()
        return (request_id, update_message + error_message)
    else:
        return __pack_message(2001, data)
Exemple #17
0
 def delete(col, spec):
     colname = _make_c_string(col)
     return "%s%s%s%s" % (_ZERO, colname, _ZERO, BSON.from_dict(spec))
Exemple #18
0
 def get_more(col, limit, id):
     data = _ZERO
     data += _make_c_string(col)
     data += struct.pack('<iq', limit, id)
     return data