From: Harris Lapiroff Date: Tue, 5 Apr 2011 17:00:23 +0000 (-0400) Subject: Merge branch 'julian' X-Git-Tag: philo-0.9~15^2~3^2 X-Git-Url: http://git.ithinksw.org/philo.git/commitdiff_plain/bf78e0c846297a4f732ffdfc181b3c89428fd2a4?hp=-c Merge branch 'julian' --- bf78e0c846297a4f732ffdfc181b3c89428fd2a4 diff --combined contrib/julian/models.py index 5dea7a3,c1682cc..5c49c7e --- a/contrib/julian/models.py +++ b/contrib/julian/models.py @@@ -3,7 -3,6 +3,7 @@@ from django.conf.urls.defaults import u from django.contrib.auth.models import User from django.contrib.contenttypes.generic import GenericForeignKey from django.contrib.contenttypes.models import ContentType +from django.contrib.sites.models import Site from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.core.validators import RegexValidator from django.db import models @@@ -15,29 -14,16 +15,29 @@@ from philo.contrib.penfield.models impo from philo.exceptions import ViewCanNotProvideSubpath from philo.models import Tag, Entity, Page, TemplateField from philo.utils import ContentTypeRegistryLimiter -import re, datetime, calendar +import datetime, calendar -# TODO: Could this regex more closely match the Formal Public Identifier spec? -# http://xml.coverpages.org/tauber-fpi.html -FPI_REGEX = re.compile(r"(|\+//|-//)[^/]+//[^/]+//[A-Z]{2}") +__all__ = ('register_location_model', 'unregister_location_model', 'Location', 'TimedModel', 'Event', 'Calendar', 'CalendarView',) ICALENDAR = ICalendarFeed.mime_type FEEDS[ICALENDAR] = ICalendarFeed +try: + DEFAULT_SITE = Site.objects.get_current() +except: + DEFAULT_SITE = None +_languages = dict(settings.LANGUAGES) +try: + _languages[settings.LANGUAGE_CODE] + DEFAULT_LANGUAGE = settings.LANGUAGE_CODE +except KeyError: + try: + lang = settings.LANGUAGE_CODE.split('-')[0] + _languages[lang] + DEFAULT_LANGUAGE = lang + except KeyError: + DEFAULT_LANGUAGE = None location_content_type_limiter = ContentTypeRegistryLimiter() @@@ -79,10 -65,10 +79,10 @@@ class TimedModel(models.Model) raise ValidationError("A %s cannot end before it starts." % self.__class__.__name__) def get_start(self): - return self.start_date + return datetime.datetime.combine(self.start_date, self.start_time) if self.start_time else self.start_date def get_end(self): - return self.end_date + return datetime.datetime.combine(self.end_date, self.end_time) if self.end_time else self.end_date class Meta: abstract = True @@@ -121,41 -107,25 +121,41 @@@ class Event(Entity, TimedModel) created = models.DateTimeField(auto_now_add=True) last_modified = models.DateTimeField(auto_now=True) - uuid = models.TextField() # Format? + + site = models.ForeignKey(Site, default=DEFAULT_SITE) + + @property + def uuid(self): + return "%s@%s" % (self.created.isoformat(), getattr(self.site, 'domain', 'None')) objects = EventManager() def __unicode__(self): return self.name + + class Meta: + unique_together = ('site', 'created') class Calendar(Entity): name = models.CharField(max_length=100) slug = models.SlugField(max_length=100) description = models.TextField(blank=True) - events = models.ManyToManyField(Event, related_name='calendars') + events = models.ManyToManyField(Event, related_name='calendars', blank=True) - # TODO: Can we auto-generate this on save based on site id and calendar name and settings language? - uuid = models.TextField("Calendar UUID", unique=True, help_text="Should conform to Formal Public Identifier format. See Wikipedia.", validators=[RegexValidator(FPI_REGEX)]) + site = models.ForeignKey(Site, default=DEFAULT_SITE) + language = models.CharField(max_length=5, choices=settings.LANGUAGES, default=DEFAULT_LANGUAGE) def __unicode__(self): return self.name + + @property + def fpi(self): + # See http://xml.coverpages.org/tauber-fpi.html or ISO 9070:1991 for format information. + return "-//%s//%s//%s" % (self.site.name, self.name, self.language.split('-')[0].upper()) + + class Meta: + unique_together = ('name', 'site', 'language') class CalendarView(FeedView): @@@ -411,7 -381,8 +411,7 @@@ return "" def feed_guid(self, obj): - # Is this correct? Should I have a different id for different subfeeds? - return obj.uuid + return obj.fpi def description(self, obj): return obj.description