aboutsummaryrefslogtreecommitdiffstats
path: root/python/experiments/test_asyncpg.py
blob: ae103a7f7c0203b8e1c32e629f305f2b4bba6a89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import asyncio
import asyncpg
import datetime
import lz4.block
from pyisda.curve import YieldCurve
import uvloop
from asyncio_extras import async_contextmanager

@async_contextmanager
async def dbconn():
    conn = await asyncpg.connect(user='serenitas_user', password='Serenitas1',
                                 database='serenitasdb', host='debian')
    yield conn
    await conn.close()

async def get_singlenames_quotes_async(con, indexname, date):
    stmt = await con.prepare('SELECT * FROM curve_quotes($1, $2)')
    async with con.transaction():
        # Postgres requires non-scrollable cursors to be created
        # and used in a transaction.
        async for record in stmt.cursor(indexname, date):
            print(record)

async def get_curves(con, currency="USD", date=None):
    async with con.transaction():
        return {record['effective_date']: YieldCurve.from_bytes(lz4.block.decompress(record['curve']))
                async for record in con.cursor("SELECT * FROM {}_curves".format(currency))}

async def main():
    async with dbconn() as con:
        return await get_curves(con)

if __name__ == "__main__":
    asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
    loop = asyncio.get_event_loop()
    pomme = loop.run_until_complete(main())