slidge 0.2.0a6__py3-none-any.whl → 0.2.0a9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
slidge/db/store.py CHANGED
@@ -13,7 +13,7 @@ from sqlalchemy.orm import Session, attributes
13
13
  from sqlalchemy.sql.functions import count
14
14
 
15
15
  from ..util.archive_msg import HistoryMessage
16
- from ..util.types import URL, CachedPresence
16
+ from ..util.types import URL, CachedPresence, ClientType
17
17
  from ..util.types import Hat as HatTuple
18
18
  from ..util.types import MamMetadata, MucAffiliation, MucRole
19
19
  from .meta import Base
@@ -65,9 +65,6 @@ class UpdatedMixin(EngineMixin):
65
65
  def __init__(self, *a, **kw):
66
66
  super().__init__(*a, **kw)
67
67
  with self.session() as session:
68
- session.execute(
69
- delete(self.model).where(~self.model.updated) # type:ignore
70
- )
71
68
  session.execute(update(self.model).values(updated=False)) # type:ignore
72
69
  session.commit()
73
70
 
@@ -133,18 +130,19 @@ class UserStore(EngineMixin):
133
130
  session.delete(self.get(jid))
134
131
  session.commit()
135
132
 
133
+ def set_avatar_hash(self, pk: int, h: str | None = None) -> None:
134
+ with self.session() as session:
135
+ session.execute(
136
+ update(GatewayUser).where(GatewayUser.id == pk).values(avatar_hash=h)
137
+ )
138
+ session.commit()
139
+
136
140
 
137
141
  class AvatarStore(EngineMixin):
138
142
  def get_by_url(self, url: URL | str) -> Optional[Avatar]:
139
143
  with self.session() as session:
140
144
  return session.execute(select(Avatar).where(Avatar.url == url)).scalar()
141
145
 
142
- def get_by_legacy_id(self, legacy_id: str) -> Optional[Avatar]:
143
- with self.session() as session:
144
- return session.execute(
145
- select(Avatar).where(Avatar.legacy_id == legacy_id)
146
- ).scalar()
147
-
148
146
  def get_by_pk(self, pk: int) -> Optional[Avatar]:
149
147
  with self.session() as session:
150
148
  return session.execute(select(Avatar).where(Avatar.id == pk)).scalar()
@@ -344,12 +342,14 @@ class ContactStore(UpdatedMixin):
344
342
  )
345
343
  session.commit()
346
344
 
347
- def set_avatar(self, contact_pk: int, avatar_pk: Optional[int]):
345
+ def set_avatar(
346
+ self, contact_pk: int, avatar_pk: Optional[int], avatar_legacy_id: Optional[str]
347
+ ):
348
348
  with self.session() as session:
349
349
  session.execute(
350
350
  update(Contact)
351
351
  .where(Contact.id == contact_pk)
352
- .values(avatar_id=avatar_pk)
352
+ .values(avatar_id=avatar_pk, avatar_legacy_id=avatar_legacy_id)
353
353
  )
354
354
  session.commit()
355
355
 
@@ -360,7 +360,7 @@ class ContactStore(UpdatedMixin):
360
360
  ).scalar()
361
361
  if contact is None or contact.avatar is None:
362
362
  return None
363
- return contact.avatar.legacy_id
363
+ return contact.avatar_legacy_id
364
364
 
365
365
  def update(self, contact: "LegacyContact", commit=True) -> int:
366
366
  with self.session() as session:
@@ -390,6 +390,7 @@ class ContactStore(UpdatedMixin):
390
390
  row.caps_ver = contact._caps_ver
391
391
  row.vcard = contact._vcard
392
392
  row.vcard_fetched = contact._vcard_fetched
393
+ row.client_type = contact.client_type
393
394
  session.add(row)
394
395
  if commit:
395
396
  session.commit()
@@ -450,6 +451,15 @@ class ContactStore(UpdatedMixin):
450
451
  session.execute(delete(Contact).where(Contact.id == contact_pk))
451
452
  session.commit()
452
453
 
