

@must_be_logged_in
def configure_subscription(auth):
    user = auth.user
    json_data = request.get_json()
    target_id = json_data.get('id')
    event = json_data.get('event')
    notification_type = json_data.get('notification_type')
    path = json_data.get('path')
    provider = owner.get('provider')
    if ((not event) or ((notification_type not in NOTIFICATION_TYPES) and (notification_type != 'adopt_parent'))):
        raise HTTPError(http.BAD_REQUEST, data=dict(message_long='Must provide an event and notification type for subscription.'))
    node = Node.load(target_id)
    if (('file_updated' in event) and (path is not None) and (provider is not None)):
        wb_path = path.lstrip('/')
        event = (wb_path + '_file_updated')
    event_id = utils.to_subscription_key(target_id, event)
    if (not node):
        if (not (target_id == user._id)):
            sentry.log_message('{!r} attempted to subscribe to either a bad id or non-node non-self id, {}'.format(user, target_id))
            raise HTTPError(http.NOT_FOUND)
        if (notification_type == 'adopt_parent'):
            sentry.log_message('{!r} attempted to adopt_parent of a none node id, {}'.format(user, target_id))
            raise HTTPError(http.BAD_REQUEST)
        owner = user
    else:
        if (not node.has_permission(user, 'read')):
            sentry.log_message('{!r} attempted to subscribe to private node, {}'.format(user, target_id))
            raise HTTPError(http.FORBIDDEN)
        if (notification_type != 'adopt_parent'):
            owner = node
        else:
            if (('file_updated' in event) and (len(event) > len('file_updated'))):
                pass
            else:
                parent = node.parent_node
                if (not parent):
                    sentry.log_message('{!r} attempted to adopt_parent of the parentless project, {!r}'.format(user, node))
                    raise HTTPError(http.BAD_REQUEST)
            subscription = NotificationSubscription.load(event_id)
            if (not subscription):
                return {
                    
                }
            subscription.remove_user_from_subscription(user)
            return {
                
            }
    subscription = NotificationSubscription.load(event_id)
    if (not subscription):
        subscription = NotificationSubscription(_id=event_id, owner=owner, event_name=event)
    subscription.add_user_to_subscription(user, notification_type)
    subscription.save()
    return {
        'message': 'Successfully subscribed to {} list on {}'.format(notification_type, event_id),
    }

dataset/ETHPy150Open CenterForOpenScience/osf.io/website/notifications/views.py configure_subscription/VarMisuse@65/96 `json_data`->`owner`