-
Notifications
You must be signed in to change notification settings - Fork 2
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
Передача context #8
Comments
Обязательно ли использование адаптеров Loader и Dumper? Почитал документацию psycopg и я могу вынести предположение, как сделать это с помощью адаптеров: В теме про конфигурации адаптации данных есть абзац:
Говорят, мол, по умолчанию каждое соединение к БД берёт адаптеры из глобальной карты адаптеров в Получается, при новом соединении к БД можно указать в качестве Далее, моё предположение реализации: Для динамического создания классов в Python есть функция class DiscordObjectsLoader:
ctx = None
def load(self, to_load):
print("With context:", self.ctx)
print("Loading:", to_load)
class DiscordObjectsDumper:
ctx = None
def dump(self, to_dump):
print("With context:", self.ctx)
print("Dumping:", to_dump)
def context_factory(ctx):
return (
type(
'CtxDiscordObjectsLoader',
(DiscordObjectsLoader,),
{'ctx': ctx}
),
type(
'CtxDiscordObjectsDumper',
(DiscordObjectsDumper,),
{'ctx': ctx}
)
)
def context_adapters(ctx):
adapters = []
Loader, Dumper = context_factory(ctx)
adapters.append(Loader)
adapters.append(Dumper)
return adapters
ctx = "my_ctx"
# with psycopg.connect(connection_string=..., context=context_adapters(ctx)):
# Load something
# Dump sometning
# hided
adapters = context_adapters(ctx)
Loader, Dumper = adapters
a = Loader()
a.load("foo")
b = Dumper()
b.dump("bar")
# hided В зависимости от
Так как вы используете только одно соединение, то можно адаптировать вариант под Возможно я что-то упустил в документации, но мне больше нечего сказать. |
Довольно накладно выходит делать на каждый ctx по своему объекту. К сожалению, передать второй аргумент никак нельзя, передавать как-то кортежем через data вместе с основными данными к преобразованию не является нормой, поэтому решено убрать эти два класса из регистрации и вызывать их методы вручную. |
Убирать два этих класса тоже не вариант. Они нужны, иначе придётся прописывать обработку вручную во многих местах кода. |
Реализовано через Locator. commit |
То что вы реализовали - это глобальная переменная, ссылку на которую вы дали в классе адаптера Loader.
Можете рассказать, как вы взаимодействуете с полученными id объектов из БД? Зачем их превращать в Discord объекты? |
Да, я собираюсь делать словарь с извлечением контекста по объекту сообщения.
Ну хотя бы взять извлечение объектов из БД по схожим критериям для поиска совпадений. |
Тогда можете, пожалуйста, это сделать? Или как-то покажите, что данная проблема ещё не решена, например оставить этот issue открытым. Ведь если всё так и оставить будут соответствующие проблемы.
Классно придумано. |
Понял |
Проблема.
Сейчас передача осуществляется через атрибут
aconn.adapters.discord_context
. Жизненно необходим, поскольку используется для преобразования id в объект. В дальнейшем также будет записываться в БД.The text was updated successfully, but these errors were encountered: