Exemple #1
0
    def setUserSessionAndCookies(self,
                                 request,
                                 user_id,
                                 user,
                                 cookies=http.cookies.SimpleCookie(),
                                 expiration=12 * 30 * 24 * 60 * 60,
                                 json=False):
        if self.session_backend_type == 1 and self._mc == None:
            raise ValueError(
                "setUserSession called without memcached being setup")
        if self.session_backend_type == 2 and self._mrq == None:
            raise ValueError(
                "setUserSession called without mrworkserver being setup")
        if self.session_backend_type == 3 and self._mrc == None:
            raise ValueError(
                "setUserSession called without mrcache being setup")

        a = random.getrandbits(64)
        b = random.getrandbits(64)
        c = random.getrandbits(64)
        k = mrhttp.to64(a) + mrhttp.to64(b) + mrhttp.to64(c)
        k = k[:32]
        while len(k) < 32:
            k += mrhttp.to64(random.getrandbits(6))

        userk = ""
        numbits = user_id.bit_length()
        if numbits == 0:
            numbits += 1
        while numbits > 0:
            userk = mrhttp.to64(user_id & 0x1F) + userk
            user_id >>= 5
            numbits -= 5
        userk = userk + mrhttp.to64(0x20 | random.getrandbits(5))

        skey = userk + k[len(userk):]

        # TODO We could have user id be optional and do this if not given
        #skey = uuid.uuid4().hex

        # Send the session cookie back to the user
        c = cookies
        c['mrsession'] = skey
        c['mrsession']['path'] = '/'
        c['mrsession']['expires'] = expiration

        request.response.cookies = c

        if self.session_backend_type == 1:  # Memcached
            if json:
                self._mc.set(skey, json.dumpb(user))
            else:
                self._mc.set(skey, mrpacker.pack(user))
        elif self.session_backend_type == 2:  # MrWorkServer
            self._mrq.set(user_id, mrpacker.pack([skey, user]))
        elif self.session_backend_type == 3:  # MrCache
            self._mrc.set(skey, mrpacker.pack(user))

        return skey
Exemple #2
0
async def run(loop):
  c = asyncmrws.Client()
  #await c.connect(io_loop=loop,servers=[("127.0.0.1",7100), ("127.0.0.1",7002)])
  await c.connect(io_loop=loop,servers=[("127.0.0.1",7100)])

  bstr = mrpacker.pack([1,2,3,4,5,6,7,8,9,10])
  l = len(bstr)

  #await c.bench()

  start = time.time()
  for x in range(1000000):
    #if x % 100000 == 0: print (x)
    #await c.push( 0, 0, bstr, l )
    await c.push_noflush( x, bstr, l )
      #print("push failed")
      #break

  await c.flush()
  end = time.time()
  print(end - start)
  #await c.bench()

  await asyncio.sleep(0.5, loop=loop)
  await c.close()
Exemple #3
0
async def run(loop):
    c = asyncmrws.Client()
    await c.connect(io_loop=loop, servers=[("127.0.0.1", 7100)])

    # Test fetch
    if 0:
        print(mrpacker.unpack(await c.get(0, mrpacker.pack([1, 2, 3]))))

    # Push some work
    if 1:
        msg = mrpacker.pack([22] * 100)
        while 1:
            await c.push(0, msg, len(msg))
            await asyncio.sleep(1)

    await c.close()
Exemple #4
0
async def run(loop):

    rc = await asyncmrcache.create_client([("localhost", 7000)],
                                          loop,
                                          lost_cb=lcb)

    await rc.set(b"mrsession43709dd361cc443e976b05714581a7fb",
                 mrpacker.pack({"user": "******"}))
    print(await rc.get(b"mrsession43709dd361cc443e976b05714581a7fb"))
    exit()
Exemple #5
0
async def run(loop):
    c = asyncmrws.Client()
    await c.connect(io_loop=loop, servers=[("127.0.0.1", 7100)])

    #sc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
    #sc.load_verify_locations('cert/server.crt')
    #await c.connect(io_loop=loop,servers=[("127.0.0.1",7100)],ssl=sc)

    m = mrpacker.pack([1, 2, 3, "test"])
    l = len(m)
    await c.push(0, m, l)
    await c.close()
Exemple #6
0
async def run(loop):
    c = asyncmrq.Client()
    #await c.connect(io_loop=loop,servers=[("127.0.0.1",7100),("127.0.0.1",7002)])
    await c.connect(io_loop=loop, servers=[("127.0.0.1", 7100)])

    #sc = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
    #sc.load_verify_locations('cert/server.crt')
    #await c.connect(io_loop=loop,servers=[("127.0.0.1",7100)],ssl=sc)

    #await c.push( 0, 0, m, l )
    #await asyncio.sleep(0.5, loop=loop)
    #await c.close()
    #return
    if 0:
        print(mrpacker.unpack(await c.get(0, mrpacker.pack([1, 2, 3]))))

    if 0:
        l = []
        l.append(c.get(0, mrpacker.pack([1, 2, 3])))
        l.append(c.get(0, mrpacker.pack([1, 2, 3, 4])))
        l.append(c.get(0, mrpacker.pack([5])))
        print(await asyncio.gather(*l))

    for x in range(100):
        m = mrpacker.pack(x)
        l = len(m)
        if await c.push(x, 0, m, l):
            print(x, "droppped")
        else:
            print(x)
        await asyncio.sleep(0.5, loop=loop)

    await asyncio.sleep(0.5, loop=loop)

    #msgs = await c.pull( 0, 0 )
    #print(msgs)

    await c.close()
