def send_frequency_reminder(self): # We exclude irrelevant frequencies. frequencies = [f for f in UPDATE_FREQUENCIES.keys() if f not in ('unknown', 'realtime', 'punctual')] now = datetime.now() reminded_orgs = {} reminded_people = [] allowed_delay = current_app.config['DELAY_BEFORE_REMINDER_NOTIFICATION'] for org in Organization.objects.visible(): outdated_datasets = [] for dataset in Dataset.objects.filter( frequency__in=frequencies, organization=org).visible(): if dataset.next_update + timedelta(days=allowed_delay) < now: dataset.outdated = now - dataset.next_update dataset.frequency_str = UPDATE_FREQUENCIES[dataset.frequency] outdated_datasets.append(dataset) if outdated_datasets: reminded_orgs[org] = outdated_datasets for reminded_org, datasets in reminded_orgs.iteritems(): print(u'{org.name} will be emailed for {datasets_nb} datasets'.format( org=reminded_org, datasets_nb=len(datasets))) recipients = [m.user for m in reminded_org.members] reminded_people.append(recipients) subject = _('You need to update some frequency-based datasets') mail.send(subject, recipients, 'frequency_reminder', org=reminded_org, datasets=datasets) print('{nb_orgs} orgs concerned'.format(nb_orgs=len(reminded_orgs))) reminded_people = flatten(reminded_people) print('{nb_emails} people contacted ({nb_emails_twice} twice)'.format( nb_emails=len(reminded_people), nb_emails_twice=len(reminded_people) - len(Set(reminded_people)))) print('Done')
def contact(): form = ContactForm() if request.method == 'POST': if form.validate_on_submit() == False: for field, errors in form.errors.items(): for error in errors: do_flash(i18n.gettext(error), 'danger') else: msg = Message( form.subject.data, sender=current_app.config.get('MAIL_DEFAULT_SENDER'), recipients=[current_app.config.get('MAIL_DEFAULT_RECEIVER')]) msg.body = """ From: %s <%s> %s """ % (form.name.data, form.email.data, form.message.data) try: mail = current_app.extensions.get('mail') mail.send(msg) except Exception, e: do_flash("Server Error : " + str(e), 'danger') else: do_flash( i18n.gettext( u"Thank you for your message. We'll get back to you shortly." ), 'success')
def mark_as_deleted(self): copied_user = copy(self) self.email = '{}@deleted'.format(self.id) self.password = None self.active = False self.first_name = 'DELETED' self.last_name = 'DELETED' self.avatar = None self.avatar_url = None self.website = None self.about = None self.deleted = datetime.now() self.save() for organization in self.organizations: organization.members = [ member for member in organization.members if member.user != self ] organization.save() for discussion in Discussion.objects(discussion__posted_by=self): for message in discussion.discussion: if message.posted_by == self: message.content = 'DELETED' discussion.save() Follow.objects(follower=self).delete() Follow.objects(following=self).delete() mail.send(_('Account deletion'), copied_user, 'account_deleted')
def mark_as_deleted(self): copied_user = copy(self) self.email = '{}@deleted'.format(self.id) self.password = None self.active = False self.first_name = 'DELETED' self.last_name = 'DELETED' self.avatar = None self.avatar_url = None self.website = None self.about = None self.extras = None self.deleted = datetime.now() self.save() for organization in self.organizations: organization.members = [member for member in organization.members if member.user != self] organization.save() for discussion in Discussion.objects(discussion__posted_by=self): for message in discussion.discussion: if message.posted_by == self: message.content = 'DELETED' discussion.save() Follow.objects(follower=self).delete() Follow.objects(following=self).delete() mail.send(_('Account deletion'), copied_user, 'account_deleted')
def notify_membership_request(org, request): recipients = [m.user for m in org.by_role('admin')] mail.send(_('New membership request'), recipients, 'membership_request', org=org, request=request)
def notify_new_issue(issue): if isinstance(issue.subject, (Dataset, Reuse)): recipients = owner_recipients(issue) subject = _('Your %(type)s have a new issue', type=issue.subject.verbose_name) mail.send(subject, recipients, 'new_issue', issue=issue) else: log.warning('Unrecognized issue subject type %s', type(issue.subject))
def send_frequency_reminder(self): # We exclude irrelevant frequencies. frequencies = [f for f in UPDATE_FREQUENCIES.keys() if f not in ('unknown', 'realtime', 'punctual')] now = datetime.now() reminded_orgs = {} reminded_people = [] allowed_delay = current_app.config['DELAY_BEFORE_REMINDER_NOTIFICATION'] for org in Organization.objects.visible(): outdated_datasets = [] for dataset in Dataset.objects.filter( frequency__in=frequencies, organization=org).visible(): if dataset.next_update + timedelta(days=allowed_delay) < now: dataset.outdated = now - dataset.next_update dataset.frequency_str = UPDATE_FREQUENCIES[dataset.frequency] outdated_datasets.append(dataset) if outdated_datasets: reminded_orgs[org] = outdated_datasets for reminded_org, datasets in reminded_orgs.iteritems(): print('{org.name} will be emailed for {datasets_nb} datasets'.format( org=reminded_org, datasets_nb=len(datasets))) recipients = [m.user for m in reminded_org.members] reminded_people.append(recipients) subject = _('You need to update some frequency-based datasets') mail.send(subject, recipients, 'frequency_reminder', org=reminded_org, datasets=datasets) print('{nb_orgs} orgs concerned'.format(nb_orgs=len(reminded_orgs))) reminded_people = flatten(reminded_people) print('{nb_emails} people contacted ({nb_emails_twice} twice)'.format( nb_emails=len(reminded_people), nb_emails_twice=len(reminded_people) - len(Set(reminded_people)))) print('Done')
def notify_membership_response(org, request): if request.status == "accepted": subject = _('You are now a member of the organization "%(org)s"', org=org) template = "new_member" else: subject, template = _("Membership refused"), "membership_refused" mail.send(subject, request.user, template, org=org, request=request)
def notify_membership_request(org_id, request_id): if isinstance(org_id, Organization): # TODO: Remove this branch in udata 2.0 warnings.warn( 'Using documents as task parameter is deprecated and ' 'will be removed in udata 2.0', DeprecationWarning) org = org_id else: org = Organization.objects.get(pk=org_id) if isinstance(request_id, MembershipRequest): # TODO: Remove this branch in udata 2.0 warnings.warn( 'Using documents as task parameter is deprecated and ' 'will be removed in udata 2.0', DeprecationWarning) request = request_id else: request = next((r for r in org.requests if str(r.id) == request_id), None) recipients = [m.user for m in org.by_role('admin')] mail.send(_('New membership request'), recipients, 'membership_request', org=org, request=request)
def notify_membership_response(org_id, request_id): if isinstance(org_id, Organization): # TODO: Remove this branch in udata 2.0 warnings.warn( 'Using documents as task parameter is deprecated and ' 'will be removed in udata 2.0', DeprecationWarning) org = org_id else: org = Organization.objects.get(pk=org_id) if isinstance(request_id, MembershipRequest): # TODO: Remove this branch in udata 2.0 warnings.warn( 'Using documents as task parameter is deprecated and ' 'will be removed in udata 2.0', DeprecationWarning) request = request_id else: request = next((r for r in org.requests if str(r.id) == request_id), None) if request.status == 'accepted': subject = _('You are now a member of the organization "%(org)s"', org=org) template = 'new_member' else: subject, template = _('Membership refused'), 'membership_refused' mail.send(subject, request.user, template, org=org, request=request)
def notify_membership_response(org, request): if request.status == 'accepted': subject, template = _( 'You are now a member of the organization "%(org)s"', org=org), 'new_member' else: subject, template = _('Membership refused'), 'membership_refused' mail.send(subject, request.user, template, org=org, request=request)
def notify_membership_request(org_id, request_id): org = Organization.objects.get(pk=org_id) request = next((r for r in org.requests if str(r.id) == request_id), None) recipients = [m.user for m in org.by_role('admin')] mail.send( _('New membership request'), recipients, 'membership_request', org=org, request=request)
def notify_badge_added(badge): if isinstance(badge.subject, Organization): recipients = owner_recipients(badge) subject = _('Your %(type)s gain a new badge', type=badge.subject.verbose_name) mail.send(subject, recipients, 'badge_added', badge=badge) else: log.warning('Unrecognized badge subject type %s', type(badge.subject))
def notify_issue_closed(issue, **kwargs): if isinstance(issue.subject, (Dataset, Reuse)): comment = kwargs['message'] recipients = owner_recipients(issue) + [m.posted_by for m in issue.discussion] recipients = filter(lambda u: u != comment.posted_by, set(recipients)) subject = _('An issue has been closed') mail.send(subject, recipients, 'issue_closed', issue=issue, comment=comment) else: log.warning('Unrecognized issue subject type %s', type(issue.subject))
def notify_new_discussion(discussion): if isinstance(discussion.subject, (Dataset, Reuse, Post)): recipients = owner_recipients(discussion) subject = _('Your %(type)s have a new discussion', type=discussion.subject.verbose_name) mail.send(subject, recipients, 'new_discussion', discussion=discussion) else: log.warning('Unrecognized discussion subject type %s', type(discussion.subject))
def notify_new_discussion(discussion): if isinstance(discussion.subject, (Dataset, Reuse)): recipients = owner_recipients(discussion) subject = _('Your %(type)s have a new discussion', type=discussion.subject.verbose_name) mail.send(subject, recipients, 'new_discussion', discussion=discussion) else: log.warning('Unrecognized discussion subject type %s', type(discussion.subject))
def notify_new_issue_comment(issue, **kwargs): if isinstance(issue.subject, (Dataset, Reuse)): comment = kwargs['message'] recipients = owner_recipients(issue) + [m.posted_by for m in issue.discussion] recipients = filter(lambda u: u != comment.posted_by, set(recipients)) subject = _('%(user)s commented your issue', user=comment.posted_by.fullname) mail.send(subject, recipients, 'new_issue_comment', issue=issue, comment=comment) else: log.warning('Unrecognized issue subject type %s', type(issue.subject))
def notify_new_issue(issue_id): issue = Issue.objects.get(pk=issue_id) if isinstance(issue.subject, (Dataset, Reuse)): recipients = owner_recipients(issue) subject = _('Your %(type)s have a new issue', type=issue.subject.verbose_name) mail.send(subject, recipients, 'new_issue', issue=issue, message=issue.discussion[0]) else: log.warning('Unrecognized issue subject type %s', type(issue.subject))
def notify_membership_response(org_id, request_id): org = Organization.objects.get(pk=org_id) request = next((r for r in org.requests if str(r.id) == request_id), None) if request.status == 'accepted': subject = _('You are now a member of the organization "%(org)s"', org=org) template = 'new_member' else: subject, template = _('Membership refused'), 'membership_refused' mail.send(subject, request.user, template, org=org, request=request)
def notify_issue_closed(issue, **kwargs): if isinstance(issue.subject, (Dataset, Reuse)): message = kwargs['message'] recipients = owner_recipients(issue) + [ m.posted_by for m in issue.discussion] recipients = [u for u in set(recipients) if u != message.posted_by] subject = _('An issue has been closed') mail.send(subject, recipients, 'issue_closed', issue=issue, message=message) else: log.warning('Unrecognized issue subject type %s', type(issue.subject))
def notify_new_reuse(reuse): for dataset in reuse.datasets: if dataset.organization: recipients = [m.user for m in dataset.organization.members] elif dataset.owner: recipients = dataset.owner else: recipients = None if recipients: mail.send(_('New reuse'), recipients, 'new_reuse', reuse=reuse, dataset=dataset)
def notify_issue_closed(issue_id, message=None): issue = Issue.objects.get(pk=issue_id) message = issue.discussion[message] if isinstance(issue.subject, (Dataset, Reuse)): recipients = owner_recipients(issue) + [ m.posted_by for m in issue.discussion] recipients = [u for u in set(recipients) if u != message.posted_by] subject = _('An issue has been closed') mail.send(subject, recipients, 'issue_closed', issue=issue, message=message) else: log.warning('Unrecognized issue subject type %s', type(issue.subject))
def notify_discussion_closed(discussion, **kwargs): if isinstance(discussion.subject, (Dataset, Reuse)): comment = kwargs['message'] recipients = owner_recipients(discussion) + [ m.posted_by for m in discussion.discussion] recipients = filter(lambda u: u != comment.posted_by, set(recipients)) subject = _('A discussion has been closed') mail.send(subject, recipients, 'discussion_closed', discussion=discussion, comment=comment) else: log.warning('Unrecognized discussion subject type %s', type(discussion.subject))
def notify_new_follower(follow): if isinstance(follow.following, User): subject =_('%(user)s followed you', user=follow.follower) mail.send(subject, follow.following, 'new_follower', follow=follow) elif isinstance(follow.following, Organization): subject = _('%(user)s followed your organization', user=follow.follower) recipients = [m.user for m in follow.following.members] mail.send(subject, recipients, 'new_follower_org', follow=follow) elif isinstance(follow.following, Dataset): pass elif isinstance(follow.following, Reuse): pass
def notify_new_issue_comment(issue, **kwargs): if isinstance(issue.subject, (Dataset, Reuse)): message = kwargs['message'] recipients = owner_recipients(issue) + [ m.posted_by for m in issue.discussion] recipients = [u for u in set(recipients) if u != message.posted_by] subject = _('%(user)s commented your issue', user=message.posted_by.fullname) mail.send(subject, recipients, 'new_issue_comment', issue=issue, message=message) else: log.warning('Unrecognized issue subject type %s', type(issue.subject))
def notify_discussion_closed(discussion, **kwargs): if isinstance(discussion.subject, (Dataset, Reuse, Post)): message = kwargs['message'] recipients = owner_recipients(discussion) + [ m.posted_by for m in discussion.discussion] recipients = [u for u in set(recipients) if u != message.posted_by] subject = _('A discussion has been closed') mail.send(subject, recipients, 'discussion_closed', discussion=discussion, message=message) else: log.warning('Unrecognized discussion subject type %s', type(discussion.subject))
def notify_new_issue_comment(issue_id, message=None): issue = Issue.objects.get(pk=issue_id) message = issue.discussion[message] if isinstance(issue.subject, (Dataset, Reuse)): recipients = owner_recipients(issue) + [ m.posted_by for m in issue.discussion] recipients = [u for u in set(recipients) if u != message.posted_by] subject = _('%(user)s commented your issue', user=message.posted_by.fullname) mail.send(subject, recipients, 'new_issue_comment', issue=issue, message=message) else: log.warning('Unrecognized issue subject type %s', type(issue.subject))
def notify_new_discussion_comment(discussion, **kwargs): if isinstance(discussion.subject, (Dataset, Reuse)): comment = kwargs['message'] recipients = owner_recipients(discussion) + [ m.posted_by for m in discussion.discussion] recipients = filter(lambda u: u != comment.posted_by, set(recipients)) subject = _('%(user)s commented your discussion', user=comment.posted_by.fullname) mail.send(subject, recipients, 'new_discussion_comment', discussion=discussion, comment=comment) else: log.warning('Unrecognized discussion subject type %s', type(discussion.subject))
def notify_new_discussion_comment(discussion, **kwargs): if isinstance(discussion.subject, (Dataset, Reuse, Post)): message = kwargs['message'] recipients = owner_recipients(discussion) + [ m.posted_by for m in discussion.discussion] recipients = [u for u in set(recipients) if u != message.posted_by] subject = _('%(user)s commented your discussion', user=message.posted_by.fullname) mail.send(subject, recipients, 'new_discussion_comment', discussion=discussion, message=message) else: log.warning('Unrecognized discussion subject type %s', type(discussion.subject))
def notify_badge_certified(org_id): ''' Send an email when a `CERTIFIED` badge is added to an `Organization` ''' org = Organization.objects.get(pk=org_id) recipients = [member.user for member in org.members] subject = _('Your organization "%(name)s" has been certified', name=org.name) mail.send(subject, recipients, 'badge_added_certified', organization=org, badge=org.get_badge(CERTIFIED))
def notify_new_follower(follow): if isinstance(follow.following, User): subject = _('%(user)s followed you', user=follow.follower) mail.send(subject, follow.following, 'new_follower', follow=follow) elif isinstance(follow.following, Organization): subject = _('%(user)s followed your organization', user=follow.follower) recipients = [m.user for m in follow.following.members] mail.send(subject, recipients, 'new_follower_org', follow=follow) elif isinstance(follow.following, Dataset): pass elif isinstance(follow.following, Reuse): pass
def notify_badge_public_service(org_id): ''' Send an email when a `PUBLIC_SERVICE` badge is added to an `Organization` ''' org = Organization.objects.get(pk=org_id) recipients = [member.user for member in org.members] subject = _( 'Your organization "%(name)s" has been identified as public service', name=org.name) mail.send(subject, recipients, 'badge_added_public_service', organization=org, badge=org.get_badge(PUBLIC_SERVICE))
def notify_issue_closed(issue, **kwargs): if isinstance(issue.subject, (Dataset, Reuse)): comment = kwargs['message'] recipients = owner_recipients(issue) + [ m.posted_by for m in issue.discussion ] recipients = filter(lambda u: u != comment.posted_by, set(recipients)) subject = _('An issue has been closed') mail.send(subject, recipients, 'issue_closed', issue=issue, comment=comment) else: log.warning('Unrecognized issue subject type %s', type(issue.subject))
def notify_discussion_closed(discussion, **kwargs): if isinstance(discussion.subject, (Dataset, Reuse, Post)): message = kwargs['message'] recipients = owner_recipients(discussion) + [ m.posted_by for m in discussion.discussion ] recipients = [u for u in set(recipients) if u != message.posted_by] subject = _('A discussion has been closed') mail.send(subject, recipients, 'discussion_closed', discussion=discussion, message=message) else: log.warning('Unrecognized discussion subject type %s', type(discussion.subject))
def notify_new_discussion_comment(discussion, **kwargs): if isinstance(discussion.subject, (Dataset, Reuse, Post)): message = kwargs['message'] recipients = owner_recipients(discussion) + [ m.posted_by for m in discussion.discussion ] recipients = [u for u in set(recipients) if u != message.posted_by] subject = _('%(user)s commented your discussion', user=message.posted_by.fullname) mail.send(subject, recipients, 'new_discussion_comment', discussion=discussion, message=message) else: log.warning('Unrecognized discussion subject type %s', type(discussion.subject))
def notify_discussion_closed(discussion_id, message=None): discussion = Discussion.objects.get(pk=discussion_id) message = discussion.discussion[message] if isinstance(discussion.subject, (Dataset, Reuse, Post)): recipients = owner_recipients(discussion) + [ m.posted_by for m in discussion.discussion ] recipients = [u for u in set(recipients) if u != message.posted_by] subject = _('A discussion has been closed') mail.send(subject, recipients, 'discussion_closed', discussion=discussion, message=message) else: log.warning('Unrecognized discussion subject type %s', type(discussion.subject))
def notify_badge_added_certified(sender, kind=''): ''' Send an email when a `CERTIFIED` badge is added to an `Organization` Parameters ---------- sender The object that emitted the event. kind: str The kind of `Badge` object awarded. ''' if kind == CERTIFIED and isinstance(sender, Organization): recipients = [member.user for member in sender.members] subject = _('Your organization "%(name)s" has been certified', name=sender.name) mail.send(subject, recipients, 'badge_added_certified', organization=sender, badge=sender.get_badge(kind))
def notify_new_member(org_id, email): if isinstance(org_id, Organization): # TODO: Remove this branch in udata 2.0 warnings.warn( 'Using documents as task parameter is deprecated and ' 'will be removed in udata 2.0', DeprecationWarning) org = org_id else: org = Organization.objects.get(pk=org_id) if isinstance(email, Member): # TODO: Remove this branch in udata 2.0 warnings.warn( 'Using documents as task parameter is deprecated and ' 'will be removed in udata 2.0', DeprecationWarning) member = email else: member = next((m for m in org.members if m.user.email == email), None) subject = _('You are now a member of the organization "%(org)s"', org=org) mail.send(subject, member.user, 'new_member', org=org)
def notify_badge_added_public_service(sender, kind=''): ''' Send an email when a `PUBLIC_SERVICE` badge is added to an `Organization` Parameters ---------- sender The object that emitted the event. kind: str The kind of `Badge` object awarded. ''' if kind == PUBLIC_SERVICE and isinstance(sender, Organization): recipients = [member.user for member in sender.members] subject = _( 'Your organization "%(name)s" has been identified as public service', name=sender.name) mail.send(subject, recipients, 'badge_added_public_service', organization=sender, badge=sender.get_badge(kind))
def notify_new_follower(follow_id): if isinstance(follow_id, Follow): # TODO: Remove this branch in udata 2.0 warnings.warn( 'Using documents as task parameter is deprecated and ' 'will be removed in udata 2.0', DeprecationWarning) follow = follow_id else: follow = Follow.objects.get(pk=follow_id) if isinstance(follow.following, User): subject = _('%(user)s followed you', user=follow.follower) mail.send(subject, follow.following, 'new_follower', follow=follow) elif isinstance(follow.following, Organization): subject = _('%(user)s followed your organization', user=follow.follower) recipients = [m.user for m in follow.following.members] mail.send(subject, recipients, 'new_follower_org', follow=follow) elif isinstance(follow.following, Dataset): pass elif isinstance(follow.following, Reuse): pass
def notify_new_reuse(reuse_id): if isinstance(reuse_id, Reuse): # TODO: Remove this branch in udata 2.0 warnings.warn( 'Reuse as task parameter is deprecated and ' 'will be removed in udata 2.0', DeprecationWarning ) reuse = reuse_id else: reuse = Reuse.objects.get(pk=reuse_id) for dataset in reuse.datasets: if dataset.organization: recipients = [m.user for m in dataset.organization.members] elif dataset.owner: recipients = dataset.owner else: recipients = None if recipients: mail.send(_('New reuse'), recipients, 'new_reuse', reuse=reuse, dataset=dataset)
def notify_badge_added_certified(sender, kind=''): ''' Send an email when a `CERTIFIED` badge is added to an `Organization` Parameters ---------- sender The object that emitted the event. kind: str The kind of `Badge` object awarded. ''' if kind == CERTIFIED and isinstance(sender, Organization): recipients = [member.user for member in sender.members] subject = _( 'Your organization "%(name)s" has been certified', name=sender.name ) mail.send( subject, recipients, 'badge_added_certified', organization=sender, badge=sender.get_badge(kind) )
def notify_badge_added_public_service(sender, kind=''): ''' Send an email when a `PUBLIC_SERVICE` badge is added to an `Organization` Parameters ---------- sender The object that emitted the event. kind: str The kind of `Badge` object awarded. ''' if kind == PUBLIC_SERVICE and isinstance(sender, Organization): recipients = [member.user for member in sender.members] subject = _( 'Your organization "%(name)s" has been identified as public service', name=sender.name ) mail.send( subject, recipients, 'badge_added_public_service', organization=sender, badge=sender.get_badge(kind) )
def notify_membership_request(org, request): recipients = [m.user for m in org.by_role("admin")] mail.send(_("New membership request"), recipients, "membership_request", org=org, request=request)
def notify_new_member(org, member): subject = _('You are now a member of the organization "%(org)s"', org=org) mail.send(subject, member.user, 'new_member', org=org)
def send_test_mail(user): mail.send(_('Test mail'), user, 'test')
def notify_membership_request(org, request): recipients = [m.user for m in org.by_role('admin')] mail.send( _('New membership request'), recipients, 'membership_request', org=org, request=request)