def update_row(table_id, instance):
    """
    This generates on query per updated row
    """
    fusion_table = FusionTable(table_id)
    instance_content_type = ContentType.objects.get_for_model(instance)

    rows = []
    row_id = get_fusion_table_row_id_for_instance(instance_content_type, instance)
    if row_id is not None:
        fusion_table_fields = build_fields_for_row(instance)
        rows.append(Row(row_id=row_id, fields=fusion_table_fields))

    fusion_table.update(rows)
def delete_row(table_id, instance):
    """
    This creates one query per delete so could potentially be very slow.
    If you need to delete rows in batches it would be better to add a method
    to the pyft library following the pattern for insert() batches
    """
    fusion_table = FusionTable(table_id)
    table_content_type = ContentType.objects.get_for_model(instance)

    row_id = get_fusion_table_row_id_for_instance(table_content_type, instance)
    if row_id is not None:
        query = SQL().delete(table_id, row_id)
        fusion_table.run_query(query)
        FusionTableRowId.objects\
                .get(content_type = table_content_type, object_id = instance.pk)\
                .delete()
  def setUp(self):

    self.schema = {'letters': StringField.column_type,
                   'numbers':NumberField.column_type}
    self.table_name = current_app.settings['TEST_TABLE_PREFIX'] + "PYFTUsage"
    self.ft = FusionTable.create(self.schema, self.table_name)

    self.simple_data = [(-1, 'minus1'),(-2,'minus2'),(-3,'minus3')]
    self.dummy_data = [(n,l) for n,l in  zip(*self.build_ran_data())]
def create_fusion_table(instance):
    fusion_table_name = "%s - %s" %(instance.django_model.app_label, instance.django_model.name)
    schema = get_schema_from_model(instance.django_model.model_class())
    column_types = get_column_types_from_schema(schema)
    fusion_table = FusionTable.create(column_types, fusion_table_name)

    initialise_fusion_table(fusion_table, instance.django_model.model_class())

    return fusion_table
def insert_rows(table_id, instances, fusion_table=None):
    """
    Insert rows in a batch
    """
    if fusion_table is None:
        fusion_table = FusionTable(table_id)
    rows = []
    for instance in instances:
        fusion_table_fields = build_fields_for_row(instance)
        rows.append(Row(row_id=None, fields=fusion_table_fields))

    row_ids = fusion_table.insert(rows)

    instance_content_type = ContentType.objects.get_for_model(instances[0])
    for row_id, instance in zip(row_ids, instances):
        fusion_table_row_id = FusionTableRowId(content_type = instance_content_type,
                                               object_id = instance.pk,
                                               row_id = row_id)
        fusion_table_row_id.save()