454
+ def set_client_type(self, contact_pk: int, value: ClientType):
455
+ with self.session() as session:
456
+ session.execute(
457
+ update(Contact)
458
+ .where(Contact.id == contact_pk)
459
+ .values(client_type=value)
460
+ )
461
+ session.commit()
462
+
453
463
 
454
464
  class MAMStore(EngineMixin):
455
465
  def __init__(self, *a, **kw):
@@ -795,10 +805,14 @@ class RoomStore(UpdatedMixin):
795
805
  )
796
806
  session.commit()
797
807
 
798
- def set_avatar(self, room_pk: int, avatar_pk: int | None) -> None:
808
+ def set_avatar(
809
+ self, room_pk: int, avatar_pk: int | None, avatar_legacy_id: str | None
810
+ ) -> None:
799
811
  with self.session() as session:
800
812
  session.execute(
801
- update(Room).where(Room.id == room_pk).values(avatar_id=avatar_pk)
813
+ update(Room)
814
+ .where(Room.id == room_pk)
815
+ .values(avatar_id=avatar_pk, avatar_legacy_id=avatar_legacy_id)
802
816
  )
803
817
  session.commit()
804
818
 
@@ -807,7 +821,7 @@ class RoomStore(UpdatedMixin):
807
821
  room = session.execute(select(Room).where(Room.id == room_pk)).scalar()
808
822
  if room is None or room.avatar is None:
809
823
  return None
810
- return room.avatar.legacy_id
824
+ return room.avatar_legacy_id
811
825
 
812
826
  def get_by_jid(self, user_pk: int, jid: JID) -> Optional[Room]:
813
827
  if jid.resource:
