telegrinder 0.1.dev161__tar.gz → 0.1.dev163__tar.gz

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.

Potentially problematic release.


This version of telegrinder might be problematic. Click here for more details.

Files changed (128) hide show
  1. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/PKG-INFO +1 -1
  2. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/pyproject.toml +1 -1
  3. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/api/api.py +4 -2
  4. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/api/error.py +3 -3
  5. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/bot.py +8 -12
  6. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/cute_types/base.py +1 -4
  7. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/cute_types/message.py +140 -0
  8. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/composition.py +1 -1
  9. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/dispatch.py +3 -4
  10. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/view/box.py +6 -6
  11. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/waiter_machine/short_state.py +1 -1
  12. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/__init__.py +4 -0
  13. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/is_from.py +18 -3
  14. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/scenario/checkbox.py +3 -4
  15. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/client/aiohttp.py +1 -2
  16. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/modules.py +5 -3
  17. telegrinder-0.1.dev163/telegrinder/msgspec_json.py +14 -0
  18. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/msgspec_utils.py +80 -38
  19. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/source.py +2 -3
  20. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/__init__.py +6 -0
  21. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/buttons.py +8 -13
  22. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/error_handler/error_handler.py +2 -2
  23. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/formatting/__init__.py +6 -0
  24. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/formatting/html.py +10 -0
  25. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/formatting/links.py +7 -0
  26. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/formatting/spec_html_formats.py +27 -15
  27. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/global_context/global_context.py +7 -5
  28. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/keyboard.py +3 -3
  29. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/loop_wrapper/abc.py +4 -4
  30. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/magic.py +1 -1
  31. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/types/enums.py +4 -0
  32. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/types/methods.py +175 -41
  33. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/types/objects.py +442 -201
  34. telegrinder-0.1.dev161/telegrinder/msgspec_json.py +0 -14
  35. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/LICENSE +0 -0
  36. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/readme.md +0 -0
  37. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/__init__.py +0 -0
  38. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/api/__init__.py +0 -0
  39. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/api/abc.py +0 -0
  40. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/api/response.py +0 -0
  41. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/__init__.py +0 -0
  42. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/cute_types/__init__.py +0 -0
  43. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/cute_types/callback_query.py +0 -0
  44. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/cute_types/inline_query.py +0 -0
  45. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/cute_types/update.py +0 -0
  46. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/cute_types/utils.py +0 -0
  47. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/__init__.py +0 -0
  48. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/abc.py +0 -0
  49. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/context.py +0 -0
  50. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/handler/__init__.py +0 -0
  51. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/handler/abc.py +0 -0
  52. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/handler/func.py +0 -0
  53. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/handler/message_reply.py +0 -0
  54. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/middleware/__init__.py +0 -0
  55. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/middleware/abc.py +0 -0
  56. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/process.py +0 -0
  57. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/return_manager/__init__.py +0 -0
  58. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/return_manager/abc.py +0 -0
  59. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/return_manager/callback_query.py +0 -0
  60. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/return_manager/inline_query.py +0 -0
  61. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/return_manager/message.py +0 -0
  62. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/view/__init__.py +0 -0
  63. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/view/abc.py +0 -0
  64. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/view/callback_query.py +0 -0
  65. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/view/inline_query.py +0 -0
  66. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/view/message.py +0 -0
  67. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/waiter_machine/__init__.py +0 -0
  68. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/waiter_machine/machine.py +0 -0
  69. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/dispatch/waiter_machine/middleware.py +0 -0
  70. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/polling/__init__.py +0 -0
  71. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/polling/abc.py +0 -0
  72. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/polling/polling.py +0 -0
  73. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/abc.py +0 -0
  74. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/adapter/__init__.py +0 -0
  75. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/adapter/abc.py +0 -0
  76. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/adapter/errors.py +0 -0
  77. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/adapter/event.py +0 -0
  78. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/adapter/raw_update.py +0 -0
  79. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/callback_data.py +0 -0
  80. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/command.py +0 -0
  81. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/enum_text.py +0 -0
  82. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/func.py +0 -0
  83. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/fuzzy.py +0 -0
  84. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/inline.py +0 -0
  85. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/integer.py +0 -0
  86. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/markup.py +0 -0
  87. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/mention.py +0 -0
  88. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/message_entities.py +0 -0
  89. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/regex.py +0 -0
  90. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/rule_enum.py +0 -0
  91. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/start.py +0 -0
  92. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/rules/text.py +0 -0
  93. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/scenario/__init__.py +0 -0
  94. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/scenario/abc.py +0 -0
  95. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/bot/scenario/choice.py +0 -0
  96. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/client/__init__.py +0 -0
  97. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/client/abc.py +0 -0
  98. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/model.py +0 -0
  99. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/__init__.py +0 -0
  100. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/attachment.py +0 -0
  101. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/base.py +0 -0
  102. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/composer.py +0 -0
  103. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/container.py +0 -0
  104. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/message.py +0 -0
  105. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/rule.py +0 -0
  106. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/text.py +0 -0
  107. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/tools/__init__.py +0 -0
  108. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/tools/generator.py +0 -0
  109. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/node/update.py +0 -0
  110. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/rules.py +0 -0
  111. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/error_handler/__init__.py +0 -0
  112. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/error_handler/abc.py +0 -0
  113. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/error_handler/error.py +0 -0
  114. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/global_context/__init__.py +0 -0
  115. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/global_context/abc.py +0 -0
  116. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/global_context/telegrinder_ctx.py +0 -0
  117. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/i18n/__init__.py +0 -0
  118. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/i18n/base.py +0 -0
  119. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/i18n/middleware/__init__.py +0 -0
  120. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/i18n/middleware/base.py +0 -0
  121. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/i18n/simple.py +0 -0
  122. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/kb_set/__init__.py +0 -0
  123. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/kb_set/base.py +0 -0
  124. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/kb_set/yaml.py +0 -0
  125. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/loop_wrapper/__init__.py +0 -0
  126. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/loop_wrapper/loop_wrapper.py +0 -0
  127. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/tools/parse_mode.py +0 -0
  128. {telegrinder-0.1.dev161 → telegrinder-0.1.dev163}/telegrinder/types/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: telegrinder
