# encoding: utf8
import sys
+import sqlalchemy.types
+
from .db import connect, metadata
def main():
for table in sorted(instrumentation_registry.manager_finders.keys(),
key=lambda self: self.__table__.name):
table_name = table.__table__.name
- print table_name
+ # Print the table name but leave the cursor in a fixed column
+ print table_name + '...', ' ' * (40 - len(table_name)),
+
+ try:
+ csvfile = open("%s/%s.csv" % (dir, table_name), 'rb')
+ except IOError:
+ # File doesn't exist; don't load anything!
+ print 'no data!'
+ continue
- reader = csv.reader(open("%s/%s.csv" % (dir, table_name), 'rb'), lineterminator='\n')
+ reader = csv.reader(csvfile, lineterminator='\n')
column_names = [unicode(column) for column in reader.next()]
for csvs in reader:
row = table()
for column_name, value in zip(column_names, csvs):
- if table.__table__.c[column_name].nullable and value == '':
+ column = table.__table__.c[column_name]
+ if column.nullable and value == '':
# Empty string in a nullable column really means NULL
value = None
+ elif isinstance(column.type, sqlalchemy.types.Boolean):
+ # Boolean values are stored as string values 0/1, but both
+ # of those evaluate as true; SQLA wants True/False
+ if value == '0':
+ value = False
+ else:
+ value = True
else:
# Otherwise, unflatten from bytes
value = value.decode('utf-8')
session.add(row)
session.commit()
+ print 'loaded'
# Shouldn't matter since this is usually the end of the program and thus
# the connection too, but let's change this back just in case