Size: a a a

2019 December 19

DS

David Shiko in SPb Python
У меня есть ф-я, которая возвращает метод в зависимости от условия. Что делать, если ни 1 условие не соблюдено?
Эта ф-я потом вызывается как метод. Можно сделать дополнительный if конечно, но может есть более pythonic way?

Например:

def get_send_method(content_type):

   if (content) == photo_obj:
       method = photo_method
   elif (content) == video_obj:
   method = video_method
   return method

send_method = get_send_method(content_type)
send_method(some_message)
источник

AR

Aidar Rakhimov in SPb Python
David Shiko
У меня есть ф-я, которая возвращает метод в зависимости от условия. Что делать, если ни 1 условие не соблюдено?
Эта ф-я потом вызывается как метод. Можно сделать дополнительный if конечно, но может есть более pythonic way?

Например:

def get_send_method(content_type):

   if (content) == photo_obj:
       method = photo_method
   elif (content) == video_obj:
   method = video_method
   return method

send_method = get_send_method(content_type)
send_method(some_message)
возвращать какую-нибудь дефолтную функцию или функцию, котора будет кидать ошибку для обработки таких случаев
источник

AS

Alexander Savelyev in SPb Python
Привет подскажите библиотеки. Короче есть образец звука, нужно написать скрипт который бы отслеживал когда этот звук идет в колонки. По сути как тольк  компом издается этот звук, скрипт должен срабатывать ...
источник

М

МистерКот in SPb Python
David Shiko
У меня есть ф-я, которая возвращает метод в зависимости от условия. Что делать, если ни 1 условие не соблюдено?
Эта ф-я потом вызывается как метод. Можно сделать дополнительный if конечно, но может есть более pythonic way?

Например:

def get_send_method(content_type):

   if (content) == photo_obj:
       method = photo_method
   elif (content) == video_obj:
   method = video_method
   return method

send_method = get_send_method(content_type)
send_method(some_message)
А чем else не угодил, зачем ещё один if?
источник

SM

Serge Matveenko in SPb Python
Alexander Savelyev
Привет подскажите библиотеки. Короче есть образец звука, нужно написать скрипт который бы отслеживал когда этот звук идет в колонки. По сути как тольк  компом издается этот звук, скрипт должен срабатывать ...
что-то типа этого?
https://youtu.be/kMNSAhsyiDg
источник

A

Alexander in SPb Python
возвращаюсь к вопросу про aiomysql. Пытаюсь запустить под 3.7 вот такой код:
from db.schema.cfgphone import devices

async def get_engine(loop):

   engine = await create_engine(host=environ.get("MYSQL_HOST", "host"), port=3306,
                                user=environ.get("MYSQL_USER", "user"),
                                password=environ.get("MYSQL_PASSWORD", "password"),
                                db=environ.get("MYSQL_DB", "db"), loop=loop,
                                echo=True)
   return engine

async def test_conn(loop):
   engine = await get_engine(loop)
   async with engine.acquire() as conn:
       async for row in conn.execute(devices.select()):
           print(row)


if __name__ == "__main__":
   loop = asyncio.get_event_loop()
   loop.run_until_complete(test_conn(loop))

получаю ошибку
db_app.py:10: RuntimeWarning: coroutine '_SAConnectionContextManager.__aiter__' was never awaited
 async for row in conn.execute(devices.select()):
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
db_app.py:10: RuntimeWarning: coroutine 'SAConnection._execute' was never awaited
 async for row in conn.execute(devices.select()):
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Traceback (most recent call last):
 File "db_app.py", line 16, in <module>
   loop.run_until_complete(test_conn(loop))
 File "/usr/lib/python3.7/asyncio/base_events.py", line 579, in run_until_complete
   return future.result()
 File "db_app.py", line 10, in test_conn
   async for row in conn.execute(devices.select()):
TypeError: 'async for' received an object from __aiter__ that does not implement __anext__: coroutine
источник

A

Alexander in SPb Python
притом что на 3.6 этот код работает
источник

A

Alexander in SPb Python
такое ощущение, что либо в aiomysql завязались на какие-то недокументированные возможности asyncio, либо в 3.7 сломали обратную совместимость
источник

A

Alexander in SPb Python
в 3.8 тоже не пашет
источник

A

Alexander in SPb Python
может кто сталкивался
источник

SM

Serge Matveenko in SPb Python
Alexander
возвращаюсь к вопросу про aiomysql. Пытаюсь запустить под 3.7 вот такой код:
from db.schema.cfgphone import devices

