from db import * from sqlalchemy import or_ def search_user(string, session): exact_match = session.query(User).filter(or_(User.name==string, User.card==string)).first() if exact_match: return exact_match user_list = session.query(User).filter(or_(User.name.like('%'+string+'%'),User.card.like('%'+string+'%'))).all() return user_list def search_product(string, session): exact_match = session.query(Product)\ .filter(or_(Product.bar_code==string, Product.name==string)).first() if exact_match: return exact_match product_list = session.query(Product)\ .filter(or_(Product.bar_code.like('%'+string+'%'), Product.name.like('%'+string+'%'))).all() return product_list def guess_data_type(string): if string.startswith('NTNU'): return 'card' if string.isdigit(): return 'bar_code' if string.isalpha() and string.islower(): return 'username' return 'product_name' def retrieve_user(string, session): # first = session.query(User).filter(or_(User.name==string, User.card==string)).first() search = search_user(string,session) if isinstance(search,User): print "Found user "+search.name return search else: if len(search) == 0: print "No users found matching your search" return None if len(search) == 1: print "Found one user: "+list[0].name if confirm(): return list[0] else: return None else: print "Found "+str(len(search))+" users:" return select_from_list(search) def confirm(prompt='Confirm? (y/n) '): while True: input = raw_input(prompt) if input in ["y","yes"]: return True elif input in ["n","no"]: return False else: print "Nonsense!" def select_from_list(list): while True: for i in range(len(list)): print i+1, " ) ", list[i].name choice = raw_input("Select user :\n") if choice in [str(x+1) for x in range(len(list))]: return list[int(choice)-1] else: return None def argmax(d, all=False, value=None): maxarg = None maxargs = [] if value != None: dd = d d = {} for key in dd.keys(): d[key] = value(dd[key]) for key in d.keys(): if maxarg == None or d[key] > d[maxarg]: maxarg = key if all: return filter(lambda k: d[k] == d[maxarg], d.keys()) return maxarg