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)
Esempio n. 2
0
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)
Esempio n. 4
0
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)
Esempio n. 6
0
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)
Esempio n. 7
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)
Esempio n. 9
0
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]))
Esempio n. 10
0
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))
Esempio n. 11
0
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))
Esempio n. 12
0
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))
Esempio n. 13
0
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]))
Esempio n. 14
0
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)
Esempio n. 15
0
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)
Esempio n. 16
0
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')
Esempio n. 18
0
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)
Esempio n. 19
0
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)
Esempio n. 20
0
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)
Esempio n. 21
0
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)
Esempio n. 22
0
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)
Esempio n. 23
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)
Esempio n. 24
0
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)
Esempio n. 25
0
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)
Esempio n. 26
0
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)
Esempio n. 28
0
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)
Esempio n. 29
0
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')
Esempio n. 30
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)
Esempio n. 31
0
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')
Esempio n. 32
0
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')
Esempio n. 33
0
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')
Esempio n. 34
0
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)
Esempio n. 35
0
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)
Esempio n. 36
0
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)
Esempio n. 37
0
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)
Esempio n. 38
0
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)
Esempio n. 39
0
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)
Esempio n. 40
0
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())