예제 #1
0
 def __repr__(self):
     extra = "".join([", %s=%r" % (k, v)
                      for k, v in iteritems(self.__kwargs)])
     if self.database is None:
         return "DBRef(%r, %r%s)" % (self.collection, self.id, extra)
     return "DBRef(%r, %r, %r%s)" % (self.collection, self.id,
                                     self.database, extra)
예제 #2
0
def _encode_mapping(name, value, check_keys, opts):
    """Encode a mapping type."""
    data = b"".join([
        _element_to_bson(key, val, check_keys, opts)
        for key, val in iteritems(value)
    ])
    return b"\x03" + name + _PACK_INT(len(data) + 5) + data + b"\x00"
예제 #3
0
 def __repr__(self):
     extra = "".join(
         [", %s=%r" % (k, v) for k, v in iteritems(self.__kwargs)])
     if self.database is None:
         return "DBRef(%r, %r%s)" % (self.collection, self.id, extra)
     return "DBRef(%r, %r, %r%s)" % (self.collection, self.id,
                                     self.database, extra)
예제 #4
0
 def transform_value(value):
     if isinstance(value, list):
         return [transform_value(v) for v in value]
     elif isinstance(value, collections.Mapping):
         return dict([(k, transform_value(v))
                      for k, v in iteritems(value)])
     else:
         return value
예제 #5
0
 def transform_value(value):
     if isinstance(value, list):
         return [transform_value(v) for v in value]
     elif isinstance(value, collections.Mapping):
         return dict([
             (k, transform_value(v))
             for k, v in iteritems(value)])
     else:
         return value
예제 #6
0
def _json_convert(obj):
    """Recursive helper method that converts BSON types so they can be
    converted into json.
    """
    if hasattr(obj, 'iteritems') or hasattr(obj, 'items'):  # PY3 support
        return SON(((k, _json_convert(v)) for k, v in iteritems(obj)))
    elif hasattr(obj, '__iter__') and not isinstance(obj, (text_type, bytes)):
        return list((_json_convert(v) for v in obj))
    try:
        return default(obj)
    except TypeError:
        return obj
예제 #7
0
def _json_convert(obj):
    """Recursive helper method that converts BSON types so they can be
    converted into json.
    """
    if hasattr(obj, 'iteritems') or hasattr(obj, 'items'):  # PY3 support
        return SON(((k, _json_convert(v)) for k, v in iteritems(obj)))
    elif hasattr(obj, '__iter__') and not isinstance(obj, (text_type, bytes)):
        return list((_json_convert(v) for v in obj))
    try:
        return default(obj)
    except TypeError:
        return obj
예제 #8
0
def _dict_to_bson(doc, check_keys, opts, top_level=True):
    """Encode a document to BSON."""
    try:
        elements = []
        if top_level and "_id" in doc:
            elements.append(_name_value_to_bson(b"_id\x00", doc["_id"], check_keys, opts))
        for (key, value) in iteritems(doc):
            if not top_level or key != "_id":
                elements.append(_element_to_bson(key, value, check_keys, opts))
    except AttributeError:
        raise TypeError("encoder expected a mapping type but got: %r" % (doc,))

    encoded = b"".join(elements)
    return _PACK_INT(len(encoded) + 5) + encoded + b"\x00"
예제 #9
0
def _encode_dbref(name, value, check_keys, opts):
    """Encode bson.dbref.DBRef."""
    buf = bytearray(b"\x03" + name + b"\x00\x00\x00\x00")
    begin = len(buf) - 4

    buf += _name_value_to_bson(b"$ref\x00", value.collection, check_keys, opts)
    buf += _name_value_to_bson(b"$id\x00", value.id, check_keys, opts)
    if value.database is not None:
        buf += _name_value_to_bson(b"$db\x00", value.database, check_keys, opts)
    for key, val in iteritems(value._DBRef__kwargs):
        buf += _element_to_bson(key, val, check_keys, opts)

    buf += b"\x00"
    buf[begin : begin + 4] = _PACK_INT(len(buf) - begin)
    return bytes(buf)
예제 #10
0
def _dict_to_bson(doc, check_keys, opts, top_level=True):
    """Encode a document to BSON."""
    try:
        elements = []
        if top_level and "_id" in doc:
            elements.append(
                _name_value_to_bson(b"_id\x00", doc["_id"], check_keys, opts))
        for (key, value) in iteritems(doc):
            if not top_level or key != "_id":
                elements.append(_element_to_bson(key, value, check_keys, opts))
    except AttributeError:
        raise TypeError("encoder expected a mapping type but got: %r" %
                        (doc, ))

    encoded = b"".join(elements)
    return _PACK_INT(len(encoded) + 5) + encoded + b"\x00"
예제 #11
0
def _encode_dbref(name, value, check_keys, opts):
    """Encode bson.dbref.DBRef."""
    buf = bytearray(b"\x03" + name + b"\x00\x00\x00\x00")
    begin = len(buf) - 4

    buf += _name_value_to_bson(b"$ref\x00", value.collection, check_keys, opts)
    buf += _name_value_to_bson(b"$id\x00", value.id, check_keys, opts)
    if value.database is not None:
        buf += _name_value_to_bson(b"$db\x00", value.database, check_keys,
                                   opts)
    for key, val in iteritems(value._DBRef__kwargs):
        buf += _element_to_bson(key, val, check_keys, opts)

    buf += b"\x00"
    buf[begin:begin + 4] = _PACK_INT(len(buf) - begin)
    return bytes(buf)
예제 #12
0
 def items(self):
     """Lazily decode and iterate elements in this document."""
     return iteritems(self.__inflated)
예제 #13
0
def _encode_mapping(name, value, check_keys, opts):
    """Encode a mapping type."""
    data = b"".join([_element_to_bson(key, val, check_keys, opts) for key, val in iteritems(value)])
    return b"\x03" + name + _PACK_INT(len(data) + 5) + data + b"\x00"