slidge/group/room.py CHANGED
@@ -238,7 +238,9 @@ class LegacyMUC(
238
238
  for db_participant in self.xmpp.store.participants.get_all(
239
239
  self.pk, user_included=True
240
240
  ):
241
- participant = self.Participant.from_store(self.session, db_participant)
241
+ participant = self.Participant.from_store(
242
+ self.session, db_participant, muc=self
243
+ )
242
244
  yield participant
243
245
  return
244
246
 
@@ -250,7 +252,9 @@ class LegacyMUC(
250
252
  for db_participant in self.xmpp.store.participants.get_all(
251
253
  self.pk, user_included=True
252
254
  ):
253
- participant = self.Participant.from_store(self.session, db_participant)
255
+ participant = self.Participant.from_store(
256
+ self.session, db_participant, muc=self
257
+ )
254
258
  resources.add(participant.jid.resource)
255
259
  yield participant
256
260
  async for p in self.fill_participants():
@@ -570,7 +574,11 @@ class LegacyMUC(
570
574
  if self.pk is None:
571
575
  return
572
576
  assert self.pk is not None
573
- self.xmpp.store.rooms.set_avatar(self.pk, self._avatar_pk)
577
+ self.xmpp.store.rooms.set_avatar(
578
+ self.pk,
579
+ self._avatar_pk,
580
+ None if self.avatar_id is None else str(self.avatar_id),
581
+ )
574
582
  self.__send_configuration_change((104,))
575
583
  self._send_room_presence()
576
584
 
@@ -1216,7 +1224,12 @@ class LegacyMUC(
1216
1224
  muc._subject_setter = stored.subject_setter
1217
1225
  muc.archive = MessageArchive(muc.pk, session.xmpp.store.mam)
1218
1226
  muc._set_logger_name()
1219
- muc._set_avatar_from_store(stored)
1227
+ muc._AvatarMixin__avatar_unique_id = ( # type:ignore
1228
+ None
1229
+ if stored.avatar_legacy_id is None
1230
+ else session.xmpp.AVATAR_ID_TYPE(stored.avatar_legacy_id)
1231
+ )
1232
+ muc._avatar_pk = stored.avatar_id
1220
1233
  return muc
1221
1234
 
1222
1235
 
slidge/main.py CHANGED
@@ -15,6 +15,7 @@ https://git.sr.ht/~nicoco/slidge/tree/master/item/dev/confs/slidge-example.ini
15
15
 
16
16
  import asyncio
17
17
  import importlib
18
+ import inspect
18
19
  import logging
19
20
  import os
20
21
  import re
@@ -140,6 +141,11 @@ def main():
140
141
  if plugin_config_obj := getattr(
141
142
  legacy_module, "config", getattr(legacy_module, "Config", None)
142
143
  ):
144
+ # If the legacy module has default parameters that depend on dynamic defaults
145
+ # of the slidge main config, it needs to be refreshed at this point, because
146
+ # now the dynamic defaults are set.
147
+ if inspect.ismodule(plugin_config_obj):
148
+ importlib.reload(plugin_config_obj)
143
149
  logging.debug("Found a config object in plugin: %r", plugin_config_obj)
144
150
  ConfigModule.ENV_VAR_PREFIX += (
145
151
  f"_{config.LEGACY_MODULE.split('.')[-1].upper()}_"
@@ -152,12 +158,11 @@ def main():
152
158
 
153
159
  migrate()
154
160
 
155
- BaseGateway.store = SlidgeStore(get_engine(config.DB_URL))
161
+ store = SlidgeStore(get_engine(config.DB_URL))
162
+ BaseGateway.store = store
156
163
  gateway: BaseGateway = BaseGateway.get_unique_subclass()()
157
- avatar_cache.http = gateway.http
158
164
  avatar_cache.store = gateway.store.avatars
159
165
  avatar_cache.set_dir(config.HOME_DIR / "slidge_avatars_v3")
160
- avatar_cache.legacy_avatar_type = gateway.AVATAR_ID_TYPE
161
166
 
162
167
  PepAvatar.store = gateway.store
163
168
  PepNick.contact_store = gateway.store.contacts
slidge/migration.py CHANGED
@@ -5,8 +5,12 @@ from pathlib import Path
5
5
 
6
6
  from alembic import command
7
7
  from alembic.config import Config
8
+ from slixmpp import JID
8
9
 
9
10
  from .core import config
11
+ from .db.meta import get_engine
12
+ from .db.models import GatewayUser
13
+ from .db.store import SlidgeStore
10
14
 
11
15
 
12
16
  def remove_avatar_cache_v1():
@@ -26,9 +30,19 @@ def get_alembic_cfg() -> Config:
26
30
  return alembic_cfg
27
31
 
28
32
 
29
- def migrate():
33
+ def remove_resource_parts_from_users() -> None:
34
+ with SlidgeStore(get_engine(config.DB_URL)).session() as orm:
35
+ for user in orm.query(GatewayUser).all():
36
+ if user.jid.resource:
37
+ user.jid = JID(user.jid.bare)
38
+ orm.add(user)
39
+ orm.commit()
40
+
41
+
42
+ def migrate() -> None:
30
43
  remove_avatar_cache_v1()
31
44
  command.upgrade(get_alembic_cfg(), "head")
45
+ remove_resource_parts_from_users()
32
46
 
33
47
 
34
48
  def main():
slidge/util/test.py CHANGED
@@ -215,9 +215,16 @@ class SlidgeTest(SlixTestPlus):
215
215
  self.plugin, LegacyBookmarks, base_ok=True
216
216
  )
217
217
 
218
- engine = self.db_engine = create_engine("sqlite+pysqlite:///:memory:")
218
+ from sqlalchemy import log as sqlalchemy_log
219
+
220
+ sqlalchemy_log._add_default_handler = lambda x: None
221
+
222
+ engine = self.db_engine = create_engine(
223
+ "sqlite+pysqlite:///:memory:", echo=True
224
+ )
219
225
  Base.metadata.create_all(engine)
220
226
  BaseGateway.store = SlidgeStore(engine)
227
+ BaseGateway._test_mode = True
221
228
  try:
222
229
  self.xmpp = BaseGateway.get_self_or_unique_subclass()()
223
230
  except Exception:
slidge/util/types.py CHANGED
@@ -75,6 +75,10 @@ FieldType = Literal[
75
75
  ]
76
76
  MucAffiliation = Literal["owner", "admin", "member", "outcast", "none"]
77
77
  MucRole = Literal["visitor", "participant", "moderator", "none"]
78
+ # https://xmpp.org/registrar/disco-categories.html#client
79
+ ClientType = Literal[
80
+ "bot", "console", "game", "handheld", "pc", "phone", "sms", "tablet", "web"
81
+ ]
78
82
 
79
83
 
80
84
  @dataclass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: slidge
3
- Version: 0.2.0a6
3
+ Version: 0.2.0a9
4
4
  Summary: XMPP bridging framework
5
5
  Home-page: https://sr.ht/~nicoco/slidge/
6
6
  License: AGPL-3.0-or-later
@@ -10,16 +10,20 @@ Requires-Python: >=3.11,<4.0
10
10
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
11
11
  Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Topic :: Internet :: XMPP
14
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
13
15
  Requires-Dist: ConfigArgParse (>=1.5.3,<2.0.0)
14
16
  Requires-Dist: Pillow (>=10,<11)
15
17
  Requires-Dist: aiohttp[speedups] (>=3.8.3,<4.0.0)
16
18
  Requires-Dist: alembic (>=1.13.1,<2.0.0)
17
- Requires-Dist: blurhash-python (>=1.2.1,<2.0.0)
18
19
  Requires-Dist: pickle-secure (>=0.99.9,<0.100.0)
19
20
  Requires-Dist: python-magic (>=0.4.27,<0.5.0)
20
21
  Requires-Dist: qrcode (>=7.4.1,<8.0.0)
21
22
  Requires-Dist: slixmpp (>=1.8.5,<2.0.0)
22
23
  Requires-Dist: sqlalchemy (>=2.0.29,<3.0.0)
24
+ Requires-Dist: thumbhash (>=0.1.2,<0.2.0)
25
+ Project-URL: Bug tracker, https://todo.sr.ht/~nicoco/slidge
26
+ Project-URL: Chat room, https://conference.nicoco.fr:5281/muc_log/slidge/
23
27
  Project-URL: Documentation, https://slidge.im/
24
28
  Project-URL: Repository, https://git.sr.ht/~nicoco/slidge/
25
29
  Description-Content-Type: text/markdown
@@ -1,21 +1,21 @@
1
1
  slidge/__init__.py,sha256=S0tUjqpZlzsr8G4Y_1Xt-KCYB07qaknTB0OwHU8k29U,1587
2
2
  slidge/__main__.py,sha256=Y12eh1TD_C5MB50KgEAuMffGnRFCvKYFKHD4UYSmHA0,72
3
- slidge/__version__.py,sha256=Z2v182VfCCHc2NnkauNdFLVe5MwGg5cg8dRIWwfmsHM,170
3
+ slidge/__version__.py,sha256=9y4M-LYXgK7-PIasL6QWLN6L5LRaek-yXy_SekzwWrg,170
4
4
  slidge/command/__init__.py,sha256=UYf1mjCYbZ5G7PIgaFTWSQRAzEJkQ6dTH8Fu_e_XnO0,613
5
5
  slidge/command/adhoc.py,sha256=5xLLoWyUJqCJB7kAwD2VKYTl_7MObCsgdz-qg_WkWGs,9417
6
6
  slidge/command/admin.py,sha256=x_kJ0TJhzf6d3OBIOXFjudZFO8bRYUG919td7OjMCug,6008
7
7
  slidge/command/base.py,sha256=xTlzxAbTWTpbFgQ0FxKjmp3ZImzempwJvGn9UiVUUTc,13044
8
8
  slidge/command/categories.py,sha256=BJCfaga2qoAxnHfgHD7I_RKZuBA5nnNOukkWHJwsUFE,99
9
- slidge/command/chat_command.py,sha256=kMnxrzmD7LhWgyO1w9Rgz1eA7PhfAJ2Rf34YWjoKrwQ,9975
9
+ slidge/command/chat_command.py,sha256=VBs6IuDka1IyyMzz0ZyE9zMImaEzUZLcnffxq_vwb4M,10565
10
10
  slidge/command/register.py,sha256=fzPcGUoJtainnDOiC13gWV-uYLuJcsmdKGJ-jXT1qIo,6697
11
- slidge/command/user.py,sha256=nJnoU4t1r9oPkFFHSHHwSY8WOQNLQn9mMcwZp-yZaKA,11422
11
+ slidge/command/user.py,sha256=uFheYOprhypkHEEl6qSTEM7T2N28xXaDi7v1he-AET8,11512
12
12
  slidge/contact/__init__.py,sha256=WMMaHk7UW7YT9EH2LtPdkU0bHQaOp4ikBhbBQskmoc8,191
13
- slidge/contact/contact.py,sha256=yzemaELpe256B43gUXYc9CLjFhwSjr7-PwkY0uxVQfc,22169
14
- slidge/contact/roster.py,sha256=2UPuf2XkCdt9mdjhbATxxIH5dyIiJaxA0en8t1BgJuc,9989
13
+ slidge/contact/contact.py,sha256=kKtJ9NPLS9DPVyyahx_K-Mtp5k5UQdQJZavC1XCmWlc,23104
14
+ slidge/contact/roster.py,sha256=YF5NiParDKYNqW52fu1xSVW1skR-guy7YzIQ5kDYoDk,9874
15
15
  slidge/core/__init__.py,sha256=RG7Jj5JCJERjhqJ31lOLYV-7bH_oblClQD1KF9LsTXo,68
16
16
  slidge/core/config.py,sha256=leNcN_TI0Ka1hhzOHx7cBW3fNj5xZwsiv9l8AfRY_vU,7630
17
17
  slidge/core/gateway/__init__.py,sha256=rZckY2gAE-mon77_DSsAW1XtWqhBAETE2d4FqZ8pJXk,58
18
- slidge/core/gateway/base.py,sha256=EWqDLhkCcVUJf0Cy-PZPYxdIEhXckHv1-XG7GlHYcdQ,38491
18
+ slidge/core/gateway/base.py,sha256=Dxy39bAgOvJ-vN1RA9PU821YYuvkp_V06y_-vUDW7bU,38752
19
19
  slidge/core/gateway/caps.py,sha256=jemB4tB_2MTAxqQw5Bs4b7qNQ8gLPuAve0aoH6TzLEs,1937
20
20
  slidge/core/gateway/delivery_receipt.py,sha256=AT_9gvZrtWpSRsDJcYjE8CmF7TW-YBbUPdqNW5zWAdo,1352
21
21
  slidge/core/gateway/disco.py,sha256=uazgDXSDb5KrardjPCvElItARcxkeBRohtx82A2BlCQ,2203
@@ -25,11 +25,11 @@ slidge/core/gateway/ping.py,sha256=_zzPkjqvxjTxLNP1jbj0WVLMaybxbYqrKDRM5jHSDjs,1
25
25
  slidge/core/gateway/presence.py,sha256=Ls8IY4uNQaW8F3F1CpRhfyFIVbd_py_VkZyJKMMei8s,2732
26
26
  slidge/core/gateway/registration.py,sha256=JXwIQ-QqZCPXEmCU2G8FvIYDGvD8L8CqGb_Qkbycgt0,2303
27
27
  slidge/core/gateway/search.py,sha256=08ds6gvzX3EnTH-AU8X8J8JKEKYaSrRGTFwwClTT-Rc,3495
28
- slidge/core/gateway/session_dispatcher.py,sha256=F8YGUCB7hA1PNsGgQDaUYHmLnf4e8NWptIh-9ra_43c,32930
28
+ slidge/core/gateway/session_dispatcher.py,sha256=FBCbMNNa3SQCd2n_NEdD5q7cjdEgUHGuI_DIWh5cTUY,33202
29
29
  slidge/core/gateway/vcard_temp.py,sha256=cnzHZO6qF8OUWSvBieEdNAV_Ndv1ixZOzBCBXy2Vopw,4637
30
30
  slidge/core/mixins/__init__.py,sha256=muReAzgvENgMvlfm0Fpe6BQFfm2EMjoDe9ZhGgo6Vig,627
31
- slidge/core/mixins/attachment.py,sha256=YXuObz68eem2AND1q-RBeZ-X9Zi_IlUgx0DRMiwM3Xw,18706
32
- slidge/core/mixins/avatar.py,sha256=ke3cwm6Iiz1AM0_SiARTUTU2nGYskPZlxtFrXKQT5fI,7812
31
+ slidge/core/mixins/attachment.py,sha256=5Xa_GkSL_rRTC45TRjW98jztk__4M5P-3EG4IF91K0c,19022
32
+ slidge/core/mixins/avatar.py,sha256=kGIIZzLSNuxF9bIvt5Bv03_uT_pU5QV1kS7cRu6-GUA,7874
33
33
  slidge/core/mixins/base.py,sha256=9hjf2Pw5r0poSi1Abv-_znk83Kngsu9EXTf05gpFDdI,768
34
34
  slidge/core/mixins/db.py,sha256=5Qpegd7D8e5TLXLLINYcf_DuVdN-7wNmsfztUuFYPcU,442
35
35
  slidge/core/mixins/disco.py,sha256=jk3Z1B6zTuisHv8VKNRJodIo0ee5btYHh2ZrlflPj_Q,3670
@@ -38,8 +38,8 @@ slidge/core/mixins/message.py,sha256=jJz_peNQmDf0uVQcI7TWG7oUaSGjUL8eiulNicGgWhI
38
38
  slidge/core/mixins/message_maker.py,sha256=TcCutHi0sIwL6beJNkN7XyR0aDIbA0xZyxd2Gc9ulG4,6022
39
39
  slidge/core/mixins/presence.py,sha256=yywo6KAw8C7GaZSMrSMuioNfhW08MrnobHt8XbHd0q8,7891
40
40
  slidge/core/mixins/recipient.py,sha256=U-YppozUO8pA94jmD3-qmhkykTebPNaOVWc3JDPC9w8,1302
41
- slidge/core/pubsub.py,sha256=m70ahpZLKUWdBb4fG4e90UpPhdcGGZJD31oDU_O12Rg,12434
42
- slidge/core/session.py,sha256=IUZur7huNj066uy-Nh-I-R0etYmPJccgXFIimcSQ148,27161
41
+ slidge/core/pubsub.py,sha256=ITOhgUKdYh6oJBpmZ8nevDQlYT4WJMC-k7Z76YchXqY,11906
42
+ slidge/core/session.py,sha256=iYRdG_CZYiH-a4A69vqKLf-vnSF_N-XnxEF1veBMCWk,27182
43
43
  slidge/db/__init__.py,sha256=EBDH1JSEhgqYcli2Bw11CRC749wJk8AOucgBzmhDSvU,105
44
44
  slidge/db/alembic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  slidge/db/alembic/env.py,sha256=hsBlRNs0zF5diSHGRSa8Fi3qRVQDA2rJdR41AEIdvxc,1642
@@ -49,26 +49,28 @@ slidge/db/alembic/versions/09f27f098baa_add_missing_attributes_in_room.py,sha256
49
49
  slidge/db/alembic/versions/2461390c0af2_store_contacts_caps_verstring_in_db.py,sha256=CLB-kOP9Rc0FJIKDLef912L5sYkjpTIPC8fhrIdrC7k,1084
50
50
  slidge/db/alembic/versions/29f5280c61aa_store_subject_setter_in_room.py,sha256=f8TFS28CXjGhvIn41UYMoHYeODfqhKfo4O7gk-JwA1E,1134
51
51
  slidge/db/alembic/versions/2b1f45ab7379_store_room_subject_setter_by_nickname.py,sha256=CMVP2wFz6s7t57eWdSaGtck8BXzfVPJhHE5AoWi34tI,1359
52
- slidge/db/alembic/versions/5bd48bfdffa2_lift_room_legacy_id_constraint.py,sha256=wk958rfBuop9mw6wI_dDQUeTdiCCV6GJb-WcP4h1xVs,1340
52
+ slidge/db/alembic/versions/3071e0fa69d4_add_contact_client_type.py,sha256=O5BY1vpbtuYT5j6i3EMuuJAf6loIYT1kco8c-c6TF5g,1391
53
+ slidge/db/alembic/versions/5bd48bfdffa2_lift_room_legacy_id_constraint.py,sha256=cObfqUzqdNezIeJdHe7YKFwRwtelXk8y1PwZ75chXDc,1629
53
54
  slidge/db/alembic/versions/82a4af84b679_add_muc_history_filled.py,sha256=g37po0ydp8ZmzJrE5oFV7GscnploxjCtPDpw28SqVGk,1429
54
55
  slidge/db/alembic/versions/8b993243a536_add_vcard_content_to_contact_table.py,sha256=18tG8B03Kq8Qz_-mMd28Beed6jow8XNTtrz7gT5QY3g,1210
55
56
  slidge/db/alembic/versions/8d2ced764698_rely_on_db_to_store_contacts_rooms_and_.py,sha256=olXaOEEsUSasqaaKdlP1cBODsMhmV1i90qbpDM2vTm4,4696
56
- slidge/db/alembic/versions/aa9d82a7f6ef_db_creation.py,sha256=XOf6Oiot2wLsngvUwrM30LbuVNm549FWXnKMJijBjVo,2578
57
+ slidge/db/alembic/versions/aa9d82a7f6ef_db_creation.py,sha256=XFHaHjPMoxKxKRjNBnYHBzMtS6K38ENcsGzgzlyp60g,2649
58
+ slidge/db/alembic/versions/abba1ae0edb3_store_avatar_legacy_id_in_the_contact_.py,sha256=tLnVrbtWzxSPXACIhWPeLxxCIFdnVxK-izoNZxbvA3A,2701
57
59
  slidge/db/alembic/versions/b33993e87db3_move_everything_to_persistent_db.py,sha256=2tiRxoC9PYOQn6XQrwK0JTEsb45Pzp2PsKoZSS4rcIA,7564
58
60
  slidge/db/alembic/versions/b64b1a793483_add_source_and_legacy_id_for_archived_.py,sha256=N6HYpFBhMckAFLZFW8PY8Us1qzXlauEQiDwEYwd9_K8,1422
59
61
  slidge/db/alembic/versions/c4a8ec35a0e8_per_room_user_nick.py,sha256=jjQmlRv6nqdm5q6LbwVpSUSkTBj1c76Hiq8e8q77q3g,933
60
62
  slidge/db/alembic/versions/e91195719c2c_store_users_avatars_persistently.py,sha256=8Ga3VFgKrzMs_-B8OPtfP-0rey_MFaDg-QGtSbaft3o,640
61
- slidge/db/avatar.py,sha256=C3BrEkEJbBEEY42DjXMacl8wOXgooUQ9KgIOUPs9620,7881
63
+ slidge/db/avatar.py,sha256=FfRt2Vu11ZKD9F3x1_drawvUd-TDE3mp7SE3BZ9hOOg,6467
62
64
  slidge/db/meta.py,sha256=v1Jf-npZ28QwdGpsLQWLBHEbEP3-jnPrygRg05tJ_Iw,1831
63
- slidge/db/models.py,sha256=UoQnDYGuwp8VPYpqMKS9uFez_Vc8IMHtLADGlDCXC1Q,13179
64
- slidge/db/store.py,sha256=j-8MvzC_HVzjYXEimAq8ViPSZfrT90QLs1U3FUoYPJs,41597
65
+ slidge/db/models.py,sha256=yO4hM0VE1cQdDqWiZU1YW5ZjzwSnHUTavkGbkAMEB9A,13297
66
+ slidge/db/store.py,sha256=jBkjTVXIg_N558rEfaDWzQ7mnIYMp2ziTk0o9KRVioo,42071
65
67
  slidge/group/__init__.py,sha256=yFt7cHqeaKIMN6f9ZyhhspOcJJvBtLedGv-iICG7lto,258
66
68
  slidge/group/archive.py,sha256=xGPkdSk8-BT6t6lNVo1FEwiFVAttoxCma8Tsyk5r8Kg,5279
67
69
  slidge/group/bookmarks.py,sha256=_LDf7A7aWkwPH88v7c-mOp8VJs3gSFM1-uCqSb4ThO8,5825
68
70
  slidge/group/participant.py,sha256=VNMtqr98QVuYgiTsJ9BaaIG1noz-xe3ewyKhLeDRhBk,17033
69
- slidge/group/room.py,sha256=KqVTEwpoVvwoDqAe-eIL7-ASNebuThRL4EAZsFtdCcY,45384
70
- slidge/main.py,sha256=TbkG5m1SgNmfaZ7TOD5VGTh4Q52XltLJayWnan8M9cw,5986
71
- slidge/migration.py,sha256=qUrux9dYCtOfFjPIlvGfWjoyqhkdxzaOByJRqTmCoUI,1072
71
+ slidge/group/room.py,sha256=v5mCV7ZrCdgXtDu_K7oDTdtjNYJV-y9wPmlg_RN_4s4,45789
72
+ slidge/main.py,sha256=8oND7xpR3eLw7b62fT61UhYlmNp_9gv3tNz2N3xR7-c,6232
73
+ slidge/migration.py,sha256=4BJmPIRB56_WIhRTqBFIIBXuvnhhBjjOMl4CE7jY6oc,1541
72
74
  slidge/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
75
  slidge/slixfix/__init__.py,sha256=7GevigEt68hwgwHqXcsFogN5jRXRHPeqR6kwODCH4hc,3055
74
76
  slidge/slixfix/link_preview/__init__.py,sha256=TDPTSEH5FQxgGpQpQIde-D72AHg-6YVWG-tOj4KpKmU,290
@@ -108,11 +110,11 @@ slidge/util/__init__.py,sha256=BELovoTMPcPPGz3D48esBr8A4BRRHXTvavfgnArBgEc,301
108
110
  slidge/util/archive_msg.py,sha256=xXAR0BI5r3d6KKWjae9594izCOv6iI03z2WLuTecNw8,1724
109
111
  slidge/util/conf.py,sha256=1j2OnOsCBar1tOObErhXR5RC3Vl3faliOZ1U8J3My58,6613
110
112
  slidge/util/db.py,sha256=4LxZj8oBYgiSnyBUnF_ALjr0TblkfNQq_p28sCfkHMY,242
111
- slidge/util/test.py,sha256=84GCSsWDaf7ukrMUaej2tuedY2Uxje5JljUt3x-V4mM,13645
112
- slidge/util/types.py,sha256=Gif-Z9NVd_eTei1uM3_KOsdok3B1yMQwdOkOzf9vheE,5224
113
+ slidge/util/test.py,sha256=S8Kp5uJlWYPvnw8HMHUPlbrvsqwdBLs9MI99svMfjLg,13832
114
+ slidge/util/types.py,sha256=o_5rbwfL_3e73JPT1t9o3kyDpJscFHzn4_bt8i3LoSk,5386
113
115
  slidge/util/util.py,sha256=8JeE0QObNGQr_Tw4OFPwQSz_EB_zh_0t9IJmNNhW0ic,9114
114
- slidge-0.2.0a6.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
115
- slidge-0.2.0a6.dist-info/METADATA,sha256=Y3urIslvpvtG2sPaOfhxpOoRPfxfnRIrxqzuZGT5RrM,4723
116
- slidge-0.2.0a6.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
117
- slidge-0.2.0a6.dist-info/entry_points.txt,sha256=SNl72KSocF5plsu_67xyH6wVWfGTXQbzkQgXbLtzDrQ,47
118
- slidge-0.2.0a6.dist-info/RECORD,,
116
+ slidge-0.2.0a9.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
117
+ slidge-0.2.0a9.dist-info/METADATA,sha256=UYbPeUa9y7-m4f1ulm4CFYAdKYoGbf53gC-n_lf6aoI,4962
118
+ slidge-0.2.0a9.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
119
+ slidge-0.2.0a9.dist-info/entry_points.txt,sha256=SNl72KSocF5plsu_67xyH6wVWfGTXQbzkQgXbLtzDrQ,47
120
+ slidge-0.2.0a9.dist-info/RECORD,,