Fix removal of ActivityIntermediatory migration

The migration had a problem where other tables still referenced the migration
as well as a typo in an earlier migration. They have both been fixed and tested
on PostgreSQL and SQLite3.

This also fixes a bug where sometimes when creating an activity it'd raise an
Exception as the object hadn't got an ID. This has been fixed globally with a
fix to the create_activity federation tool.
This commit is contained in:
Jessica Tallon 2015-06-24 21:22:03 +02:00
parent 2d73983e8c
commit ddc2db746f
2 changed files with 23 additions and 2 deletions

View File

@ -1289,10 +1289,10 @@ def add_foreign_key_fields(db):
activity_table = inspect_table(metadata, "core__activities")
# Create column and add to model.
object_column = Column("temp_object", Integer, ForeignKey(GenericModelReference_V0))
object_column = Column("temp_object", Integer, ForeignKey(GenericModelReference_V0.id))
object_column.create(activity_table)
target_column = Column("temp_target", Integer, ForeignKey(GenericModelReference_V0))
target_column = Column("temp_target", Integer, ForeignKey(GenericModelReference_V0.id))
target_column.create(activity_table)
# Commit this to the database
@ -1406,6 +1406,23 @@ def remove_activityintermediator(db):
"""
metadata = MetaData(bind=db.bind)
# Remove the columns which reference the AI
collection_table = inspect_table(metadata, "core__collections")
collection_ai_column = collection_table.columns["activity"]
collection_ai_column.drop()
media_entry_table = inspect_table(metadata, "core__media_entries")
media_entry_ai_column = media_entry_table.columns["activity"]
media_entry_ai_column.drop()
comments_table = inspect_table(metadata, "core__media_comments")
comments_ai_column = comments_table.columns["activity"]
comments_ai_column.drop()
user_table = inspect_table(metadata, "core__users")
user_ai_column = user_table.columns["activity"]
user_ai_column.drop()
# Drop the table
ai_table = inspect_table(metadata, "core__activity_intermediators")
ai_table.drop()

View File

@ -71,6 +71,10 @@ def create_activity(verb, obj, actor, target=None, generator=None):
)
generator.save()
# Ensure the object has an ID which is needed by the activity.
obj.save(commit=False)
# Create the activity
activity = Activity(verb=verb)
activity.object = obj