def Run(self): """ The program body for the thread. This is not called directly, but is launched indirectly using the C{Start} member. """ while True: # Wait at most self.qtimeout seconds for a new message to send # before sending a ping to let the other end know we're still # connected. try: # Queue.get([block[, timeout]]) data = self.msgQueue.get(True, self.qtimeout) if data == None: print "SenderThread: Stop() called, terminating" break except Queue.Empty: data = cerealizer.dumps({'type': 'ping'}) try: sendmessage(self.sock, data) except: print "SenderThread: caught exception, terminating: " traceback.print_exc(file=sys.stdout) break
def test_setstate_hacked(self): class Sec4: pass cerealizer.register(Sec4) o = Sec4() Sec4.__setstate__ = lambda obj, state: self.fail() cerealizer.loads(cerealizer.dumps(o))
def test_getstate_hacked(self): class Sec5: pass cerealizer.register(Sec5) o = Sec5() Sec5.__getstate__ = lambda obj: self.fail() cerealizer.loads(cerealizer.dumps(o))
def test_new_hacked(self): class Sec6: pass cerealizer.register(Sec6) o = Sec6() Sec6.__new__ = lambda Class: self.fail() cerealizer.loads(cerealizer.dumps(o))
def test_cycle2(self): class Obj11(object): pass cerealizer.register(Obj11) o = Obj11() o.o = o o2 = cerealizer.loads(cerealizer.dumps(o)) assert o2.o is o2
def dumps(self): """Unique.dumps() -> string Saves the Unique object to a string. The default implementation uses Cerealizer.""" soya._SAVING = self s = cerealizer.dumps(self, 1) soya._SAVING = None return s
def test_cycle2(self): class ObjEmpty(object): pass cerealizer.register(ObjEmpty) o = ObjEmpty() o.o = o o2 = cerealizer.loads(cerealizer.dumps(o)) assert o2.o is o2
def test_cycle3(self): class Parent: pass class Child: def __init__(self, parent): self.parent = parent def __getstate__(self): return (self.parent,) def __setstate__(self, state): self.parent = state[0] cerealizer.register(Parent) cerealizer.register(Child) p = Parent() p.c = Child(p) p2 = cerealizer.loads(cerealizer.dumps(p)) assert not p2.c.parent is None
def test_cycle3(self): class Parent: pass class Child: def __init__(self, parent): self.parent = parent def __getstate__(self): return (self.parent,) def __setstate__(self, state): self.parent = state[0] cerealizer.register(Parent) cerealizer.register(Child) p = Parent() p.c = Child(p) p2 = cerealizer.loads(cerealizer.dumps(p)) assert p2.c.parent is not None
def test_upload(self): score = {2: [(95908, 5, 'ball', 'ae023fbc6bf4a764fdba0423ea7bb801d80bde51')]} score_str = binascii.hexlify(cerealizer.dumps(score)) # score_str = "63657265616c310a330a646963740a6c6973740a7475706c650a340a6939353930380a69350a75340a62616c6c7534300a61653032336662633662663461373634666462613034323365613762623830316438306264653531310a72310a69320a310a72320a72300a" attrs = { "songName": "Song title", "songHash": "dadacafe", "version": "4.0", "scores": score_str, } response = self.client.get('/upload', attrs) # check the response self.assertEqual(response.status_code, 200) self.assertEqual(response.content, b"True") # check objects self.assertEqual(Score.objects.count(), 1) self.assertEqual(Song.objects.count(), 1) self.assertEqual(Player.objects.count(), 1)
def test_alias1(self): class OldObj(object): def __init__(self): self.x = 1 self.name = "jiba" cerealizer.register(OldObj) o = OldObj() s = cerealizer.dumps(o) reload(cerealizer) class NewObj(object): def __init__(self): self.x = 2 self.name = "jiba2" cerealizer.register(NewObj) cerealizer.register_alias(NewObj, "__main__.OldObj") o = cerealizer.loads(s) assert o.__class__ is NewObj assert o.x == 1 assert o.name == "jiba"
def test_alias(self): class OldObj(object): def __init__(self): self.x = 1 self.name = "jiba" cerealizer.register(OldObj) o = OldObj() s = cerealizer.dumps(o) imp.reload(cerealizer) class NewObj(object): def __init__(self): self.x = 2 self.name = "jiba2" cerealizer.register(NewObj) cerealizer.register_alias(NewObj, "__main__.OldObj") o = cerealizer.loads(s) assert o.__class__ is NewObj assert o.x == 1 assert o.name == "jiba"
def Run(self): """ The program body for the thread. This is not called directly, but is launched indirectly using the C{Start} member. """ while self.keepSending: # Wait at most self.qtimeout seconds for a new message to send # before sending a ping to let the other end know we're still # connected. try: # Queue.get([block[, timeout]]) data = self.msgQueue.get(True, self.qtimeout) except Queue.Empty: data = cerealizer.dumps({'type': 'ping'}) try: sendmessage(self.sock, data) except: print "SenderThread: caught exception, terminating: " print " ", sys.exc_info() self.keepSending = False break
def save(self, filename): #write savegame data f = open(filename, "wb") #open file to write out data data = cerealizer.dumps([self.obj_props, self.game_props]) #cerealize object data data = zlib.compress(data, 9) #compress pickled data f.write(data) #write out data f.close() #and close written file
def testIntegrity(self): expected = self.scores scoresSerial = binascii.hexlify(cerealizer.dumps(self.scores)) result = cerealizer.loads(binascii.unhexlify(scoresSerial)) self.assertEqual(result, expected)
def loads_dumps_and_compare(self, obj1): obj2 = cerealizer.loads(cerealizer.dumps(obj1)) assert obj1 == obj2
def dumps(self): soya._SAVING = self s = cerealizer.dumps(self, 1) soya._SAVING = None return s
def send(self, message): # Putting messages on the queue, then having the SenderThread take them # off as available and send them, ensures that they get sent in order. self.msgQueue.put(cerealizer.dumps(message))
self.o = None self.l = [1, 2, 3, 4] cerealizer.register(O) cerealizer.freeze_configuration() l = [] for i in range(20000): o = O() if l: o.o = l[-1] l.append(o) print("cerealizer") t = time.time() s = cerealizer.dumps(l) print("dumps in", time.time() - t, "s,", len(s), "bytes length") t = time.time() l2 = cerealizer.loads(s) print("loads in", time.time() - t, "s") import pickle print() print("pickle") t = time.time() s = pickle.dumps(l) print("dumps in", time.time() - t, "s,", len(s), "bytes length")
def test_register1(self): class Sec1: pass self.assertRaises(cerealizer.NonCerealizableObjectError, lambda : cerealizer.dumps(Sec1()))
def getObfuscatedScores(self): s = {} for difficulty in self.highScores.keys(): s[difficulty.id] = [(score, stars, name, self.getScoreHash(difficulty, score, stars, name)) for score, stars, name in self.highScores[difficulty]] return binascii.hexlify(cerealizer.dumps(s))
def dumps(obj): """ Serialize the given object and return it's string form. """ objstr = cerealizer.dumps(obj) return objstr
def create_query_string(kwargs): return 'function_args=' + PMS.String.Quote( PMS.String.Encode(cerealizer.dumps(kwargs)))
def dumps(self): return cerealizer.dumps(self)
def test_register1(self): class Sec1: pass self.assertRaises(cerealizer.NonCerealizableObjectError, lambda: cerealizer.dumps(Sec1()))
def test_identity(self): o = {} l1 = [o, o] l2 = cerealizer.loads(cerealizer.dumps(l1)) assert l2[0] is l2[1]
def serialize(self): #it would be great if this was encrypted #would could also fix this with using a public-key algorithim for p2p communication temp = pickle.dumps(self) return temp
def dumps(self): return base64.encodestring(cerealizer.dumps(self))
def test_cycle1(self): obj1 = [1, [2.2, "jiba"]] obj1[1].append(obj1) obj2 = cerealizer.loads(cerealizer.dumps(obj1)) assert repr(obj1) == repr(obj2) # Cannot use == on cyclic list!
def pack(obj): serialized_obj = cerealizer.dumps(obj) encoded_string = safe_encode(serialized_obj) return urllib.quote(encoded_string)
def save(self, filename): #write savegame data f = open(filename, "wb") #open file to write out data data = cerealizer.dumps([self.obj_props, self.game_props]) #cerealize object data data = zlib.compress(data, 9) #compress pickled data f.write(data) #write data f.close() #and close written file
def create_query_string(kwargs): return 'function_args='+PMS.String.Quote(PMS.String.Encode(cerealizer.dumps(kwargs)))