예제 #1
0
	def __init__(self, db=os.path.expanduser('~/Music/iTunes/iTunes Music Library.xml')):
		self.index = Index(db)
		self.index.index()
		self.root = os.path.dirname(__file__)
예제 #2
0
class ShareMyTunes_app:
	def __init__(self, db=os.path.expanduser('~/Music/iTunes/iTunes Music Library.xml')):
		self.index = Index(db)
		self.index.index()
		self.root = os.path.dirname(__file__)
	def __call__(self, environ, start_response):
		#print environ
		print start_response
		uri = urlparse(request_uri(environ))
		print uri
		q = parse_qs(uri.query)
		if uri.path == '/query':
			return self.query(start_response, q)
		if uri.path == '/':
			start_response(OK, [('Content-type', HTML)])
			return FileWrapper(open(self.root + '/data/index.html', 'r'))
		uris = uri.path.split('/')[1:]
		print uris
		if uris[0] == 'data' and len(uris) == 2:
			f = self.root + '/data/' + uris[1]
			if not os.path.isfile(f):
				start_response(NOT_FOUND, PLAIN)
				return [uris[1] + " doesn't exist"]
			r, ext = os.path.splitext(f)
			start_response(OK, [('Content-type', MIME[ext[1:]])])
			return FileWrapper(open(f, 'r'))
		if uris[0] == 'track':
			return self.track(start_response, uris[1], uris[2])
		# The returned object is going to be printed
		start_response(OK, [('Content-type', PLAIN)])
		return ["Hello iTunes"]
	def query(self, start_response, query, header = None):
		start_response(OK, [('Content-type', PLAIN)])
		response = self.index.query(unicode(query['q'][0]))
		return JsonResponse(response)
	def track(self, start_response, track, type = 'data'):
		t = self.index.reader.stored_fields(int(track))
		u = urlparse(t['location'])
		print u.scheme
		f = urllib.unquote(u.path)
		if not os.path.isfile(f):
			start_response(NOT_FOUND, [('Content-type', PLAIN)])
			print "NOT FOUND : %s" % f
			return ["%s not found" % track]
		if type == 'music':
			_, ext = os.path.splitext(f)
			start_response(OK, [('Content-type', MIME[ext[1:]])])
			print "serving %s as %s" % (f, ext)
			return FileWrapper(open(f, 'r'))
		if type == 'data':
			start_response(OK, [('Content-type', PLAIN)])
			return json.dumps(t)
		if type == 'artwork':
			ff = File(f)
			artwork = ff.artwork()
			if artwork == None:
				start_response(NOT_FOUND, [('Content-type', PLAIN)])
				return ["No artwork for %s" % track]
			print artwork.mime
			start_response(OK, [('Content-type', str(artwork.mime))])
			return FileWrapper(StringIO(artwork.data))