def METHOD_NAME(self, session, event):
    if not event.get("data"):
        return
    entities_info = event["data"].get("entities")
    if not entities_info:
        return
    # load shell scripts presets
    tmp_by_project_name = {}
    for entity_info in entities_info:
        if entity_info.get('entity_type') != 'Appointment':
            continue
        task_entity, user_entity = self._get_task_and_user(
            session,
            entity_info.get('action'),
            entity_info.get('changes')
        )
        if not task_entity or not user_entity:
            self.log.error("Task or User was not found.")
            continue
        # format directories to pass to shell script
        project_name = task_entity["project"]["full_name"]
        project_data = tmp_by_project_name.get(project_name) or {}
        if "scripts_by_action" not in project_data:
            project_settings = get_project_settings(project_name)
            _settings = (
                project_settings["ftrack"]["events"]["user_assignment"]
            )
            project_data["scripts_by_action"] = _settings.get("scripts")
            tmp_by_project_name[project_name] = project_data
        scripts_by_action = project_data["scripts_by_action"]
        if not scripts_by_action:
            continue
        if "anatomy" not in project_data:
            project_data["anatomy"] = Anatomy(project_name)
            tmp_by_project_name[project_name] = project_data
        anatomy = project_data["anatomy"]
        data = self._get_template_data(task_entity)
        anatomy_filled = anatomy.format(data)
        # formatting work dir is easiest part as we can use whole path
        work_dir = anatomy_filled["work"]["folder"]
        # we also need publish but not whole
        anatomy_filled.strict = False
        publish = anatomy_filled["publish"]["folder"]
        # now find path to {asset}
        m = re.search(
            "(^.+?{})".format(data["asset"]),
            publish
        )
        if not m:
            msg = 'Cannot get part of publish path {}'.format(publish)
            self.log.error(msg)
            return {
                'success': False,
                'message': msg
            }
        publish_dir = m.group(1)
        username = user_entity["username"]
        event_entity_action = entity_info["action"]
        for script in scripts_by_action.get(event_entity_action):
            self.log.info((
                "[{}] : running script for user {}"
            ).format(event_entity_action, username))
            self._run_script(script, [username, work_dir, publish_dir])
    return True