class API_Key(db.Model): # What the API-key gives access to host = db.CategoryProperty(required=True) # What level of authority does the key have? ("Read", "Write" etc.) level = db.CategoryProperty(required=True) # The key itself apikey = db.StringProperty(required=True)
class Health(db.Expando): account = db.ReferenceProperty(Account) profile = db.ReferenceProperty(Profile) gh_identifier = db.StringProperty() category_ccr = db.CategoryProperty() # MEDICATION category_item = db.CategoryProperty() # Captopril category_kind = db.CategoryProperty( default="http://schemas.google.com/health/kinds#profile") ccr = db.TextProperty() created = db.DateTimeProperty(auto_now_add=True) updated = db.DateTimeProperty(auto_now=True)
class Task(db.Model): proposer = db.UserProperty() proposed = db.DateTimeProperty() uuid = db.StringProperty() title = db.StringProperty() blocks = db.SelfReferenceProperty() status = db.CategoryProperty()
class Badge(db.Model): name = db.StringProperty(required=True) description = db.StringProperty(required=True) category = db.CategoryProperty(required=True) image = db.StringProperty(required=True) value = db.IntegerProperty(required=True)
class UserPrefs(db.Model): user = db.UserProperty() # User object level = db.CategoryProperty(default='Normal') # TODO: Access level name_override = db.StringProperty(default='') posts = db.IntegerProperty(default=0) # Number of posts this user has made posts_sage = db.IntegerProperty( default=0) # Number of sage posts this user has made
class Product(BaseModel): name = db.StringProperty(indexed=True, required=False) category = db.ReferenceProperty(Category, collection_name='products', indexed=True, required=False) # Keep a String reference to the Department key_name department = db.StringProperty(indexed=True, required=False) collection = db.StringProperty(required=False, indexed=True) type = db.CategoryProperty(indexed=True, required=False) price = db.FloatProperty(indexed=True, required=False) # Some Products may not have a width and instead just a Depth, eg. for Diameter width = db.FloatProperty(indexed=True, required=False) height = db.FloatProperty(indexed=True, required=False) depth = db.FloatProperty(indexed=True, required=False) # Some products may have just a length length = db.FloatProperty(indexed=True, required=False) colour = db.StringProperty(indexed=True, required=False, choices=set([ 'black', 'blue', 'bronze', 'brown', 'clear', 'gold', 'green', 'grey', 'metallics', 'mirrored', 'multi-coloured', 'natural', 'neutral', 'orange', 'pink', 'purple', 'red', 'silver', 'white', 'yellow', '' ])) description = db.TextProperty(required=False) images = db.ListProperty(db.Key, required=True, indexed=False) url = db.LinkProperty(required=False, indexed=True)
class AllPropertiesModel(db.Model): """Property names are ugly, yes.""" prop_string = db.StringProperty() prop_byte_string = db.ByteStringProperty() prop_boolean = db.BooleanProperty() prop_integer = db.IntegerProperty() prop_float = db.FloatProperty() prop_date_time = db.DateTimeProperty() prop_date = db.DateProperty() prop_time = db.TimeProperty() prop_list = db.ListProperty(int) prop_string_list = db.StringListProperty() prop_reference = db.ReferenceProperty() prop_self_refeference = db.SelfReferenceProperty() prop_user = db.UserProperty() prop_blob = db.BlobProperty() prop_text = db.TextProperty() prop_category = db.CategoryProperty() prop_link = db.LinkProperty() prop_email = db.EmailProperty() prop_geo_pt = db.GeoPtProperty() prop_im = db.IMProperty() prop_phone_number = db.PhoneNumberProperty() prop_postal_address = db.PostalAddressProperty() prop_rating = db.RatingProperty()
class Locale(db.Model): name = db.StringProperty(default=None) description = db.TextProperty(default=None) language = db.CategoryProperty(choices=set(['en', 'ko', 'ja']), required=True) story = db.ReferenceProperty(Story, default=None, required=True) page = db.ReferenceProperty(Page, default=None, required=True) content = db.ReferenceProperty(Content, default=None, required=True)
class SubmittedRequestInfo(db.Model): name = db.StringProperty(required=True) email = db.EmailProperty(required=True) request = db.CategoryProperty(required=True) targetDate = db.DateTimeProperty() details = db.TextProperty(required=True) requestDate = db.DateTimeProperty(required=True, auto_now_add=True, auto_now=False)
class ArticleOfClothing(db.Model): """Models an article of clothing with type, temperatureBands, image, and name""" name = db.StringProperty() clothingType = db.CategoryProperty() temperatureBands = db.ListProperty(long) nonDummyData = db.IntegerProperty() image = db.BlobProperty() imagePath = db.StringProperty() has_image = db.StringProperty()
class ArtElem(db.Model): """Models navigation data store.""" title = db.StringProperty(required=True) date = db.StringProperty(required=True) mainPic = db.BlobProperty(default=None, required=True) thumb = db.BlobProperty(default=None, required=True) price = db.FloatProperty(required=True) dimension = db.FloatProperty(required=True) category = db.CategoryProperty(required=True) closeUps = db.ReferenceProperty(ImgElem)
class Listing(GeoModel): address = db.PostalAddressProperty() price = db.FloatProperty() baths = db.FloatProperty() beds = db.FloatProperty() size = db.FloatProperty() description = db.StringProperty(multiline=True) property_type = db.StringProperty() amenities = db.StringProperty() author = db.UserProperty() createDate = db.DateTimeProperty(auto_now_add=True) lastUpdateDate = db.DateTimeProperty(auto_now=True) status = db.StringProperty() tag = db.CategoryProperty() portfolio = db.StringProperty() photo = db.BlobProperty() def __unicode__(self): return self.address @staticmethod def public_attributes(): """Returns a set of simple attributes on listing entities.""" return ['address', 'price', 'baths', 'beds'] def set_location(self): if address: pts = geocoder.query() if pts and len(pts) >= 2: self.location = db.GeoPt() self.location.lat = pts[0] self.location.lon = pts[1] def _get_latitude(self): return self.location.lat if self.location else None def _set_latitude(self, lat): if not self.location: self.location = db.GeoPt() self.location.lat = lat latitude = property(_get_latitude, _set_latitude) def _get_longitude(self): return self.location.lon if self.location else None def _set_longitude(self, lon): if not self.location: self.location = db.GeoPt() self.location.lon = lon longitude = property(_get_longitude, _set_longitude)
class CoverageData(db.Model): """This represents one coverage report from the build bot.""" # The date the report was made. date = db.DateTimeProperty(required=True) # Coverage percentages. line_coverage = db.FloatProperty(required=True) function_coverage = db.FloatProperty(required=True) branch_coverage = db.FloatProperty() # The report category must be one of the REPORT_CATEGORIES. report_category = db.CategoryProperty()
class ReceiptModel(LoggableModel): receipt_type = db.CategoryProperty(choices=set([ 'candy', 'money', 'data', # 'play', 'gift']),required=True) before = db.IntegerProperty(required=True) cost = db.IntegerProperty(required=True) after = db.IntegerProperty(required=True) dataID = db.IntegerProperty(default=0) receipt_hash = db.StringProperty()
class Picture(db.Model): #Picture name title = db.StringProperty(required=True) #Date creation date = db.DateTimeProperty(auto_now_add=True) #Date last modification date_modify = db.DateTimeProperty(auto_now=True) #Image category(defined on upload mako) category = db.CategoryProperty(required=True) #Uploader user = db.UserProperty(required=False) #Image binary image = db.BlobProperty()
class Entry(CustomModel): title = db.StringProperty() slug = db.StringProperty() pub_date = db.DateTimeProperty(auto_now_add=True) description = db.TextProperty() text = db.TextProperty() tags = db.ListProperty(db.Category) format = db.CategoryProperty() published = db.BooleanProperty(default=False) author = db.UserProperty() template = db.StringProperty() show_in_rss = db.BooleanProperty(default=False) cacheable = db.BooleanProperty(default=True) sequence = db.IntegerProperty() old_id = db.IntegerProperty() disable_comments = db.BooleanProperty(default=False) def __unicode__(self): return self.title def get_absolute_url(self): return reverse('entry', args=[self.slug]) def put(self): if not self.slug: self.slug = unicode(slugify(self.title)) # Delete from cache cache.delete(Entry.get_cache_key(self.slug)) return super(Entry, self).put() @classmethod def get_cache_key(cls, slug): return app_settings.BLOG_CACHE_KEY_PREFIX + slug def description_or_text(self): return self.description or self.text[:200]+'...' @classmethod def latest(cls): l = cls.all().filter('published =', True) l.order('-pub_date') def get_text(self): if self.format == 'markdown': return markdown(self.text) elif self.format == 'textile': return textile(self.text) return self.text
class Registration(db.Model): full_name = db.StringProperty() gender = db.CategoryProperty() email = db.EmailProperty() highschool = db.StringProperty() emergency_contact_name = db.StringProperty() emergency_contact_number = db.StringProperty() laptop = db.BooleanProperty() year = db.IntegerProperty() level = db.IntegerProperty() reason = db.StringProperty() # Created created = db.DateTimeProperty(auto_now_add=True)
class ContentModel (MemcachedModel): version = db.IntegerProperty(default=1) visible = db.IntegerProperty(default=1) group = db.ReferenceProperty(AccountModel, collection_name='groupowns', required=False) creator = db.ReferenceProperty(AccountModel, collection_name='createds', required=True) index = db.IntegerProperty(default=0) price = db.IntegerProperty(default=0) content_type = db.CategoryProperty(choices=set(['category','story','page','content']), required=True) expiration_days = db.IntegerProperty(default=0) expiration_mins = db.IntegerProperty(default=0)
class SessionData(db.Model): presenter = db.ListProperty(unicode, default=None) user_id = db.StringProperty() name = db.StringProperty() room = db.StringProperty(indexed=True) date = db.StringProperty() time = db.StringProperty() dotw = db.StringProperty() #date_time = db.DateTimeProperty() create_date = db.DateTimeProperty(auto_now_add=True) module = db.StringProperty(default=module) blob_store_key = blobstore.BlobReferenceProperty() filename = db.StringProperty() uploaded_to_dbox = db.BooleanProperty(default=False) dbox_path = db.CategoryProperty(default=None) dbox_size = db.StringProperty(default=None)
class Wiki(CustomModel): title = db.StringProperty() slug = db.StringProperty() pub_date = db.DateTimeProperty(auto_now_add=True) description = db.TextProperty() text = db.TextProperty() tags = db.ListProperty(db.Category) format = db.CategoryProperty() published = db.BooleanProperty(default=False) author = db.UserProperty() template = db.StringProperty() show_in_rss = db.BooleanProperty(default=False) cacheable = db.BooleanProperty(default=True) sequence = db.IntegerProperty() old_id = db.IntegerProperty() disable_comments = db.BooleanProperty(default=False) def __unicode__(self): return self.title def get_absolute_url(self): return reverse('wiki', args=[self.slug]) def put(self): if not self.slug: self.slug = unicode(slugify(self.title)) # Delete from cache cache.delete(Wiki.get_cache_key(self.slug)) return super(Wiki, self).put() @classmethod def get_cache_key(cls, slug): return app_settings.WIKI_CACHE_KEY_PREFIX + slug def description_or_text(self): return self.description or self.text def render(self): return render_to_string('gae_wiki/render_wiki.html', {'wiki': self})
class Everything(db.Model): str = db.StringProperty() bool = db.BooleanProperty() int = db.IntegerProperty() float = db.FloatProperty() datetime = db.DateTimeProperty() date = db.DateProperty() time = db.TimeProperty() list = db.ListProperty(types.IntType) strlist = db.StringListProperty() user = db.UserProperty() blob = db.BlobProperty() text = db.TextProperty() category = db.CategoryProperty() link = db.LinkProperty() email = db.EmailProperty() geopt = db.GeoPtProperty() im = db.IMProperty() phonenumber = db.PhoneNumberProperty() postaladdress = db.PostalAddressProperty() rating = db.RatingProperty()
class LinkModel (LoggableModel): score = db.IntegerProperty(default=0) link_type = db.CategoryProperty(choices=set(['accountcategory','accountstory','accountpage','accountcontent']), required=True)
class User(db.Model): username = db.StringProperty(required=True) password = db.StringProperty(required=True) email = db.StringProperty(required=True) user_class = db.CategoryProperty(required=True) created = db.DateTimeProperty(auto_now_add=True)
class TaskCategory(db.Model): owner = db.UserProperty() name = db.CategoryProperty()
class Song(db.Model): artist = db.ReferenceProperty(Artist) album = db.ReferenceProperty(Album) duration = db.StringProperty() genre = db.CategoryProperty() title = db.StringProperty()
class FoodType(db.Model): name = db.CategoryProperty()
class Document(db.Model): """A document is a piece of (possibly long) user generated text that is attached to a specific djdb object. """ # The object that this document's text is the subject of. subject = db.ReferenceProperty(required=True) # The user who wrote the text. author = db.ReferenceProperty(User, required=False) # If the author is not a user, then use this field. author_name = db.StringProperty(required=False) revoked = db.BooleanProperty(required=False, default=False) @property def author_display(self): if self.author: return self.author else: return self.author_name # When this document was created. created = db.DateTimeProperty(required=True, auto_now_add=True) # When this document was last modified. modified = db.DateTimeProperty(required=True, auto_now=True) @property def created_display(self): """This is the time to show to users.""" return time_util.convert_utc_to_chicago(self.created) # What type of document this is. # Example: "review" for an Album review. doctype = db.CategoryProperty(required=True) # If True, this document should not be shown under normal # circumstances. is_hidden = db.BooleanProperty(required=True, default=False) # The title of this document. title = db.StringProperty() # The text of the document, exactly as it was entered by the user. # This might not be HTML-safe! unsafe_text = db.TextProperty() @property def text(self): """Returns a sanitized version of the text the user input.""" return sanitize_html.sanitize_html(self.unsafe_text) @property def truncated_text(self): """Returns truncated text.""" if len(self.text) > 100: text = self.text[0:100] + "..." else: text = self.text return text @property def sort_key(self): # We want to sort documents in reverse chronological order. return tuple(-x for x in self.created.utctimetuple())
class Track(db.Model): """A track in CHIRP's digital library. Each track's audio content is stored in a separate MP3 file in the digital library. Attributes: album: A reference to the Album entity that this track is a part of. title: The name of the track, as stored in the MP3 file's TIT2 tag. pronunciation: How to pronounce the track title. track_artist: A reference to the Artist entity of the track's creator. This must be set if self.album.is_compilation is True. It may be set if self.album.is_compilation is False. import_tags: A list of the tags that were attached to this track when it was imported into the library. sampling_rate_hz: The sampling rate of the track's MP3 file, measured in Hertz. bit_rate_kbps: The bit rate of the MP3 file, measured in kbps (kilobits per second). channels: The number and type of channels in the MP3 file. duration_ms: The duration of the track, measured in milliseconds. (Remember that 1 second = 1000 milliseconds!) revoked: If true, this object has been revoked. Revoked items should not be returned in search results, and should be otherwise hidden from users when possible. """ album = db.ReferenceProperty(Album, required=True) title = db.StringProperty(required=True) pronunciation = db.StringProperty(required=False) track_artist = db.ReferenceProperty(Artist, required=False) import_tags = db.StringListProperty() # Do not manipulate this field directly! Instead, use the # functions provided in the tag_util module. # # This is just a cached version of the data; the authoritative # version of the tags for 'obj' are found by calling # TagEdit.fetch_and_merge(obj). current_tags = db.StringListProperty() # TODO(trow): Validate that this is > 0 and <= self.album.num_tracks. track_num = db.IntegerProperty(required=True) sampling_rate_hz = db.IntegerProperty(required=True) bit_rate_kbps = db.IntegerProperty(required=True) channels = db.CategoryProperty(required=True, choices=_CHANNEL_CHOICES) # TODO(trow): Validate that this is > 0. duration_ms = db.IntegerProperty(required=True) revoked = db.BooleanProperty(required=False, default=False) # Whether the track belongs to an album that has been reviewed. is_reviewed = db.BooleanProperty(required=False, default=False) @property def duration(self): """A human-readable version of the track's duration.""" dur_ms = self.duration_ms % 1000 dur_s = ((self.duration_ms - dur_ms) // 1000) % 60 dur_m = (self.duration_ms - dur_ms - 1000*dur_s) // 60000 return "%d:%02d" % (dur_m, dur_s) @property def artist_name(self): """Returns a string containing the name of the track's creator.""" return ((self.track_artist and self.track_artist.name) or self.album.artist_name) @property def artist_url(self): """Returns a URL for this track's artist's information.""" return ((self.track_artist and self.track_artist.url) or self.album.album_artist.url) @property def sort_key(self): """A key that can be used to sort Albums into a reasonable order.""" return (self.album.sort_key, self.track_num) _KEY_PREFIX = u"djdb/t:" @classmethod def get_key_name(cls, ufid): """Returns the datastore key name based on the track's UFID.""" return cls._KEY_PREFIX + ufid def __init__(self, *args, **kwargs): """Constructor. If necessary, automatically sets the entity's key according to our standard scheme. """ if 'ufid' in kwargs: assert 'key_name' not in kwargs kwargs['key_name'] = self.get_key_name(kwargs['ufid']) db.Model.__init__(self, *args, **kwargs) @property def ufid(self): """Returns the library UFID of the track's MP3.""" return self.key().name()[len(self._KEY_PREFIX):] def __unicode__(self): return self.title @property def sorted_current_tags(self): """Returns a sorted list of tags.""" return sorted(self.current_tags, key=unicode.lower) def has_tag(self, tag): """Returns true if tag 'tag' is currently set.""" tag = tag.lower() return any(tag == t.lower() for t in self.current_tags) @property def is_explicit(self): """Returns True if the [Explicit] tag is set on this track.""" return self.has_tag(EXPLICIT_TAG) @property def is_recommended(self): """Returns True if the [Recommended] tag is set on this track.""" return self.has_tag(RECOMMENDED_TAG)
class Reference(db.Model): category_ccr = db.CategoryProperty() # MEDICATION category_item = db.CategoryProperty() # Captopril category_item_kwds = db.StringListProperty( ) # captopril, i.e., lowercase keywords for a search
class Label(db.Model): timestamp = db.DateTimeProperty(auto_now_add=True) url = db.StringProperty() label = db.StringProperty() mode = db.CategoryProperty(choices=("page", "site"))