From 58ef99632a44d4d21eca63aab64e872311c6dec3 Mon Sep 17 00:00:00 2001 From: Mark Burnett Date: Fri, 16 Jan 2015 10:27:14 -0600 Subject: [PATCH 1/2] keep url on janitor --- ptero_common/janitors/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ptero_common/janitors/base.py b/ptero_common/janitors/base.py index 0c997eb..bee2ad8 100644 --- a/ptero_common/janitors/base.py +++ b/ptero_common/janitors/base.py @@ -7,6 +7,7 @@ class Janitor(object): __metaclass__ = abc.ABCMeta def __init__(self, url): + self.url = url self.url_obj = urlparse(url) self.sanitized_url = self.sanitize_url(self.url_obj) From 8cad3bbb25abfb07d48835a54dc1d77bf9725fc6 Mon Sep 17 00:00:00 2001 From: Mark Burnett Date: Fri, 16 Jan 2015 10:27:18 -0600 Subject: [PATCH 2/2] add sqlalchemy-based postgres janitor It turned out to be much simpler to rely on sqlalchemy for reflection. --- ptero_common/janitors/postgres_janitor.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 ptero_common/janitors/postgres_janitor.py diff --git a/ptero_common/janitors/postgres_janitor.py b/ptero_common/janitors/postgres_janitor.py new file mode 100644 index 0000000..a8c7b10 --- /dev/null +++ b/ptero_common/janitors/postgres_janitor.py @@ -0,0 +1,20 @@ +from .base import Janitor +import logging +import sqlalchemy + + +LOG = logging.getLogger(__name__) + + +class PostgresJanitor(Janitor): + ALLOWED_SCHEMES = {'postgres'} + + def clean(self): + engine = sqlalchemy.create_engine(self.url) + + meta = sqlalchemy.MetaData() + meta.reflect(bind=engine) + + for name, table in meta.tables.iteritems(): + LOG.debug('Deleting table %s', name) + engine.execute(table.drop())