def setUp(self): self.longMessage = True # Print complete error message on failure self.maxDiff = None # View the complete diff when there is a mismatch in a test self.interface = TransactionsInterface() self.asset_manager_id = 1 self.asset = generate_asset(asset_manager_id=self.asset_manager_id, fungible=True) self.asset_book = generate_book(asset_manager_id=self.asset_manager_id) self.counterparty_book = generate_book( asset_manager_id=self.asset_manager_id) self.transaction1 = generate_transaction( asset_manager_id=self.asset_manager_id, asset_id=self.asset.asset_id, asset_book_id=self.asset_book.book_id, counterparty_book_id=self.counterparty_book.book_id, transaction_currency='USD', net_affecting_charges=True, charge_currency='USD') self.transaction2 = generate_transaction( asset_manager_id=self.asset_manager_id, asset_id=self.asset.asset_id, asset_book_id=self.asset_book.book_id, counterparty_book_id=self.counterparty_book.book_id, transaction_currency='USD', net_affecting_charges=True, charge_currency='USD') self.setup_cache() self.interface.new(self.transaction1) self.interface.new(self.transaction2) self.transaction_id1 = self.transaction1.transaction_id self.transaction_id2 = self.transaction2.transaction_id
def setUp(self): self.longMessage = True # Print complete error message on failure self.maxDiff = None # View the complete diff when there is a mismatch in a test self.asset_manager_id = random.randint(1, 2**31-1) self.asset = generate_asset(asset_manager_id=self.asset_manager_id) self.asset_book = generate_book(asset_manager_id=self.asset_manager_id) self.counterparty_book = generate_book(asset_manager_id=self.asset_manager_id) self.transaction = generate_transaction(asset_manager_id=self.asset_manager_id, asset_id=self.asset.asset_id, asset_book_id=self.asset_book.book_id, counterparty_book_id=self.counterparty_book.book_id) self.transaction_id = self.transaction.transaction_id self.setup_cache()
def setUp(self): self.longMessage = True # Print complete error message on failure self.maxDiff = None # View the complete diff when there is a mismatch in a test self.transactions_interface = TransactionsInterface(environment=STAGE) self.assets_interface = AssetsInterface(environment=STAGE) self.books_interface = BooksInterface(environment=STAGE) self.asset_manager_id = 1 self.asset = generate_asset(asset_manager_id=self.asset_manager_id) self.asset_book = generate_book(asset_manager_id=self.asset_manager_id) self.counterparty_book = generate_book( asset_manager_id=self.asset_manager_id) self.transaction = generate_transaction( asset_manager_id=self.asset_manager_id, asset_id=self.asset.asset_id, asset_book_id=self.asset_book.book_id, counterparty_book_id=self.counterparty_book.book_id) self.transaction_id = self.transaction.transaction_id self.setup_cache()
def test_AllocationWithExplictID(self): transaction = generate_transaction( asset_manager_id=self.asset_manager_id, asset_id=self.asset.asset_id, asset_book_id=self.asset_book.book_id, counterparty_book_id=self.counterparty_book.book_id, quantity=Decimal('100')) self.transactions_interface.new(transaction) partial_tran_id = transaction.transaction_id[:10] allocation_dicts = [{ 'book_id': 'ABC', 'quantity': Decimal('60'), 'transaction_id': partial_tran_id + '_ABC' }, { 'book_id': 'XYZ', 'quantity': Decimal('40'), 'transaction_id': partial_tran_id + '_XYZ' }] abc_book = generate_book(asset_manager_id=self.asset_manager_id, book_id='ABC') xyz_book = generate_book(asset_manager_id=self.asset_manager_id, book_id='XYZ') self.create_transaction_book(abc_book) self.create_transaction_book(xyz_book) allocations = self.transactions_interface.allocate_transaction( asset_manager_id=self.asset_manager_id, transaction_id=transaction.transaction_id, allocation_type='counterparty', allocation_dicts=allocation_dicts) self.assertEqual(len(allocations), 2) book_ids = sorted( [allocation.counterparty_book_id for allocation in allocations]) self.assertEqual(book_ids, ['ABC', 'XYZ']) quantities = sorted( [allocation.quantity for allocation in allocations]) self.assertEqual(quantities, [Decimal('40'), Decimal('60')]) transaction_ids = sorted( [allocation.transaction_id for allocation in allocations]) self.assertEqual(transaction_ids, [partial_tran_id + '_ABC', partial_tran_id + '_XYZ'])
def test_Allocations(self): transaction = generate_transaction( asset_manager_id=self.asset_manager_id, asset_id=self.asset.asset_id, asset_book_id=self.asset_book.book_id, counterparty_book_id=self.counterparty_book.book_id, quantity=Decimal('100')) transaction.charges['TEST'] = Charge(charge_value=Decimal('10'), currency='SGD') self.transactions_interface.new(transaction) allocation_dicts = [{ 'book_id': 'ABC', 'quantity': Decimal('40') }, { 'book_id': 'XYZ', 'quantity': Decimal('60') }] abc_book = generate_book(asset_manager_id=self.asset_manager_id, book_id='ABC') xyz_book = generate_book(asset_manager_id=self.asset_manager_id, book_id='XYZ') self.create_transaction_book(abc_book) self.create_transaction_book(xyz_book) allocations = self.transactions_interface.allocate_transaction( asset_manager_id=self.asset_manager_id, transaction_id=transaction.transaction_id, allocation_type='asset_manager', allocation_dicts=allocation_dicts) self.assertEqual(len(allocations), 2) book_ids = sorted( [allocation.asset_book_id for allocation in allocations]) self.assertEqual(book_ids, ['ABC', 'XYZ']) quantities = sorted( [allocation.quantity for allocation in allocations]) self.assertEqual(quantities, [Decimal('40'), Decimal('60')]) charges = sorted([ allocation.charges.get('TEST').charge_value for allocation in allocations ]) self.assertEqual(charges, [Decimal('4'), Decimal('6')])
def main(): """ Main example """ logging.info("--- SETTING UP IDENTIFIERS ---") asset_manager_id = random.randint(1, 2**31-1) asset_manager_party_id = 'AMID' + str(asset_manager_id) traders = [('TJ', 'Joe', 'Trader'), ('GG', 'Gordon', 'Gekko'), ('AP', 'Patrick', 'Bateman')] brokers = [('BROKER1', 'Best Brokers Inc.'), ('BROKER2', 'World Broker')] csv_path = tempfile.gettempdir() # Modify this to read and write from a different directory no_of_books = 5 no_of_equities = 10 no_of_transactions = 20 logging.info("--- CREATING BOOKS CSV FILE ---") books = [] asset_book_ids = ['BOOK' + str(i+1) for i in range(no_of_books)] for book_id in asset_book_ids: book = create_book(asset_manager_id=asset_manager_id, book_id=book_id, party_id=asset_manager_party_id, owner_id=random.choice([trader[0] for trader in traders])) books.append(book) for broker in brokers: book = create_book(asset_manager_id=asset_manager_id, book_id=broker[0], party_id=broker[0]) books.append(book) books_filename = os.path.join(csv_path, 'books.csv') logging.info("--- WRITING TO %s ---", books_filename) objects_to_csv(objects=books, clazz=Book, filename=books_filename) logging.info("--- CREATING PARTIES CSV FILE ---") parties = [] for trader_id, first_name, surname in traders: individual = Individual(asset_manager_id=asset_manager_id, party_id=trader_id, given_names=first_name, surname=surname) parties.append(individual) for broker_id, broker_name in brokers: broker = Broker(asset_manager_id=asset_manager_id, party_id=broker_id, description=broker_name) parties.append(broker) parties_filename = os.path.join(csv_path, 'parties.csv') logging.info("--- WRITING TO %s ---", parties_filename) objects_to_csv(objects=parties, clazz=Party, filename=parties_filename) logging.info("--- CREATING EQUITIES CSV FILE ---") assets = [] asset_ids = ['EQ' + str(i+1) for i in range(no_of_equities)] for asset_id in asset_ids: asset = create_equity(asset_manager_id=asset_manager_id, asset_id=asset_id) assets.append(asset) equities_filename = os.path.join(csv_path, 'equities.csv') logging.info("--- WRITING TO %s ---", equities_filename) objects_to_csv(objects=assets, clazz=Equity, filename=equities_filename) logging.info("--- CREATING TRANSACTIONS CSV FILE ---") transactions = [] for i in range(no_of_transactions): transaction_id = str(i+1) asset_id = random.choice(asset_ids) asset_book_id = random.choice(asset_book_ids) cpty_book_id = random.choice(['BROKER1', 'BROKER2']) transaction = generate_transaction(asset_manager_id=asset_manager_id, transaction_id=transaction_id, asset_id=asset_id, asset_book_id=asset_book_id, counterparty_book_id=cpty_book_id) transactions.append(transaction) transactions_filename = os.path.join(csv_path, 'transactions.csv') logging.info("--- WRITING TO %s ---", transactions_filename) objects_to_csv(objects=transactions, clazz=Transaction, filename=transactions_filename) logging.info("--- READING BOOKS CSV AND CREATING ---") books = csv_filename_to_objects(filename=books_filename, json_handler=json_to_book) for book in books: books_interface.new(book) logging.info("--- READING PARTIES CSV AND CREATING ---") parties = csv_filename_to_objects(filename=parties_filename, json_handler=json_to_party) for party in parties: parties_interface.new(party) logging.info("--- READING EQUITIES CSV AND CREATING ---") equities = csv_filename_to_objects(filename=equities_filename, json_handler=json_to_asset) for equity in equities: assets_interface.new(equity) logging.info("--- READING TRANSACTIONS CSV AND CREATING ---") transactions = csv_filename_to_objects(filename=transactions_filename, json_handler=json_to_transaction) for transaction in transactions: transaction_interface.new(transaction)
def test_JsonToTransaction(self): transaction = generate_transaction() json_transaction = transaction.to_json() gen_transaction = json_to_transaction(json_transaction) self.assertEqual(gen_transaction, transaction)
def setUp(self): self.longMessage = True # Print complete error message on failure self.transaction = generate_transaction(net_affecting_charges=True) self.transaction_id = self.transaction.transaction_id
def test_InvalidTransactionStatus(self): with self.assertRaisesRegexp(ValueError, 'Invalid transaction status Invalid'): transaction = generate_transaction(transaction_status='Invalid')
def test_InvalidTransactionAction(self): with self.assertRaisesRegexp(ValueError, 'Invalid transaction action Invalid'): transaction = generate_transaction(transaction_action='Invalid')
def test_InvalidTransactionType(self): with self.assertRaisesRegexp(ValueError, 'Invalid transaction type Invalid'): transaction = generate_transaction(transaction_type='Invalid')