slidge 0.2.0a1__tar.gz → 0.2.0a2__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. {slidge-0.2.0a1 → slidge-0.2.0a2}/PKG-INFO +1 -1
  2. {slidge-0.2.0a1 → slidge-0.2.0a2}/pyproject.toml +1 -1
  3. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/__version__.py +1 -1
  4. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/contact/contact.py +33 -5
  5. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/store.py +2 -0
  6. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/group/room.py +8 -2
  7. {slidge-0.2.0a1 → slidge-0.2.0a2}/LICENSE +0 -0
  8. {slidge-0.2.0a1 → slidge-0.2.0a2}/README.md +0 -0
  9. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/__init__.py +0 -0
  10. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/__main__.py +0 -0
  11. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/command/__init__.py +0 -0
  12. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/command/adhoc.py +0 -0
  13. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/command/admin.py +0 -0
  14. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/command/base.py +0 -0
  15. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/command/categories.py +0 -0
  16. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/command/chat_command.py +0 -0
  17. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/command/register.py +0 -0
  18. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/command/user.py +0 -0
  19. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/contact/__init__.py +0 -0
  20. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/contact/roster.py +0 -0
  21. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/__init__.py +0 -0
  22. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/config.py +0 -0
  23. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/__init__.py +0 -0
  24. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/base.py +0 -0
  25. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/caps.py +0 -0
  26. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/delivery_receipt.py +0 -0
  27. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/disco.py +0 -0
  28. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/mam.py +0 -0
  29. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/muc_admin.py +0 -0
  30. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/ping.py +0 -0
  31. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/presence.py +0 -0
  32. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/registration.py +0 -0
  33. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/search.py +0 -0
  34. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/session_dispatcher.py +0 -0
  35. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/gateway/vcard_temp.py +0 -0
  36. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/__init__.py +0 -0
  37. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/attachment.py +0 -0
  38. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/avatar.py +0 -0
  39. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/base.py +0 -0
  40. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/db.py +0 -0
  41. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/disco.py +0 -0
  42. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/lock.py +0 -0
  43. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/message.py +0 -0
  44. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/message_maker.py +0 -0
  45. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/presence.py +0 -0
  46. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/mixins/recipient.py +0 -0
  47. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/pubsub.py +0 -0
  48. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/core/session.py +0 -0
  49. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/__init__.py +0 -0
  50. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/env.py +0 -0
  51. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/script.py.mako +0 -0
  52. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/09f27f098baa_add_missing_attributes_in_room.py +0 -0
  53. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/2461390c0af2_store_contacts_caps_verstring_in_db.py +0 -0
  54. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/29f5280c61aa_store_subject_setter_in_room.py +0 -0
  55. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/2b1f45ab7379_store_room_subject_setter_by_nickname.py +0 -0
  56. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/82a4af84b679_add_muc_history_filled.py +0 -0
  57. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/8d2ced764698_rely_on_db_to_store_contacts_rooms_and_.py +0 -0
  58. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/aa9d82a7f6ef_db_creation.py +0 -0
  59. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/b33993e87db3_move_everything_to_persistent_db.py +0 -0
  60. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/b64b1a793483_add_source_and_legacy_id_for_archived_.py +0 -0
  61. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/c4a8ec35a0e8_per_room_user_nick.py +0 -0
  62. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/alembic/versions/e91195719c2c_store_users_avatars_persistently.py +0 -0
  63. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/avatar.py +0 -0
  64. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/meta.py +0 -0
  65. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/db/models.py +0 -0
  66. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/group/__init__.py +0 -0
  67. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/group/archive.py +0 -0
  68. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/group/bookmarks.py +0 -0
  69. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/group/participant.py +0 -0
  70. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/main.py +0 -0
  71. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/migration.py +0 -0
  72. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/py.typed +0 -0
  73. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/__init__.py +0 -0
  74. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/link_preview/__init__.py +0 -0
  75. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/link_preview/link_preview.py +0 -0
  76. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/link_preview/stanza.py +0 -0
  77. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/roster.py +0 -0
  78. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0077/__init__.py +0 -0
  79. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0077/register.py +0 -0
  80. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0077/stanza.py +0 -0
  81. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0100/__init__.py +0 -0
  82. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0100/gateway.py +0 -0
  83. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0100/stanza.py +0 -0
  84. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0153/__init__.py +0 -0
  85. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0153/stanza.py +0 -0
  86. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0153/vcard_avatar.py +0 -0
  87. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0264/__init__.py +0 -0
  88. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0264/stanza.py +0 -0
  89. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0264/thumbnail.py +0 -0
  90. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0292/__init__.py +0 -0
  91. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0292/vcard4.py +0 -0
  92. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0313/__init__.py +0 -0
  93. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0313/mam.py +0 -0
  94. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0313/stanza.py +0 -0
  95. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0317/__init__.py +0 -0
  96. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0317/hats.py +0 -0
  97. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0317/stanza.py +0 -0
  98. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0356_old/__init__.py +0 -0
  99. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0356_old/privilege.py +0 -0
  100. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0356_old/stanza.py +0 -0
  101. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0424/__init__.py +0 -0
  102. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0424/retraction.py +0 -0
  103. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0424/stanza.py +0 -0
  104. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0490/__init__.py +0 -0
  105. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0490/mds.py +0 -0
  106. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/slixfix/xep_0490/stanza.py +0 -0
  107. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/util/__init__.py +0 -0
  108. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/util/archive_msg.py +0 -0
  109. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/util/conf.py +0 -0
  110. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/util/db.py +0 -0
  111. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/util/test.py +0 -0
  112. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/util/types.py +0 -0
  113. {slidge-0.2.0a1 → slidge-0.2.0a2}/slidge/util/util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: slidge
3
- Version: 0.2.0a1
3
+ Version: 0.2.0a2
4
4
  Summary: XMPP bridging framework
5
5
  Home-page: https://sr.ht/~nicoco/slidge/
6
6
  License: AGPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "slidge"
3
- version = "0.2.0alpha1"
3
+ version = "0.2.0alpha2"
4
4
  description = "XMPP bridging framework"
5
5
  authors = ["Nicolas Cedilnik <nicoco@nicoco.fr>"]
6
6
  readme = "README.md"
@@ -2,4 +2,4 @@ from slidge.util.util import get_version # noqa: F401
2
2
 
3
3
  # this is modified before publish, but if someone cloned from the repo,
4
4
  # it can help
5
- __version__ = "0.2.0alpha1"
5
+ __version__ = "0.2.0alpha2"
@@ -120,7 +120,8 @@ class LegacyContact(
120
120
  self.xmpp = session.xmpp
121
121
  self.jid = JID(self.jid_username + "@" + self.xmpp.boundjid.bare)
122
122
  self.jid.resource = self.RESOURCE
123
- self.log = logging.getLogger(f"{self.user_jid.bare}:{self.jid.bare}")
123
+ self.log = logging.getLogger(self.jid.bare)
124
+ self._set_logger_name()
124
125
  self._is_friend: bool = False
125
126
  self._added_to_roster = False
126
127
  self._caps_ver: str | None = None
@@ -136,6 +137,7 @@ class LegacyContact(
136
137
  self._is_friend = value
137
138
  if self._updating_info:
138
139
  return
140
+ self.__ensure_pk()
139
141
  assert self.contact_pk is not None
140
142
  self.xmpp.store.contacts.set_friend(self.contact_pk, value)
141
143
 
@@ -157,7 +159,10 @@ class LegacyContact(
157
159
 
158
160
  @property
159
161
  def participants(self) -> list["LegacyParticipant"]:
160
- assert self.contact_pk is not None
162
+ if self.contact_pk is None:
163
+ return []
164
+
165
+ self.__ensure_pk()
161
166
  from ..group.participant import LegacyParticipant
162
167
 
163
168
  return [
@@ -171,8 +176,25 @@ class LegacyContact(
171
176
  def user_jid(self):
172
177
  return self.session.user_jid
173
178
 
179
+ def _set_logger_name(self):
180
+ self.log.name = f"{self.user_jid.bare}:contact:{self}"
181
+
174
182
  def __repr__(self):
175
- return f"<Contact {self.jid.bare} - {self.name or self.legacy_id}'>"
183
+ return f"<Contact #{self.contact_pk} '{self.name}' ({self.legacy_id} - {self.jid.local})'>"
184
+
185
+ def __ensure_pk(self):
186
+ if self.contact_pk is not None:
187
+ return
188
+ with self.xmpp.store.session() as orm:
189
+ orm.commit()
190
+ stored = self.xmpp.store.contacts.get_by_legacy_id(
191
+ self.user_pk, str(self.legacy_id)
192
+ )
193
+ if stored is None:
194
+ self.log.error("Cannot find our primary key!", stack_info=True)
195
+ raise RuntimeError("Cannot find our primary key!")
196
+ self.contact_pk = stored.id
197
+ assert self.contact_pk is not None
176
198
 
177
199
  def __get_subscription_string(self):
178
200
  if self.is_friend:
@@ -234,6 +256,7 @@ class LegacyContact(
234
256
  and self.xmpp.MARK_ALL_MESSAGES
235
257
  and is_markable(stanza)
236
258
  ):
259
+ self.__ensure_pk()
237
260
  assert self.contact_pk is not None
238
261
  self.xmpp.store.contacts.add_to_sent(self.contact_pk, stanza["id"])
239
262
  stanza["to"] = self.user_jid
@@ -254,6 +277,7 @@ class LegacyContact(
254
277
  :param horizon_xmpp_id: The latest message
255
278
  :return: A list of XMPP ids or None if horizon_xmpp_id was not found
256
279
  """
280
+ self.__ensure_pk()
257
281
  assert self.contact_pk is not None
258
282
  return self.xmpp.store.contacts.pop_sent_up_to(self.contact_pk, horizon_xmpp_id)
259
283
 
@@ -269,6 +293,7 @@ class LegacyContact(
269
293
  if self._name == n:
270
294
  return
271
295
  self._name = n
296
+ self._set_logger_name()
272
297
  if self.is_friend and self.added_to_roster:
273
298
  self.xmpp.pubsub.broadcast_nick(
274
299
  user_jid=self.user_jid, jid=self.jid.bare, nick=n
@@ -279,6 +304,7 @@ class LegacyContact(
279
304
  return
280
305
  for p in self.participants:
281
306
  p.nickname = n
307
+ self.__ensure_pk()
282
308
  assert self.contact_pk is not None
283
309
  self.xmpp.store.contacts.update_nick(self.contact_pk, n)
284
310
 
@@ -293,6 +319,7 @@ class LegacyContact(
293
319
  if self.contact_pk is None:
294
320
  # happens in LegacyRoster.fill(), the contact primary key is not
295
321
  # set yet, but this will eventually be called in LegacyRoster.__finish_init_contact
322
+ self.log.debug("Not setting avatar PK")
296
323
  return
297
324
  self.xmpp.store.contacts.set_avatar(self.contact_pk, self._avatar_pk)
298
325
  for p in self.participants:
@@ -430,7 +457,7 @@ class LegacyContact(
430
457
  """
431
458
  self.is_friend = True
432
459
  self.added_to_roster = True
433
- assert self.contact_pk is not None
460
+ self.__ensure_pk()
434
461
  self.log.debug("Accepting friend request")
435
462
  presence = self._make_presence(ptype="subscribed", pstatus=text, bare=True)
436
463
  self._send(presence, nick=True)
@@ -554,8 +581,9 @@ class LegacyContact(
554
581
  contact.added_to_roster = stored.added_to_roster
555
582
  if (data := stored.extra_attributes) is not None:
556
583
  contact.deserialize_extra_attributes(data)
557
- contact._set_avatar_from_store(stored)
558
584
  contact._caps_ver = stored.caps_ver
585
+ contact._set_logger_name()
586
+ contact._set_avatar_from_store(stored)
559
587
  return contact
560
588
 
561
589
 
@@ -32,6 +32,7 @@ from .models import (
32
32
  XmppIdsMulti,
33
33
  XmppToLegacyEnum,
34
34
  XmppToLegacyIds,
35
+ participant_hats,
35
36
  )
36
37
 
37
38
  if TYPE_CHECKING:
@@ -935,6 +936,7 @@ class ParticipantStore(EngineMixin):
935
936
  with self.session() as session:
936
937
  session.execute(delete(Participant))
937
938
  session.execute(delete(Hat))
939
+ session.execute(delete(participant_hats))
938
940
  session.commit()
939
941
 
940
942
  def add(self, room_pk: int, nickname: str) -> int:
@@ -131,7 +131,6 @@ class LegacyMUC(
131
131
  def __init__(self, session: "BaseSession", legacy_id: LegacyGroupIdType, jid: JID):
132
132
  self.session = session
133
133
  self.xmpp: "BaseGateway" = session.xmpp
134
- self.log = logging.getLogger(f"{self.user_jid.bare}:muc:{jid}")
135
134
 
136
135
  self.legacy_id = legacy_id
137
136
  self.jid = jid
@@ -156,6 +155,8 @@ class LegacyMUC(
156
155
 
157
156
  self._n_participants: Optional[int] = None
158
157
 
158
+ self.log = logging.getLogger(self.jid.bare)
159
+ self._set_logger_name()
159
160
  super().__init__()
160
161
 
161
162
  @property
@@ -176,8 +177,11 @@ class LegacyMUC(
176
177
  def user_jid(self):
177
178
  return self.session.user_jid
178
179
 
180
+ def _set_logger_name(self):
181
+ self.log = logging.getLogger(f"{self.user_jid}:muc:{self}")
182
+
179
183
  def __repr__(self):
180
- return f"<MUC {self.legacy_id}/{self.jid}/{self.name}>"
184
+ return f"<MUC #{self.pk} '{self.name}' ({self.legacy_id} - {self.jid.local})'>"
181
185
 
182
186
  @property
183
187
  def subject_date(self) -> Optional[datetime]:
@@ -287,6 +291,7 @@ class LegacyMUC(
287
291
  if self.DISCO_NAME == n:
288
292
  return
289
293
  self.DISCO_NAME = n
294
+ self._set_logger_name()
290
295
  self.__send_configuration_change((104,))
291
296
  if self._updating_info:
292
297
  return
@@ -1207,6 +1212,7 @@ class LegacyMUC(
1207
1212
  muc._user_resources = set(json.loads(stored.user_resources))
1208
1213
  muc._subject_setter = stored.subject_setter
1209
1214
  muc.archive = MessageArchive(muc.pk, session.xmpp.store.mam)
1215
+ muc._set_logger_name()
1210
1216
  muc._set_avatar_from_store(stored)
1211
1217
  return muc
1212
1218
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes