Exemple #1
0
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))
Exemple #2
0
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)