def test_column_target_many_inits(): col = ColumnTarget( OBSColumn( id='tests.foobar', type='Numeric', name="Total Population", description= 'The total number of all people living in a given geographic area. This is a very useful catch-all denominator when calculating rates.', aggregate='sum', weight=10), FakeTask()) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 0) col.update_or_create() assert_equals(session.query(OBSColumn).count(), 1) col = ColumnTarget( OBSColumn( id='tests.foobar', type='Numeric', name="Total Population", description= 'The total number of all people living in a given geographic area. This is a very useful catch-all denominator when calculating rates.', aggregate='sum', weight=10), FakeTask()) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 1) col.update_or_create() assert_equals(session.query(OBSColumn).count(), 1)
def test_columns_task_creates_columns_only_when_run(): task = TestColumnsTask() with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 0) runtask(task) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 2) assert_equals(session.query(OBSColumnToColumn).count(), 1) assert_equals(task.output()['pop'].get(session).id, '"test_util".population') assert_equals(task.output()['foobar'].get(session).id, '"test_util".foobar') pop = session.query(OBSColumn).get('"test_util".population') foobar = session.query(OBSColumn).get('"test_util".foobar') assert_equals(len(pop.sources), 1) assert_equals(len(foobar.targets), 1) assert_equals(pop.sources.keys()[0].id, foobar.id) assert_equals(foobar.targets.keys()[0].id, pop.id) assert_equals(True, task.complete()) table = OBSTable(id='table', tablename='tablename') with session_scope() as session: coltable = OBSColumnTable(column=task.output()['pop'].get(session), table=table, colname='colnamaste') session.add(table) session.add(coltable) with session_scope() as session: assert_equals(session.query(OBSColumnTable).count(), 1)
def test_columns_task_creates_columns_only_when_run(): task = TestColumnsTask() with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 0) runtask(task) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 2) assert_equals(session.query(OBSColumnToColumn).count(), 1) assert_equals(task.output()['pop'].get(session).id, 'test_util.population') assert_equals(task.output()['foobar'].get(session).id, 'test_util.foobar') pop = session.query(OBSColumn).get('test_util.population') foobar = session.query(OBSColumn).get('test_util.foobar') assert_equals(len(pop.sources), 1) assert_equals(len(foobar.targets), 1) assert_equals(list(pop.sources.keys())[0].id, foobar.id) assert_equals(list(foobar.targets.keys())[0].id, pop.id) assert_equals(True, task.complete()) table = OBSTable(id='table', tablename='tablename') with session_scope() as session: coltable = OBSColumnTable(column=task.output()['pop'].get(session), table=table, colname='colnamaste') session.add(table) session.add(coltable) with session_scope() as session: assert_equals(session.query(OBSColumnTable).count(), 1)
def test_table_task_replaces_data(): task = TestTableTask() runtask(task) with session_scope() as session: assert_equals(session.query(task.table).count(), 0) session.execute('INSERT INTO "{schema}"."{tablename}" VALUES (100, 100)'.format( schema=task.table.schema, tablename=task.table.name)) assert_equals(session.query(task.table).count(), 1) runtask(task) with session_scope() as session: assert_equals(session.query(task.table).count(), 1)
def test_table_task_replaces_data(): task = TestTableTask() runtask(task) table = task.output().table with session_scope() as session: assert_equals( session.execute('select count(*) from ' + table).fetchone()[0], 1) runtask(task) with session_scope() as session: assert_equals( session.execute('select count(*) from ' + table).fetchone()[0], 1)
def test_delete_columntable_removes_tiles(): populate() with session_scope() as session: assert_equals(session.query(OBSColumnTableTile).count(), 1) session.delete(session.query(OBSColumnTableTile).get( ('"us.census.acs".tract_geoms', '"us.census.tiger".tract', 1, ))) assert_equals(session.query(OBSColumnTableTile).count(), 0)
def test_table_task_replaces_data(): task = TestTableTask() runtask(task) table = task.output().table with session_scope() as session: assert_equals(session.execute( 'select count(*) from ' + table).fetchone()[0], 1) runtask(task) with session_scope() as session: assert_equals(session.execute( 'select count(*) from ' + table).fetchone()[0], 1)
def test_column_target_relations_create_update(): col = ColumnTarget( OBSColumn( id='tests.foobar', type='Numeric', name="Total Population", description= 'The total number of all people living in a given geographic area. This is a very useful catch-all denominator when calculating rates.', aggregate='sum', weight=10), FakeTask()) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 0) col.update_or_create() rawcol = col._column tag = OBSTag(id='tag', name='some tag', description='some tag', type='some type') session.add(tag) rawcol.tags.append(TagTarget(tag, FakeTask())) session.add(rawcol) table = OBSTable(id='table', tablename='foobar') session.add(table) coltable = OBSColumnTable(column=rawcol, table=table, colname='col') session.add(coltable) with session_scope() as session: assert_equals(session.query(OBSTag).count(), 1) assert_equals(session.query(OBSColumnTag).count(), 1) assert_equals(session.query(OBSColumn).count(), 1) assert_equals(session.query(OBSColumnTable).count(), 1) assert_equals(session.query(OBSTable).count(), 1) col._column.name = 'foo bar baz' with session_scope() as session: col.update_or_create() with session_scope() as session: rawcol = session.query(OBSColumn).get('tests.foobar') assert_equals(rawcol.name, 'foo bar baz') assert_equals(session.query(OBSTag).count(), 1) assert_equals(session.query(OBSColumnTag).count(), 1) assert_equals(session.query(OBSColumn).count(), 1) assert_equals(session.query(OBSColumnTable).count(), 1) assert_equals(session.query(OBSTable).count(), 1)
def test_tags_in_columns(): ''' Columns can refer to tags. ''' populate() with session_scope() as session: column = session.query(OBSColumn).get('"us.census.acs".total_pop') assert_equals(['US Census', 'population'], sorted([tag.name for tag in column.tags]))
def test_columns_in_tables(): ''' Tables can refer to columns. ''' populate() with session_scope() as session: table = session.query(OBSTable).get('"us.census.acs".extract_2013_5yr_puma') assert_equals(5, len(table.columns))
def test_tables_in_columns(): ''' Columns can refer to tables. ''' populate() with session_scope() as session: column = session.query(OBSColumn).get('"us.census.acs".median_rent') assert_equals(2, len(column.tables))
def test_table_task_table(): task = TestTableTask() runtask(task) with session_scope() as session: assert_equals('"{schema}".{name}'.format(schema=task.table.schema, name=task.table.name), task.output().get(session).id)
def populate(): with session_scope() as session: population_tag = OBSTag(id='population', name='population', type='catalog') source_tag = OBSTag(id='us_census', name='US Census', type='source') session.add(population_tag) session.add(source_tag) datacols = { 'median_rent': OBSColumn(id='"us.census.acs".median_rent', type='numeric'), 'total_pop': OBSColumn(id='"us.census.acs".total_pop', type='numeric'), 'male_pop': OBSColumn(id='"us.census.acs".male_pop', type='numeric'), 'female_pop': OBSColumn(id='"us.census.acs".female_pop', type='numeric'), } for numerator_col in ('male_pop', 'female_pop', ): datacol = datacols[numerator_col] datacol.targets[datacols['total_pop']] = 'denominator' session.add(datacol) tract_geoid = OBSColumn(id='"us.census.acs".tract_2013_geoid', type='text') puma_geoid = OBSColumn(id='"us.census.acs".puma_2013_geoid', type='text') tract_geom = OBSColumn(id='"us.census.tiger".tract', type='geometry') tables = { 'tract': OBSTable(id='"us.census.acs".extract_2013_5yr_tract', tablename='us_census_acs2013_5yr_tract'), 'puma': OBSTable(id='"us.census.acs".extract_2013_5yr_puma', tablename='us_census_acs2013_5yr_puma') } geom_table = OBSTable(id='"us.census.acs".tract_geoms', tablename='tract_geoms') session.add(OBSColumnTable(table=tables['tract'], column=tract_geoid, colname='geoid')) session.add(OBSColumnTable(table=tables['puma'], column=puma_geoid, colname='geoid')) session.add(OBSColumnTable(table=geom_table, column=tract_geoid, colname='geoid')) geom_coltable = OBSColumnTable(table=geom_table, column=tract_geom, colname='the_geom') session.add(geom_coltable) session.add(OBSColumnTableTile(column_id=geom_coltable.column.id, table_id=geom_coltable.table.id, tile_id=1, tile=EMPTY_RASTER )) for colname, datacol in datacols.iteritems(): if colname.endswith('pop'): datacol.tags.append(TagTarget(population_tag, FakeTask())) datacol.tags.append(TagTarget(source_tag, FakeTask())) for table in tables.values(): coltable = OBSColumnTable(column=datacol, table=table, colname=colname) session.add(coltable) session.add(datacol) for table in tables.values(): session.add(table)
def test_columns_in_tables(): ''' Tables can refer to columns. ''' populate() with session_scope() as session: table = session.query(OBSTable).get( '"us.census.acs".extract_2013_5yr_puma') assert_equals(5, len(table.columns))
def test_column_target_create_update(): col = ColumnTarget( OBSColumn( id='tests.foobar', type='Numeric', name="Total Population", description= 'The total number of all people living in a given geographic area. This is a very useful catch-all denominator when calculating rates.', aggregate='sum', weight=10), FakeTask()) # Does not exist in DB til we update_or_create with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 0) col.update_or_create() assert_equals(session.query(OBSColumn).count(), 1) # Can update_or_create all we want with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 1) col.update_or_create() assert_equals(session.query(OBSColumn).count(), 1) # Can overwrite the existing column col = ColumnTarget( OBSColumn(id='tests.foobar', type='Numeric', name="foobar", description='foo-bar-baz', aggregate='sum', weight=10), FakeTask()) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 1) col.update_or_create() assert_equals(col._column.name, 'foobar') assert_equals(col._column.description, 'foo-bar-baz') assert_equals(session.query(OBSColumn).count(), 1) # Should auto-qualify column id with session_scope() as session: rawcol = session.query(OBSColumn).get('tests.foobar') assert_equals(rawcol.name, 'foobar') assert_equals(rawcol.description, 'foo-bar-baz')
def test_delete_table_deletes_relevant_related_objects(): populate() with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 6) assert_equals(session.query(OBSTable).count(), 2) assert_equals(session.query(OBSColumnTable).count(), 10) session.delete(session.query(OBSTable).get('"us.census.acs".extract_2013_5yr_tract')) assert_equals(session.query(OBSColumn).count(), 6) assert_equals(session.query(OBSTable).count(), 1) assert_equals(session.query(OBSColumnTable).count(), 5)
def test_delete_column_deletes_relevant_related_objects(): populate() with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 6) assert_equals(session.query(OBSTable).count(), 2) assert_equals(session.query(OBSColumnTable).count(), 10) session.delete(session.query(OBSColumn).get('"us.census.acs".median_rent')) assert_equals(session.query(OBSColumn).count(), 5) assert_equals(session.query(OBSTable).count(), 2) assert_equals(session.query(OBSColumnTable).count(), 8)
def test_delete_tag_deletes_relevant_related_objects(): populate() with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 6) assert_equals(session.query(OBSColumnTag).count(), 6) assert_equals(session.query(OBSTag).count(), 2) session.delete(session.query(OBSTag).get('population')) assert_equals(session.query(OBSColumn).count(), 6) assert_equals(session.query(OBSColumnTag).count(), 3) assert_equals(session.query(OBSTag).count(), 1)
def test_delete_tag_deletes_relevant_related_objects(): populate() with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 7) assert_equals(session.query(OBSColumnTag).count(), 6) assert_equals(session.query(OBSTag).count(), 2) session.delete(session.query(OBSTag).get('population')) assert_equals(session.query(OBSColumn).count(), 7) assert_equals(session.query(OBSColumnTag).count(), 3) assert_equals(session.query(OBSTag).count(), 1)
def test_delete_columntable_removes_tiles(): populate() with session_scope() as session: assert_equals(session.query(OBSColumnTableTile).count(), 1) session.delete( session.query(OBSColumnTableTile).get(( '"us.census.acs".tract_geoms', '"us.census.tiger".tract', 1, ))) assert_equals(session.query(OBSColumnTableTile).count(), 0)
def test_delete_column_deletes_relevant_related_objects(): populate() with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 7) assert_equals(session.query(OBSTable).count(), 3) assert_equals(session.query(OBSColumnTable).count(), 12) session.delete( session.query(OBSColumn).get('"us.census.acs".median_rent')) assert_equals(session.query(OBSColumn).count(), 6) assert_equals(session.query(OBSTable).count(), 3) assert_equals(session.query(OBSColumnTable).count(), 10)
def test_column_target_relations_create_update(): col = ColumnTarget("tests", "foobar", OBSColumn( type='Numeric', name="Total Population", description='The total number of all people living in a given geographic area. This is a very useful catch-all denominator when calculating rates.', aggregate='sum', weight=10)) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 0) col.update_or_create(session) rawcol = col._column tag = OBSTag(id='tag', name='some tag', description='some tag', type='some type') session.add(tag) rawcol.tags.append(TagTarget(tag)) session.add(rawcol) table = OBSTable(id='table', tablename='foobar') session.add(table) coltable = OBSColumnTable(column=rawcol, table=table, colname='col') session.add(coltable) with session_scope() as session: assert_equals(session.query(OBSTag).count(), 1) assert_equals(session.query(OBSColumnTag).count(), 1) assert_equals(session.query(OBSColumn).count(), 1) assert_equals(session.query(OBSColumnTable).count(), 1) assert_equals(session.query(OBSTable).count(), 1) col._column.name = 'foo bar baz' with session_scope() as session: col.update_or_create(session) with session_scope() as session: rawcol = session.query(OBSColumn).get('"tests".foobar') assert_equals(rawcol.name, 'foo bar baz') assert_equals(session.query(OBSTag).count(), 1) assert_equals(session.query(OBSColumnTag).count(), 1) assert_equals(session.query(OBSColumn).count(), 1) assert_equals(session.query(OBSColumnTable).count(), 1) assert_equals(session.query(OBSTable).count(), 1)
def test_delete_table_deletes_relevant_related_objects(): populate() with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 7) assert_equals(session.query(OBSTable).count(), 3) assert_equals(session.query(OBSColumnTable).count(), 12) session.delete( session.query(OBSTable).get( '"us.census.acs".extract_2013_5yr_tract')) assert_equals(session.query(OBSColumn).count(), 7) assert_equals(session.query(OBSTable).count(), 2) assert_equals(session.query(OBSColumnTable).count(), 7)
def test_columns_in_tags(): ''' Tags can refer to columns. ''' populate() with session_scope() as session: tag = session.query(OBSTag).get('population') tag2 = session.query(OBSTag).get('us_census') assert_equals(3, len(tag.columns)) assert_equals(3, len(tag2.columns)) assert_equals(tag.type, 'catalog') assert_equals(tag2.type, 'source')
def test_table_task_creates_columns_when_run(): task = TestTableTask() assert_equals(False, task.complete()) runtask(task) assert_equals(True, task.complete()) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 2) assert_equals(session.query(OBSColumnTable).count(), 2) assert_equals(session.query(OBSTable).count(), 1) assert_in(task.output().table, metadata.tables)
def test_column_task(klass): # Ensure every column task runs and produces some kind of independent # metadata. with session_scope() as session: # TODO: test columnstasks that have params if klass.get_param_names(): raise SkipTest('Cannot test ColumnsTask with params') task = klass() runtask(task) assert_greater( session.query(OBSColumn).filter( OBSColumn.id.startswith(classpath(task))).count(), 0)
def test_table_task_creates_columns_when_run(): task = TestTableTask() assert_equals(False, task.complete()) runtask(task) assert_equals(True, task.complete()) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 2) assert_equals(session.query(OBSColumnTable).count(), 2) assert_equals(session.query(OBSTable).count(), 1) assert_in(task.table.fullname, metadata.tables)
def test_column_target_create_update(): col = ColumnTarget('tests', 'foobar', OBSColumn( type='Numeric', name="Total Population", description='The total number of all people living in a given geographic area. This is a very useful catch-all denominator when calculating rates.', aggregate='sum', weight=10)) # Does not exist in DB til we update_or_create with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 0) col.update_or_create(session) assert_equals(session.query(OBSColumn).count(), 1) # Can update_or_create all we want with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 1) col.update_or_create(session) assert_equals(session.query(OBSColumn).count(), 1) # Can overwrite the existing column col = ColumnTarget('tests', 'foobar', OBSColumn( type='Numeric', name="foobar", description='foo-bar-baz', aggregate='sum', weight=10)) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 1) col.update_or_create(session) assert_equals(col._column.name, 'foobar') assert_equals(col._column.description, 'foo-bar-baz') assert_equals(session.query(OBSColumn).count(), 1) # Should auto-qualify column id with session_scope() as session: rawcol = session.query(OBSColumn).get('"tests".foobar') assert_equals(rawcol.name, 'foobar') assert_equals(rawcol.description, 'foo-bar-baz')
def test_column_to_column_target(): ''' Columns can refer to other columns as a target. ''' populate() with session_scope() as session: column = session.query(OBSColumn).get('"us.census.acs".female_pop') assert_equals(0, len(column.sources)) assert_equals(1, len(column.targets)) target, reltype = column.targets.items()[0] assert_equals(target.id, '"us.census.acs".total_pop') assert_equals(reltype, 'denominator')
def test_column_to_column_target(): ''' Columns can refer to other columns as a target. ''' populate() with session_scope() as session: column = session.query(OBSColumn).get('"us.census.acs".female_pop') assert_equals(0, len(column.sources)) assert_equals(1, len(column.targets)) target, reltype = list(column.targets.items())[0] assert_equals(target.id, '"us.census.acs".total_pop') assert_equals(reltype, 'denominator')
def test_table_task(): ''' Very simple table task should run and make an entry in OBSTable, as well as a physical table with rows in observatory schema. ''' with session_scope() as session: task = TestTableTask() runtask(task) table = task.output().get(session) assert_is_not_none(table) assert_is_none(table.the_geom) assert_equal(session.execute( 'SELECT COUNT(*) FROM observatory.{}'.format( table.tablename)).fetchone()[0], 1)
def test_geom_table_task(): ''' Table task with geoms should run and generate an entry in OBSTable with a summary geom, plus a physical table with rows in observatory schema. ''' with session_scope() as session: task = TestGeomTableTask() runtask(task) table = task.output().get(session) assert_is_not_none(table) assert_is_not_none(table.the_geom) assert_equal(session.execute( 'SELECT COUNT(*) FROM observatory.{}'.format( table.tablename)).fetchone()[0], 1)
def test_column_target_many_inits(): col = ColumnTarget("tests", "foobar", OBSColumn( type='Numeric', name="Total Population", description='The total number of all people living in a given geographic area. This is a very useful catch-all denominator when calculating rates.', aggregate='sum', weight=10)) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 0) col.update_or_create(session) assert_equals(session.query(OBSColumn).count(), 1) col = ColumnTarget("tests", "foobar", OBSColumn( type='Numeric', name="Total Population", description='The total number of all people living in a given geographic area. This is a very useful catch-all denominator when calculating rates.', aggregate='sum', weight=10)) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 1) col.update_or_create(session) assert_equals(session.query(OBSColumn).count(), 1)
def test_carto_2_temp_table_task(): ''' Convert a table on CARTO to a temp table. ''' with session_scope() as session: task = TestCSV2TempTableTask() before_table_count = session.execute( 'SELECT COUNT(*) FROM observatory.obs_table').fetchone()[0] runtask(task) table = task.output() assert_equal(session.execute( 'SELECT COUNT(*) FROM {}'.format( table.table)).fetchone()[0], 10) after_table_count = session.execute( 'SELECT COUNT(*) FROM observatory.obs_table').fetchone()[0] assert_equal(before_table_count, after_table_count)
def test_csv_2_temp_table_task(): ''' CSV to temp table task should run and generate no entry in OBSTable, but a physical table in the right schema. ''' with session_scope() as session: task = TestCSV2TempTableTask() before_table_count = session.execute( 'SELECT COUNT(*) FROM observatory.obs_table').fetchone()[0] runtask(task) table = task.output() assert_equal(session.execute( 'SELECT COUNT(*) FROM {}'.format( table.table)).fetchone()[0], 10) after_table_count = session.execute( 'SELECT COUNT(*) FROM observatory.obs_table').fetchone()[0] assert_equal(before_table_count, after_table_count)
def populate(): with session_scope() as session: population_tag = OBSTag(id='population', name='population', type='catalog') source_tag = OBSTag(id='us_census', name='US Census', type='source') session.add(population_tag) session.add(source_tag) datacols = { 'median_rent': OBSColumn(id='"us.census.acs".median_rent', type='numeric'), 'total_pop': OBSColumn(id='"us.census.acs".total_pop', type='numeric'), 'male_pop': OBSColumn(id='"us.census.acs".male_pop', type='numeric'), 'female_pop': OBSColumn(id='"us.census.acs".female_pop', type='numeric'), } for numerator_col in ( 'male_pop', 'female_pop', ): datacol = datacols[numerator_col] datacol.targets[datacols['total_pop']] = 'denominator' session.add(datacol) tract_geoid = OBSColumn(id='"us.census.acs".tract_2013_geoid', type='text') puma_geoid = OBSColumn(id='"us.census.acs".puma_2013_geoid', type='text') tract_geom = OBSColumn(id='"us.census.tiger".tract', type='geometry') tables = { 'tract': OBSTable(id='"us.census.acs".extract_2013_5yr_tract', tablename='us_census_acs2013_5yr_tract'), 'puma': OBSTable(id='"us.census.acs".extract_2013_5yr_puma', tablename='us_census_acs2013_5yr_puma') } geom_table = OBSTable(id='"us.census.acs".tract_geoms', tablename='tract_geoms') session.add( OBSColumnTable(table=tables['tract'], column=tract_geoid, colname='geoid')) session.add( OBSColumnTable(table=tables['puma'], column=puma_geoid, colname='geoid')) session.add( OBSColumnTable(table=geom_table, column=tract_geoid, colname='geoid')) geom_coltable = OBSColumnTable(table=geom_table, column=tract_geom, colname='the_geom') session.add(geom_coltable) session.add( OBSColumnTableTile(column_id=geom_coltable.column.id, table_id=geom_coltable.table.id, tile_id=1, tile=EMPTY_RASTER)) for colname, datacol in datacols.items(): if colname.endswith('pop'): datacol.tags.append(TagTarget(population_tag, FakeTask())) datacol.tags.append(TagTarget(source_tag, FakeTask())) for table in list(tables.values()): coltable = OBSColumnTable(column=datacol, table=table, colname=colname) session.add(coltable) session.add(datacol) for table in list(tables.values()): session.add(table)
def test_table_target_many_inits(): pop_col = ColumnTarget("tests", "population", OBSColumn( type='Numeric', name="Total Population", description='The total number of all', aggregate='sum', weight=10)) foo_col = ColumnTarget("tests", "foo", OBSColumn( type='Numeric', name="Foo Bar", description='moo boo foo', aggregate='median', weight=8)) with session_scope() as session: pop_col.update_or_create(session) foo_col.update_or_create(session) with session_scope() as session: assert_equals(session.query(OBSColumn).count(), 2) columns = { 'population': pop_col, 'foobar': foo_col } table_target = TableTarget('test', 'foobar', OBSTable(), columns) table_id = 'test.foobar' with session_scope() as session: assert_equals(False, table_target.exists()) assert_equals(session.query(OBSTable).count(), 0) assert_equals(session.query(OBSColumn).count(), 2) table_target.update_or_create(session) assert_equals(session.query(OBSColumn).count(), 2) assert_equals(session.query(OBSTable).count(), 1) assert_in(table_id, metadata.tables) sqlalchemy_table = metadata.tables[table_id] assert_equals(len(sqlalchemy_table.columns), 2) table_target.exists() assert_equals(True, table_target.exists()) assert_equals(table_target.table.schema, 'test') assert_equals(table_target.table.name, 'foobar') # new session, old object with session_scope() as session: assert_equals(True, table_target.exists()) assert_equals(session.query(OBSTable).count(), 1) table_target.update_or_create(session) assert_equals(session.query(OBSTable).count(), 1) assert_in(table_id, metadata.tables) sqlalchemy_table = metadata.tables[table_id] assert_equals(len(sqlalchemy_table.columns), 2) assert_equals(True, table_target.exists()) # new session, new object table_target = TableTarget('test', 'foobar', OBSTable(), columns) with session_scope() as session: assert_equals(True, table_target.exists()) assert_equals(session.query(OBSTable).count(), 1) table_target.update_or_create(session) assert_equals(session.query(OBSTable).count(), 1) assert_in(table_id, metadata.tables) sqlalchemy_table = metadata.tables[table_id] assert_equals(len(sqlalchemy_table.columns), 2) assert_equals(True, table_target.exists())