Files @ de0b3fbb09cd
Branch filter:

Location: website/www/conservancy/apps/news/models.py

bkuhn
Include donations in progress bar through 2014-04-20.
mjw insisted that I update this more often; he's right about that. :)
from django.db import models
from django.conf import settings
from conservancy.apps.staff.models import Person
from conservancy.apps.events.models import Event
from django.contrib.sites.models import Site
from datetime import datetime, timedelta

class PressRelease(models.Model):
    """News release model"""

    headline = models.CharField(max_length=300)
    subhead = models.CharField(max_length=300, blank=True)
    slug = models.SlugField(unique_for_date="pub_date",
                            help_text=("automatically built from headline"))
    summary = models.TextField(help_text="First paragraph (raw HTML)")
    body = models.TextField(help_text="Remainder of post (raw HTML)",
                            blank=True)
    pub_date = models.DateTimeField("date [to be] published")
    sites = models.ManyToManyField(Site)

    date_last_modified = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ("-pub_date",)
        get_latest_by = "pub_date"

    def __unicode__(self):
        return self.headline

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

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

    def is_in_past_month(self):
        # This function is deprecated.  Use the date_within template
        # filter instead (example in conservancy/templates/frontpage.html)
        return self.pub_date > (datetime.now() - timedelta(days=30))

    def save(self):
        if settings.CONSERVANCY_DEVEL or True:
            super(PressRelease, self).save()
            return

        blog_name = 'Software Freedom Law Center News'
        blog_url =  'http://www.softwarefreedom.org/news/'
        post_url = ('http://www.softwarefreedom.org'
                    + self.get_absolute_url())

        import xmlrpclib

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

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

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

class ExternalArticleTag(models.Model):
    """A way to tag external articles"""

    label = models.CharField(max_length=100)

    date_created = models.DateField(auto_now_add=True)

    def __unicode__(self):
        return self.label

class PublicExternalArticleManager(models.Manager):
    def get_query_set(self):
        return super(PublicExternalArticleManager, self).get_query_set().filter(visible=True)

class ExternalArticle(models.Model):
    """A system for displaying Conservancy news mentions on the site.

    (Currently unused)
    """

    title = models.CharField(max_length=400)
    info = models.CharField(help_text="subscribers only? audio? pdf warning?",
                            blank=True, max_length=300)
    publication = models.CharField("source of article", max_length=300)
    url = models.URLField(blank=True, verify_exists=False)
    date = models.DateField()
    visible = models.BooleanField(help_text="Whether to display on website")

    tags = models.ManyToManyField(ExternalArticleTag, null=True, blank=True)
    people = models.ManyToManyField(Person, null=True, blank=True)
    event = models.ForeignKey(Event, null=True, blank=True)
    press_release = models.ForeignKey(PressRelease, null=True, blank=True)

    date_created = models.DateField(auto_now_add=True)

    class Meta:
        ordering = ("-date_created",)
        get_latest_by = "date_created"

    def __unicode__(self):
        return u"%s (%s)" % (self.title, self.publication)

    objects = models.Manager()
    public = PublicExternalArticleManager()