def tables(ctx):
    id_replacer = lambda data_key, prop_key, prop_value: next( prop['id'] for prop in ctx.obj[data_key] if prop[prop_key]==prop_value )
    tables = [replace_linked_props(ctx, table, id_replacer, ('tenant_id', 'schema_id'))
            for table in data.get('tables', [])]
    ctx.obj['tables'] = [create_table(ctx, table)
            for table in tables]
    return ctx.obj['tables']
def schemas(ctx):
    id_replacer = lambda data_key, prop_key, prop_value: next( prop['id'] for prop in ctx.obj[data_key] if prop[prop_key]==prop_value )
    schemas = [replace_linked_props(ctx, schema, id_replacer, ('tenant_id',))
            for schema in data.get('schemas', [])]
    ctx.obj['schemas'] = [create_schema(ctx, schema)
            for schema in schemas]
    return ctx.obj['schemas']
def instances(ctx):
    id_replacer = lambda data_key, prop_key, prop_value: next( prop['id'] for prop in ctx.obj[data_key] if prop[prop_key]==prop_value )
    instances = [replace_linked_props(ctx, instance, id_replacer, ('tenant_id', 'schema_id', 'table_id'))
            for instance in data.get('instances', [])]
    ctx.obj['instances'] = [create_instance(ctx, instance)
            for instance in instances]
    return ctx.obj['instances']
def fields(ctx):
    id_replacer = lambda data_key, prop_key, prop_value: next( prop['id'] for prop in ctx.obj[data_key] if prop[prop_key]==prop_value )
    pdb.set_trace()
    fields = [replace_linked_props(ctx, field, id_replacer, ('tenant_id', 'schema_id', 'table_id'))
            for field in data.get('fields', [])]
    ctx.obj['fields'] = [create_field(ctx, field)
            for field in fields]
    return ctx.obj['fields']
def tenants(ctx):
    ctx.obj['tenants'] = [create_tenant(ctx, tenant) 
            for tenant in data.get('tenants', [])]
    return ctx.obj['schemas']