async def get_engine(loop):

   engine = await create_engine(host=environ.get("MYSQL_HOST", "host"), port=3306,
                                user=environ.get("MYSQL_USER", "user"),
                                password=environ.get("MYSQL_PASSWORD", "password"),
                                db=environ.get("MYSQL_DB", "db"), loop=loop,
                                echo=True)
   return engine

async def test_conn(loop):
   engine = await get_engine(loop)
   async with engine.acquire() as conn:
       async for row in conn.execute(devices.select()):
           print(row)


if __name__ == "__main__":
   loop = asyncio.get_event_loop()
   loop.run_until_complete(test_conn(loop))

получаю ошибку
db_app.py:10: RuntimeWarning: coroutine '_SAConnectionContextManager.__aiter__' was never awaited
 async for row in conn.execute(devices.select()):
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
db_app.py:10: RuntimeWarning: coroutine 'SAConnection._execute' was never awaited
 async for row in conn.execute(devices.select()):
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Traceback (most recent call last):
 File "db_app.py", line 16, in <module>
   loop.run_until_complete(test_conn(loop))
 File "/usr/lib/python3.7/asyncio/base_events.py", line 579, in run_until_complete
   return future.result()
 File "db_app.py", line 10, in test_conn
   async for row in conn.execute(devices.select()):
TypeError: 'async for' received an object from __aiter__ that does not implement __anext__: coroutine
в 3.7 надо обязательно __anext__ имплементить, судя по ошибке. надо багу писать
источник

A

Alexander in SPb Python
я согласен, что это явный баг. Просто странно, что никто это не заметил раньше или либа настолько непопулярная, что никто не пользуется
источник

SM

Serge Matveenko in SPb Python
Alexander
возвращаюсь к вопросу про aiomysql. Пытаюсь запустить под 3.7 вот такой код:
from db.schema.cfgphone import devices

async def get_engine(loop):

   engine = await create_engine(host=environ.get("MYSQL_HOST", "host"), port=3306,
                                user=environ.get("MYSQL_USER", "user"),
                                password=environ.get("MYSQL_PASSWORD", "password"),
                                db=environ.get("MYSQL_DB", "db"), loop=loop,
                                echo=True)
   return engine

async def test_conn(loop):
   engine = await get_engine(loop)
   async with engine.acquire() as conn:
       async for row in conn.execute(devices.select()):
           print(row)


if __name__ == "__main__":
   loop = asyncio.get_event_loop()
   loop.run_until_complete(test_conn(loop))

получаю ошибку
db_app.py:10: RuntimeWarning: coroutine '_SAConnectionContextManager.__aiter__' was never awaited
 async for row in conn.execute(devices.select()):
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
db_app.py:10: RuntimeWarning: coroutine 'SAConnection._execute' was never awaited
 async for row in conn.execute(devices.select()):
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Traceback (most recent call last):
 File "db_app.py", line 16, in <module>
   loop.run_until_complete(test_conn(loop))
 File "/usr/lib/python3.7/asyncio/base_events.py", line 579, in run_until_complete
   return future.result()
 File "db_app.py", line 10, in test_conn
   async for row in conn.execute(devices.select()):
TypeError: 'async for' received an object from __aiter__ that does not implement __anext__: coroutine
можешь и PR сделать сам.
там в _SAConnectionContextManager похоже надо добавить __anext__
источник

SM

Serge Matveenko in SPb Python
Alexander
я согласен, что это явный баг. Просто странно, что никто это не заметил раньше или либа настолько непопулярная, что никто не пользуется
не либа, а база
источник

A

Alexander in SPb Python
Serge Matveenko
не либа, а база
что "база"? Непопулярная?
источник

SM

Serge Matveenko in SPb Python
Alexander
что "база"? Непопулярная?
да:)
источник

A

Alexander in SPb Python
это странное утверждение. На мой взгляд, она гораздо популярнее, чем та же постгря.
Но это лирика
источник

A

Alexander in SPb Python
я же правильно понимаю, что если я планирую писать проект на async/await, у меня вариантов работы с мускулем особых нет?
источник

SM

Serge Matveenko in SPb Python
Alexander
это странное утверждение. На мой взгляд, она гораздо популярнее, чем та же постгря.
Но это лирика
источник

SM

Serge Matveenko in SPb Python
Alexander
я же правильно понимаю, что если я планирую писать проект на async/await, у меня вариантов работы с мускулем особых нет?
ты сам можешь убрать обычный драйвер в отдельный тред и не использовать aiomysql
там сделано то же самое
источник