polymer/Polymer.py
def r_q_send(self, msg_dict):
        """Send message dicts through r_q, and throw explicit errors for 
        pickle problems"""

        # Check whether msg_dict can be pickled...
        no_pickle_keys = self.invalid_dict_pickle_keys(msg_dict)

        if no_pickle_keys == []:
            self.r_q.put(msg_dict)

        else:
            ## Explicit pickle error handling
            hash_func = md5()
            hash_func.update(str(msg_dict))
            dict_hash = str(hash_func.hexdigest())[-7:]  # Last 7 digits of hash
            linesep = os.linesep
            sys.stderr.write(
                "{0} {1}r_q_send({2}) Can't pickle this dict:{3} '''{7}{4}   {5}{7}{6}''' {7}".format(
                    datetime.now(),
                    Style.BRIGHT,
                    dict_hash,
                    Style.RESET_ALL,
                    Fore.MAGENTA,
                    msg_dict,
                    Style.RESET_ALL,
                    linesep,
                )
            )

            ## Verbose list of the offending key(s) / object attrs
            ## Send all output to stderr...
            err_frag1 = (
                Style.BRIGHT
                + "    r_q_send({0}) Offending dict keys:".format(dict_hash)
                + Style.RESET_ALL
            )
            err_frag2 = Fore.YELLOW + " {0}".format(no_pickle_keys) + Style.RESET_ALL
            err_frag3 = "{0}".format(linesep)
            sys.stderr.write(err_frag1 + err_frag2 + err_frag3)
            for key in sorted(no_pickle_keys):
                sys.stderr.write(
                    "      msg_dict['{0}']: {1}'{2}'{3}{4}".format(
                        key,
                        Fore.MAGENTA,
                        repr(msg_dict.get(key)),
                        Style.RESET_ALL,
                        linesep,
                    )
                )
                if isinstance(msg_dict.get(key), object):
                    thisobj = msg_dict.get(key)
                    no_pickle_attrs = self.invalid_obj_pickle_attrs(thisobj)
                    err_frag1 = (
                        Style.BRIGHT
                        + "      r_q_send({0}) Offending attrs:".format(dict_hash)
                        + Style.RESET_ALL
                    )
                    err_frag2 = (
                        Fore.YELLOW + " {0}".format(no_pickle_attrs) + Style.RESET_ALL
                    )
                    err_frag3 = "{0}".format(linesep)
                    sys.stderr.write(err_frag1 + err_frag2 + err_frag3)
                    for attr in no_pickle_attrs:
                        sys.stderr.write(
                            "        msg_dict['{0}'].{1}: {2}'{3}'{4}{5}".format(
                                key,
                                attr,
                                Fore.RED,
                                repr(getattr(thisobj, attr)),
                                Style.RESET_ALL,
                                linesep,
                            )
                        )

            sys.stderr.write(
                "    {0}r_q_send({1}) keys (no problems):{2}{3}".format(
                    Style.BRIGHT, dict_hash, Style.RESET_ALL, linesep
                )
            )
            for key in sorted(set(msg_dict.keys()).difference(no_pickle_keys)):
                sys.stderr.write(
                    "      msg_dict['{0}']: {1}{2}{3}{4}".format(
                        key,
                        Fore.GREEN,
                        repr(msg_dict.get(key)),
                        Style.RESET_ALL,
                        linesep,
                    )
                )
