def GET(self, name): """List a work if UUID provided otherwise list all works""" logger.debug("Query: %s" % (web.input())) work_id = web.input().get('uuid') or web.input().get('UUID') if work_id: results = Work.get_from_work_id(work_id) sort = "" else: filters = web.input().get('filter') sort = web.input().get('sort') order = web.input().get('order', 'asc') clause, params = build_parms(filters) try: if sort: assert sort in ["title"] assert order in ["asc", "desc"] except: raise Error(BADFILTERS, msg="Unknown sort '%s' '%s'" % (sort, order)) results = Work.get_all(clause, params) if not results: raise Error(NORESULT) data = results_to_works(results) if sort: reverse = order == "desc" # we sort by each work's (first) title, ignoring special chars return sorted( data, key=lambda x: re.sub('[^A-Za-z0-9]+', '', x[sort][0]), reverse=reverse) return data