[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Get __name__ in C extension module

> On 7 Oct 2019, at 00:44, Ian Pilcher <arequipeno at gmail.com> wrote:
> On 10/6/19 12:55 PM, Barry Scott wrote:
>> Then the answer to your question is simple. Do it in python and passt
>> logger into the C++ module.
> Funny thing, that's exactly where I started this journey.  I couldn't
> figure out how to get the logging.Logger type object, so that I could
> use a "O!" format string unit.  This led me to read a bit more about
> the logging framework, which led me to the advice to get loggers by
> name, rather than passing them around, etc., etc.

In PyCXX I never need to use the "O!" stuff.

I write something like this (untested):

// function in foo module
Py::Object function( const Py::Tuple &args, const Py::Dict &kws )
	Py::Object logger( args[0] );

	Py::Tuple log_args( 1 );
	args[0] = Py::String( "log message" );

	logger.callMemberFunction( "info", log_args );

	return Py::None();

I'd call from Python something like:

import foo
import logging

logger = logging.getLogger(__name__)

foo.function( logger )

>> Next I would never code directly against the C API. Its a pain to use
>> and get right, get the ref counts wrong and you get memory leaks of
>> worse crash python.
> Well, I like driving cars with manual transmissions, so ...



> -- 
> ========================================================================
> Ian Pilcher                                         arequipeno at gmail.com
> -------- "I grew up before Mark Zuckerberg invented friendship" --------
> ========================================================================