def get(self): counter.ChangeCount("favIconsServed", 1) # Get page path self.targetPath = self.urldecode(self.request.path.lstrip("/")) inf("getFavicon for %s" % (self.targetPath)) # Split path to get domain self.targetURL = urlparse(self.targetPath) if len(self.targetURL[0]) == 0: self.targetPath = "http://" + self.targetPath self.targetURL = urlparse(self.targetPath) self.targetDomain = "http://" + self.targetURL[1] inf("URL is %s" % (self.targetDomain)) # Do we have an override? if not self.iconOverridden(): # In MC? if not self.iconInMC(): # In DS? if not self.iconInDS(): counter.ChangeCount("cacheNone", 1) # icon in m. page m_url = self.targetURL[1] if m_url.startswith("www") or len(m_url.split('.')) == 2: if m_url.startswith("www"): m_url = m_url[4:] m_url = "http://m." + m_url if self.iconInPage(True, m_url): return # Icon specified in page? if not self.iconInPage(): # Icon specified in desktop page? if not self.iconInDesktopPage(): # Icon at [domain]/favicon.ico? if not self.iconAtRoot(): self.error()
def iconInDS(self): iconCacheQuery = favIcon.gql("where domain = :1", self.targetDomain) iconCache = iconCacheQuery.fetch(1) if len(iconCache) > 0: inf("Found icon DS cache") counter.ChangeCount("cacheDS", 1) self.response.headers['X-Cache'] = "Hit from DS" if iconCache[0].useDefault: self.writeDefault(True) return True else: self.icon = iconCache[0].icon self.cacheIcon(["MC"]) self.writeIcon() return True return False
def iconInMC(self): mcIcon = memcache.get("icon-" + self.targetDomain) if mcIcon: inf("Found icon MC cache") counter.ChangeCount("cacheMC", 1) self.response.headers['X-Cache'] = "Hit from MC" if mcIcon == "ERROR": self.error(True) return True elif mcIcon == "DEFAULT": self.writeDefault(True) return True else: self.icon = mcIcon self.writeIcon() return True return False
def writeDefault(self, fromCache=False): inf("Writing default") self.abort(404) self.writeHeaders() if not fromCache: newFavicon = favIcon(domain=self.targetDomain, icon=None, useDefault=True, referrer=self.request.headers.get("Referer")) newFavicon.put() memcache.add("icon-" + self.targetDomain, "DEFAULT", MC_CACHE_TIME) counter.ChangeCount("favIconsServedDefault", 1) if self.request.get("defaulticon"): if self.request.get("defaulticon") == "none": self.response.set_status(204) elif self.request.get("defaulticon") == "1pxgif": self.response.out.write(open("1px.gif").read()) elif self.request.get("defaulticon") == "lightpng": self.response.out.write(open("default2.png").read()) elif self.request.get("defaulticon") == "bluepng": self.response.out.write(open("default3.png").read()) else: self.redirect(self.request.get("defaulticon")) else: self.response.out.write(open("default.gif").read())