telegrinder 0.1.dev160__tar.gz → 0.1.dev162__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 (129) hide show
  1. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/PKG-INFO +1 -1
  2. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/pyproject.toml +1 -1
  3. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/api/abc.py +3 -0
  4. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/api/api.py +7 -5
  5. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/api/error.py +3 -3
  6. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/bot.py +2 -2
  7. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/cute_types/base.py +1 -4
  8. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/cute_types/message.py +140 -0
  9. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/composition.py +1 -1
  10. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/dispatch.py +1 -1
  11. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/waiter_machine/short_state.py +1 -1
  12. telegrinder-0.1.dev162/telegrinder/bot/scenario/__init__.py +5 -0
  13. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/scenario/checkbox.py +10 -15
  14. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/scenario/choice.py +2 -2
  15. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/modules.py +5 -3
  16. telegrinder-0.1.dev162/telegrinder/msgspec_json.py +14 -0
  17. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/msgspec_utils.py +34 -35
  18. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/__init__.py +6 -0
  19. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/buttons.py +8 -13
  20. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/formatting/__init__.py +6 -0
  21. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/formatting/html.py +10 -0
  22. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/formatting/links.py +7 -0
  23. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/formatting/spec_html_formats.py +27 -15
  24. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/keyboard.py +3 -3
  25. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/loop_wrapper/abc.py +4 -4
  26. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/types/enums.py +4 -0
  27. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/types/methods.py +175 -41
  28. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/types/objects.py +425 -201
  29. telegrinder-0.1.dev160/telegrinder/bot/scenario/__init__.py +0 -5
  30. telegrinder-0.1.dev160/telegrinder/msgspec_json.py +0 -14
  31. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/LICENSE +0 -0
  32. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/readme.md +0 -0
  33. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/__init__.py +0 -0
  34. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/api/__init__.py +0 -0
  35. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/api/response.py +0 -0
  36. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/__init__.py +0 -0
  37. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/cute_types/__init__.py +0 -0
  38. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/cute_types/callback_query.py +0 -0
  39. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/cute_types/inline_query.py +0 -0
  40. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/cute_types/update.py +0 -0
  41. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/cute_types/utils.py +0 -0
  42. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/__init__.py +0 -0
  43. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/abc.py +0 -0
  44. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/context.py +0 -0
  45. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/handler/__init__.py +0 -0
  46. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/handler/abc.py +0 -0
  47. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/handler/func.py +0 -0
  48. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/handler/message_reply.py +0 -0
  49. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/middleware/__init__.py +0 -0
  50. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/middleware/abc.py +0 -0
  51. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/process.py +0 -0
  52. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/return_manager/__init__.py +0 -0
  53. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/return_manager/abc.py +0 -0
  54. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/return_manager/callback_query.py +0 -0
  55. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/return_manager/inline_query.py +0 -0
  56. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/return_manager/message.py +0 -0
  57. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/view/__init__.py +0 -0
  58. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/view/abc.py +0 -0
  59. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/view/box.py +0 -0
  60. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/view/callback_query.py +0 -0
  61. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/view/inline_query.py +0 -0
  62. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/view/message.py +0 -0
  63. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/waiter_machine/__init__.py +0 -0
  64. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/waiter_machine/machine.py +0 -0
  65. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/dispatch/waiter_machine/middleware.py +0 -0
  66. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/polling/__init__.py +0 -0
  67. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/polling/abc.py +0 -0
  68. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/polling/polling.py +0 -0
  69. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/__init__.py +0 -0
  70. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/abc.py +0 -0
  71. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/adapter/__init__.py +0 -0
  72. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/adapter/abc.py +0 -0
  73. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/adapter/errors.py +0 -0
  74. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/adapter/event.py +0 -0
  75. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/adapter/raw_update.py +0 -0
  76. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/callback_data.py +0 -0
  77. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/command.py +0 -0
  78. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/enum_text.py +0 -0
  79. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/func.py +0 -0
  80. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/fuzzy.py +0 -0
  81. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/inline.py +0 -0
  82. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/integer.py +0 -0
  83. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/is_from.py +0 -0
  84. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/markup.py +0 -0
  85. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/mention.py +0 -0
  86. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/message_entities.py +0 -0
  87. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/regex.py +0 -0
  88. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/rule_enum.py +0 -0
  89. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/start.py +0 -0
  90. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/rules/text.py +0 -0
  91. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/bot/scenario/abc.py +0 -0
  92. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/client/__init__.py +0 -0
  93. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/client/abc.py +0 -0
  94. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/client/aiohttp.py +0 -0
  95. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/model.py +0 -0
  96. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/__init__.py +0 -0
  97. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/attachment.py +0 -0
  98. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/base.py +0 -0
  99. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/composer.py +0 -0
  100. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/container.py +0 -0
  101. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/message.py +0 -0
  102. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/rule.py +0 -0
  103. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/source.py +0 -0
  104. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/text.py +0 -0
  105. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/tools/__init__.py +0 -0
  106. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/tools/generator.py +0 -0
  107. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/node/update.py +0 -0
  108. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/rules.py +0 -0
  109. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/error_handler/__init__.py +0 -0
  110. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/error_handler/abc.py +0 -0
  111. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/error_handler/error.py +0 -0
  112. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/error_handler/error_handler.py +0 -0
  113. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/global_context/__init__.py +0 -0
  114. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/global_context/abc.py +0 -0
  115. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/global_context/global_context.py +0 -0
  116. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/global_context/telegrinder_ctx.py +0 -0
  117. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/i18n/__init__.py +0 -0
  118. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/i18n/base.py +0 -0
  119. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/i18n/middleware/__init__.py +0 -0
  120. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/i18n/middleware/base.py +0 -0
  121. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/i18n/simple.py +0 -0
  122. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/kb_set/__init__.py +0 -0
  123. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/kb_set/base.py +0 -0
  124. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/kb_set/yaml.py +0 -0
  125. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/loop_wrapper/__init__.py +0 -0
  126. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/loop_wrapper/loop_wrapper.py +0 -0
  127. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/magic.py +0 -0
  128. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/tools/parse_mode.py +0 -0
  129. {telegrinder-0.1.dev160 → telegrinder-0.1.dev162}/telegrinder/types/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: telegrinder
