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__)
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))