Getting value of `event_type` inside wrapped method

Hello again!

I've switched to events for many things now, and it's great!

I'm using an RPC call to collect results, and store them. Which is also

When I create an event handler, I give it a name that makes sense to me,
and then I 'send' that name as part of the payload to the results method.

A contrived example:

    @event_handler('source.service', '')
    def do_stuff_event(self, event):'', event)

It seems redundant to have `` typed out twice - so is there a
'good' way to re-use the event_type declared in the wrapper?

Many thanks,


Once again - I changed how I was 'seeing' the problem, and a different
(more elegant) solution proposed itself :slight_smile:

Hey Geoff,

I think this is one of the places where the Nameko design is less than
optimal. It would be better if the handling method could inspect the event
type it was handling, but unfortunately it just receives the payload. It's
annoying, but not worth breaking backwards compatibility to change.

You can work around it by subclassing the EventHander entrypoint and
overriding how it handles the incoming message:


from import EventHandler as NamekoEventHandler

class EventHandler(NamekoEventHandler):
    def handle_message(self, body, message):
        args = (self.event_type, body,) # add event type as first arg
        kwargs = {}

        context_data = self.unpack_message_headers(message)

        handle_result = partial(self.handle_result, message)
            self.container.spawn_worker(self, args, kwargs,
        except ContainerBeingKilled:

event_handler = EventHander.decorator


from .entrypoints import event_handler

class Service:
    @event_handler('service-name', 'event-type')
    def handle(self, event_type, event_payload):

What was your alternative solution? :wink:


On Thursday, November 16, 2017 at 4:44:17 PM UTC, wrote:

Once again - I changed how I was 'seeing' the problem, and a different
(more elegant) solution proposed itself :slight_smile:

Nice. I'll take a look at that!

Nothing fancy - I just moved all of my strings to a config file, and pull
them in where needed. The nice thing is I can override the values with
enviroment variables now (`os.environ.get('event_name',

Early in my programming adventure, someone drilled into me that "having
strings inside function code creates a maintenance nightmare" and I've
never been able to shift it. So I try to declare string and use the

Still loving Nameko. The Event system most of all - and I wasn't even
looking for that!