def pack_session(item): """ Handle the safe serializion of Sessions objects (these contain hidden references to database objects (players, puppets) so they can't be safely serialized). Args: item (Session)): This item must have all properties of a session before entering this call. Returns: packed (tuple or None): A session-packed tuple on the form `(__packed_session__, sessid, conn_time)`. If this sessid does not match a session in the Session handler, None is returned. """ _init_globals() session = _SESSION_HANDLER.get(item.sessid) if session and session.conn_time == item.conn_time: # we require connection times to be identical for the Session # to be accepted as actually being a session (sessids gets # reused all the time). return item.conn_time and item.sessid and ('__packed_session__', _GA(item, "sessid"), _GA(item, "conn_time")) return None
def unpack_session(item): """ Check and convert internal representations back to Sessions. Args: item (packed_session): The fact that item is a packed session should be checked before this call. Returns: unpacked (any): Either the original input or converts the internal store back to a Session. If Session no longer exists, None will be returned. """ _init_globals() session = _SESSION_HANDLER.get(item[1]) if session and session.conn_time == item[2]: # we require connection times to be identical for the Session # to be accepted as the same as the one stored (sessids gets # reused all the time). return session return None