class KeyValueCache(db.Model): value = db.BlobProperty() created = db.DateTimeProperty() expires = db.DateTimeProperty() def is_expired(self): return datetime.datetime.now() > self.expires @staticmethod def get_namespaced_key(key, namespace=""): return "%s:%s" % (namespace, key) @staticmethod def get(key, namespace=""): namespaced_key = KeyValueCache.get_namespaced_key(key, namespace) key_value = KeyValueCache.get_by_key_name(namespaced_key) if key_value and not key_value.is_expired(): return pickle.loads(key_value.value) return None @staticmethod def set(key, result, time=DEFAULT_LAYER_CACHE_EXPIRATION_SECONDS, namespace=""): namespaced_key = KeyValueCache.get_namespaced_key(key, namespace) dt = datetime.datetime.now() dt_expires = datetime.datetime.max if time > 0: dt_expires = dt + datetime.timedelta(seconds=time) key_value = KeyValueCache.get_or_insert(key_name=namespaced_key, value=pickle.dumps(result), created=dt, expires=dt_expires) if key_value.created != dt: # Already existed, need to overwrite key_value.value = pickle.dumps(result) key_value.created = dt key_value.expires = dt_expires key_value.put() @staticmethod def delete(key, namespace=""): namespaced_key = KeyValueCache.get_namespaced_key(key, namespace) key_value = KeyValueCache.get_by_key_name(namespaced_key) if key_value: db.delete(key_value)
class Mock(db.Model): name = db.StringProperty(multiline=False) data = db.BlobProperty() mimetype = db.StringProperty(multiline=False) mocklist = db.ReferenceProperty(MockList) date = db.DateTimeProperty(auto_now_add=True) def get_id(self): return id_encode(self.key().id())
class _HugeTaskPayload(db.Model): """Model object to store task payload.""" payload = db.BlobProperty() @classmethod def kind(cls): """Returns entity kind.""" return "_AE_MR_TaskPayload"
class Map(db.Model): name = db.StringProperty() map_x = db.IntegerProperty() map_y = db.IntegerProperty() map_danger1_x = db.IntegerProperty() map_danger1_y = db.IntegerProperty() map_danger2_x = db.IntegerProperty() map_danger2_y = db.IntegerProperty() map_danger3_x = db.IntegerProperty() map_danger3_y = db.IntegerProperty() map_danger4_x = db.IntegerProperty() map_danger4_y = db.IntegerProperty() map_danger5_x = db.IntegerProperty() map_danger5_y = db.IntegerProperty() map_danger6_x = db.IntegerProperty() map_danger6_y = db.IntegerProperty() map_danger7_x = db.IntegerProperty() map_danger7_y = db.IntegerProperty() map_danger8_x = db.IntegerProperty() map_danger8_y = db.IntegerProperty() map_danger9_x = db.IntegerProperty() map_danger9_y = db.IntegerProperty() map_danger10_x = db.IntegerProperty() map_danger10_y = db.IntegerProperty() newPos = [] newPos.append([map_danger1_x, map_danger1_y]) newPos.append([map_danger2_x, map_danger2_y]) newPos.append([map_danger3_x, map_danger3_y]) newPos.append([map_danger4_x, map_danger4_y]) newPos.append([map_danger5_x, map_danger5_y]) newPos.append([map_danger6_x, map_danger6_y]) newPos.append([map_danger7_x, map_danger7_y]) newPos.append([map_danger8_x, map_danger8_y]) newPos.append([map_danger9_x, map_danger9_y]) newPos.append([map_danger10_x, map_danger10_y]) hazard = newPos visited = [] image = db.BlobProperty() date = db.DateTimeProperty(auto_now_add=True) def getWidth(self): return self.map_x def getHeight(self): return self.map_y def pathFinderVisited(self, x, y): self.visited.append([x, y]) self.visited.sort() def isBlocked(self, x, y): if [x, y] in self.hazard: return 1 def getCost(self): return 1
class Game(db.Model): title = db.StringProperty() subtitle = db.StringProperty() teaser = db.TextProperty() background_image = db.BlobProperty() maps_location = db.GeoPtProperty() maps_zoom = db.IntegerProperty() start_xp = db.IntegerProperty(default=0) admin_only = db.BooleanProperty(default=False)
class ImageFile(db.Model): width = db.IntegerProperty() height = db.IntegerProperty() format = db.IntegerProperty() data = db.BlobProperty() owner = db.ReferenceProperty(Ego, collection_name = "image_files") private = db.BooleanProperty(default=True) #public photos can be used by anyone approved = db.BooleanProperty(default=False)
class Resource(db.Model): """Resources are blobs in the datastore that can contain pages of HTML, stylesheets, images, or templates. A Resource is just like a small file except for a few additional features: 1. Resources are grouped under ResourceBundles. 2. Resources can be fetched from the datastore or from files on disk. 3. We can store localized variants of a resource and select one. 4. We support compiling and rendering a resource as a Django template. 5. We cache the fetched, compiled, or rendered result in RAM. The key_name is a resource_name or resource_name + ':' + language_code. All Resource entities should be children of a ResourceBundle.""" cache_seconds = db.FloatProperty(default=1.0) # cache TTL of resource content = db.BlobProperty() # binary data or UTF8-encoded template text last_modified = db.DateTimeProperty(auto_now=True) # for bookkeeping RESOURCE_DIR = 'resources' # directory containing resource files @staticmethod def list_files(): """Returns a list of the files in the resource directory.""" return os.listdir(Resource.RESOURCE_DIR) @staticmethod def load_from_file(name): """Creates a Resource from a file, or returns None if no such file.""" try: file = open(Resource.RESOURCE_DIR + '/' + name) return Resource(key_name=name, content=file.read()) except IOError: return None @staticmethod def get(name, bundle_name=None): """Fetches a resource, first looking in the datastore, then falling back to a file on disk. Returns None if neither is found.""" parent = bundle_name and db.Key.from_path('ResourceBundle', bundle_name) return (parent and Resource.get_by_key_name(name, parent=parent) or Resource.load_from_file(name)) def get_template(self): """Compiles the content of this resource into a Template object.""" if not hasattr(self, 'template'): try: self.template = django.template.Template( self.content.decode('utf-8'), origin=django.template.base.Origin('Resource'), name=self.key().name()) except: # Exception here is silently ignored otherwise. logging.error( 'Error loading template %s.' % self.key().name(), exc_info=True) self.template = django.template.Template( 'Internal Server Error', origin=django.template.base.Origin('Resource'), name=self.key().name()) return self.template
class Movie(db.Model): title = db.StringProperty() picture = db.BlobProperty(default=None) full_content = db.TextProperty(default=None) summary = db.TextProperty(default=None) date = db.DateTimeProperty(auto_now_add=True) release_date = db.DateTimeProperty(default=None) rating_average = db.FloatProperty(default=0.0) rating_count = db.IntegerProperty(default=0)
class Bookmark(db.Model): description = db.StringProperty() favIcon = db.BlobProperty() locator = db.LinkProperty() timeStamp = db.DateTimeProperty(auto_now_add = True) title = db.StringProperty() #owner = db.ReferenceProperty(Owner, collection_name = 'bookmarks') '''
class TopMovieImage(BaseEntity): imdb_id = db.StringProperty() img_data = db.BlobProperty() width = db.IntegerProperty() height = db.IntegerProperty() content_type = db.StringProperty() def __unicode__(self): return "%s (%s)" % (self.imdb_id, self.content_type)
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 ForumImages(db.Model): imageid = db.StringProperty() # key_name created = db.DateTimeProperty(auto_now_add=True) title = db.StringProperty() format = db.StringProperty() # jpg, gif, png size = db.IntegerProperty() width = db.IntegerProperty() height = db.IntegerProperty() bits = db.BlobProperty(default=None)
class WebSite(db.Model): author = db.UserProperty() title = db.StringProperty(required=True) link = db.LinkProperty(required=True) description = db.TextProperty(required=True) tags = db.ListProperty(db.Category) srclink = db.StringProperty() #XXX is_public = db.BooleanProperty(required=True, default=False) screencap = db.BlobProperty() created = db.DateTimeProperty(auto_now_add=True) deschtml = db.TextProperty() likedby = db.StringListProperty() votes = db.IntegerProperty(default=0) def get_tags(self): return ' '.join([urllib.unquote(tag) for tag in self.tags]) def set_tags(self, tags): if tags: tags = tags.strip(' ') tags = [db.Category(urllib.quote(tag.strip())) for tag in tags.split(' ')] self.tags = [tag for tag in tags if not tag in self.tags] tags_spc = property(get_tags,set_tags) def update_tags(self,update): if self.tags: for tag in self.tags: tag_ = urllib.unquote(tag) tags = Tag.all().filter('tag',tag_).fetch(1) if tags == []: tagnew = Tag(tag=tag_,entrycount=1) tagnew.put() else: if not update: tags[0].entrycount+=1 tags[0].put() def save(self): self.update_tags(False) self.put() def update_vote(self, user): if user.nickname() not in self.likedby and user != self.author: self.votes = self.votes + 1 self.likedby.append(user.nickname()) self.put() return True else: return False def update_screencap(self): url = 'http://images.websnapr.com/?size=M&key=%s&url=%s' % (get_apikey(), self.link) result = urlfetch.fetch(url) if result.status_code == 200: self.screencap = db.Blob(result.content) self.put()
class Paste(db.Model): user = db.UserProperty(required=True) time = db.DateTimeProperty(auto_now_add=True) title = db.StringProperty() code = db.BlobProperty(required=True) language = db.StringProperty() views = db.IntegerProperty(default=0) commentsEnabled = db.BooleanProperty() #used for redirection stuff pasteId = db.StringProperty()
class User(db.Model): location = db.StringProperty() name = db.StringProperty() clientId = db.StringProperty() extra = db.BlobProperty() lastmodified = db.DateTimeProperty(auto_now=True) def get_object(self): return {'name': self.name, 'clientId': self.clientId, 'extra': self.extra} def __repr__(self): return '<User location=%r clientId=%r name=%r lastmodified=%r len(extra)=%d />'%(self.location, self.clientId, self.name, self.lastmodified, len(self.extra) if self.extra else 0)
class Product(db.Model): author = db.UserProperty() description = db.StringProperty(required=True, multiline=True) title = db.StringProperty(required=False, multiline=False) image = db.BlobProperty(required=True) imagetype = db.StringProperty(required=True) date = db.DateTimeProperty(auto_now_add=True) price = db.FloatProperty(default=19.99) available = db.BooleanProperty(default=True) recommended = db.ListProperty(db.Key)
class Products(db.Model): category=db.StringProperty(required=True) subcategory=db.StringProperty(required=True) name=db.StringProperty(required=True) price=db.IntegerProperty(required=True) brand=db.StringProperty(required=True) quantity=db.IntegerProperty(required=True) info=db.TextProperty(required=True) image=db.BlobProperty() discount=db.IntegerProperty(required=True)
class TransitAppFormProgress(db.Model): """Holds on to key pieces of form progress that cannot be sent through invisible input fields.""" progress_uuid = db.StringProperty(indexed=True, required=True) last_updated = db.DateTimeProperty(auto_now=True) info_form_pickle = db.BlobProperty( ) # dictionary of stuff from original form, pickled. agency_form_pickle = db.BlobProperty( ) # dictionary of stuff from agency form, pickled. screen_shot_families = db.StringListProperty() @staticmethod def new_with_uuid(): return TransitAppFormProgress( progress_uuid=str(uuid4()).replace('-', '')) @staticmethod def get_with_uuid(uuid): return TransitAppFormProgress.all().filter('progress_uuid =', uuid).get()
class Post(db.Model): author = db.StringProperty() title = db.StringProperty(required=True) body = db.TextProperty(required=True) brief = db.TextProperty() tag = db.StringProperty() tagli = db.StringListProperty() adddate = db.DateTimeProperty(auto_now_add=True) time = db.StringProperty() image = db.BlobProperty()
class MaskImage(db.Model): mask_mode = db.StringProperty() image = db.BlobProperty() access_key = db.StringProperty() archive_list_key = db.ReferenceProperty(ArchiveList) read_count = db.IntegerProperty() access_code = db.StringProperty() mask_type = db.StringProperty() created_at = db.DateTimeProperty(auto_now_add=True) updated_at = db.DateTimeProperty(auto_now_add=True)
class InstaData(db.Model): instagram_id = db.IntegerProperty() url = db.StringProperty() image_url = db.StringProperty() content_type = db.StringProperty() thumbnail = db.BlobProperty() created_at = db.DateTimeProperty() twitter_name = db.StringProperty() twitter_message = db.StringProperty(multiline=True) twitter_url = db.StringProperty()
class Media(db.Model): name = db.StringProperty() mtype = db.StringProperty() bits = db.BlobProperty() date = db.DateTimeProperty(auto_now_add=True) download = db.IntegerProperty(default=0) @property def size(self): return len(self.bits)
class VerifiedScore(db.Model): value = db.IntegerProperty(required=True) time = db.IntegerProperty(required=True) # seconds ? proof = db.BlobProperty(required=True) seed = db.ByteStringProperty(required=True) version = db.IntegerProperty(required=True) dateTime = db.DateTimeProperty(auto_now_add=True) conflictingReviewers = db.StringListProperty() verifier = db.StringProperty(required=True) approvedByAdmin = db.BooleanProperty(required=True)
class Sketcher(db.Model): userID = db.StringProperty() name = db.StringProperty() profileText = db.TextProperty() location = db.StringProperty() avatar = db.BlobProperty() url1 = db.StringProperty() url2 = db.StringProperty() url3 = db.StringProperty() url4 = db.StringProperty()
class File(db.Model): account = db.ReferenceProperty(Account) profile = db.ReferenceProperty(Profile) file = db.BlobProperty() title = db.StringProperty() description = db.TextProperty() mime = db.StringProperty() size = db.IntegerProperty() created = db.DateTimeProperty(auto_now_add=True) updated = db.DateTimeProperty(auto_now=True)
class StaticContent(db.Model): """Container for statically served content. The serving path for content is provided in the key name. """ body = db.BlobProperty() content_type = db.StringProperty(required=True) last_modified = db.DateTimeProperty(required=True, auto_now=True) etag = aetycoon.DerivedProperty(lambda x: hashlib.sha1(x.body).hexdigest()) indexed = db.BooleanProperty(required=True, default=True)
class Racer(db.Model): email = db.EmailProperty() driver = db.UserProperty() name = db.StringProperty() city = db.StringProperty() state = db.StringProperty() points = db.IntegerProperty() car = db.ReferenceProperty(Car) sponsor = db.ReferenceProperty(Sponsor) picture = db.BlobProperty()
class Movie(db.Model): owner = db.UserProperty() filename = db.StringProperty() intermediate_data = db.StringProperty(default=None) blob = db.BlobProperty(default=None) length = db.IntegerProperty(default=None) bytes_uploaded = db.IntegerProperty(default=0) uploaded = db.BooleanProperty(default=False) geoAddress = db.StringProperty(default=None) datetime = db.DateTimeProperty(auto_now_add=True)
class Upload(db.Model): className = db.ReferenceProperty(Class) hwName = db.ReferenceProperty(Homework) owner = db.UserProperty() #the logged-in user, the one who uploaded it ownerNickname = db.StringProperty() date = db.DateTimeProperty() #time of submission file = db.BlobProperty() # the file fileName = db.StringProperty() isPublic = db.BooleanProperty( ) #public means world-readable. only a teacher can make a solution public
class Game(db.Model): name = db.StringProperty(required=True) is_active = db.BooleanProperty(required=True) winner = db.ReferenceProperty(User, collection_name="won_games") zone = db.ReferenceProperty(Zone, collection_name="game") owner = db.ReferenceProperty(User, collection_name="created_games", required=True) map = db.BlobProperty() def __eq__(self, other): return isinstance(other, Game) and other.key() == self.key()