#!/usr/bin/python from wsgiref.simple_server import make_server import Cookie , uuid , string from stencils.storage import storage # load default /cache/local storage index = storage('thingiverse_data') # load stylesheet ss_f = open('StyleSheet.css') ss = ss_f.read() ss_f.close() headers = [('Content-Type','text/html')] class session_data: def __init__(self): self.marked = {} self.queued = [] # stuff sessions = {} page_size = 100 thumb_size = { 'small' : (240,320) } def thumb(environ,start_response): start_response("200 OK", [('Content-Type','image/png')]) q = environ['PATH_INFO'] tmp = string.split(q,'/') i = tmp[-1:][0] current_thing = index.get_uuid(i) return current_thing.get() def get(environ,start_response): start_response("200 OK", [('Content-Type','application/data')]) q = environ['PATH_INFO'] tmp = string.split(q,'/') i = tmp[-2:][0] current_thing = index.get_uuid(i) return current_thing.get() def render_list(li,page=0,pages=0,path='/',page_size=100): rr = '' if len(li) > page_size+1: list_to_render= li[page*page_size:(page+1)*page_size] if page > 0: rr = rr + '<<' rr = rr + str(page+1) + '/' + str(pages+1) if page < pages: rr = rr + '>>' rr = rr + '
' for i in list_to_render: the_thing = index.get_uuid(i) index.get_thumb(the_thing) rr = rr + the_thing.preview() else: list_to_render = li for i in list_to_render: the_thing = index.get_uuid(i) index.get_thumb(the_thing) rr = rr + the_thing.preview() return str(rr) def show_uuid(environ,start_response): start_response("200 OK",headers) q = environ['PATH_INFO'] tmp = string.split(q,'/') print tmp if len(tmp) < 3: return '' tid = tmp[2] print tid index.mark_seen(tid) the_thing = index.get_uuid(tid) index.load_thing(the_thing) rr = the_thing.view() return rr def userlist(environ,start_response): rr = '
    \n' for i in index.userlist: rr = rr + '
  1. '+str(i)+'
  2. ' rr = rr + '
\n' return rr def user(environ,start_response): start_response("200 OK",headers) q = environ['PATH_INFO'] tmp = string.split(q,'/') if len(tmp) < 3: return userlist(environ,start_response) the_user = tmp[2] print the_user try: page = int(tmp[3]) except: page = 0 object_list = index.get_userid(the_user) pages = int(len(object_list)/page_size) rr = render_list(object_list,page,pages,'user/'+the_user) return rr def chunker(environ,start_response): q = environ['PATH_INFO'] tmp = string.split(q,'/') try: page = int(tmp[3]) except: page = 0 object_list = index.chunk() pages = int(len(object_list)/page_size) rr = render_list(object_list,page,pages,'/') return rr def chomp_chunk(environ,start_response): start_response('301 Redirect', [('Location', '/'),]) object_list = index.chunk() for i in object_list: index.mark_seen(i,-1) return '' def base(environ,start_response): start_response("200 OK",headers) rr = '
    ' rr = rr + '
  1. by user
  2. ' rr = rr + chunker(environ,start_response) rr = rr + '
' rr = rr +'CHOMP' return rr def style(environ,start_response): return ss def header(environ,start_response): ret = '' ret = ret + 'Packages' ret = ret + '' ret = ret + ' \n
' q = environ['PATH_INFO'] tmp = string.split(q,'/') ps = '' ret = ret + '

/home/' for i in tmp[1:]: ps = ps + '/' + i ret = ret + ''+i+'/' ret = ret + '

' ret = ret + '
\n' return ret def footer(environ,start_response): #sess = environ['session_data'] ret = '
' ret = ret + '
' ret = ret + '
' ret = ret + '' return ret def envir(dict): ret = '
    \n' #keys = dict.keys() keys = ['HTTP_REFERER','HTTP_COOKIE','PATH_INFO'] for i in keys: ret = ret + '
  1. \n' ret = ret + i + ' : ' if dict.has_key(i): ret = ret + str(dict[i]) else: ret = ret + 'EMPTY' ret = ret + '
  2. \n' ret = ret + '
\n' return ret def from_blender(environ,start_response): start_response("200 OK", [('Content-Type','text/plain')]) q = environ['PATH_INFO'] tmp = string.split(q,'/') i = tmp[-1:][0] current_thing = index.get_uuid(i) index.load_thing(current_thing) #rr = str(current_thing.name) + ',' + str(current_thing.uuid) + '\n' rr = '' if 'download' in current_thing.children: for i in current_thing.children['download']: rr = rr + str(i.uuid) + ',' + str(i.name) +'\n' return rr sections = { '':base, 'uuid':show_uuid, 'userlist':userlist, 'user':user, 'chunk':chunker, 'get':get, 'chomp':chomp_chunk, } def primary(environ,start_response): path = environ['PATH_INFO'] if path.startswith('/blend/'): ret = from_blender(environ,start_response) return [ret] if path.startswith('/thumb/'): ret = thumb(environ,start_response) return [ret] if path.startswith('/get/'): ret = get(environ,start_response) return [ret] if path.startswith('/style.css'): ret = style(environ,start_response) start_response("200 OK", [('Content-Type','text/css')]) return [ret] if environ.has_key('HTTP_COOKIE') == 0: " no cookie ! ! " C = Cookie.BaseCookie() C['_id_'] = str(uuid.uuid4()) C['_id_']['path'] = '/' sessions[C['_id_'].value] = session_data() for i in C.items(): headers.append(('Set-Cookie',str(i[0])+'='+str(i[1].value))) else: C = Cookie.BaseCookie() C.load(environ['HTTP_COOKIE']) id = C['_id_'].value if sessions.has_key(id): environ['session_data'] = sessions[id] else: " expired session " #sessions[id] = session_data() #environ['session_data'] = sessions[id] C = Cookie.BaseCookie() C['_id_'] = str(uuid.uuid4()) C['_id_']['path'] = '/' sessions[C['_id_'].value] = session_data() for i in C.items(): headers.append(('Set-Cookie',str(i[0])+'='+str(i[1].value))) ret = header(environ,start_response) tmp = string.split(path,'/') if sections.has_key(tmp[1]): ret = ret + sections[tmp[1]](environ,start_response) if environ.has_key('session_data'): sess = environ['session_data'] ret = ret + '
' ret = ret + '
' #ret = ret + envir(environ) #ret = ret + str(sess.marked.keys()) ret = ret + str(sessions) ret = ret + footer(environ,start_response) return [ret] else: start_response("404 NOT FOUND",headers) return ['not found'] httpd = make_server('', 8000, primary) print "Serving HTTP on port 8000..." # Respond to requests until process is killed httpd.serve_forever()