def test_multiple_wraps(self): prox1 = tpool.Proxy(uuid) prox2 = tpool.Proxy(uuid) x1 = prox1.uuid4() x2 = prox1.uuid4() del x2 x3 = prox2.uuid4()
def main(): import optparse parser = optparse.OptionParser( usage="usage: %prog [options]", description="Simple saranwrap.Server wrapper") parser.add_option('-c', '--child', default=False, action='store_true', help='Wrap an object serialized via setattr.') parser.add_option('-m', '--module', type='string', dest='module', default=None, help='a module to load and export.') parser.add_option('-l', '--logfile', type='string', dest='logfile', default=None, help='file to log to.') options, args = parser.parse_args() global _g_logfile if options.logfile: _g_logfile = open(options.logfile, 'a') from eventlib import tpool if options.module: export = api.named(options.module) server = Server(tpool.Proxy(sys.stdin), tpool.Proxy(sys.stdout), export) elif options.child: server = Server(tpool.Proxy(sys.stdin), tpool.Proxy(sys.stdout), {}) # *HACK: some modules may emit on stderr, which breaks everything. class NullSTDOut(object): def noop(*args): pass write = noop read = noop flush = noop sys.stderr = NullSTDOut() sys.stdout = NullSTDOut() # Loop until EOF server.loop() if _g_logfile: _g_logfile.close()
def test_raising_exceptions(self): prox = tpool.Proxy(uuid) def nofunc(): prox.never_name_a_function_like_this() self.assertRaises(AttributeError, nofunc)
def test_wrap_eq(self): prox = tpool.Proxy(uuid) id1 = prox.uuid4() id2 = prox.UUID(str(id1)) self.assertEqual(id1, id2) id3 = prox.uuid4() self.assertTrue(id1 != id3)
def test_wrap_dict(self): my_object = {'a': 1} prox = tpool.Proxy(my_object) self.assertEqual('a', list(prox.keys())[0]) self.assertEqual(1, prox['a']) self.assertEqual(str(my_object), str(prox)) self.assertEqual(repr(my_object), repr(prox)) self.assertEqual(repr(my_object), repr(prox))
def test_contention(self): from greentest import tpool_test prox = tpool.Proxy(tpool_test) pool = coros.CoroutinePool(max_size=4) waiters = [] waiters.append(pool.execute(lambda: self.assertEqual(prox.one, 1))) waiters.append(pool.execute(lambda: self.assertEqual(prox.two, 2))) waiters.append(pool.execute(lambda: self.assertEqual(prox.three, 3))) for waiter in waiters: waiter.wait()
def test_wrap_uniterable(self): # here we're treating the exception as just a normal class prox = tpool.Proxy(FloatingPointError()) def index(): prox[0] def key(): prox['a'] self.assertRaises(IndexError, index) self.assertRaises(TypeError, key)
def connect(self, db_module, connect_timeout, *args, **kw): timeout = api.exc_after(connect_timeout, ConnectTimeout()) try: from eventlib import tpool try: # *FIX: this is a huge hack that will probably only work for MySQLdb autowrap = (db_module.cursors.DictCursor, ) except: autowrap = () conn = tpool.execute(db_module.connect, *args, **kw) return tpool.Proxy(conn, autowrap=autowrap) finally: timeout.cancel()
def sender_loop(pfx): n = 0 obj = tpool.Proxy(yadda()) while n < 10: if not (n % 5): stdout.write('.') stdout.flush() api.sleep(0) now = time.time() prnt("%s: send (%s,%s)" % (pfx, now, n)) rv = obj.foo(now, n=n) prnt("%s: recv %s" % (pfx, rv)) assert (n == rv) api.sleep(0) n += 1
def test_wrap_string(self): my_object = "whatever" prox = tpool.Proxy(my_object) self.assertEqual(str(my_object), str(prox)) self.assertEqual(len(my_object), len(prox)) self.assertEqual(my_object.join(['a', 'b']), prox.join(['a', 'b']))
def test_wrap_tuple(self): my_tuple = (1, 2) prox = tpool.Proxy(my_tuple) self.assertEqual(prox[0], 1) self.assertEqual(prox[1], 2) self.assertEqual(len(my_tuple), 2)
def test_variable_and_keyword_arguments_with_function_calls(self): import optparse parser = tpool.Proxy(optparse.OptionParser()) z = parser.add_option('-n', action='store', type='string', dest='n') opts, args = parser.parse_args(["-nfoo"]) self.assertEqual(opts.n, 'foo')
def test_wrap_setitem(self): prox = tpool.Proxy([0, 1, 2]) prox[1] = 2 self.assertEqual(prox[1], 2)
def test_wrap_getitem(self): prox = tpool.Proxy([0, 1, 2]) self.assertEqual(prox[0], 0)
def test_wrap_nonzero(self): prox = tpool.Proxy(uuid) id1 = prox.uuid4() self.assertTrue(bool(id1)) prox2 = tpool.Proxy([1, 2, 3]) self.assertTrue(bool(prox2))
def test_wrap_module_class(self): prox = tpool.Proxy(uuid) self.assertEqual(tpool.Proxy, type(prox)) id = prox.uuid4() self.assertEqual(id.get_version(), uuid.uuid4().get_version()) self.assertTrue(repr(prox.uuid4))