def r_q_send(self, msg_dict):
        # Check whether msg_dict can be pickled...
        no_pickle_keys = self.invalid_dict_pickle_keys(msg_dict)

        if no_pickle_keys == []:
            self.r_q.put(msg_dict)

        else:
            ## Explicit pickle error handling
            hash_func = md5()
            hash_func.update(str(msg_dict))
            dict_hash = str(hash_func.hexdigest())[-7:]  # Last 7 digits of hash
            linesep = os.linesep
            sys.stderr.write(
                "{0} {1}r_q_send({2}) Can't pickle this dict:{3} '''{7}{4}   {5}{7}{6}''' {7}".format(
                    datetime.now(),
                    Style.BRIGHT,
                    dict_hash,
                    Style.RESET_ALL,
                    Fore.MAGENTA,
                    msg_dict,
                    Style.RESET_ALL,
                    linesep,
                )
            )

            ## Verbose list of the offending key(s) / object attrs
            ## Send all output to stderr...
            err_frag1 = (
                Style.BRIGHT
                + "    r_q_send({0}) Offending dict keys:".format(dict_hash)
                + Style.RESET_ALL
            )
            err_frag2 = Fore.YELLOW + " {0}".format(no_pickle_keys) + Style.RESET_ALL
            err_frag3 = "{0}".format(linesep)
            sys.stderr.write(err_frag1 + err_frag2 + err_frag3)
            for key in sorted(no_pickle_keys):
                sys.stderr.write(
                    "      msg_dict['{0}']: {1}'{2}'{3}{4}".format(
                        key,
                        Fore.MAGENTA,
                        repr(msg_dict.get(key)),
                        Style.RESET_ALL,
                        linesep,
                    )
                )
                if isinstance(msg_dict.get(key), object):
                    thisobj = msg_dict.get(key)
                    no_pickle_attrs = self.invalid_obj_pickle_attrs(thisobj)
                    err_frag1 = (
                        Style.BRIGHT
                        + "      r_q_send({0}) Offending attrs:".format(dict_hash)
                        + Style.RESET_ALL
                    )
                    err_frag2 = (
                        Fore.YELLOW + " {0}".format(no_pickle_attrs) + Style.RESET_ALL
                    )
                    err_frag3 = "{0}".format(linesep)
                    sys.stderr.write(err_frag1 + err_frag2 + err_frag3)
                    for attr in no_pickle_attrs:
                        sys.stderr.write(
                            "        msg_dict['{0}'].{1}: {2}'{3}'{4}{5}".format(
                                key,
                                attr,
                                Fore.RED,
                                repr(getattr(thisobj, attr)),
                                Style.RESET_ALL,
                                linesep,
                            )
                        )

            sys.stderr.write(
                "    {0}r_q_send({1}) keys (no problems):{2}{3}".format(
                    Style.BRIGHT, dict_hash, Style.RESET_ALL, linesep
                )
            )
            for key in sorted(set(msg_dict.keys()).difference(no_pickle_keys)):
                sys.stderr.write(
                    "      msg_dict['{0}']: {1}{2}{3}{4}".format(
                        key,
                        Fore.GREEN,
                        repr(msg_dict.get(key)),
                        Style.RESET_ALL,
                        linesep,
                    )
                )
def r_q_send ( self , msg_dict ) : # Check whether msg_dict can be pickled... no_pickle_keys = self . invalid_dict_pickle_keys ( msg_dict ) if no_pickle_keys == [ ] : self . r_q . put ( msg_dict ) else : ## Explicit pickle error handling hash_func = md5 ( ) hash_func . update ( str ( msg_dict ) ) dict_hash = str ( hash_func . hexdigest ( ) ) [ - 7 : ] # Last 7 digits of hash linesep = os . linesep sys . stderr . write ( "{0} {1}r_q_send({2}) Can't pickle this dict:{3} '''{7}{4}   {5}{7}{6}''' {7}" . format ( datetime . now ( ) , Style . BRIGHT , dict_hash , Style . RESET_ALL , Fore . MAGENTA , msg_dict , Style . RESET_ALL , linesep , ) ) ## Verbose list of the offending key(s) / object attrs ## Send all output to stderr... err_frag1 = ( Style . BRIGHT + "    r_q_send({0}) Offending dict keys:" . format ( dict_hash ) + Style . RESET_ALL ) err_frag2 = Fore . YELLOW + " {0}" . format ( no_pickle_keys ) + Style . RESET_ALL err_frag3 = "{0}" . format ( linesep ) sys . stderr . write ( err_frag1 + err_frag2 + err_frag3 ) for key in sorted ( no_pickle_keys ) : sys . stderr . write ( "      msg_dict['{0}']: {1}'{2}'{3}{4}" . format ( key , Fore . MAGENTA , repr ( msg_dict . get ( key ) ) , Style . RESET_ALL , linesep , ) ) if isinstance ( msg_dict . get ( key ) , object ) : thisobj = msg_dict . get ( key ) no_pickle_attrs = self . invalid_obj_pickle_attrs ( thisobj ) err_frag1 = ( Style . BRIGHT + "      r_q_send({0}) Offending attrs:" . format ( dict_hash ) + Style . RESET_ALL ) err_frag2 = ( Fore . YELLOW + " {0}" . format ( no_pickle_attrs ) + Style . RESET_ALL ) err_frag3 = "{0}" . format ( linesep ) sys . stderr . write ( err_frag1 + err_frag2 + err_frag3 ) for attr in no_pickle_attrs : sys . stderr . write ( "        msg_dict['{0}'].{1}: {2}'{3}'{4}{5}" . format ( key , attr , Fore . RED , repr ( getattr ( thisobj , attr ) ) , Style . RESET_ALL , linesep , ) ) sys . stderr . write ( "    {0}r_q_send({1}) keys (no problems):{2}{3}" . format ( Style . BRIGHT , dict_hash , Style . RESET_ALL , linesep ) ) for key in sorted ( set ( msg_dict . keys ( ) ) . difference ( no_pickle_keys ) ) : sys . stderr . write ( "      msg_dict['{0}']: {1}{2}{3}{4}" . format ( key , Fore . GREEN , repr ( msg_dict . get ( key ) ) , Style . RESET_ALL , linesep , ) )
Send message dicts through r_q, and throw explicit errors for 
        pickle problems
Send message dicts through r_q and throw explicit errors for pickle problems