def test_creation_duplicates(self): p = Portfolio(name='Avanza', currency='SEK').save() a_date = datetime.date(2001, 1, 3) pos = Position(symbol='AAPL', currency='SEK', currency_rate=1.0, enter_date=a_date, enter_price=5000.0, enter_commission=99.0, shares=1000.0, portfolio=p) pos.save() self.assertRaises(Exception, pos.save)
def quotes(request): symbols = [] for position in Position.all(): symbols.append(position.symbol) RealtimeQuote.delete_all() RealtimeQuote.download_all(symbols) return redirect(request)
def fixture(request): Position.delete_all() Quote.delete_all() Portfolio.delete_all() avanza = Portfolio(name='Avanza', currency='SEK').save() Portfolio(name='XO', currency='GBP').save() Position(symbol='AAPL', currency='SEK', currency_rate=1.0, enter_date=date.today(), enter_price=5000.0, enter_commission=99.0, shares=1000.0, portfolio=avanza).save() Quote(symbol='AAPL', close=1234.5, high=1234.5, low=1234.5, open=1234.5, date=date.today()).save() return HttpResponseRedirect('/')
def historical_quotes(request): symbols = [] for position in Position.all(): symbols.append(position.symbol) start_date = request.GET.get('start_date') stop_date = request.GET.get('stop_date') if start_date: Quote.yahoo( position.symbol, start_date=datetime.strptime(start_date, '%Y-%m-%d').date(), stop_date=datetime.strptime(stop_date, '%Y-%m-%d').date()) else: Quote.yahoo(position.symbol) return redirect(request)
def test_creation(self): p = Portfolio(name='Avanza', currency='SEK').save() a_date = datetime.date(2001, 1, 3) Position(symbol='AAPL', currency='SEK', currency_rate=1.0, enter_date=a_date, enter_price=5000.0, enter_commission=99.0, shares=1000.0, portfolio=p).save() fetched_model = Position.load( symbol='AAPL', enter_date=a_date, portfolio=p) self.assertEquals('AAPL', fetched_model.symbol) self.assertEquals(a_date, fetched_model.enter_date) self.assertEquals(p, fetched_model.portfolio)
def alerts(request): body = '' for position in Position.all(): if position.exit_date is not None or not position.shares: continue if position.below_stop(): body += '\n%s in portfolio %s below stop' % (position.symbol, position.portfolio.name) if position.below_ll_10(): body += '\n%s in portfolio %s below ll10' % (position.symbol, position.portfolio.name) if len(body) == 0: return HttpResponseRedirect('/') body = 'The following alerts have been triggered:\n' + body body += '\n\nVisit http://quote-portfolio.appspot.com for details.' mail.send_mail(sender="*****@*****.**", to="*****@*****.**", subject="Portfolio alert", body=body) return HttpResponseRedirect('/')
def test_delete_all(self): p = Portfolio(name='Avanza', currency='SEK').save() a_date = datetime.date(2001, 1, 3) pos = Position(symbol='AAPL', currency='SEK', currency_rate=1.0, enter_date=a_date, enter_price=5000.0, enter_commission=99.0, shares=1000.0, portfolio=p) pos.save() Position.delete_all() fetched_model = Position.load( symbol='AAPL', enter_date=a_date, portfolio=p) self.assertFalse(fetched_model)