def welcome_homepage(): while True: selection = view.welcome_screen() if selection not in ["1","2","3"]: view.improper_selection() continue if selection == "1": username, balance, password, confirm_password = view.get_username(), view.add_balance(), view.get_password(), view.confirm_password() if password != confirm_password: view.improper_password() continue if not balance.isdigit() or int(balance) < 0: view.improper_balance() continue account = Account(username = username, balance = balance) hashed_pw = Account.set_password(account, password) account.save() logged_in_homepage(account) return elif selection == "2": username, password = view.get_username(), view.get_password() logged_in_account = Account.login(username=username, password=password) if logged_in_account: logged_in_homepage(logged_in_account) return else: print("Invalid credentials supplied") continue elif selection == "3": view.goodbye() return
def setUp(self): if os.path.exists(Account.filepath): os.unlink(Account.filepath) greg = Account("Greg") greg.balance = 10.50 greg.pin = "1234" greg.save()
def login_menu(): while True: try: user_input = view.login_menu() if int(user_input) == 3: view.program_end() sys.exit() elif int(user_input) == 2: username = view.username_inpt() pwd = util.hash_pass(view.password_inpt()) user = Account.login(username, pwd) if user == None: view.invalid_info() return login_menu() return user elif int(user_input) == 1: user = Account() user.username = view.username_inpt() user.set_password(util.hash_pass(view.set_password_inpt())) user.balance = view.deposit_inpt() user.save() view.acc_created(user.username) return user except ValueError: view.choose_valid()
def createaccount(name, password): new_account = Account(username=name) new_account.set_password(password) ak = new_account.create_api_key() new_account.save() msg = "Account successfully created, API api_key = {}".format(ak) return jsonify({'message':msg})
def create(): if not request.json or 'username' not in request.json or 'password_hash' not in request.json: return jsonify(BAD_REQUEST), 401 account = Account(username=request.json['username'], password_hash=request.json['password_hash']) account.save() token = encodeAuthToken(account.pk) return jsonify({'status': 'success', 'auth_token': str(token)})
def deposit(name, password, amount): if not Account.login(name, password): msg = "Invalid login credentials, pls retry" else: pk = Account.login(name, password).pk account_deposit = Account(pk=pk) new_bal = account_deposit.deposit(float(amount)) account_deposit.save() msg = "New Balance = {}".format(new_bal) return jsonify({'message': msg})
def deposit(key, amount): if Account.api_authenticate(key) == None: msg = "Invalid login credentials, pls retry" else: #pk = Account.login(name, password).pk pk = Account.api_authenticate(key).pk account_deposit = Account(pk=pk) new_bal = account_deposit.deposit(float(amount)) account_deposit.save() msg = "New Balance = {}".format(new_bal) return jsonify({'message': msg})
def account_create(): username, password, f_name, l_name, deposit = view.create_account( ) #takes all return values from create_account crypted_password = crypt_password(password) new_account = Account(username=username, crypted_password=crypted_password, f_name=f_name, l_name=l_name, balance=deposit) new_account.save()
def create_account(): username = view.create_username() password = view.create_password() password_hash = hash_password(password) new_account = Account(username=username, password_hash=password_hash, balance=0) new_account.generate_api_key() new_account.save() view.login_menu() login()
def deposit(api_key): if Account.api_authenticate(api_key) == None: msg = "Invalid login credentials, pls retry" else: if not request.json or 'amount' not in request.json: return jsonify({"error": "bad request"}), 400 pk = Account.api_authenticate(api_key).pk account_deposit = Account(pk=pk) new_bal = account_deposit.deposit(float(request.json['amount'])) account_deposit.save() msg = "New Balance = {}".format(new_bal) return jsonify({'message':msg})
def seed(dbpath=DBPATH): ORM.dbpath = dbpath mike_bloom = Account(username='******', balance=10000.00) mike_bloom.set_password('password') mike_bloom.save() # trade for a purchase of 10 shares yesterday # trade for a sell of 5 shares today tsla_position = Position(ticker='tsla', shares=5, account_pk=mike_bloom.values['pk']) tsla_position.save()
def create_account_selection(): while True: newuser = Account() view.enter_user_name() username = input() newuser.username = username view.enter_password() password = getpass.getpass() newuser.origpassword = password newuser.set_password(password) #newuser.apikey=20 newuser.set_apikey() newuser.balance = 0.00 newuser.save() view.account_success_message() return newuser
def test_admin_fld(self): tester = Account(first='Test', last='Ad', username='******', password_hash='temp', balance=0, email='*****@*****.**') second = Account(first='Test', last='Ad', username='******', password_hash='temp', balance=0, email='*****@*****.**') tester.save() self.assertEqual(tester.admin, 1, "username admin should make admin field 1 for true") self.assertEqual(second.admin, 0, "this should not be admin")
def seed(dbpath=DBPATH): ORM.dbpath = dbpath mike_bloom = Account(username='******', balance=10000.00) mike_bloom.set_password('password') mike_bloom.save() # trade for a purchase of 10 shares yesterday # trade for a sell of 5 shares today buy_trade = Trade(accounts_pk = mike_bloom.pk, ticker='tsla', volume=10, price=100.0) sell_trade = Trade(accounts_pk=mike_bloom.pk, ticker='tsla', volume=5, price=200.0) buy_trade.save() sell_trade.save() tsla_position = Position(ticker='tsla', shares=5, accounts_pk=mike_bloom.pk) tsla_position.save()
def test_insert(self): #Tests Save - insert function tester = Account(first='Homer', last='Simpson', username='******', password_hash="password", balance=0, email='*****@*****.**') tester.save() result = Account.all() #using the all fucntion to count rows in DB self.assertEqual( len(result), 2, "The first row was the set up the new row was inserted") self.assertEqual( result[0].first, "Jim", "all func populates attributes, checking first for row[0] / pk1") self.assertEqual( result[1].email, "*****@*****.**", "all func populates attributes, checking email for row[1] / pk2")
def create_account(): view.intro_create_acc() first = view.input_first() last = view.input_last() username = view.input_username() password = view.input_password( ) #this is the start of what will become the password hash balance = 0 email = view.input_email() new_account = Account(first=first, last=last, username=username, balance=balance, email=email) #password_hash=password_hash - not used b/c save in set pw fucntion new_account.set_password( password) #creates the password has which is missing in the above line if Account.from_username(username) is None: new_account.save( ) #save function to put the new account into the sql db else: raise view.UsernameUnavailableError
m_names = json.load(open("bogus/names_m.json", "r")) f_names = json.load(open("bogus/names_f.json", "r")) mlen = len(m_names) flen = len(f_names) lipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus efficitur urna nec interdum scelerisque. Quisque tempor augue at ipsum dignissim, eget pharetra ipsum ullamcorper. Proin eu eleifend enim. Nam iaculis placerat molestie. Praesent feugiat rutrum arcu eget semper. Praesent efficitur massa eu urna bibendum, sit amet efficitur sapien molestie. Ut euismod urna quis placerat aliquam. Sed elementum nunc eu posuere laoreet. Vestibulum congue eleifend convallis." liptag = lipsum.split(" ") imgs = [] for e in range(0, 84): n = surnames[random.randint(0, len(surnames) - 1)] if e % 2: fn = m_names[random.randint(0, mlen-1)] else: fn = f_names[random.randint(0, flen-1)] print("making user: %s %s" % (fn, n)) usr = User(uname=fn[:1]+n[:4], email="*****@*****.**" % (fn, n), password="******") User.activate_account(usr) profile = Account(usr, fname=fn, lname=n, dob=str(random.randint(1980, 2000))+"-07-06") profile.images.append("data:image/jpeg;base64,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H/jP5wJq8HjQhTweLAP+a1TOvP1lVx8bf8McD7oF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGb/jcYQOi6NZ701SxB9lmJYx/yhAmPwosTl4I0w/tL9Rcfdn5CfyQLewEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQM9/Gvxt+GtNf3rrtK/x4Gon+QQJo8MzSWp4H0JW9WrzLh7vZv1HLuX8FcD64FoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFHfGI0QW8H+YfXG1TCuX6iy5GN/hyDAmvuKYvJwfw6PjpmO38YLj8mgTvAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAqB4r+HzcEak37PI05/wAc6iv/ANkCYe5/Ty8KcNjbb/celkj06nDpP+sCXoCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFXfE10dr+CNcVfVEw7j+7RqGLa34qhH1QJr7DsHytE0evbby9L09Nvhy4lQ2/KBzeAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAff1xufg7iEfDTrW/gZHP+GBMvCGKExMVB6Jj0KPsWpQP7oH14CAgICAgICAgICAgICAgICB/9k=") profile.tags = [liptag[random.randint(0, len(liptag) - 1)] for i in range(0, 6)] profile.gender = ["Female", "Male"][e % 2] profile.interest= ["Men", "Women", "Both"][random.randint(0, 2)] profile.biography = lipsum print("Registered user ", usr.uname) profile.save()
def createaccount(name, password): new_account = Account(username=name) new_account.set_password(password) new_account.save() msg = "Account successfully created" return jsonify({'message': msg})
def testSave(self): greg = Account("Greg") greg.balance = 10000.90 greg.save() newgreg = Account("Greg") self.assertEqual(newgreg.balance, 10000.90)
def main(): while True: selection = views.welcome_menu() if selection is None: #Bad input views.generic_msg( "Please enter a number that corresponds to a stated option") elif selection == 3: #Exit views.generic_msg("Bye: Thanks for using Terminal Trader") break elif selection == 1: #Create account new_username = views.get_input("Username") new_password = views.get_input("Password") new_account = Account(username=new_username) new_account.set_password(new_password) new_account.save() elif selection == 2: #Login login_username = views.get_input("Username") login_password = views.get_input("Password") if not Account.login(login_username, login_password): views.generic_msg( "Failed to find an account for the given Username/Password, pls retry" ) else: #Retrieve account balance & pk for re-use balance = Account() current_bal, pk = balance.get_bal(login_username, login_password) while True: choice = views.main_menu() if choice is None: #Bad input views.generic_msg( "Please enter a number that corresponds to a stated option" ) elif choice == 7: #Exit break elif choice == 1: #View Balance & Positions views.generic_msg( "Your current balance = {}".format(current_bal)) while True: position_choice = views.position_menu() if position_choice is None: #Bad input views.generic_msg( "Please enter a number that corresponds to a stated option" ) elif position_choice == 3: #Exit break elif position_choice == 1: #Retrieve and display a given position, taking in a ticker symbol ticker = views.get_input( "Please enter a Ticker Symbol") user_position = Account(pk=pk) position = user_position.get_position_for( ticker) views.show_positions(position) elif position_choice == 2: #Retrieve and display all positions user_positions = Account(pk=pk) positions = user_positions.get_positions() for position in positions: views.show_positions(position) elif choice == 2: #Deposit money deposit_amount = float( views.get_input("Deposit Amount")) account_deposit = Account() new_bal = account_deposit.deposit( login_username, login_password, deposit_amount) account_deposit.save() views.generic_msg("New Balance = {}".format(new_bal)) elif choice == 3: #Look up stock price ticker = views.get_input( "Please enter a Ticker Symbol") print(util.get_price(ticker)) elif choice == 4: #Buy stock ticker = views.get_input( "Please enter a Ticker Symbol") shares_buy = views.get_input( "Please enter the number of shares to buy") elif choice == 5: #Sell stock ticker = views.get_input( "Please enter a Ticker Symbol") shares_sell = views.get_input( "Please enter the number of shares to sell") elif choice == 6: #View Trade History while True: trade_choice = views.trades_menu() if trade_choice is None: #Bad input views.generic_msg( "Please enter a number that corresponds to a stated option" ) elif trade_choice == 3: #Exit break elif trade_choice == 1: #Retrieve and display trades re a give ticker symbol ticker = views.get_input( "Please enter a Ticker Symbol") user_trade = Account(pk=pk) trades = user_trade.get_trades_for(ticker) views.show_trades(trades) elif trade_choice == 2: #Retrieve and display all trades user_trades = Account(pk=pk) trades = user_trades.get_trades() for trade in trades: views.show_trades(trade)
def testInsert(self): user = Account(account_id="1", username="******", password_hash='somehash', balance=1, api_key='12345678901234567890') user.save() saved_user = Account.retrieve_api_key(user) self.assertEqual(user.api_key, saved_user[4])
def main_loop(): while True: choice = user_menu() if choice is None: # incorrect selection bad_input('Please select option') elif choice == '4': # exit goodbye() break elif choice == '1': login_input = login_username_pw() verified_account = Account.login(login_input) if verified_account: db_password_hash = verified_account[2] password_verify = checkpw(login_input[1].encode(), db_password_hash) if password_verify: account = Account(account_id = verified_account[0]) account.username = verified_account[1] account.balance = int(verified_account[3]) while True: choice = main_menu() if choice is None: bad_input('Please select option') elif choice == '1': # view account balance display_balance(account.balance) elif choice == '2': # deposit funds account.balance += deposit() Account.update_balance(account) elif choice == '3': # buy stock buy_stock = trade_stock() account.buy(buy_stock[0], buy_stock[1]) elif choice == '4': #sell stock buy_stock = trade_stock() account.sell(buy_stock[0], buy_stock[1]) elif choice == '5': # view positions display_positions(Account.get_positions(account)) elif choice == '6': # view trades display_trade_history(Account.get_trades(account)) elif choice == '7': # lookup price of stock ticker = view.lookup_ticker() print("Ticker: {} is currently: ${}".format(ticker, get_price(ticker))) elif choice == '8': # See API Keys display_api(Account.retrieve_api_key(account)) elif choice == '9': # logout goodbye() else: bad_input('Retry') else: bad_input('Incorrect password') else: bad_input('Incorrect username') elif choice == '2': # login with api user_api_key = login_api_key() # print(user_api_key) user = Account.api_authenticate(user_api_key) display_user_from_api_key(user) elif choice == '3': # create new account account_details[0] = "mark" account_details[1] = "1234" account_details[2] = 1000 account_details = create_account() account = Account() account.username = account_details[0] account.password_hash = account_details[1] account.balance = account_details[2] account.api_key = account.generate_api_key() Account.save(account)
def main(): while True: views.generic_msg("Welcome to Terminal Trader !") selection = views.welcome_menu() if selection is None: #Bad input views.generic_msg( "Please enter a number that corresponds to a stated option") elif selection == 3: #Exit views.generic_msg("Bye: Thanks for using Terminal Trader") break elif selection == 1: #Create account new_username = views.get_input("Username") new_password = views.get_input("Password") new_account = Account(username=new_username) new_account.set_password(new_password) new_account.save() elif selection == 2: #Login login_username = views.get_input("Username") login_password = views.get_input("Password") if not Account.login(login_username, login_password): views.generic_msg( "Failed to find an account for the given Username/Password, pls retry" ) else: #Store account pk for re-use pk = Account.login(login_username, login_password).pk while True: choice = views.main_menu() if choice is None: #Bad input views.generic_msg( "Please enter a number that corresponds \ to a stated option") elif choice == 8: #Exit break elif choice == 1: #View Balance & Positions positions_sub_menu(pk) elif choice == 2: #Deposit money deposit_amount = float( views.get_input("Deposit Amount")) account_deposit = Account(pk=pk) new_bal = account_deposit.deposit(deposit_amount) account_deposit.save() views.generic_msg("New Balance = {}".format(new_bal)) elif choice == 3: #Look up stock price ticker = views.get_input( "Please enter a Ticker Symbol") quote = util.get_price(ticker) if not quote: views.generic_msg( "The Ticker Symbol entered does not exist") else: views.stock_price(ticker, quote) elif choice == 4: #Look up ticker from Co. name co_name = views.get_input("Please enter Company Name") companies = util.get_ticker(co_name) if not companies: views.generic_msg( "No matches for input Company Name") else: for co in companies: views.show_companies(co) elif choice == 5: #Buy stock ticker = views.get_input( "Please enter a Ticker Symbol") shares_buy = views.get_input( "Please enter the number of shares to buy") buy_txn = Account(pk=pk) buy_txn.buy(ticker, shares_buy) views.generic_msg("Buy transaction complete") elif choice == 6: #Sell stock ticker = views.get_input( "Please enter a Ticker Symbol") shares_sell = views.get_input( "Please enter the number of shares to sell") sell_txn = Account(pk=pk) sell_txn.sell(ticker, shares_sell) views.generic_msg("Sell transaction complete") elif choice == 7: #View Trade History trades_sub_menu(pk)