Files @ 732bf3b4c8af
Branch filter:

Location: website/www/conservancy/apps/news/

Not so high.
from django.db import models
from django.conf import settings
from conservancy.apps.staff.models import Person
from 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)",
    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(),

    def is_recent(self):
        return self.pub_date > ( - timedelta(days=5))
        # question: does 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 > ( - timedelta(days=30))

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

        blog_name = 'Software Freedom Law Center News'
        blog_url =  ''
        post_url = (''
                    + self.get_absolute_url())

        import xmlrpclib

        # Ping Technorati
        j = xmlrpclib.Server('')
        reply =, blog_url)

        # Ping Google Blog Search
        j = xmlrpclib.Server('')
        reply =, 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_queryset(self):
        return super(PublicExternalArticleManager, self).get_queryset().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)
    # verify_exists removed
    url = models.URLField(blank=True)
    date = models.DateField()
    visible = models.BooleanField(help_text="Whether to display on website", default=True)

    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()