From d620c2f3928b510d1b7534146294b1d5b25dc365 Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Tue, 13 Mar 2012 17:18:35 -0500 Subject: [PATCH] Updated sqla to create the table lazily. --- anykeystore/backends/sqla.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/anykeystore/backends/sqla.py b/anykeystore/backends/sqla.py index c2cfc0f..8b6ba0d 100644 --- a/anykeystore/backends/sqla.py +++ b/anykeystore/backends/sqla.py @@ -48,13 +48,19 @@ def __init__(self, url, **kw): ) kw['url'] = url self.engine = engine_from_config(kw, prefix='') - self._create_table() # TODO: ideally delay this until first access def _create_table(self): self.table.create(checkfirst=True, bind=self.engine) + self._created = True + + _created = False + def _get_conn(self): + if not self._created: + self._create_table() + return self.engine.connect() def retrieve(self, key): - c = self.engine.connect() + c = self._get_conn() try: data = c.execute(select( [self.table.c.value, self.table.c.expires], @@ -71,7 +77,7 @@ def store(self, key, value, expires=None): expiration = None if expires is not None: expiration = datetime.utcnow() + coerce_timedelta(expires) - c = self.engine.connect() + c = self._get_conn() try: c.execute( self.table.insert(), key=key, value=value, expires=expiration) @@ -79,14 +85,14 @@ def store(self, key, value, expires=None): c.close() def delete(self, key): - c = self.engine.connect() + c = self._get_conn() try: c.execute(delete(self.table, self.table.c.key == key)) finally: c.close() def purge_expired(self): - c = self.engine.connect() + c = self._get_conn() try: c.execute( delete(self.table, self.table.c.expires < datetime.utcnow()))