slidge 0.2.0a9__py3-none-any.whl → 0.2.0a10__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.
Files changed (44) hide show
  1. slidge/__version__.py +1 -1
  2. slidge/command/adhoc.py +1 -1
  3. slidge/command/base.py +4 -4
  4. slidge/contact/roster.py +7 -0
  5. slidge/core/dispatcher/__init__.py +3 -0
  6. slidge/core/{gateway → dispatcher}/caps.py +6 -4
  7. slidge/core/{gateway → dispatcher}/disco.py +11 -17
  8. slidge/core/dispatcher/message/__init__.py +10 -0
  9. slidge/core/dispatcher/message/chat_state.py +40 -0
  10. slidge/core/dispatcher/message/marker.py +67 -0
  11. slidge/core/dispatcher/message/message.py +397 -0
  12. slidge/core/dispatcher/muc/__init__.py +12 -0
  13. slidge/core/dispatcher/muc/admin.py +98 -0
  14. slidge/core/{gateway → dispatcher/muc}/mam.py +26 -15
  15. slidge/core/dispatcher/muc/misc.py +118 -0
  16. slidge/core/dispatcher/muc/owner.py +96 -0
  17. slidge/core/{gateway → dispatcher/muc}/ping.py +10 -15
  18. slidge/core/dispatcher/presence.py +177 -0
  19. slidge/core/{gateway → dispatcher}/registration.py +23 -2
  20. slidge/core/{gateway → dispatcher}/search.py +9 -14
  21. slidge/core/dispatcher/session_dispatcher.py +84 -0
  22. slidge/core/dispatcher/util.py +174 -0
  23. slidge/core/{gateway/vcard_temp.py → dispatcher/vcard.py} +26 -12
  24. slidge/core/{gateway/base.py → gateway.py} +42 -137
  25. slidge/core/mixins/base.py +2 -2
  26. slidge/core/mixins/message.py +10 -4
  27. slidge/core/pubsub.py +2 -1
  28. slidge/core/session.py +28 -2
  29. slidge/db/alembic/versions/45c24cc73c91_add_bob.py +42 -0
  30. slidge/db/models.py +13 -0
  31. slidge/db/store.py +128 -2
  32. slidge/{core/gateway → slixfix}/delivery_receipt.py +1 -1
  33. slidge/util/test.py +5 -1
  34. slidge/util/types.py +6 -0
  35. slidge/util/util.py +5 -2
  36. {slidge-0.2.0a9.dist-info → slidge-0.2.0a10.dist-info}/METADATA +2 -1
  37. {slidge-0.2.0a9.dist-info → slidge-0.2.0a10.dist-info}/RECORD +40 -31
  38. slidge/core/gateway/__init__.py +0 -3
  39. slidge/core/gateway/muc_admin.py +0 -35
  40. slidge/core/gateway/presence.py +0 -95
  41. slidge/core/gateway/session_dispatcher.py +0 -895
  42. {slidge-0.2.0a9.dist-info → slidge-0.2.0a10.dist-info}/LICENSE +0 -0
  43. {slidge-0.2.0a9.dist-info → slidge-0.2.0a10.dist-info}/WHEEL +0 -0
  44. {slidge-0.2.0a9.dist-info → slidge-0.2.0a10.dist-info}/entry_points.txt +0 -0
@@ -1,95 +0,0 @@
1
- import logging
2
-
3
- from slixmpp import JID, Presence
4
-
5
- from ..session import BaseSession
6
-
7
-
8
- class _IsDirectedAtComponent(Exception):
9
- def __init__(self, session: BaseSession):
10
- self.session = session
11
-
12
-
13
- class PresenceHandlerMixin:
14
- boundjid: JID
15
-
16
- def get_session_from_stanza(self, s) -> BaseSession:
17
- raise NotImplementedError
18
-
19
- async def __get_contact(self, pres: Presence):
20
- sess = await self.__get_session(pres)
21
- pto = pres.get_to()
22
- if pto == self.boundjid.bare:
23
- raise _IsDirectedAtComponent(sess)
24
- await sess.contacts.ready
25
- return await sess.contacts.by_jid(pto)
26
-
27
- async def __get_session(self, p: Presence):
28
- sess = self.get_session_from_stanza(p)
29
- return sess
30
-
31
- async def _handle_subscribe(self, pres: Presence):
32
- try:
33
- contact = await self.__get_contact(pres)
34
- except _IsDirectedAtComponent:
35
- pres.reply().send()
36
- return
37
-
38
- if contact.is_friend:
39
- pres.reply().send()
40
- else:
41
- await contact.on_friend_request(pres["status"])
42
-
43
- async def _handle_unsubscribe(self, pres: Presence):
44
- pres.reply().send()
45
-
46
- try:
47
- contact = await self.__get_contact(pres)
48
- except _IsDirectedAtComponent as e:
49
- e.session.send_gateway_message("Bye bye!")
50
- await e.session.kill_by_jid(e.session.user_jid)
51
- return
52
-
53
- contact.is_friend = False
54
- await contact.on_friend_delete(pres["status"])
55
-
56
- async def _handle_subscribed(self, pres: Presence):
57
- try:
58
- contact = await self.__get_contact(pres)
59
- except _IsDirectedAtComponent:
60
- return
61
-
62
- await contact.on_friend_accept()
63
-
64
- async def _handle_unsubscribed(self, pres: Presence):
65
- try:
66
- contact = await self.__get_contact(pres)
67
- except _IsDirectedAtComponent:
68
- return
69
-
70
- if contact.is_friend:
71
- contact.is_friend = False
72
- await contact.on_friend_delete(pres["status"])
73
-
74
- async def _handle_probe(self, pres: Presence):
75
- try:
76
- contact = await self.__get_contact(pres)
77
- except _IsDirectedAtComponent:
78
- session = await self.__get_session(pres)
79
- session.send_cached_presence(pres.get_from())
80
- return
81
- if contact.is_friend:
82
- contact.send_last_presence(force=True)
83
- else:
84
- reply = pres.reply()
85
- reply["type"] = "unsubscribed"
86
- reply.send()
87
-
88
- async def _handle_new_subscription(self, pres: Presence):
89
- pass
90
-
91
- async def _handle_removed_subscription(self, pres: Presence):
92
- pass
93
-
94
-
95
- log = logging.getLogger(__name__)