Exemple #7
0
async def run(loop):
    c = asyncmrws.Client()
    await c.connect(io_loop=loop,
                    servers=[("127.0.0.1", 7100), ("127.0.0.1", 7001)])

    num = 10000
    #m = mrpacker.pack( [1, "foo", {"yay":1}] )
    m = mrpacker.pack("AeeGEVMfFEANKzNPhbNkhMbORHAqn-rR")
    s = time.time()
    for x in range(1000):
        l = []
        for y in range(10):
            l.append(c.get(x, m))
            #l.append( c.set( x, m ) )
        await asyncio.gather(*l)

    e = time.time()
    print(num / (e - s), " Requests/second")

    await asyncio.sleep(0.5, loop=loop)
    await c.close()
Exemple #8
0
 async def get(self, slot, o):
   b = mrpacker.pack(o)
   srv = self._get(slot, b)
   return await self.servers[srv].q.get()
Exemple #9
0
def mrp(r):
    return mrpacker.pack([1, 2, 3])
Exemple #10
0
#print(o)

#o = [True]*5000
o = {
    "name": "MalthusianProphet",
    "tl": 2004,
    "dankmemes": True,
    "list": [1, 2, 3, 4, 5, 6]
}
#o = {"name":55,"tl":2004,"dankmemes":True,"list":[1,2,3,4,5,6]}
#o = [ "fadsfds", 213 , 123, 1, 2, 3, "lists are cool", [1,2,3,] ]

for x in range(1):
    if 1:
        #st = time.time()
        b = mrp.pack(o)
        #print( "took ", time.time()-st)
        #st = time.time()
        #o = mrp.unpack( b )
        #print( "took ", time.time()-st)
        #exit(1)

    if 0:
        #st = time.time()
        b = mrjson.dumps(o)
        #print( "took ", time.time()-st)
        #st = time.time()
        #o = mrjson.loads( b )
        #print( "took ", time.time()-st)

    if 0:
Exemple #11
0
def fetchcb(ws, o):
  return mrpacker.pack( {"name":"mark"} )
Exemple #12
0
def setcb(ws, k, v):
  users[k] = mrpacker.pack(v)
Exemple #13
0
import mrpacker
from pymemcache.client.base import Client
c = Client(('localhost', 11211))
c.set("mrsession43709dd361cc443e976b05714581a7fb",
      mrpacker.pack({"user": "******"}))
c = Client(('localhost', 11212))
c.set("mrsession43709dd361cc443e976b05714581a7fb",
      mrpacker.pack({"user": "******"}))
#print( c.get("mrsessionZZZZ9dd361cc443e976b05714581a7fb"))

import asyncmrcache, asyncio


def lcb(client):
    print("Lost conn")


async def run(loop):

    rc = await asyncmrcache.create_client([("localhost", 7000)],
                                          loop,
                                          lost_cb=lcb)

    await rc.set(b"mrsession43709dd361cc443e976b05714581a7fb",
                 mrpacker.pack({"user": "******"}))
    print(await rc.get(b"mrsession43709dd361cc443e976b05714581a7fb"))
    exit()


loop = asyncio.get_event_loop()
loop.run_until_complete(run(loop))
Exemple #14
0
import traceback
from mrhttp import app
import asyncmrq, mrpacker

app.config["memcache"] = [("127.0.0.1", 11211)]

#@app.on('at_start')
#async def setup():
#app.c = asyncmrq.Client()
#await app.c.connect(servers=[("127.0.0.1",7100)])

msg = mrpacker.pack([1, 2, 3])
msglen = len(msg)
print(msg)


@app.route('/', options=['session'])
async def index(r):
    #await app.c.push( r.user["id"], 0, msg, msglen )
    #print( r.headers )
    #print( r.ip )
    return "yay"
    #x = r.form
    #d = r.mrpack
    #return d["name"]
    #x = r.form
    #return x["param2"]


@app.route('/json')
def json(r):
Exemple #15
0
    {
        "A": [{}, [], {}],
        "b": {
            "1": 1,
            "2": 2,
            "3": 3
        }
    },
]
o = {}
for x in range(100000):
    o[x] = x
objs.append(o)

# NaN != Nan so check str rep
o = j.unpack(j.pack(float('nan')))
eq(str(o), 'nan')

for o in objs:
    try:
        eq(o, j.unpack(j.pack(o)))
    except Exception as e:
        print("ERROR", str(e), o)

from os import walk
for (dirpath, dirnames, filenames) in walk("test_data"):
    for fn in filenames:
        f = open("test_data/" + fn, "rb")
        o = json.load(f)
        try:
            eq(o, j.unpack(j.pack(o)))