-
-
Notifications
You must be signed in to change notification settings - Fork 1
Refactor code #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
m-xim
wants to merge
11
commits into
Foldren:master
Choose a base branch
from
m-xim:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
658f6af
refactor: move folder `example` to the project root
m-xim 0be441a
chore: add .gitignore
m-xim f02014e
refactor: update callback data handling and improve button data packi…
m-xim 2fb36b5
refactor example
m-xim bf36183
refactor: reorganize widget imports
m-xim 8190757
refactor: replace assertions with exceptions
m-xim d37ac48
Merge branch 'Foldren:master' into master
m-xim 6568d3a
refactor: move `inline` and `reply` in `keyboard`
m-xim 96d3cfd
Merge branch 'Foldren:master' into master
m-xim d68a78e
refactor: simplify get fsm in middleware
m-xim 7c9bdb2
refactor: improve bot mode handling in filters
m-xim File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
# Byte-compiled / optimized / DLL files | ||
__pycache__/ | ||
*.py[cod] | ||
*$py.class | ||
|
||
# C extensions | ||
*.so | ||
|
||
# Distribution / packaging | ||
.Python | ||
build/ | ||
develop-eggs/ | ||
dist/ | ||
downloads/ | ||
eggs/ | ||
.eggs/ | ||
lib/ | ||
lib64/ | ||
parts/ | ||
sdist/ | ||
var/ | ||
wheels/ | ||
share/python-wheels/ | ||
*.egg-info/ | ||
.installed.cfg | ||
*.egg | ||
MANIFEST | ||
|
||
# PyInstaller | ||
# Usually these files are written by a python script from a templates | ||
# before PyInstaller builds the exe, so as to inject date/other infos into it. | ||
*.manifest | ||
#*.spec | ||
|
||
# Installer logs | ||
pip-log.txt | ||
pip-delete-this-directory.txt | ||
|
||
# Unit test / coverage reports | ||
htmlcov/ | ||
.tox/ | ||
.nox/ | ||
.coverage | ||
.coverage.* | ||
.cache | ||
nosetests.xml | ||
coverage.xml | ||
*.cover | ||
*.py,cover | ||
.hypothesis/ | ||
.pytest_cache/ | ||
cover/ | ||
|
||
# Translations | ||
*.mo | ||
*.pot | ||
|
||
# Django stuff: | ||
*.log | ||
local_settings.py | ||
db.sqlite3 | ||
db.sqlite3-journal | ||
|
||
# Flask stuff: | ||
instance/ | ||
.webassets-cache | ||
|
||
# Scrapy stuff: | ||
#.scrapy | ||
|
||
# Sphinx documentation | ||
docs/_build/ | ||
|
||
# PyBuilder | ||
.pybuilder/ | ||
target/ | ||
|
||
# Jupyter Notebook | ||
.ipynb_checkpoints | ||
|
||
# IPython | ||
profile_default/ | ||
ipython_config.py | ||
|
||
# pyenv | ||
# For a library or package, you might want to ignore these files since the code is | ||
# intended to run in multiple environments; otherwise, check them in: | ||
# .python-version | ||
|
||
# pipenv | ||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. | ||
# However, in case of collaboration, if having platform-specific dependencies or dependencies | ||
# having no cross-platform support, pipenv may install dependencies that don't work, or not | ||
# install all needed dependencies. | ||
#Pipfile.lock | ||
|
||
# poetry | ||
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. | ||
# This is especially recommended for binary packages to ensure reproducibility, and is more | ||
# commonly ignored for libraries. | ||
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control | ||
#poetry.lock | ||
|
||
# pdm | ||
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. | ||
#pdm.lock | ||
# pdm stores type_query-wide configurations in .pdm.toml, but it is recommended to not include it | ||
# in version control. | ||
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control | ||
.pdm.toml | ||
.pdm-python | ||
.pdm-build/ | ||
|
||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-type_query/pdm | ||
__pypackages__/ | ||
|
||
# Celery stuff | ||
celerybeat-schedule | ||
celerybeat.pid | ||
|
||
# SageMath parsed files | ||
*.sage.py | ||
|
||
# Environments | ||
.env | ||
.venv | ||
env/ | ||
venv/ | ||
ENV/ | ||
env.bak/ | ||
venv.bak/ | ||
|
||
# Spyder type_query settings | ||
.spyderproject | ||
.spyproject | ||
|
||
# Rope type_query settings | ||
.ropeproject | ||
|
||
# mkdocs documentation | ||
/site | ||
|
||
# mypy | ||
.mypy_cache/ | ||
.dmypy.json | ||
dmypy.json | ||
|
||
# Pyre type checker | ||
.pyre/ | ||
|
||
# pytype static type analyzer | ||
.pytype/ | ||
|
||
# Cython debug symbols | ||
cython_debug/ | ||
|
||
# PyCharm | ||
# JetBrains specific templates is maintained in a separate JetBrains.gitignore that can | ||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore | ||
# and can be added to the global gitignore or merged into this file. For a more nuclear | ||
# option (not recommended) you can uncomment the following to ignore the entire idea folder. | ||
.idea/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
from aiogram.filters.callback_data import CallbackData | ||
|
||
|
||
class DPanelCD(CallbackData, prefix="__dpanel__"): | ||
page: int | ||
panel_name: str | ||
|
||
class ModeCD(CallbackData, prefix="__mode__"): | ||
name: str | ||
|
||
class ComeToCD(CallbackData, prefix="__cometo__"): | ||
group: str | ||
state: str |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,54 +1,54 @@ | ||
from aiogram.filters import BaseFilter | ||
from aiogram.types import Message, CallbackQuery | ||
|
||
from .callback_data import ModeCD | ||
from .renderer import Renderer | ||
|
||
|
||
class IsModeWithNotCustomHandler(BaseFilter): | ||
async def __call__(self, event: Message | CallbackQuery, renderer: Renderer) -> bool: | ||
# Если режимы заданы | ||
if renderer.bot_modes is not None: | ||
mode = None | ||
# Для CallbackQuery проверяем правильно ли задан callback_data по системному префиксу | ||
if isinstance(event, CallbackQuery): | ||
if event.data.startswith("__mode__:"): | ||
# Для колбека берем название мода, указанное после "__mode__:" | ||
mode_name = event.data.replace("__mode__:", "") | ||
# Проверяем нет ли у данного режима своего хендлера | ||
mode = await renderer.bot_modes.get_mode_by_name(name=mode_name) | ||
|
||
# Для Message, ищем его среди списков значений модов и выводим по найденному названию мода | ||
else: | ||
modes_values = await renderer.bot_modes.get_modes_values() | ||
if event.text in modes_values: | ||
# Проверяем нет ли у данного режима своего хендлера | ||
mode = await renderer.bot_modes.get_mode_by_value(value=event.text) | ||
|
||
# Проверяем нашелся ли режим и есть ли у него пользовательский хендлер | ||
if (mode is not None) and (not mode.has_custom_handler): | ||
return True | ||
|
||
return False | ||
bot_modes = renderer.bot_modes | ||
if not bot_modes: # Если режимы не заданы | ||
return False | ||
|
||
mode = None | ||
# Для CallbackQuery проверяем правильно ли задан callback_data по системному префиксу | ||
if isinstance(event, CallbackQuery): | ||
try: | ||
callback_data = ModeCD.unpack(event.data) | ||
mode = await bot_modes.get_mode_by_name(name=callback_data.name) if callback_data else None | ||
except (TypeError, ValueError): | ||
pass | ||
elif isinstance(event, Message): # Ищем его среди списков значений модов и выводим по найденному названию мода | ||
modes_values = await bot_modes.get_modes_values() | ||
if event.text in modes_values: | ||
mode = await bot_modes.get_mode_by_value(value=event.text) | ||
|
||
return bool(mode and not mode.has_custom_handler) | ||
|
||
|
||
class IsMode(BaseFilter): | ||
def __init__(self, name: str): | ||
self.name = name | ||
|
||
async def __call__(self, event: Message | CallbackQuery, renderer: Renderer) -> bool: | ||
# Проверяем заданы ли режимы и есть ли такой режим | ||
if renderer.bot_modes is not None: | ||
dict_modes = await renderer.bot_modes.get_dict_modes() | ||
if self.name in dict_modes.keys(): | ||
mode = await renderer.bot_modes.get_mode_by_name(name=self.name) | ||
# Проверяем равен ли коллбек заданному режиму | ||
if isinstance(event, CallbackQuery): | ||
if (event.data == "__mode__:" + self.name) and (mode is not None): | ||
return True | ||
# Проверяем есть ли значение Reply text в values режима | ||
elif isinstance(event, Message): | ||
if (event.text in mode.values) and (mode is not None): | ||
return True | ||
else: | ||
raise ValueError("Такого режима нет") | ||
bot_modes = renderer.bot_modes | ||
if not bot_modes: # Если режимы не заданы | ||
return False | ||
|
||
dict_modes = await bot_modes.get_dict_modes() | ||
if self.name not in dict_modes: | ||
raise ValueError("Такого режима нет") | ||
|
||
mode = await bot_modes.get_mode_by_name(name=self.name) | ||
if not mode: | ||
return False | ||
|
||
if isinstance(event, CallbackQuery): | ||
# Проверяем равен ли сallback заданному режиму | ||
return event.data == ModeCD(name=self.name).pack() | ||
elif isinstance(event, Message): | ||
# Проверяем есть ли значение Reply text в values режима | ||
return event.text in mode.values | ||
|
||
return False |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.