Skip to content

Instantly share code, notes, and snippets.

@Tishka17
Tishka17 / di_adapter.py
Last active August 14, 2022 17:42
Example of DI injection for fastapi
import functools
from inspect import signature
from di.container import Container
from di.dependant import Dependant
from di.executors import AsyncExecutor
from fastapi import APIRouter
def copy_signature(source_fct):
@Tishka17
Tishka17 / semienum.py
Created July 15, 2022 08:12
SemiEnum
class SemiEnumMeta(type):
def __new__(mcs, name, bases, class_dict):
class_ = super().__new__(mcs, name, bases, class_dict)
class_.__value_mapping = {}
for name, value in class_dict.items():
if name.startswith("__"):
continue
instance = class_(value)
setattr(class_, name, instance)
class_.__value_mapping[value] = instance
@Tishka17
Tishka17 / error_dock.py
Last active October 19, 2023 09:51
Error handling dock
from enum import Enum
from logging import getLogger, basicConfig, INFO
from typing import Any, Optional
logger = getLogger(__name__)
class ErrorType(Enum):
def __add__(self, other):
return self
@Tishka17
Tishka17 / confirm.py
Last active July 6, 2022 22:00
Confirmation dialog factory
import asyncio
import logging
import operator
from typing import Any, Tuple, List
from aiogram import Bot, Dispatcher
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import StatesGroup, State
from aiogram.types import CallbackQuery
from magic_filter import F
@Tishka17
Tishka17 / calendar_checkbox.py
Created June 28, 2022 17:06
Dialog demo with calendar and checkboxes
import asyncio
import logging
from operator import itemgetter
from aiogram import Bot, Dispatcher
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import StatesGroup, State
from aiogram_dialog import Dialog, Window, DialogRegistry
from aiogram_dialog.widgets.kbd import ScrollingGroup, Multiselect, Calendar, Radio
@Tishka17
Tishka17 / counter.py
Last active June 20, 2022 08:08
Counter widget for aiogram_dialog
from typing import List, Dict
from aiogram.types import InlineKeyboardButton, CallbackQuery
from aiogram_dialog.dialog import Dialog
from aiogram_dialog.manager.protocols import DialogManager
from aiogram_dialog.widgets.kbd.base import Keyboard
from aiogram_dialog.widgets.managed import ManagedWidgetAdapter
from aiogram_dialog.widgets.text import Const, Format
from aiogram_dialog.widgets.when import WhenCondition
@Tishka17
Tishka17 / noreturn.py
Created June 8, 2022 15:47
Python code without any return
#### library mode
import inspect
def res_var_name(fname):
return f"_{fname}_result_"
def result(value, offset=1):
stack = inspect.stack()
@Tishka17
Tishka17 / pincode.py
Last active March 11, 2023 18:20
pincode dialog example
import asyncio
import logging
from typing import Any
from aiogram import Bot, Dispatcher
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import StatesGroup, State
from aiogram.types import CallbackQuery
from aiogram_dialog import Dialog, DialogManager, Window, DialogRegistry, Data
@Tishka17
Tishka17 / confirm.py
Last active June 6, 2022 16:34
Demo of reusable configrmation dialog
import asyncio
import logging
import operator
from typing import Any
from aiogram import Bot, Dispatcher
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import StatesGroup, State
from aiogram.types import CallbackQuery
@Tishka17
Tishka17 / merge.py
Created May 11, 2022 10:02
Merge with rules
def merge(rule):
def merge(a, b):
res = {}
for key in a.keys() | b.keys():
res[key] = rule[key](a.get(key), b.get(key))
return res
return merge