Files @ 70b8aa07aee4
Branch filter:

Location: website/conservancy/blog/models.py

bsturmfels
Simplify settings and move some standard settings into settings.py

These were previously in djangocommonsettings.py, but don't ever vary between
development and production environments.
from datetime import datetime, timedelta

from django.conf import settings
from django.db import models

from .. import bsoup
from ..staff.models import Person


class EntryTag(models.Model):
    """Tagging for blog entries"""

    label = models.CharField(max_length=100)
    slug = models.SlugField()

    class Meta:
        db_table = 'techblog_entrytag' # legacy

    def __str__(self):
        return self.label

    def get_absolute_url(self):
        return "/blog/?tag=%s" % self.slug

class Entry(models.Model, bsoup.SoupModelMixin):
    """Blog entry"""

    headline = models.CharField(max_length=200)
    slug = models.SlugField(unique_for_date='pub_date')
    summary = models.TextField(help_text="Use raw HTML.  Unlike in the press release model, this summary is not included at the beginning of the body when the entry is displayed.")
    body = models.TextField(help_text="Use raw HTML.  Include the full body of the post.")
    pub_date = models.DateTimeField()
    author = models.ForeignKey(Person, on_delete=models.PROTECT)
    tags = models.ManyToManyField(EntryTag, blank=True)

    date_created = models.DateTimeField(auto_now_add=True)
    date_last_modified = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'techblog_entries' # legacy
        verbose_name_plural = 'entries'
        ordering = ('-pub_date',)
        get_latest_by = 'pub_date'

    SOUP_ATTRS = ['body']

    def __str__(self):
        return self.headline

    def get_absolute_url(self):
        return ("/blog/%s/%s/"
                % (self.pub_date.strftime("%Y/%b/%d").lower(),
                   self.slug))

    def is_recent(self):
        return self.pub_date > (datetime.now() - timedelta(days=30))
        # question: does datetime.now() do a syscall each time is it called?

    # Ping google blogs and technorati.  Taken from
    # http://blog.foozia.com/blog/2007/apr/21/ping-technorati-your-django-blog-using-xml-rpc/
    def save(self):
        if settings.DEBUG or True: # "or True" means it is disabled always
            super().save()
            return

        blog_name = 'Software Freedom Conservancy Blog'
        blog_url =  'http://www.sfconservancy.org/blog/'
        post_url = ('http://www.sfconservancy.org'
                    + self.get_absolute_url())

        import xmlrpc.client

        # Ping Technorati
        j = xmlrpc.client.Server('http://rpc.technorati.com/rpc/ping')
        reply = j.weblogUpdates.ping(blog_name, blog_url)

        # Ping Google Blog Search
        j = xmlrpc.client.Server('http://blogsearch.google.com/ping/RPC2')
        reply = j.weblogUpdates.ping(blog_name, blog_url, post_url)

        # Call any superclass's method
        super().save()