Example #1
0
 def form_valid(self, form):
     # special logic, we auto-fill the author and slug fields
     newsitem = form.save(commit=False)
     newsitem.author = self.request.user
     newsitem.slug = find_unique_slug(News, newsitem.title)
     newsitem.save()
     return super(NewsCreateView, self).form_valid(form)
Example #2
0
 def form_valid(self, form):
     # special logic, we auto-fill the author and slug fields
     newsitem = form.save(commit=False)
     newsitem.author = self.request.user
     newsitem.slug = find_unique_slug(News, newsitem.title)
     newsitem.save()
     return super(NewsCreateView, self).form_valid(form)
Example #3
0
def create_todolist_packages(form, creator=None):
    package_names = form.package_names()
    packages = form.packages()
    timestamp = now()
    if creator:
        # todo list is new, populate creator and slug fields
        todolist = form.save(commit=False)
        todolist.creator = creator
        todolist.slug = find_unique_slug(Todolist, todolist.name)
        todolist.save()
    else:
        # todo list already existed
        form.save()
        todolist = form.instance

        # first mark removed any packages not in the new list
        to_remove = set()
        for todo_pkg in todolist.packages():
            if todo_pkg.pkg and todo_pkg.pkg not in packages:
                to_remove.add(todo_pkg.pk)
            elif todo_pkg.pkgname not in package_names:
                to_remove.add(todo_pkg.pk)

        TodolistPackage.objects.filter(
                pk__in=to_remove).update(removed=timestamp)

    # Add (or mark unremoved) any packages in the new packages list
    todo_pkgs = []
    for package in packages:
        # ensure get_or_create uses the fields in our unique constraint
        defaults = {
            'pkg': package,
            'pkgbase': package.pkgbase,
            'repo':  package.repo,
        }
        todo_pkg, created = TodolistPackage.objects.get_or_create(
                todolist=todolist,
                pkgname=package.pkgname,
                arch=package.arch,
                defaults=defaults)
        if created:
            todo_pkgs.append(todo_pkg)
        else:
            save = False
            if todo_pkg.removed is not None:
                todo_pkg.removed = None
                save = True
            if todo_pkg.pkg != package:
                todo_pkg.pkg = package
                save = True
            if save:
                todo_pkg.save()

    return todo_pkgs
Example #4
0
 def form_valid(self, form):
     # special logic, we auto-fill the author and slug fields
     newsitem = form.save(commit=False)
     newsitem.author = self.request.user
     newsitem.slug = find_unique_slug(News, newsitem.title)
     newsitem.save()
     if newsitem.send_announce:
         ctx = {
             'news': newsitem,
         }
         template = loader.get_template('news/news_email_notification.txt')
         send_mail('[arch-announce] %s' % newsitem.title,
                   template.render(ctx),
                   '"Arch Linux: Recent news updates: %s" <*****@*****.**>' % newsitem.author.get_full_name(),
                   ['*****@*****.**'],
                   fail_silently=True)
     return super(NewsCreateView, self).form_valid(form)
Example #5
0
 def form_valid(self, form):
     # special logic, we auto-fill the author and slug fields
     newsitem = form.save(commit=False)
     newsitem.author = self.request.user
     newsitem.slug = find_unique_slug(News, newsitem.title)
     newsitem.save()
     if newsitem.send_announce:
         ctx = {
             'news': newsitem,
         }
         template = loader.get_template('news/news_email_notification.txt')
         send_mail(
             '[arch-announce] %s' % newsitem.title,
             template.render(ctx),
             '"Arch Linux: Recent news updates: %s" <*****@*****.**>'
             % newsitem.author.get_full_name(),
             ['*****@*****.**'],
             fail_silently=True)
     return super(NewsCreateView, self).form_valid(form)
Example #6
0
 def form_valid(self, form):
     # special logic, we auto-fill the author and slug fields
     newsitem = form.save(commit=False)
     newsitem.author = self.request.user
     newsitem.slug = find_unique_slug(News, newsitem.title)
     newsitem.save()
     if newsitem.send_announce:
         ctx = {
             'news': newsitem,
         }
         headers = dict()
         if settings.MAILMAN_PASSWORD:
             headers['Approved'] = settings.MAILMAN_PASSWORD
         template = loader.get_template('news/news_email_notification.txt')
         EmailMessage(
             subject=f'[arch-announce] {newsitem.title}',
             body=template.render(ctx),
             from_email=f'"Arch Linux: Recent news updates: {newsitem.author.get_full_name()}" <{settings.ANNOUNCE_EMAIL}>',
             to=[settings.ANNOUNCE_EMAIL],
             headers=headers).send()
     return super(NewsCreateView, self).form_valid(form)