Beispiel #1
0
def unsubscribe_all(context, data_dict):
    'Unsubscribe all packages'
    subscriber_email = data_dict.get('subscriber_email')
    unsubscribe_token = data_dict.get('unsubscribe_token')
    subscriber = Reminder.get_subscriber_dict(subscriber_email)

    error = None
    if not subscriber_email:
        error = _(
            'You must supply a subscriber email (parameter "subscriber_email").'
        )
    elif not unsubscribe_token:
        error = _(
            'You must supply an unsubscribe token (parameter "unsubscribe_token").'
        )

    if not error and unsubscribe_token == subscriber.get('unsubscribe_token'):

        package_ids = ReminderSubscriptionPackageAssociation.get_subscriber_package_ids(
            subscriber.get('id'))

        for package_id in package_ids:
            ReminderSubscriptionPackageAssociation.remove(
                package_id=package_id.package_id,
                reminder_subscription_id=subscriber.get('id'))
    if error:
        raise ValidationError(error)
Beispiel #2
0
def subscribe_to_package(context, data_dict):
    '''Subscribe to a specific dataset (package).
    :param package: the name or id of the dataset to subscribe to
    :type package: string
    :param subscriber_email: the email with which to subscribe
    :type subscriber_email: string
    '''
    model = context.get('model')

    package_ref = data_dict.get('package')
    subscriber_email = data_dict.get('subscriber_email')
    error = None
    if not package_ref:
        error = _('You must supply a package id or name '
                  '(parameter "package").')
    elif not subscriber_email:
        error = _(
            'You must supply a subscriber email (parameter "subscriber_email").'
        )
    else:
        package = model.Package.get(package_ref)
        if not package:
            error = _('Not found') + ': %r' % package_ref
        else:
            subscriber = Reminder.get_or_add_subscriber(subscriber_email)
            if not ReminderSubscriptionPackageAssociation.exists(
                    package_id=package.id,
                    reminder_subscription_id=subscriber['id']):
                ReminderSubscriptionPackageAssociation.create(
                    package_id=package.id,
                    reminder_subscription_id=subscriber['id'])
    if error:
        raise ValidationError(error)
Beispiel #3
0
def unsubscribe(context, data_dict):
    'Unsubscribe a specific package'
    package_id = data_dict.get('package_id')
    subscriber_email = data_dict.get('subscriber_email')
    unsubscribe_token = data_dict.get('unsubscribe_token')
    subscriber = Reminder.get_subscriber_dict(subscriber_email)

    error = None
    if not package_id:
        error = _('You must supply a package id ' '(parameter "package_id").')
    elif not subscriber_email:
        error = _(
            'You must supply a subscriber email (parameter "subscriber_email").'
        )
    elif not unsubscribe_token:
        error = _(
            'You must supply an unsubscribe token (parameter "unsubscribe_token").'
        )

    if not error and unsubscribe_token == subscriber.get('unsubscribe_token'):
        ReminderSubscriptionPackageAssociation.remove(
            package_id=package_id,
            reminder_subscription_id=subscriber.get('id'))
    if error:
        raise ValidationError(error)
Beispiel #4
0
def get_packages_for_user(context, data_dict):
    '''
    Returns a list of packages for the provided email address
    Returns an empty list if the unsubscribe does not match to the subscriber's token
    '''
    subscriber_email = data_dict.get('subscriber_email')
    unsubscribe_token = data_dict.get('unsubscribe_token')
    subscriber = Reminder.get_subscriber_dict(subscriber_email)

    packages = []

    # Make sure the given unsubscribe token matches the stored one
    # Return empty list if no match, for security
    if subscriber and subscriber.get('unsubscribe_token') == unsubscribe_token:
        package_ids = ReminderSubscriptionPackageAssociation.get_subscriber_package_ids(
            subscriber.get('id'))

        for package_id in package_ids:
            package = logic.get_action('package_show')(
                {}, {
                    'name_or_id': package_id.package_id
                })
            if package:
                packages.append(package)
    return packages
Beispiel #5
0
def get_updated_packages_for_user(subscriber_id, previous_reminder_sent):
    subscriptions = ReminderSubscriptionPackageAssociation.get_subscriber_package_ids(
        subscriber_id)

    updated_packages = []
    for subscription in subscriptions:
        updated_package = logic.get_action('package_show')(
            {}, {
                'name_or_id': subscription.package_id
            })

        if updated_package:
            # Notify user of an updated package if not already notified
            if updated_package['metadata_modified'] > previous_reminder_sent:
                updated_packages.append(updated_package)

    return updated_packages