website/www/blog/models.py
Ben Sturmfels 531a97a3c9
Eliminate "conservancy" and "apps" subdirectories
The directory nesting is unnecessary here and confusing to navigate. I've moved
all apps to the project subdirectory, currently called "www", but soon to be
renamed "conservancy".

I've also moved manage.py to the top-level directory.
2023-10-25 12:36:39 +11:00

82 lines
2.7 KiB
Python

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