В этой главе сказа про дружбу C++ и Python будет на удивление мало использования Boost.Python. Передача исключений туда и обратно является по сути слабым местом данной библиотеки. Будем обходиться родным API языка Python, а где это возможно использовать Boost.Python.
Тем не менее Boost.Python создаёт окружение, в котором исключения из C++ попадают в Python в виде стандартного RuntimeError, а обратно из Python генерируется исключение C++ типа error_already_set, что означает «тебе что-то прилетело, сходи сам почитай что там». И вот здесь нам как раз будет не лишним использовать C-API языка Python, чтобы вычитать необходимую информацию об исключении и преобразовать в соответствующий класс сообразно логике приложения.
К чему такие сложности? — Дело в том, что в Python, в отличие от C++, кроме текста исключения и его типа приходит ещё и traceback — стек до места возникновения исключения. Давайте немного расширим стандартный std::exception дополнительным параметром для этого stacktrace, а заодно напишем конвертер исключений туда и обратно из классов C++ в классы исключений Python.
Читать полностью »
Рубрика «модуль» - 3
Собственный модуль для админки на Webasyst
2012-11-26 в 15:48, admin, рубрики: cms, php, webasyst, Веб-разработка, интернет-магазин, модуль, Программирование, разработка, метки: webasyst, интернет-магазин, модуль, Программирование, разработка Довольно часто заказчики просят неизведанного, поэтому приходится рехтовать движок в хвост и в гриву. Webasyst с точки зрения логичности кода непостижим и загадочен, а в интернете очень мало адекватных мануалов. Поэтому напишу здесь то, что я постиг на собственном горьком опыте проб и ошибок. В вебасисте несколько разновидностей модулей, я планирую написать о каждом из них, но буду рассказывать только о методах встраивания своих модулей в движок, а не о программировании непосредственно.
Предполагается, что php владеет каждый, кто читает эту статью.
Читать полностью »