3
- Version: 0.1.dev161
3
+ Version: 0.1.dev163
4
4
  Summary: Framework for effective and reliable async telegram bot building.
5
5
  Home-page: https://github.com/timoniq/telegrinder
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "telegrinder"
3
- version = "0.1.dev161"
3
+ version = "0.1.dev163"
4
4
  description = "Framework for effective and reliable async telegram bot building."
5
5
  authors = ["timoniq <tesseradecades@mail.ru>"]
6
6
  maintainers = ["luwqz1 <howluwqz1@gmail.com>"]
@@ -16,7 +16,7 @@ def compose_data(
16
16
  data: dict[str, typing.Any],
17
17
  files: dict[str, tuple[str, bytes]],
18
18
  ) -> typing.Any:
19
- converter = DataConverter(files=files)
19
+ converter = DataConverter(files=files.copy())
20
20
  return client.get_form(
21
21
  data={k: converter(v) for k, v in data.items()},
22
22
  files=converter.files,
@@ -24,6 +24,8 @@ def compose_data(
24
24
 
25
25
 
26
26
  class API(ABCAPI, APIMethods):
27
+ """Bot API with available API methods."""
28
+
27
29
  API_URL = "https://api.telegram.org/"
28
30
 
29
31
  def __init__(self, token: Token, *, http: ABCClient | None = None) -> None:
@@ -60,7 +62,7 @@ class API(ABCAPI, APIMethods):
60
62
  assert "result" in response
61
63
  return Ok(response["result"])
62
64
  return Error(APIError(
63
- code=response.get("error_code", 0),
65
+ code=response.get("error_code", 400),
64
66
  error=response.get("description"),
65
67
  ))
66
68
 
@@ -1,12 +1,12 @@
1
1
  class APIError(BaseException):
2
- def __init__(self, code: int, error: str | None = None):
2
+ def __init__(self, code: int, error: str | None = None) -> None:
3
3
  self.code, self.error = code, error
4
4
 
5
5
  def __str__(self) -> str:
6
- return f"[{self.code}] {self.error}"
6
+ return f"[{self.code}] {self.error or 'Something went wrong'}"
7
7
 
8
8
  def __repr__(self) -> str:
9
- return f"<APIError {self.__str__()}>"
9
+ return f"<APIError: {self.__str__()}>"
10
10
 
11
11
 
12
12
  class InvalidTokenError(BaseException):
@@ -11,11 +11,7 @@ PollingT = typing.TypeVar("PollingT", bound=ABCPolling, default=Polling)
11
11
  LoopWrapperT = typing.TypeVar("LoopWrapperT", bound=ABCLoopWrapper, default=LoopWrapper)
12
12
 
13
13
 
14
- class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
15
- dispatch: DispatchT
16
- polling: PollingT
17
- loop_wrapper: LoopWrapperT
18
-
14
+ class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
19
15
  def __init__(
20
16
  self,
21
17
  api: API,
@@ -23,11 +19,11 @@ class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
23
19
  polling: PollingT | None = None,
24
20
  dispatch: DispatchT | None = None,
25
21
  loop_wrapper: LoopWrapperT | None = None,
26
- ):
22
+ ) -> None:
27
23
  self.api = api
28
- self.dispatch = dispatch or Dispatch() # type: ignore
29
- self.polling = polling or Polling(api) # type: ignore
30
- self.loop_wrapper = loop_wrapper or LoopWrapper() # type: ignore
24
+ self.dispatch = typing.cast(DispatchT, dispatch or Dispatch())
25
+ self.polling = typing.cast(PollingT, polling or Polling(api))
26
+ self.loop_wrapper = typing.cast(LoopWrapperT, loop_wrapper or LoopWrapper())
31
27
 
32
28
  @property
33
29
  def on(self) -> DispatchT:
@@ -38,7 +34,7 @@ class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
38
34
  return
39
35
  await self.api.delete_webhook()
40
36
 
41
- async def run_polling(self, offset: int = 0, skip_updates: bool = False) -> None:
37
+ async def run_polling(self, *, offset: int = 0, skip_updates: bool = False) -> None:
42
38
  if skip_updates:
43
39
  logger.debug("Dropping pending updates")
44
40
  await self.reset_webhook()
@@ -50,9 +46,9 @@ class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
50
46
  logger.debug("Received update (update_id={})", update.update_id)
51
47
  self.loop_wrapper.add_task(self.dispatch.feed(update, self.api))
52
48
 
53
- def run_forever(self, offset: int = 0, skip_updates: bool = False) -> None:
49
+ def run_forever(self, *, offset: int = 0, skip_updates: bool = False) -> None:
54
50
  logger.debug("Running blocking polling (id={})", self.api.id)
55
- self.loop_wrapper.add_task(self.run_polling(offset, skip_updates=skip_updates))
51
+ self.loop_wrapper.add_task(self.run_polling(offset=offset, skip_updates=skip_updates))
56
52
  self.loop_wrapper.run_event_loop()
57
53
 
58
54
 
@@ -33,8 +33,6 @@ if typing.TYPE_CHECKING:
33
33
  else:
34
34
 
35
35
  class BaseCute(typing.Generic[UpdateT]):
36
- api: ABCAPI
37
-
38
36
  @classmethod
39
37
  def from_update(cls, update, bound_api):
40
38
  return cls(**update.to_dict(), api=bound_api)
@@ -115,8 +113,7 @@ def shortcut(
115
113
  params[k] = kwargs.pop(k, p.default) if p.default is not p.empty else kwargs.pop(k)
116
114
 
117
115
  return await executor(self, method_name, get_params(params))
118
-
119
- func.__repr__ = lambda _: f"<Shortcut {method_name!r}@{func!r}>"
116
+
120
117
  inner.__shortcut__ = Shortcut( # type: ignore
121
118
  method_name=method_name,
122
119
  executor=executor,