3
- Version: 0.1.dev160
3
+ Version: 0.1.dev162
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.dev160"
3
+ version = "0.1.dev162"
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>"]
@@ -17,6 +17,9 @@ class Token(str):
17
17
  if token.count(":") != 1 or not token.split(":")[0].isdigit():
18
18
  raise InvalidTokenError("Invalid token, it should look like this '123:ABC'.")
19
19
  return super().__new__(cls, token)
20
+
21
+ def __repr__(self) -> str:
22
+ return f"<Token: {self.bot_id}:{''.join(self.split(':')[-1])[:6]}...>"
20
23
 
21
24
  @classmethod
22
25
  def from_env(
@@ -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,7 +24,9 @@ def compose_data(
24
24
 
25
25
 
26
26
  class API(ABCAPI, APIMethods):
27
- API_URL: typing.ClassVar[str] = "https://api.telegram.org/"
27
+ """Bot API with available API methods."""
28
+
29
+ API_URL = "https://api.telegram.org/"
28
30
 
29
31
  def __init__(self, token: Token, *, http: ABCClient | None = None) -> None:
30
32
  self.token = token
@@ -32,9 +34,9 @@ class API(ABCAPI, APIMethods):
32
34
  super().__init__(self)
33
35
 
34
36
  def __repr__(self) -> str:
35
- return "<{}: id={}, http={!r}>".format(
37
+ return "<{}: token={!r}, http={!r}>".format(
36
38
  self.__class__.__name__,
37
- self.id,
39
+ self.token,
38
40
  self.http,
39
41
  )
40
42
 
@@ -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):
@@ -15,7 +15,7 @@ class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
15
15
  dispatch: DispatchT
16
16
  polling: PollingT
17
17
  loop_wrapper: LoopWrapperT
18
-
18
+
19
19
  def __init__(
20
20
  self,
21
21
  api: API,
@@ -23,7 +23,7 @@ class Telegrinder(typing.Generic[DispatchT, PollingT, LoopWrapperT]):
23
23
  polling: PollingT | None = None,
24
24
  dispatch: DispatchT | None = None,
25
25
  loop_wrapper: LoopWrapperT | None = None,
26
- ):
26
+ ) -> None:
27
27
  self.api = api
28
28
  self.dispatch = dispatch or Dispatch() # type: ignore
29
29
  self.polling = polling or Polling(api) # type: ignore
@@ -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,