diff --git a/pytr/main.py b/pytr/main.py index 43b6f03..f098196 100644 --- a/pytr/main.py +++ b/pytr/main.py @@ -94,13 +94,16 @@ def formatter(prog): parser_dl_docs.add_argument('--universal', help='Platform independent file names', action='store_true') # portfolio info = 'Show current portfolio' - parser_cmd.add_parser( + parser_portfolio = parser_cmd.add_parser( 'portfolio', formatter_class=argparse.ArgumentDefaultsHelpFormatter, parents=[parser_login_args], help=info, description=info, ) + parser_portfolio.add_argument( + '-o', '--output', help='Output path of CSV file', metavar='OUTPUT', type=Path + ) # details info = 'Get details for an ISIN' parser_details = parser_cmd.add_parser( @@ -214,7 +217,10 @@ def main(): elif args.command == 'details': Details(login(phone_no=args.phone_no, pin=args.pin, web=not args.applogin), args.isin).get() elif args.command == 'portfolio': - Portfolio(login(phone_no=args.phone_no, pin=args.pin, web=not args.applogin)).get() + p = Portfolio(login(phone_no=args.phone_no, pin=args.pin, web=not args.applogin), args.output) + p.get() + if args.output is not None: + p.portfolio_to_csv() elif args.command == 'export_transactions': export_transactions(args.input, args.output, args.lang) elif args.version: diff --git a/pytr/portfolio.py b/pytr/portfolio.py index 8162ed7..d706cfa 100644 --- a/pytr/portfolio.py +++ b/pytr/portfolio.py @@ -76,6 +76,20 @@ async def portfolio_loop(self): else: print(f"unmatched subscription of type '{subscription['type']}':\n{preview(response)}") + def portfolio_to_csv(self, output_path): + positions = self.portfolio['positions'] + csv_lines = [] + for pos in sorted(positions, key=lambda x: x['netSize'], reverse=True): + csv_lines.append( + f"{pos['name']};{pos['instrumentId']};{float(pos['averageBuyIn']):.2f};{float(pos['netValue']):.2f}" + ) + + with open(output_path, 'w', encoding='utf-8') as f: + f.write('Name;ISIN;avgCost;netValue\n') + f.write('\n'.join(csv_lines)) + + print(f'Wrote {len(csv_lines) + 1} lines to {self.output_path}') + def overview(self): # for x in ['netValue', 'unrealisedProfit', 'unrealisedProfitPercent', 'unrealisedCost']: # print(f'{x:24}: {self.portfolio[x]:>10.2f}')