def get_themes(account): """ Will return a list with all the themes for this account """ all_themes = Badges.gql("WHERE creator=:1", account) """ Go through the list and remove redundancies """ theme_set = [] previous_theme = "" for theme in all_themes: if theme.theme != previous_theme: theme_set.append(theme.theme) previous_theme = theme.theme
def create_badge_type(badge_key, badge_name, badge_des, account, badge_theme, img_type, imgbuf=None, blob_info=None, perm="private", btype="free", stype="blob", is_enabled="yes"): """ Storage is either using a BadgeImage or through the blobstore api for faster and cheaper serving of images """ blob_key = None storage_type = "blob" badge_image = None download_link = "" if imgbuf: storage_type = "db" badge_image = create_badge_image(badge_key, perm, account, imgbuf, img_type) download_link = get_full_link("badge/d?bk=" + badge_key) elif blob_info: storage_type = "blob" blob_key = blob_info.key() download_link = images.get_serving_url(str(blob_key)) else: logging.error( "Create badge type error: No image to save for badge type") raise badge = Badges(key_name=badge_key, name=badge_name, altText=badge_des, description=badge_des, setType=btype, isEnabled=is_enabled, creator=account, permissions=perm, storageType=storage_type, imageKey=badge_image, blobKey=blob_key, downloadLink=download_link, theme=badge_theme) # Store it as a badge image memcache_db.save_entity(badge, badge_key) return badge
def get_entity(key_name, ent_type): if ent_type not in constants.PROTECTED_DB_TYPES: raise Exception() e = memcache.get(key=key_name, namespace=ent_type) if e: try: e = deserialize(e) except: logging.error( "Memcache_db: Unable to deserialize entity of type %s" % ent_type) e = None if not e: memcache.delete(key=key_name, namespace=ent_type) if ent_type == "Accounts": e = Accounts.get_by_key_name(key_name) elif ent_type == "Badges": e = Badges.get_by_key_name(key_name) elif ent_type == "BadgeInstance": e = BadgeInstance.get_by_key_name(key_name) elif ent_type == "BadgeImage": e = BadgeImage.get_by_key_name(key_name) elif ent_type == "Users": e = Users.get_by_key_name(key_name) elif ent_type == "TrophyCase": e = TrophyCase.get_by_key_name(key_name) elif ent_type == "Points": e = Points.get_by_key_name(key_name) elif ent_type == "Notifier": e = Notifier.get_by_key_name(key_name) elif ent_type == "Rank": e = Rank.get_by_key_name(key_name) elif ent_type == "PassPhrase": e = PassPhrase.get_by_key_name(key_name) elif ent_type == "Milestones": e = Milestones.get_by_key_name(key_name) elif ent_type == "Leaderboard": e = Leaderboard.get_by_key_name(key_name) else: raise Exception() if e: memcache.add(key=key_name, value=str(serialize(e)), namespace=ent_type) return e
def __batch_get_entity(key_names, ent_type): if ent_type not in constants.PROTECTED_DB_TYPES: raise Exception() es = memcache.get_multi(keys=key_names, namespace=ent_type) ents = [] db_ents = {} for key in key_names: e = None if key in es: try: e = deserialize(e) ents.append(e) except Exception, ex: logging.error( "Memcache_db: Unable to deserialize entity of type %s with %s" % (ent_type, str(ex))) e = None if not e: # These puts are in a loop, making this function slow memcache.delete(key=key, namespace=ent_type) if ent_type == "Accounts": dbent = Accounts.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) elif ent_type == "Badges": dbent = Badges.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) elif ent_type == "BadgeInstance": dbent = BadgeInstance.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) elif ent_type == "BadgeImage": dbent = BadgeImage.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) elif ent_type == "Users": dbent = Users.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) elif ent_type == "TrophyCases": dbent = TrophyCases.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) else: raise Exception()
def __batch_get_entity(key_names, ent_type): if ent_type not in constants.PROTECTED_DB_TYPES: raise Exception() es = memcache.get_multi(keys=key_names, namespace=ent_type) ents = [] db_ents = {} for key in key_names: e = None if key in es: try: e = deserialize(e) ents.append(e) except Exception, ex: logging.error("Memcache_db: Unable to deserialize entity of type %s with %s"%(ent_type, str(ex))) e = None if not e: # These puts are in a loop, making this function slow memcache.delete(key=key, namespace=ent_type) if ent_type == "Accounts": dbent = Accounts.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) elif ent_type == "Badges": dbent = Badges.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) elif ent_type == "BadgeInstance": dbent = BadgeInstance.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) elif ent_type == "BadgeImage": dbent = BadgeImage.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) elif ent_type == "Users": dbent = Users.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) elif ent_type == "TrophyCases": dbent = TrophyCases.get_by_key_name(key) ents.append(dbebt) db_ents[key] = serialize(dbent) else: raise Exception()
def get_entity(key_name, ent_type): if ent_type not in constants.PROTECTED_DB_TYPES: raise Exception() e = memcache.get(key=key_name, namespace=ent_type) if e: try: e = deserialize(e) except: logging.error("Memcache_db: Unable to deserialize entity of type %s"%ent_type) e = None if not e: memcache.delete(key=key_name, namespace=ent_type) if ent_type == "Accounts": e = Accounts.get_by_key_name(key_name) elif ent_type == "Badges": e = Badges.get_by_key_name(key_name) elif ent_type == "BadgeInstance": e = BadgeInstance.get_by_key_name(key_name) elif ent_type == "BadgeImage": e = BadgeImage.get_by_key_name(key_name) elif ent_type == "Users": e = Users.get_by_key_name(key_name) elif ent_type == "TrophyCase": e = TrophyCase.get_by_key_name(key_name) elif ent_type == "Points": e = Points.get_by_key_name(key_name) elif ent_type == "Notifier": e = Notifier.get_by_key_name(key_name) elif ent_type == "Rank": e = Rank.get_by_key_name(key_name) elif ent_type == "PassPhrase": e = PassPhrase.get_by_key_name(key_name) elif ent_type == "Milestones": e = Milestones.get_by_key_name(key_name) elif ent_type == "Leaderboard": e = Leaderboard.get_by_key_name(key_name) else: raise Exception() if e: memcache.add(key=key_name,value=str(serialize(e)),namespace=ent_type) return e
def is_in_db(key_name, ent_type): if ent_type not in constants.PROTECTED_DB_TYPES: raise Exception() e = None if ent_type == "Accounts": e = Accounts.get_by_key_name(key_name) elif ent_type == "Badges": e = Badges.get_by_key_name(key_name) elif ent_type == "BadgeInstance": e = BadgeInstance.get_by_key_name(key_name) elif ent_type == "BadgeImage": e = BadgeInstance.get_by_key_name(key_name) elif ent_type == "Users": e = Users.get_by_key_name(key_name) elif ent_type == "TrophyCases": e = TrophyCase.get_by_key_name(key_name) else: raise Exception() if e: return True else: return False
def get_all_badges_for_account(account): """ Will return all badges per the account, ordered by theme """ return Badges.gql("WHERE creator=:1 ORDER BY theme", account)