from google.appengine.api import users from google.appengine.ext import db from google.appengine.ext.db import Model as DBModel from datetime import datetime class BaseModel(db.Model): def __init__(self, parent=None, key_name=None, _app=None, **kwds): self.__isdirty = False DBModel.__init__(self, parent=None, key_name=None, _app=None, **kwds) def __setattr__(self,attrname,value): if (attrname.find('_') != 0): if hasattr(self,'_' + attrname): curval = getattr(self,'_' + attrname) if curval != value: self.__isdirty = True if hasattr(self,attrname + '_onchange'): getattr(self,attrname + '_onchange')(curval,value) DBModel.__setattr__(self,attrname,value) class Cache(db.Model): cachekey = db.StringProperty(multiline=False) content = db.TextProperty() class Blog(db.Model): owner = db.UserProperty() description = db.TextProperty() baseurl = db.StringProperty(multiline=False,default='http://yourapp.appspot.com') urlpath = db.StringProperty(multiline=False) title = db.StringProperty(multiline=False) subtitle = db.StringProperty(multiline=False) entrycount = db.IntegerProperty(default=0) blogversion = db.StringProperty(multiline=False,default='1.15') layout = db.StringProperty(multiline=False,default='2cola',choices=[ '3cola', '3colb', '2cola','2colb']) theme = db.StringProperty(multiline=False,default='freshpress.css') area1 = db.TextProperty(default='') area2 = db.TextProperty(default='') area3 = db.TextProperty(default='') archivehtml = db.TextProperty(default='') tags = db.TextProperty(default='{}') analyticsjs = db.StringProperty(multiline=True,default='') commentjs = db.StringProperty(multiline=True,default='') def save(self): self.put() def initialsetup(self): self.title = 'Your Blog Title' self.subtitle = 'Your Blog Subtitle' self.area1 = '

Lower Left Title

\nContent in lower left' self.area2 = '

Center Bottom Box

\nContent in center footer' self.area3 = '

Right Footer

\nContent in footer right' class Archive(db.Model): blog = db.ReferenceProperty(Blog) monthyear = db.StringProperty(multiline=False) """March-08""" entrycount = db.IntegerProperty(default=0) date = db.DateTimeProperty(auto_now_add=True) class Tag(db.Model): blog = db.ReferenceProperty(Blog) tag = db.StringProperty(multiline=False) tagcount = db.IntegerProperty(default=0) class Link(db.Model): blog = db.ReferenceProperty(Blog) href = db.StringProperty(multiline=False,default='') linktype = db.StringProperty(multiline=False,default='blogroll') linktext = db.StringProperty(multiline=False,default='') class Entry(BaseModel): author = db.UserProperty() blog = db.ReferenceProperty(Blog) published = db.BooleanProperty(default=False) content = db.TextProperty(default='') title = db.StringProperty(multiline=False,default='') date = db.DateTimeProperty(auto_now_add=True) tags = db.ListProperty(db.Category) slug = db.StringProperty(multiline=False,default='') monthyear = db.StringProperty(multiline=False) entrytype = db.StringProperty(multiline=False,default='post',choices=[ 'post','page']) commentcount = db.IntegerProperty(default=0) def published_onchange(self,curval,newval): if self.entrytype == 'post': my = self.date.strftime('%b-%Y') # May-2008 archive = Archive.all().filter('monthyear',my).fetch(10) if curval == False and newval == True: # add to archive if archive == []: # new month archive = Archive(blog=self.blog,monthyear=my) else: archive = archive[0] archive.entrycount += 1 archive.put() self.blog.entrycount += 1 else: # remove from archive if archive and archive[0]: archive = archive[0] archive.entrycount -= 1 if archive.entrycount == 0: archive.delete() else: archive.put() self.blog.entrycount -= 1 self.blog.save() def get_tags(self): '''comma delimted list of tags''' return ','.join([tag for tag in self.tags]) def set_tags(self, tags): if tags: tagstemp = [db.Category(tag.strip()) for tag in tags.split(',')] self.tagsnew = [tag for tag in tagstemp if not tag in self.tags] self.tags = tagstemp tagswcommas = property(get_tags,set_tags) def update_archive(self): """Checks to see if there is a month-year entry for the month of current blog, if not creates it and increments count""" my = self.date.strftime('%b-%Y') # May-2008 archive = Archive.all().filter('monthyear',my).fetch(10) if self.entrytype == 'post': if archive == []: archive = Archive(blog=self.blog,monthyear=my) self.monthyear = my archive.put() else: # ratchet up the count archive[0].entrycount += 1 archive[0].put() def update_tags(self): """Update Tag cloud info""" #b = self.blog #print b.tags #for tag in self.tagsnew: # if not b.tags.has_key(tag): # b.tags.update({tag:1}) # else: # b.tags.update({tag:b.tags[tag]+1}) pass def save(self): """ Use this instead of self.put(), as we do some other work here """ #TODO for each tag ensure it has a tag self.update_tags() my = self.date.strftime('%b-%Y') # May-2008 self.monthyear = my self.put()