Mercurial > libervia-backend
diff sat/memory/sqla_mapping.py @ 3744:658ddbabaf36
core (memory/sqla): new table/mapping to handle Pubsub node subscriptions:
node subscriptions can now be cached, this can be useful for components which must keep
track of subscibers.
rel 364
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 22 Mar 2022 17:00:42 +0100 |
parents | 162866ca4be7 |
children | 24c1c06c865b |
line wrap: on
line diff
--- a/sat/memory/sqla_mapping.py Tue Mar 22 17:00:42 2022 +0100 +++ b/sat/memory/sqla_mapping.py Tue Mar 22 17:00:42 2022 +0100 @@ -60,6 +60,11 @@ NO_SYNC = 4 +class SubscriptionState(enum.Enum): + SUBSCRIBED = 1 + PENDING = 2 + + class LegacyPickle(TypeDecorator): """Handle troubles with data pickled by former version of SàT @@ -510,11 +515,37 @@ extra = Column(JSON) items = relationship("PubsubItem", back_populates="node", passive_deletes=True) + subscriptions = relationship("PubsubSub", back_populates="node", passive_deletes=True) def __str__(self): return f"Pubsub node {self.name!r} at {self.service}" +class PubsubSub(Base): + """Subscriptions to pubsub nodes + + Used by components managing a pubsub service + """ + __tablename__ = "pubsub_subs" + __table_args__ = ( + UniqueConstraint("node_id", "subscriber"), + ) + + id = Column(Integer, primary_key=True) + node_id = Column(ForeignKey("pubsub_nodes.id", ondelete="CASCADE"), nullable=False) + subscriber = Column(JID) + state = Column( + Enum( + SubscriptionState, + name="state", + create_constraint=True, + ), + nullable=True + ) + + node = relationship("PubsubNode", back_populates="subscriptions") + + class PubsubItem(Base): __tablename__ = "pubsub_items" __table_args__ = (