maxapi-python 2.1.0__tar.gz → 2.1.1__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.
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/PKG-INFO +1 -1
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/account.rst +15 -10
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/index.rst +1 -0
- maxapi_python-2.1.1/docs/release-2-1-1.rst +16 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/pyproject.toml +1 -1
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/__init__.py +1 -1
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/self/service.py +11 -4
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/uploads/service.py +4 -2
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/app.py +4 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/infra/self.py +2 -6
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/transport/tcp.py +4 -2
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/connection/test_readers_and_transports.py +47 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/uv.lock +1 -1
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/.github/ISSUE_TEMPLATE/refactor.md +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/.github/pull_request_template.md +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/.github/workflows/publish.yml +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/.gitignore +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/.pre-commit-config.yaml +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/LICENSE +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/README.md +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/_static/.gitkeep +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/api/auth.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/api/client.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/api/files.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/api/router.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/auth.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/chats.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/client.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/conf.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/examples.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/faq.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/files.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/formatting.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/getting-started.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/messages.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/release-2-1-0.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/router.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/troubleshooting.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/audio_attachment.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/call_attachment.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/chat.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/contact_attachment.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/control_attachment.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/element.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/enums.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/file_attachment.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/folder.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/folder_list.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/folder_update.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/index.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/inline_keyboard_attachment.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/message.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/message_delete_event.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/name.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/photo_attachment.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/profile.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/reaction_counter.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/reaction_info.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/read_state.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/session.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/share_attachment.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/sticker_attachment.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/sync_overrides.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/sync_state.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/user.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/types/video_attachment.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/docs/users.rst +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/auth/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/auth/enums.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/auth/payloads.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/auth/service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/auth/types.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/bots/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/bots/payloads.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/bots/service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/chats/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/chats/enums.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/chats/payloads.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/chats/service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/facade.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/messages/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/messages/enums.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/messages/payloads.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/messages/service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/models.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/response.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/self/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/self/enums.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/self/payloads.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/session/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/session/enums.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/session/payloads.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/session/service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/uploads/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/uploads/models.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/uploads/payloads.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/users/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/users/enums.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/users/payloads.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/api/users/service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/auth/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/auth/base.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/auth/email.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/auth/models.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/auth/providers.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/auth/qr.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/auth/service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/auth/sms.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/base.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/client.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/client_web.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/config.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/connection/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/connection/connection.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/connection/pending.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/connection/readers/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/connection/readers/base.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/connection/readers/tcp.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/connection/readers/ws.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/dispatch/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/dispatch/dispatcher.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/dispatch/enums.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/dispatch/mapping.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/dispatch/resolvers.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/dispatch/router.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/exceptions.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/files/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/files/base.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/files/file.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/files/photo.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/files/static.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/files/video.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/formatting/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/formatting/markdown.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/infra/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/infra/auth.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/infra/base.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/infra/bots.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/infra/chat.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/infra/message.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/infra/protocol.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/infra/user.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/logging.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/base.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/enums.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/models.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/tcp/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/tcp/compression.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/tcp/framing.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/tcp/payload.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/tcp/protocol.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/ws/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/protocol/ws/protocol.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/py.typed +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/routers.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/session/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/session/models.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/session/protocol.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/session/store.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/telemetry/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/telemetry/navigation.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/telemetry/payloads.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/telemetry/service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/transport/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/transport/base.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/transport/websocket.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/audio.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/call.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/contact.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/control.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/enums.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/file.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/keyboards/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/keyboards/inline.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/photo.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/share.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/sticker.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/video.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/auth.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/base.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/bots.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/chat.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/element.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/enums.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/error.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/folder.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/login.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/member.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/message.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/name.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/presence.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/profile.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/session.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/sync.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/user.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/events/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/events/file.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/events/message.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/events/video.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/__init__.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/api/test_auth_service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/api/test_chat_user_self_session_services.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/api/test_message_service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/api/test_upload_service.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/app/test_app_runtime.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/auth/test_auth_flows.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/conftest.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/connection/test_connection.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/dispatch/test_dispatcher.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/domain/test_bound_models.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/files/test_files_and_formatting.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/protocol/test_protocols.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/session/test_store.py +0 -0
- {maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/telemetry/test_telemetry.py +0 -0
|
@@ -32,21 +32,26 @@ Account
|
|
|
32
32
|
Фотография профиля
|
|
33
33
|
------------------
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
Передайте ``Photo`` в ``change_profile(photo=...)``, чтобы PyMax сам загрузил
|
|
36
|
+
файл и применил новый токен фотографии:
|
|
37
37
|
|
|
38
38
|
.. code-block:: python
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
print(upload_url)
|
|
40
|
+
from pymax import Photo
|
|
42
41
|
|
|
43
42
|
await client.change_profile(
|
|
44
43
|
first_name="Alex",
|
|
45
|
-
|
|
44
|
+
photo=Photo(path="avatar.jpg"),
|
|
46
45
|
)
|
|
47
46
|
|
|
48
|
-
Если
|
|
49
|
-
|
|
47
|
+
Если у вас уже есть токен фотографии от API Max, его можно передать напрямую:
|
|
48
|
+
|
|
49
|
+
.. code-block:: python
|
|
50
|
+
|
|
51
|
+
await client.change_profile(
|
|
52
|
+
first_name="Alex",
|
|
53
|
+
photo_token="PHOTO_TOKEN",
|
|
54
|
+
)
|
|
50
55
|
|
|
51
56
|
Папки чатов
|
|
52
57
|
-----------
|
|
@@ -118,9 +123,9 @@ Account
|
|
|
118
123
|
``on_start`` или после успешного ``await client.start()`` в собственном
|
|
119
124
|
lifecycle.
|
|
120
125
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
126
|
+
Фото профиля не обновилось
|
|
127
|
+
Если переданы и ``photo``, и ``photo_token``, PyMax загрузит ``photo`` и
|
|
128
|
+
использует новый токен загруженной фотографии.
|
|
124
129
|
|
|
125
130
|
Папка создалась, но список старый
|
|
126
131
|
Используйте ``get_folders()`` после изменения и сохраняйте новый
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
PyMax 2.1.1
|
|
2
|
+
===========
|
|
3
|
+
|
|
4
|
+
Изменения относительно ``2.1.0``.
|
|
5
|
+
|
|
6
|
+
Добавлено
|
|
7
|
+
---------
|
|
8
|
+
|
|
9
|
+
* ``change_profile(photo=...)`` теперь загружает фотографию профиля напрямую.
|
|
10
|
+
|
|
11
|
+
Исправлено
|
|
12
|
+
----------
|
|
13
|
+
|
|
14
|
+
* TLS-handshake при TCP-подключении через proxy передает ``server_hostname``.
|
|
15
|
+
* Локальный токен обновляется после ``close_all_sessions()`` и при получении
|
|
16
|
+
нового токена во время handshake.
|
|
@@ -9,6 +9,7 @@ from pymax.api.response import (
|
|
|
9
9
|
require_payload_item_model,
|
|
10
10
|
require_payload_model,
|
|
11
11
|
)
|
|
12
|
+
from pymax.files import Photo
|
|
12
13
|
from pymax.logging import get_logger
|
|
13
14
|
from pymax.protocol import Opcode
|
|
14
15
|
from pymax.types.domain import FolderList, FolderUpdate, Profile
|
|
@@ -47,15 +48,20 @@ class SelfService:
|
|
|
47
48
|
first_name: str,
|
|
48
49
|
last_name: str | None = None,
|
|
49
50
|
description: str | None = None,
|
|
50
|
-
photo:
|
|
51
|
+
photo: Photo | None = None,
|
|
51
52
|
*,
|
|
52
53
|
photo_token: str | None = None,
|
|
53
54
|
) -> bool:
|
|
54
55
|
if photo is not None:
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
"Pass photo_token instead."
|
|
56
|
+
attach = await self.app.api.uploads.upload_photo(
|
|
57
|
+
photo, profile=True
|
|
58
58
|
)
|
|
59
|
+
if photo_token:
|
|
60
|
+
logger.warning(
|
|
61
|
+
"photo_token argument was provided but will be overridden by the uploaded photo token"
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
photo_token = attach.photo_token
|
|
59
65
|
|
|
60
66
|
frame = ChangeProfilePayload(
|
|
61
67
|
first_name=first_name,
|
|
@@ -145,6 +151,7 @@ class SelfService:
|
|
|
145
151
|
return False
|
|
146
152
|
|
|
147
153
|
await self.app.store.update_token(self.app.session.token, token)
|
|
154
|
+
self.app.session.token = token
|
|
148
155
|
|
|
149
156
|
return True
|
|
150
157
|
|
|
@@ -51,11 +51,13 @@ class UploadService:
|
|
|
51
51
|
self.on_file_attach
|
|
52
52
|
)
|
|
53
53
|
|
|
54
|
-
async def upload_photo(
|
|
54
|
+
async def upload_photo(
|
|
55
|
+
self, photo: Photo, profile: bool = False
|
|
56
|
+
) -> AttachPhotoPayload:
|
|
55
57
|
logger.info("Uploading photo")
|
|
56
58
|
logger.debug("Preparing photo upload payload")
|
|
57
59
|
|
|
58
|
-
payload = UploadPayload().model_dump()
|
|
60
|
+
payload = UploadPayload(profile=profile).model_dump()
|
|
59
61
|
|
|
60
62
|
try:
|
|
61
63
|
data = await self.app.invoke(
|
|
@@ -135,6 +135,10 @@ class App(Generic[ClientT]):
|
|
|
135
135
|
self.config.device.user_agent,
|
|
136
136
|
)
|
|
137
137
|
|
|
138
|
+
if response.token != self.session.token:
|
|
139
|
+
await self.store.update_token(self.session.token, response.token)
|
|
140
|
+
self.session.token = response.token
|
|
141
|
+
|
|
138
142
|
self.me = response.profile
|
|
139
143
|
self.chats = response.chats
|
|
140
144
|
self.users[self.me.contact.id] = self.me.contact
|
|
@@ -29,17 +29,13 @@ class SelfMixin(IClientProtocol):
|
|
|
29
29
|
first_name: Имя профиля.
|
|
30
30
|
last_name: Фамилия профиля.
|
|
31
31
|
description: Описание профиля.
|
|
32
|
-
photo: Файл или объект
|
|
33
|
-
|
|
32
|
+
photo: Файл или объект фото, который нужно загрузить как новую
|
|
33
|
+
фотографию профиля.
|
|
34
34
|
photo_token: Токен фотографии, уже загруженной через API Max.
|
|
35
35
|
|
|
36
36
|
Returns:
|
|
37
37
|
``True`` после успешного обновления. Клиент также обновит
|
|
38
38
|
``client.me`` и кеш текущего контакта.
|
|
39
|
-
|
|
40
|
-
Raises:
|
|
41
|
-
NotImplementedError: Если передан ``photo`` вместо
|
|
42
|
-
``photo_token``.
|
|
43
39
|
"""
|
|
44
40
|
return await self._app.api.account.change_profile(
|
|
45
41
|
first_name=first_name,
|
|
@@ -33,10 +33,12 @@ class TCPTransport(Transport):
|
|
|
33
33
|
sock = await proxy.connect(
|
|
34
34
|
dest_host=self._host,
|
|
35
35
|
dest_port=self._port,
|
|
36
|
-
ssl=self._use_ssl,
|
|
37
36
|
)
|
|
37
|
+
server_hostname = self._host if self._use_ssl else None
|
|
38
38
|
self._reader, self._writer = await asyncio.open_connection(
|
|
39
|
-
sock=sock,
|
|
39
|
+
sock=sock,
|
|
40
|
+
ssl=self._use_ssl,
|
|
41
|
+
server_hostname=server_hostname,
|
|
40
42
|
)
|
|
41
43
|
logger.info(
|
|
42
44
|
"tcp connected via proxy %s host=%s port=%s ssl=%s",
|
|
@@ -104,6 +104,53 @@ async def test_tcp_transport_connect_send_recv_and_close(
|
|
|
104
104
|
assert writer.closed is True
|
|
105
105
|
|
|
106
106
|
|
|
107
|
+
@pytest.mark.asyncio
|
|
108
|
+
async def test_tcp_transport_proxy_ssl_passes_server_hostname(
|
|
109
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
110
|
+
) -> None:
|
|
111
|
+
reader = FakeStreamReader()
|
|
112
|
+
writer = FakeStreamWriter()
|
|
113
|
+
sock = object()
|
|
114
|
+
proxy_connect_kwargs = {}
|
|
115
|
+
open_connection_kwargs = {}
|
|
116
|
+
|
|
117
|
+
class FakeProxy:
|
|
118
|
+
async def connect(self, **kwargs):
|
|
119
|
+
proxy_connect_kwargs.update(kwargs)
|
|
120
|
+
return sock
|
|
121
|
+
|
|
122
|
+
async def open_connection(*args, **kwargs):
|
|
123
|
+
open_connection_kwargs.update(kwargs)
|
|
124
|
+
return reader, writer
|
|
125
|
+
|
|
126
|
+
monkeypatch.setattr(
|
|
127
|
+
"pymax.transport.tcp.Proxy.from_url",
|
|
128
|
+
lambda proxy_url: FakeProxy(),
|
|
129
|
+
)
|
|
130
|
+
monkeypatch.setattr(
|
|
131
|
+
"pymax.transport.tcp.asyncio.open_connection", open_connection
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
transport = TCPTransport(
|
|
135
|
+
"example.test",
|
|
136
|
+
443,
|
|
137
|
+
proxy="socks5://localhost:9050",
|
|
138
|
+
use_ssl=True,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
await transport.connect()
|
|
142
|
+
|
|
143
|
+
assert proxy_connect_kwargs == {
|
|
144
|
+
"dest_host": "example.test",
|
|
145
|
+
"dest_port": 443,
|
|
146
|
+
}
|
|
147
|
+
assert open_connection_kwargs == {
|
|
148
|
+
"sock": sock,
|
|
149
|
+
"ssl": True,
|
|
150
|
+
"server_hostname": "example.test",
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
|
|
107
154
|
class FakeWebSocket:
|
|
108
155
|
def __init__(self) -> None:
|
|
109
156
|
self.close_code = None
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/keyboards/__init__.py
RENAMED
|
File without changes
|
{maxapi_python-2.1.0 → maxapi_python-2.1.1}/src/pymax/types/domain/attachments/keyboards/inline.py
RENAMED
|
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
|
|
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
|
{maxapi_python-2.1.0 → maxapi_python-2.1.1}/tests/api/test_chat_user_self_session_services.py
RENAMED
|
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
|