if save: r.save() return r # ============ Video Model ====================== class Video(File): """Dimensions of the video.""" width = models.IntegerField(blank=False, null=False) width = models.IntegerField(blank=False, null=False) # XXX: Probably the wrong way to do this... length = models.IntegerField(blank=False, null=False) # ============ Audio Model ====================== class Audio(File): # XXX: Probably the wrong way to do this... length = models.IntegerField(blank=False, null=False) register_type(File) register_type(Image) register_type(Video) register_type(Audio)
# TODO: Gallery table? def get_description(self): """Return either the human-defined description or a generated excerpt. If there is no excerpt, generate one and cache it.""" if self.description: return self.description if self.generated_excerpt: return self.generated_excerpt # TODO: Generate excerpt and save return None def contents_or_summary(self): """REturn the content or the summary.""" if self.contents: return self.contents if self.summary: return "(Summary) " + self.summary # ============ Register Signals =========================== register_type(BlogItem) def register_signals(): """Register signals""" import signals as sig_ # To avoid circular imports signals.pre_save.connect(sig_.auto_apply_presave_metadata, sender=BlogItem)
class Meta: verbose_name = "node" verbose_name_plural = "nodes" def get_absolute_url(self): return "/node/view/%i/" % self.pk def protocol_compatibility(self, proto_version): """Compare the protocol version with a compatibility checklist.""" # TODO: allow lookup against a compatibility checklist return proto_version == self.protocol_version def __unicode__(self): return "node: " + self.uri # ============ Register Signals =========================== register_type(Node) def register_signals(): """Register Node signals""" import signals as sig_ # To avoid circular imports signals.pre_save.connect(sig_.auto_lookup_feed_on_add_blog, sender=Node) register_signals()