def handle_event(self, event, event_params): raw_messages = [] if self.event_id == event.event_id: for message_id in self.message_ids: try: localized_message = database.get_localized_message( event.user_id, message_id) if localized_message is not None: raw_messages.extend( database.get_raw_messages( login_id=event.user_id, title=localized_message.message_title, content=localized_message.message_text, screen=localized_message.message.screen, game=config.game, world_id=config.world_id, dry_run=config.dry_run, message_id=message_id)) else: context.main_logger.debug( "Cannot get localization for user {login_id}". format(login_id=event.user_id)) except: context.main_logger.exception( 'Problem with preparing message (message_id={message_id})' .format(message_id=message_id)) else: context.main_logger.error( 'EventToMessagesHandler can handle event_id {handled_id} but got {passed_id}' .format(handled_id=self.event_id, passed_id=event.event_id)) return raw_messages
def test_message(setup_database): # user using serbian language database.process_user_login(login_id=12345, language_id=7, platform_id=1, device_token='123', application_version=1007) # message with english only translation message_1 = database.add_message(message_name='test', language_id=1, message_title='title en', message_text='text en') assert message_1.message_id == 1 localized_message = database.get_localized_message(login_id=12345, message_id=message_1.message_id) assert localized_message.message_title == 'title en' assert localized_message.message_text == 'text en' assert localized_message.language_id == 1 assert localized_message.message.screen == '' # adding other translation different from serbian message_2 = database.add_message(message_name='test', language_id=0, message_title='title other', message_text='text other') localized_message = database.get_localized_message(login_id=12345, message_id=message_2.message_id) assert localized_message.message_title == 'title en' assert localized_message.message_text == 'text en' assert localized_message.language_id == 1 assert localized_message.message.screen == '' # adding serbian translation message_3 = database.add_message(message_name='test', language_id=7, message_title='title sr', message_text='text sr') localized_message = database.get_localized_message(login_id=12345, message_id=message_3.message_id) assert localized_message.message_title == 'title sr' assert localized_message.message_text == 'text sr' assert localized_message.language_id == 7 assert localized_message.message.screen == '' # message with no english neither serbian translation bad_message = database.add_message(message_name='test_bad', language_id=0, message_title='title bad', message_text='text bad') localized_message = database.get_localized_message(login_id=12345, message_id=bad_message.message_id) assert localized_message is None # user doesn't exist localized_message = database.get_localized_message(login_id=12346, message_id=message_3.message_id) assert localized_message is None # delete a message database.delete_message(message_1.message) assert database.get_message('test') is None
def handle_event(self, event, event_params): # Allowed characters for parameter name are [a-zA-Z0-9_] def get_parameter(param_name): parameter = event_params.get(param_name) if parameter is None: raise Exception("Parameter '{param_name}' required in localization is missing from event!". format(param_name=param_name)) if type(parameter) == unicode: parameter = parameter.encode('utf-8') return parameter def get_parameter_map(parametrized_text): parameter_names = [key.group(0).strip("{}") for key in PARAM_REGEX.finditer(parametrized_text)] parameter_map = { param_name: get_parameter(param_name) for param_name in parameter_names } return parameter_map raw_messages = [] if self.event_id == event.event_id: filter_platform_id = event_params.get('platform_id') if filter_platform_id is not None: filter_platform_id = int(filter_platform_id) filter_device_token = event_params.get('device_token') for message_id in self.message_ids: if message_id not in context.message_blacklist.get(event.user_id, set()): try: localized_message = database.get_localized_message(event.user_id, message_id) if localized_message is not None: text_parameter_map = get_parameter_map(localized_message.message_text) title_parameter_map = get_parameter_map(localized_message.message_title) raw_messages.extend( database.get_raw_messages( login_id=event.user_id, title=localized_message.message_title.encode('utf-8').format(**title_parameter_map).decode('utf-8'), content=localized_message.message_text.encode('utf-8').format(**text_parameter_map).decode('utf-8'), screen=localized_message.message.screen, game=config.game, world_id=config.world_id, dry_run=config.dry_run, message_id=message_id, event_ts_bigint=event.timestamp, expiry_millis=localized_message.message.expiry_millis, priority=localized_message.message.priority, filter_platform_id=filter_platform_id, filter_device_token=filter_device_token )) else: context.main_logger.debug("Cannot get localization for user {login_id}".format(login_id=event.user_id)) except: context.main_logger.exception( 'Problem with preparing message (message_id={message_id})'.format(message_id=message_id)) else: context.main_logger.error('EventToMessagesHandler can handle event_id {handled_id} but got {passed_id}' .format(handled_id=self.event_id, passed_id=event.event_id)) return raw_messages
def handle_event(self, event, event_params): raw_messages = [] if self.event_id == event.event_id: for message_id in self.message_ids: try: localized_message = database.get_localized_message(event.user_id, message_id) if localized_message is not None: raw_messages.extend( database.get_raw_messages( login_id=event.user_id, title=localized_message.message_title, content=localized_message.message_text, screen=localized_message.message.screen, game=config.game, world_id=config.world_id, dry_run=config.dry_run, message_id=message_id ) ) else: context.main_logger.debug("Cannot get localization for user {login_id}".format(login_id=event.user_id)) except: context.main_logger.exception( 'Problem with preparing message (message_id={message_id})'.format(message_id=message_id)) else: context.main_logger.error('EventToMessagesHandler can handle event_id {handled_id} but got {passed_id}' .format(handled_id=self.event_id, passed_id=event.event_id)) return raw_messages
def handle_event(self, event, event_params): # Allowed characters for parameter name are [a-zA-Z0-9_] def get_parameter(param_name): parameter = event_params.get(param_name) if parameter is None: raise Exception( "Parameter '{param_name}' required in localization is missing from event!" .format(param_name=param_name)) if type(parameter) == unicode: parameter = parameter.encode('utf-8') return parameter def get_parameter_map(parametrized_text): parameter_names = [ key.group(0).strip("{}") for key in PARAM_REGEX.finditer(parametrized_text) ] parameter_map = { param_name: get_parameter(param_name) for param_name in parameter_names } return parameter_map raw_messages = [] if self.event_id == event.event_id: filter_platform_id = event_params.get('platform_id') if filter_platform_id is not None: filter_platform_id = int(filter_platform_id) filter_device_token = event_params.get('device_token') for message_id in self.message_ids: if message_id not in context.message_blacklist.get( event.user_id, set()): try: localized_message = database.get_localized_message( event.user_id, message_id) if localized_message is not None: text_parameter_map = get_parameter_map( localized_message.message_text) title_parameter_map = get_parameter_map( localized_message.message_title) raw_messages.extend( database.get_raw_messages( login_id=event.user_id, title=localized_message.message_title. encode('utf-8').format( **title_parameter_map).decode('utf-8'), content=localized_message.message_text. encode('utf-8').format( **text_parameter_map).decode('utf-8'), screen=localized_message.message.screen, game=config.game, world_id=config.world_id, dry_run=config.dry_run, message_id=message_id, event_ts_bigint=event.timestamp, expiry_millis=localized_message.message. expiry_millis, priority=localized_message.message. priority, filter_platform_id=filter_platform_id, filter_device_token=filter_device_token)) else: context.main_logger.debug( "Cannot get localization for user {login_id}". format(login_id=event.user_id)) except: context.main_logger.exception( 'Problem with preparing message (message_id={message_id})' .format(message_id=message_id)) else: context.main_logger.error( 'EventToMessagesHandler can handle event_id {handled_id} but got {passed_id}' .format(handled_id=self.event_id, passed_id=event.event_id)) return raw_messages