class Chart(object): # This is backward compatible, Types must be singular __types = {'album' : 'Album','track' : 'Track','artist' : 'Artist'} __outputMsgError = "Empty chart, not storing:" __outputMsgOk = "Saving chart:" def __init__(self): try: self.prettyName except AttributeError: self.prettyName = None self.__setStorage() self.details = DetailItem(Detail( id = self.source_id, name = self.prettyName, description = self.description, have_extra = self.have_extra ) ); chartCache.shoveDetails(self.details, self.is_chart) self.have_extra = self.have_extra #Chart specific optional attributes self.geo = None self.extra = None self.genre = None self.source_id = self.details.get('id') self.cache_id = "%scacheControl" % self.source_id self.default = 0 self.init() self.parse() def __setStorage(self): try: if self.is_chart: self.storage = chartCache.storage else: self.storage = chartCache.newreleases except AttributeError: self.is_chart = True self.storage = chartCache.storage def __getCacheControl(self): self.cacheControl = chartCache.setCacheControl(self.expires) def __createChartItem(self): try: chart = ChartItem( id = slugify(self.chart_id), name = self.chart_name, display_name = self.display_name, origin = self.origin, type = self.chart_type, default = self.default, source = self.source_id, date = self.cacheControl.get("Date-Modified"), expires = self.cacheControl.get("Date-Expires"), maxage = self.cacheControl.get("Max-Age"), list = self.chart_list ) except AttributeError: print "ChartItem is missing required attributes!" raise if self.have_extra : if self.geo is not None: chart['geo'] = self.geo if self.genre is not None: chart['genre'] = self.genre if self.extra is not None: chart['extra'] = self.extra return chart def __updateCache(self, metadata, chart): data = self.storage.get(self.source_id, {}) data[self.chart_id] = metadata self.storage[self.source_id] = data self.storage[self.source_id+self.chart_id] = dict(chart) self.storage[self.cache_id] = dict(self.cacheControl) def __createMetadata(self, chart): # metadata is the chart item minus the actual list plus a size metadata_keys = filter(lambda k: k != 'list', chart) metadata = { key: chart[key] for key in metadata_keys } metadata['size'] = len(self.chart_list) return metadata def init(self): raise NotImplementedError( "Scraper needs to implement this!") def parse(self): raise NotImplementedError( "Scraper needs to implement this!") def setChartId(self, id): self.chart_id = id def setChartName(self, name): self.chart_name = name.title() def setChartOrigin(self, origin): self.origin = origin def setChartDisplayName(self, name): self.display_name = name def setIsDefault(self, default): self.default = default def setChartGenre(self, genre): self.genre = genre def setChartExtra(self, extra): self.extra = extra def setChartGeo(self, geo): self.geo = geo; def setChartType(self, type): self.chart_type = self.__types.get(type.lower()) def setExpiresInDays(self, day, hour = 1): self.expires = chartCache.timedeltaUntilDays(day, hour) self.__getCacheControl() def setExpiresOnDay(self, day, hour = 1): self.expires = chartCache.timedeltaUntilWeekday(day, hour) self.__getCacheControl() def getJsonContent(self, url): try: request = urllib2.Request(url) response = urllib2.urlopen(request) content = response.read().decode('utf-8') return json.loads(content) except Exception,e: print "Error: %s" % e return {}
class Chart(object): # This is backward compatible, Types must be singular __types = {'album': 'Album', 'track': 'Track', 'artist': 'Artist'} __outputMsgError = "Empty chart, not storing:" __outputMsgOk = "Saving chart:" def __init__(self): try: self.prettyName except AttributeError: self.prettyName = None self.__setStorage() self.details = DetailItem( Detail(id=self.source_id, name=self.prettyName, description=self.description, have_extra=self.have_extra)) chartCache.shoveDetails(self.details, self.is_chart) self.have_extra = self.have_extra #Chart specific optional attributes self.geo = None self.extra = None self.genre = None self.source_id = self.details.get('id') self.cache_id = "%scacheControl" % self.source_id self.default = 0 self.init() self.parse() def __setStorage(self): try: if self.is_chart: self.storage = chartCache.storage else: self.storage = chartCache.newreleases except AttributeError: self.is_chart = True self.storage = chartCache.storage def __getCacheControl(self): self.cacheControl = chartCache.setCacheControl(self.expires) def __createChartItem(self): try: chart = ChartItem(id=slugify(self.chart_id), name=self.chart_name, display_name=self.display_name, origin=self.origin, type=self.chart_type, default=self.default, source=self.source_id, date=self.cacheControl.get("Date-Modified"), expires=self.cacheControl.get("Date-Expires"), maxage=self.cacheControl.get("Max-Age"), list=self.chart_list) except AttributeError: print "ChartItem is missing required attributes!" raise if self.have_extra: if self.geo is not None: chart['geo'] = self.geo if self.genre is not None: chart['genre'] = self.genre if self.extra is not None: chart['extra'] = self.extra return chart def __updateCache(self, metadata, chart): data = self.storage.get(self.source_id, {}) data[self.chart_id] = metadata self.storage[self.source_id] = data self.storage[self.source_id + self.chart_id] = dict(chart) self.storage[self.cache_id] = dict(self.cacheControl) def __createMetadata(self, chart): # metadata is the chart item minus the actual list plus a size metadata_keys = filter(lambda k: k != 'list', chart) metadata = {key: chart[key] for key in metadata_keys} metadata['size'] = len(self.chart_list) return metadata def init(self): raise NotImplementedError("Scraper needs to implement this!") def parse(self): raise NotImplementedError("Scraper needs to implement this!") def setChartId(self, id): self.chart_id = id def setChartName(self, name): self.chart_name = name.title() def setChartOrigin(self, origin): self.origin = origin def setChartDisplayName(self, name): self.display_name = name def setIsDefault(self, default): self.default = default def setChartGenre(self, genre): self.genre = genre def setChartExtra(self, extra): self.extra = extra def setChartGeo(self, geo): self.geo = geo def setChartType(self, type): self.chart_type = self.__types.get(type.lower()) def setExpiresInDays(self, day, hour=1): self.expires = chartCache.timedeltaUntilDays(day, hour) self.__getCacheControl() def setExpiresOnDay(self, day, hour=1): self.expires = chartCache.timedeltaUntilWeekday(day, hour) self.__getCacheControl() def getJsonContent(self, url): try: request = urllib2.Request(url) response = urllib2.urlopen(request) content = response.read().decode('utf-8') return json.loads(content) except Exception, e: print "Error: %s" % e return {}