def _safe_copy(dat):
    ''' mongodb doesn't allow '.' in keys, but does allow unicode equivs.
        Apparently the docs suggest using escaped unicode full-width
        encodings.  *sigh*

            \\  -->  \\\\
            $  -->  \\\\u0024
            .  -->  \\\\u002e

        Personally, I prefer URL encodings,

        \\  -->  %5c
        $  -->  %24
        .  -->  %2e


        Which means also escaping '%':

        % -> %25
    '''

    if isinstance(dat, dict):
        ret = {}
        for k in dat:
            r = k.replace('%', '%25').replace('\\', '%5c').replace('$', '%24').replace('.', '%2e')
            if r != k:
                log.debug('converting dict key from %s to %s for mongodb', k, r)
            ret[r] = _safe_copy(dat[k])
        return ret

    if isinstance(dat, (list, tuple)):
        return [_safe_copy(i) for i in dat]

    return dat
def _safe_copy ( dat ) : if isinstance ( dat , dict ) : ret = { } for k in dat : r = k . replace ( '%' , '%25' ) . replace ( '\\' , '%5c' ) . replace ( '$' , '%24' ) . replace ( '.' , '%2e' ) if r != k : log . debug ( 'converting dict key from %s to %s for mongodb' , k , r ) ret [ r ] = _safe_copy ( dat [ k ] ) return ret if isinstance ( dat , ( list , tuple ) ) : return [ _safe_copy ( i ) for i in dat ] return dat
mongodb doesn't allow '.' in keys, but does allow unicode equivs.
        Apparently the docs suggest using escaped unicode full-width
        encodings.  *sigh*

            \\  -->  \\\\
            $  -->  \\\\u0024
            .  -->  \\\\u002e

        Personally, I prefer URL encodings,

        \\  -->  %5c
        $  -->  %24
        .  -->  %2e


        Which means also escaping '%':

        % -> %25