def index(request): """ Renders the lifestream as read from settings.LIFESTREAM_DUMP """ from cPickle import load sources = list(settings.LIFESTREAM_SOURCES) utils.validate_sources(sources) fp = open(utils.get_dump(),'rb') try: entries = load(fp) except: entries = [] finally: fp.close() tvars = { 'entries':entries, 'sources':sources, } return render_to_response('django_lifestream/lifestream.html',RequestContext(request,tvars))
def generate_dump(sources=None,dumpfile=None,tmpfile=None,sort=None): """ This function does the actual work here. It download all the source feeds from settings.LIFESTREAM_SOURCES, merges them and then writes them into the specified dumpfile """ from django.conf import settings # Handle timezone settings since django doesn't yet does the tzset call. os.environ['TZ']=settings.TIME_ZONE try: max_days = settings.LIFESTREAM_MAXDAYS except: max_days = None time.tzset() local_timezone = gettz() utc_timezone = gettz('UTC') now = datetime.datetime.utcnow().replace(tzinfo=utc_timezone) if not sources: try: sources = settings.LIFESTREAM_SOURCES logging.debug('Using settings.LIFESTREAM_SOURCES') except: logging.error('settings.LIFESTREAM_SOURCES not specified!') raise if not dumpfile: try: dumpfile = settings.LIFESTREAM_DUMP except: logging.error('settings.LIFESTREAM_DUMP not specified!') raise if not tmpfile: tmpfile = dumpfile+".tmp" if not sort: sort = sort_entries sources = list(sources) utils.validate_sources(sources) entries = [] for source in sources: es = feedparser.parse(source['url']).entries for e in es: e['_class']=source['class'] entries+=es if len(entries) == 0: sys.exit(0) for e in entries: try: d=e.published_parsed except: d=e.updated_parsed d=datetime.datetime(*(d[:-2]+(utc_timezone,))) e['_date']=d if max_days: entries = filter(lambda e: (now-e['_date']).days <= max_days, entries) # Sort according to published_parsed sort_entries(entries) output = [] for e in entries: output.append(item_from_entry(e,local_timezone)) fp = open(tmpfile,'wb+') try: dump(output,fp) finally: fp.close() import shutil shutil.move(tmpfile,dumpfile)