Mercurial > libervia-backend
changeset 4389:4895cf954fbe
memory (sqla): add "parent_node_id" and "linked_mode_id" to PubsubNode:
This is to prepare for the implementation of XEP-0496 and XEP-0499.
rel 463
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 29 Aug 2025 17:59:12 +0200 |
parents | 01ab68704cc9 |
children | 5e48634ccada |
files | libervia/backend/memory/migration/versions/ece2a6d7e4bb_add_parent_node_id_and_linked_mode_id_.py libervia/backend/memory/sqla_mapping.py |
diffstat | 2 files changed, 59 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libervia/backend/memory/migration/versions/ece2a6d7e4bb_add_parent_node_id_and_linked_mode_id_.py Fri Aug 29 17:59:12 2025 +0200 @@ -0,0 +1,32 @@ +"""add "parent_node_id" and "linked_mode_id" to PubsubNode + +Revision ID: ece2a6d7e4bb +Revises: 8db042adb973 +Create Date: 2025-08-16 16:47:48.242973 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'ece2a6d7e4bb' +down_revision = '8db042adb973' +branch_labels = None +depends_on = None + + +def upgrade(): + with op.batch_alter_table('pubsub_nodes', schema=None) as batch_op: + batch_op.add_column(sa.Column('linked_node_id', sa.Integer(), nullable=True)) + batch_op.add_column(sa.Column('parent_node_id', sa.Integer(), nullable=True)) + batch_op.create_foreign_key(batch_op.f('fk_pubsub_nodes_parent_node_id_pubsub_nodes'), 'pubsub_nodes', ['parent_node_id'], ['id'], ondelete='CASCADE') + batch_op.create_foreign_key(batch_op.f('fk_pubsub_nodes_linked_node_id_pubsub_nodes'), 'pubsub_nodes', ['linked_node_id'], ['id'], ondelete='CASCADE') + + +def downgrade(): + with op.batch_alter_table('pubsub_nodes', schema=None) as batch_op: + batch_op.drop_constraint(batch_op.f('fk_pubsub_nodes_linked_node_id_pubsub_nodes'), type_='foreignkey') + batch_op.drop_constraint(batch_op.f('fk_pubsub_nodes_parent_node_id_pubsub_nodes'), type_='foreignkey') + batch_op.drop_column('parent_node_id') + batch_op.drop_column('linked_node_id')
--- a/libervia/backend/memory/sqla_mapping.py Fri Aug 29 11:44:43 2025 +0200 +++ b/libervia/backend/memory/sqla_mapping.py Fri Aug 29 17:59:12 2025 +0200 @@ -653,10 +653,37 @@ subtype = Column(Text, nullable=True) extra = Column(JSON) + linked_node_id = Column(Integer, ForeignKey("pubsub_nodes.id", ondelete="CASCADE"), nullable=True) + parent_node_id = Column(Integer, ForeignKey("pubsub_nodes.id", ondelete="CASCADE"), nullable=True) + items = relationship("PubsubItem", back_populates="node", passive_deletes=True) affiliations = relationship("PubsubAffiliation", back_populates="node", passive_deletes=True) subscriptions = relationship("PubsubSub", back_populates="node", passive_deletes=True) + linked_node = relationship( + "PubsubNode", + remote_side=[id], + foreign_keys=[linked_node_id], + back_populates="linking_nodes" + ) + linking_nodes = relationship( + "PubsubNode", + foreign_keys=[linked_node_id], + back_populates="linked_node", + ) + + parent_node = relationship( + "PubsubNode", + remote_side=[id], + foreign_keys=[parent_node_id], + back_populates="child_nodes" + ) + child_nodes = relationship( + "PubsubNode", + foreign_keys=[parent_node_id], + back_populates="parent_node", + ) + def __str__(self): return f"Pubsub node {self.name!r} at {self.service}"