Exemplo n.º 1
0
 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
Exemplo n.º 2
0
 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)
Exemplo n.º 7
0
 def test_JsonToTransaction(self):
     transaction = generate_transaction()
     json_transaction = transaction.to_json()
     gen_transaction = json_to_transaction(json_transaction)
     self.assertEqual(gen_transaction, transaction)
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
 def test_InvalidTransactionStatus(self):
     with self.assertRaisesRegexp(ValueError, 'Invalid transaction status Invalid'):
         transaction = generate_transaction(transaction_status='Invalid')
Exemplo n.º 10
0
 def test_InvalidTransactionAction(self):
     with self.assertRaisesRegexp(ValueError, 'Invalid transaction action Invalid'):
         transaction = generate_transaction(transaction_action='Invalid')
Exemplo n.º 11
0
 def test_InvalidTransactionType(self):
     with self.assertRaisesRegexp(ValueError, 'Invalid transaction type Invalid'):
         transaction = generate_transaction(transaction_type='Invalid')