コード例 #1
0
ファイル: tests.py プロジェクト: jack2150/rivers0.1
    def test_ready_multiple_files(self):
        """
        Test read on all files inside tos.pos
        """
        files = [
            '2014-03-07-closed.csv',
            '2014-03-10-stock.csv',
            '2014-03-11-hedge.csv',
            '2014-03-12-one-leg.csv',
            '2014-03-13-two-legs.csv',
            '2014-03-14-three-legs.csv',
            '2014-03-17-four-legs-part-1.csv'
        ]

        for f in files:
            open_csv = OpenPosCSV(fname=FILES['tos_positions'] + 'tests/' + f)

            pos, ov = open_csv.read()

            print 'fname: %s' % f
            print 'positions length: %d' % len(pos)
            print 'overall length: %d\n' % len(ov)

            self.assertGreater(len(pos), 1)
            self.assertEqual(len(ov), 5)
コード例 #2
0
    def test_stock_only_files(self):
        """
        Test ready stock only files
        """
        test_date = '2014-03-10'
        test_path = FILES['tos_positions'] + 'tests/' + '2014-03-10-stock.csv'

        print 'file date: %s' % test_date
        print 'file path: %s\n' % test_path

        open_csv = OpenPosCSV(fname=test_path)

        positions, overalls = open_csv.read()

        for position in positions:
            for key, item in position.items():
                if key == 'Symbol' or key == 'Company':
                    self.assertEqual(type(item), str)
                elif key == 'Instrument' or key == 'Stock':
                    self.assertEqual(type(item), dict)
                    self.assertIn(len(item), (0, 14))
                elif key == 'Options':
                    self.assertEqual(type(item), list)

            for key in ['Symbol', 'Company', 'Instrument', 'Stock', 'Options']:
                self.assertIn(key, position.keys())
                print '%s found in positions!' % key

            print ''
コード例 #3
0
ファイル: tests.py プロジェクト: jack2150/rivers0.1
    def test_stock_only_files(self):
        """
        Test ready stock only files
        """
        test_date = '2014-03-10'
        test_path = FILES['tos_positions'] + 'tests/' + '2014-03-10-stock.csv'

        print 'file date: %s' % test_date
        print 'file path: %s\n' % test_path

        open_csv = OpenPosCSV(fname=test_path)

        positions, overalls = open_csv.read()

        for position in positions:
            for key, item in position.items():
                if key == 'Symbol' or key == 'Company':
                    self.assertEqual(type(item), str)
                elif key == 'Instrument' or key == 'Stock':
                    self.assertEqual(type(item), dict)
                    self.assertIn(len(item), (0, 14))
                elif key == 'Options':
                    self.assertEqual(type(item), list)

            for key in ['Symbol', 'Company', 'Instrument', 'Stock', 'Options']:
                self.assertIn(key, position.keys())
                print '%s found in positions!' % key

            print ''
コード例 #4
0
    def setUp(self):
        print '=' * 100
        print "%s: currently run: %s" % (self.__class__.__name__,
                                         self._testMethodName)
        print '-' * 100 + '\n'

        test_file = FILES['tos_positions'] + r'2014-08-01-PositionStatement.csv'
        self.open_csv = OpenPosCSV(fname=test_file)
コード例 #5
0
ファイル: tests.py プロジェクト: jack2150/rivers0.1
    def test_2014_09_06_file(self):
        f = FILES['tos_positions'] + '2014-09-06-PositionStatement.csv'

        open_csv = OpenPosCSV(fname=f)

        pos, ov = open_csv.read()

        print 'fname: %s' % f
        print 'positions length: %d' % len(pos)
        print 'overall length: %d\n' % len(ov)
コード例 #6
0
    def test_2014_09_06_file(self):
        f = FILES['tos_positions'] + '2014-09-06-PositionStatement.csv'

        open_csv = OpenPosCSV(fname=f)

        pos, ov = open_csv.read()

        print 'fname: %s' % f
        print 'positions length: %d' % len(pos)
        print 'overall length: %d\n' % len(ov)
コード例 #7
0
ファイル: tests.py プロジェクト: jack2150/rivers0.1
    def setUp(self):
        print '=' * 100
        print "%s: currently run: %s" % (self.__class__.__name__, self._testMethodName)
        print '-' * 100 + '\n'

        test_file = FILES['tos_positions'] + r'2014-08-01-PositionStatement.csv'
        self.open_csv = OpenPosCSV(fname=test_file)
コード例 #8
0
    def test_ready_multiple_files(self):
        """
        Test read on all files inside tos.pos
        """
        files = [
            '2014-03-07-closed.csv', '2014-03-10-stock.csv',
            '2014-03-11-hedge.csv', '2014-03-12-one-leg.csv',
            '2014-03-13-two-legs.csv', '2014-03-14-three-legs.csv',
            '2014-03-17-four-legs-part-1.csv'
        ]

        for f in files:
            open_csv = OpenPosCSV(fname=FILES['tos_positions'] + 'tests/' + f)

            pos, ov = open_csv.read()

            print 'fname: %s' % f
            print 'positions length: %d' % len(pos)
            print 'overall length: %d\n' % len(ov)

            self.assertGreater(len(pos), 1)
            self.assertEqual(len(ov), 5)
コード例 #9
0
ファイル: tests.py プロジェクト: jack2150/rivers0.1
class TestOpenPosCSV(TestCase):
    def setUp(self):
        print '=' * 100
        print "%s: currently run: %s" % (self.__class__.__name__, self._testMethodName)
        print '-' * 100 + '\n'

        test_file = FILES['tos_positions'] + r'2014-08-01-PositionStatement.csv'
        self.open_csv = OpenPosCSV(fname=test_file)

    def tearDown(self):
        print '\n' + '=' * 100 + '\n\n'

        del self.open_csv

    def test_read_lines_from_file(self):
        """
        Test read lines from file with test file
        """
        lines = self.open_csv.read_lines_from_file()

        print 'lines type: %s' % type(lines)
        print 'lines length: %d\n' % len(lines)
        print 'first 5 rows in lines:'

        for line in lines[:5]:
            print '\t"' + line + '"'

        self.assertTrue(len(lines))
        self.assertEqual(type(lines), list)

    def test_replace_dash_inside_quote(self):
        """
        Test replace dash inside quote
        example "$1,254.00" become $1254.00
        """
        line = 'OVERNIGHT FUTURES BP,"$1,653.36"'
        result = self.open_csv.replace_dash_inside_quote(line)

        print 'line: %s' % line
        print 'result: %s' % result

        self.assertNotIn('"', result)

    def test_split_lines_with_dash(self):
        """
        Test split line using dash into list of items
        """
        line = 'TSLA,,,,,,5.18,-.12,1.29,-1.06,+4.46%,$8.00,$8.00,($250.00)'
        result = self.open_csv.split_lines_with_dash(line)

        print 'line: %s' % line
        print 'result: %s' % result
        print 'type: %s' % type(result)
        print 'length: %d' % len(result)

        self.assertEqual(len(result), 14)
        self.assertEqual(type(result), list)

    def test_remove_bracket_then_add_negative(self):
        """
        Test remove brackets '()' on str item then add negative
        """
        item = '($5609.52)'
        result = self.open_csv.remove_bracket_then_add_negative(item)

        print 'item: %s' % item
        print 'result: %s' % result

        self.assertNotIn('(', result)
        self.assertNotIn(')', result)
        self.assertIn('-', result)

    def test_remove_dollar_symbols(self):
        """
        Test remove dollar symbol on str item
        """
        item = '3773.49'
        result = self.open_csv.remove_dollar_symbols(item)

        print 'item: %s' % item
        print 'result: %s' % result

        self.assertNotIn('$', result)

    def test_remove_percent_symbols(self):
        """
        Test remove dollar symbol on str item
        """
        item = '+1.77%'
        result = self.open_csv.remove_percent_symbols(item)

        print 'item: %s' % item
        print 'result: %s' % result

        self.assertNotIn('%', result)

    def test_is_positions(self):
        """
        Test using list decide it is positions or not
        """
        items = [
            ['TSLA', '', '', '', '', '', '5.18', '-.12', '1.29',
             '-1.06', '+4.46%', '$8.00', '$8.00', '($250.00)'],
            ['TSLA', '', '', '', '', '', '5.18', '-.12', '1.29',
             '-1.06', '+4.46%', '$8.00', '$8.00'],
            ['Instrument', '', '', '', '', '', '5.18', '-.12', '1.29',
             '-1.06', '+4.46%', '', '', '($250.00)'],
        ]

        for key, item in enumerate(items):
            result = self.open_csv.is_positions(item)

            print 'items: %s' % item
            print 'result: %s\n' % result

            if key == 0:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_get_first_items(self):
        """
        Test get first item in a list
        """
        items = ['TSLA', '', '', '', '', '', '5.18', '-.12', '1.29']
        result = self.open_csv.get_first_items(items)

        print 'items: %s' % items
        print 'result: %s' % result

        self.assertEqual(result, 'TSLA')
        self.assertEqual(type(result), str)

    def test_is_instrument(self):
        """
        Test check the lines is instrument using first item
        """
        items = [
            'TSLA',
            'ISHARES MSCI EAFE ETF',
            '100 AUG 14 69 CALL'
        ]

        for key, item in enumerate(items):
            result = self.open_csv.is_instrument(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), bool)

            if key == 0:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_is_stock(self):
        """
        Test check the lines is stock using first item
        """
        items = [
            'TSLA',
            'ISHARES MSCI EAFE ETF',
            '100 AUG 14 69 CALL'
        ]

        for key, item in enumerate(items):
            result = self.open_csv.is_stock(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), bool)

            if key == 1:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_is_options(self):
        """
        Test check the lines is options using first item
        """
        items = [
            'TSLA',
            'ISHARES MSCI EAFE ETF',
            '100 AUG 14 69 CALL'
        ]

        for key, item in enumerate(items):
            result = self.open_csv.is_options(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), bool)

            if key == 2:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_split_str_with_space(self):
        """
        Test split str with space
        """
        items = [
            '100 AUG 14 67.5 CALL',
            '100 (Weeklys) AUG1 14 50 PUT',
            '100 AUG 14 26.5 CALL'
        ]

        for item in items:
            result = self.open_csv.split_str_with_space(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), list)
            self.assertIn(len(result), (5, 6))

    def test_options_is_normal_contract(self):
        """
        Test check options is normal contract or not
        """
        items = [
            ['100', 'AUG', '14', '67.5', 'CALL'],
            ['100', 'Weeklys', 'AUG1', '14', '50', 'PUT']
        ]

        for key, item in enumerate(items):
            result = self.open_csv.options_is_normal_contract(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), bool)

            if key == 0:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_add_normal_to_options_name(self):
        """
        Test add item into first position in list
        """
        items = [
            [1, 2, 3, 4],
            ['a', 'b', 'c'],
            ['100', 'AUG', '14', '67.5', 'CALL'],
        ]

        for item in items:
            print 'item before: %s' % item
            self.open_csv.add_normal_to_options_name(item)
            print 'item after: %s\n' % item

            self.assertEqual(item[1], 'Normal')

    def test_remove_brackets_only(self):
        """
        Test remove brackets on options name
        """
        items = [
            '100 AUG 14 47 PUT',
            '100 (Weeklys) AUG2 14 1990 CALL',
            '100 (Mini) AUG1 14 20 PUT',
        ]

        for item in items:
            result = self.open_csv.remove_brackets_only(item)

            print 'item: %s' % item
            print 'result: %s' % result

            self.assertNotIn('(', result)
            self.assertNotIn(')', result)

    def test_make_options_name_dict(self):
        """
        Test make options name from list into dict
        """
        items = [
            ['100', 'Normal', 'AUG', '14', '67.5', 'CALL'],
            ['100', 'Weeklys', 'AUG1', '14', '50', 'PUT']
        ]

        columns = [
            'right',
            'special',
            'ex_month',
            'ex_year',
            'strike_price',
            'contract'
        ]

        for item in items:
            result = self.open_csv.make_options_name_dict(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), dict)

            for column in columns:
                self.assertIn(column, result.keys())

    def test_format_option_contract(self):
        """
        Test format option contract that split name into 5 parts
        :return:
        """
        items = [
            '100 AUG 14 67.5 CALL',
            '100 (Weeklys) AUG1 14 50 PUT',
            '100 AUG 14 26.5 CALL'
        ]

        for item in items:
            result = self.open_csv.format_option_contract(item)

            print 'item: %s' % item
            print 'result: %s' % result
            print 'result length: %d' % len(result)
            print 'result type: %s\n' % type(result)

            self.assertEqual(len(result), 6)
            self.assertEqual(type(result), dict)

    def test_make_pos_dict(self):
        """
        Test make positions dict using list item
        """
        items = ['TSLA', '', '', '', '', '', '5.18', '-.12', '1.29',
                 '-1.06', '+4.46%', '$8.00', '$8.00', '($250.00)']
        result = self.open_csv.make_pos_dict(items)

        print 'item: %s' % items
        print 'result:'
        for k, r in result.items():
            print '%s: "%s"' % (k, r)
            self.assertIn(k, self.open_csv.position_columns)

        self.assertEqual(len(result), 14)
        self.assertEqual(type(result), dict)

    def test_reset_stock_and_options(self):
        """
        Test reset that return empty list and dict
        """
        stock, options = self.open_csv.reset_stock_and_options()

        print 'stock type: %s' % type(stock)
        print 'stock length: %s\n' % len(stock)

        self.assertEqual(type(stock), dict)
        self.assertFalse(len(stock))

        print 'options type: %s' % type(options)
        print 'options length: %s' % len(options)

        self.assertEqual(type(options), list)
        self.assertFalse(len(options))

    def test_reset_symbol_and_instrument(self):
        """
        Test reset that result str and dict
        """
        symbol, instrument = self.open_csv.reset_symbol_and_instrument()

        print 'symbol type: %s' % type(symbol)
        print 'symbol length: %s\n' % len(symbol)

        self.assertEqual(type(symbol), str)
        self.assertFalse(len(symbol))

        print 'instrument type: %s' % type(instrument)
        print 'instrument length: %s' % len(instrument)

        self.assertEqual(type(instrument), dict)
        self.assertFalse(len(instrument))

    def test_format_positions(self):
        """
        Test format position that ready for insert db
        """
        items = [
            ['ORACLE CORP COM', '0', '', '.00', '40.39', '-.57', '.00', '.00',
             '.00', '.00', '', '$0.00', '$0.00', ''],
            ['100 AUG 14 76 CALL', '+1', '15', '.54', '.36', '-.61', '22.01',
             '10.16', '-2.58', '4.57', '', '($18.00)', '($18.00)', ''],
            ['100 AUG 14 67.5 CALL', '+2', '15', '.37', '.31', 'N/A', '58.46',
             '39.94', '-3.41', '9.57', '', '($12.00)', '($12.00)', '']
        ]

        for item in items:
            result = self.open_csv.format_positions(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertNotIn('N/A', result)
            self.assertNotIn('', result)
            self.assertNotIn('$', result)
            self.assertNotIn('(', result)
            self.assertNotIn(')', result)

    def test_get_company_name(self):
        """
        Test get company name from list
        :return:
        """
        stock = {'mark_change': '-1.19', 'name': 'CELGENE CORP COM', 'pl_open': '$0.00',
                 'days': '', 'mark': '87.15', 'vega': '.00', 'pl_day': '$0.00',
                 'delta': '.00', 'bp_effect': '', 'theta': '.00', 'pct_change': '',
                 'quantity': '0', 'gamma': '.00', 'trade_price': '.00'}

        result = self.open_csv.get_company_name(stock)

        print 'stock: %s' % stock
        print 'result: %s' % result

        self.assertEqual(result, 'CELGENE CORP COM')
        self.assertEqual(type(result), str)

    def test_set_pos(self):
        """
        Test set positions into class with instrument, stock and options
        """
        symbol = 'CELG'

        instrument = {'mark_change': '', 'name': 'CELG', 'pl_open': '($7.50)',
                      'days': '', 'mark': '', 'vega': '-.25', 'pl_day': '($13.00)',
                      'delta': '12.41', 'bp_effect': '($150.00)', 'theta': '.00',
                      'pct_change': '-1.35%', 'quantity': '', 'gamma': '-.54',
                      'trade_price': ''}

        stock = {'mark_change': '-1.19', 'name': 'CELGENE CORP COM', 'pl_open': '$0.00',
                 'days': '', 'mark': '87.15', 'vega': '.00', 'pl_day': '$0.00',
                 'delta': '.00', 'bp_effect': '', 'theta': '.00', 'pct_change': '',
                 'quantity': '0', 'gamma': '.00', 'trade_price': '.00'}

        options = [{'mark_change': '+.46', 'name': '100 AUG 14 86 PUT', 'pl_open': '$13.50',
                    'days': '15', 'mark': '1.395', 'vega': '7.02', 'pl_day': '$46.00',
                    'delta': '-39.37', 'bp_effect': '', 'theta': '-5.72', 'pct_change': '',
                    'quantity': '+1', 'gamma': '7.94', 'trade_price': '1.26'},
                   {'mark_change': '+.59', 'name': '100 AUG 14 87.5 PUT', 'pl_open': '($21.00)',
                    'days': '15', 'mark': '2.05', 'vega': '-7.27', 'pl_day': '($59.00)',
                    'delta': '51.78', 'bp_effect': '', 'theta': '5.72', 'pct_change': '',
                    'quantity': '-1', 'gamma': '-8.49', 'trade_price': '1.84'}]

        self.open_csv.set_pos(symbol, instrument, stock, options)

        positions = self.open_csv.positions

        for pos in positions:
            self.assertEqual(pos['Symbol'], symbol)
            self.assertIn('Symbol', pos.keys())
            self.assertIn('Company', pos.keys())
            self.assertIn('Instrument', pos.keys())
            self.assertIn('Stock', pos.keys())
            self.assertIn('Options', pos.keys())

            print 'Symbol: %s' % pos['Symbol']
            print 'Company: %s' % pos['Company']
            print 'Instrument: %s' % pos['Instrument']
            print 'Stock: %s' % pos['Stock']
            print 'Options: %s' % pos['Options']

    def test_set_pos_from_lines(self):
        """
        Test open pos csv files then get instrument, stock, options
        and set it into class property
        """
        self.open_csv.set_pos_from_lines()

        positions = self.open_csv.positions

        self.assertEqual(len(positions), 21)

        for pos in positions:
            self.assertIn('Symbol', pos.keys())
            self.assertIn('Company', pos.keys())
            self.assertIn('Instrument', pos.keys())
            self.assertIn('Stock', pos.keys())
            self.assertIn('Options', pos.keys())

            print 'Symbol: %s' % pos['Symbol']
            print 'Company: %s' % pos['Company']
            print 'Instrument: %s' % pos['Instrument']
            print 'Stock: %s' % pos['Stock']
            print 'Options: %s' % pos['Options']
            print ''

    def test_last_five_lines(self):
        """
        Test using a list of lines get last 5 items
        """
        lines = range(10)
        result = self.open_csv.last_five_lines(lines)

        print 'lines type: %s' % type(result)
        print 'lines length: %s' % len(result)

        self.assertEqual(type(result), list)
        self.assertEqual(len(result), 5)

    def test_is_overall(self):
        """
        Test the line is overall or not
        """
        items = [
            ['OVERNIGHT FUTURES BP', '$1873.49'],
            ['Position Statement for 865073982 () on 8/1/14 04:55:00'],
            ['BP ADJUSTMENT', '$0.00']
        ]

        for item in items:
            result = self.open_csv.is_overall(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            if len(item) == 2:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_get_overall_data_only(self):
        """
        Test return overall data only, do not return columns
        """
        items = [
            ['OVERNIGHT FUTURES BP', '$1873.49'],
            ['BP ADJUSTMENT', '$0.00']
        ]

        for item in items:
            result = self.open_csv.get_overall_data_only(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), str)
            self.assertEqual(result, item[1])

    def test_format_overall(self):
        """
        Test format overall that remove symbols and signs
        """
        items = ['$3773.49', '($5609.52)', '$0.00', '$1873.49', '$1873.49']

        for item in items:
            result = self.open_csv.format_overall_item(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), float)

    def test_make_overall_dict(self):
        """
        Test using overall data list and make dict
        """
        items = [
            '$3773.49',
            '($5609.52)',
            '$0.00',
            '$1873.49',
            '$1873.49'
        ]

        result = self.open_csv.make_overall_dict(items)

        print 'items: %s\n' % items
        print 'result:'
        for k, r in result.items():
            print k, r

        print ''
        print 'result length: %d' % len(result)
        print 'result type: %s' % type(result)

        self.assertEqual(type(result), dict)
        self.assertEqual(len(result), 5)

        columns_name = [
            'cash_sweep',
            'pl_ytd',
            'bp_adjustment',
            'futures_bp',
            'available'
        ]

        for name in columns_name:
            self.assertIn(name, result.keys())

    def test_set_overall(self):
        """
        Test set overall into class property
        """
        items = ['$3773.49', '($5609.52)', '$0.00', '$1873.49', '$1873.49']
        self.open_csv.set_overall(items)

        overall = self.open_csv.overall

        print 'overall type: %s' % type(overall)
        print 'overall length: %d' % len(overall)

        self.assertEqual(type(overall), dict)
        self.assertEqual(len(overall), 5)

        print '\n' + 'overall dict:'
        for k, o in overall.items():
            print '%s: %s' % (k, o)

    def test_set_overall_from_lines(self):
        """
        Test open csv files and set overall property
        """
        self.open_csv.set_overall_from_lines()

        overall = self.open_csv.overall

        print 'overall type: %s' % type(overall)
        print 'overall length: %d' % len(overall)

        self.assertEqual(type(overall), dict)
        self.assertEqual(len(overall), 5)

        print '\n' + 'overall dict:'
        for k, o in overall.items():
            print '%s: %s' % (k, o)

    def test_read(self):
        """
        Final test, read csv files and return positions and overall dict
        """
        positions, overall = self.open_csv.read()

        print 'positions type: %s' % type(positions)
        print 'positions length: %d\n' % len(positions)

        for position in positions:
            for key, item in position.items():
                if key == 'Symbol' or key == 'Company':
                    self.assertEqual(type(item), str)
                elif key == 'Instrument' or key == 'Stock':
                    self.assertEqual(type(item), dict)
                    self.assertIn(len(item), (0, 14))
                elif key == 'Options':
                    self.assertEqual(type(item), list)

            self.assertIn('Symbol', position.keys())
            self.assertIn('Company', position.keys())
            self.assertIn('Instrument', position.keys())
            self.assertIn('Stock', position.keys())
            self.assertIn('Options', position.keys())

            print 'Symbol: %s' % position['Symbol']
            print 'Company: %s' % position['Company']
            print 'Instrument: %s' % position['Instrument']
            print 'Stock: %s' % position['Stock']
            print 'Options: %s' % position['Options']
            print ''

        # overall section
        print '\n' + 'overall type: %s' % type(overall)
        print 'overall length: %d' % len(overall)

        self.assertEqual(type(overall), dict)
        self.assertEqual(len(overall), 5)

        print '\n' + 'overall dict:'
        print overall

    def test_stock_only_files(self):
        """
        Test ready stock only files
        """
        test_date = '2014-03-10'
        test_path = FILES['tos_positions'] + 'tests/' + '2014-03-10-stock.csv'

        print 'file date: %s' % test_date
        print 'file path: %s\n' % test_path

        open_csv = OpenPosCSV(fname=test_path)

        positions, overalls = open_csv.read()

        for position in positions:
            for key, item in position.items():
                if key == 'Symbol' or key == 'Company':
                    self.assertEqual(type(item), str)
                elif key == 'Instrument' or key == 'Stock':
                    self.assertEqual(type(item), dict)
                    self.assertIn(len(item), (0, 14))
                elif key == 'Options':
                    self.assertEqual(type(item), list)

            for key in ['Symbol', 'Company', 'Instrument', 'Stock', 'Options']:
                self.assertIn(key, position.keys())
                print '%s found in positions!' % key

            print ''

    def test_ready_multiple_files(self):
        """
        Test read on all files inside tos.pos
        """
        files = [
            '2014-03-07-closed.csv',
            '2014-03-10-stock.csv',
            '2014-03-11-hedge.csv',
            '2014-03-12-one-leg.csv',
            '2014-03-13-two-legs.csv',
            '2014-03-14-three-legs.csv',
            '2014-03-17-four-legs-part-1.csv'
        ]

        for f in files:
            open_csv = OpenPosCSV(fname=FILES['tos_positions'] + 'tests/' + f)

            pos, ov = open_csv.read()

            print 'fname: %s' % f
            print 'positions length: %d' % len(pos)
            print 'overall length: %d\n' % len(ov)

            self.assertGreater(len(pos), 1)
            self.assertEqual(len(ov), 5)

    def test_2014_09_06_file(self):
        f = FILES['tos_positions'] + '2014-09-06-PositionStatement.csv'

        open_csv = OpenPosCSV(fname=f)

        pos, ov = open_csv.read()

        print 'fname: %s' % f
        print 'positions length: %d' % len(pos)
        print 'overall length: %d\n' % len(ov)
コード例 #10
0
class TestOpenPosCSV(TestCase):
    def setUp(self):
        print '=' * 100
        print "%s: currently run: %s" % (self.__class__.__name__,
                                         self._testMethodName)
        print '-' * 100 + '\n'

        test_file = FILES['tos_positions'] + r'2014-08-01-PositionStatement.csv'
        self.open_csv = OpenPosCSV(fname=test_file)

    def tearDown(self):
        print '\n' + '=' * 100 + '\n\n'

        del self.open_csv

    def test_read_lines_from_file(self):
        """
        Test read lines from file with test file
        """
        lines = self.open_csv.read_lines_from_file()

        print 'lines type: %s' % type(lines)
        print 'lines length: %d\n' % len(lines)
        print 'first 5 rows in lines:'

        for line in lines[:5]:
            print '\t"' + line + '"'

        self.assertTrue(len(lines))
        self.assertEqual(type(lines), list)

    def test_replace_dash_inside_quote(self):
        """
        Test replace dash inside quote
        example "$1,254.00" become $1254.00
        """
        line = 'OVERNIGHT FUTURES BP,"$1,653.36"'
        result = self.open_csv.replace_dash_inside_quote(line)

        print 'line: %s' % line
        print 'result: %s' % result

        self.assertNotIn('"', result)

    def test_split_lines_with_dash(self):
        """
        Test split line using dash into list of items
        """
        line = 'TSLA,,,,,,5.18,-.12,1.29,-1.06,+4.46%,$8.00,$8.00,($250.00)'
        result = self.open_csv.split_lines_with_dash(line)

        print 'line: %s' % line
        print 'result: %s' % result
        print 'type: %s' % type(result)
        print 'length: %d' % len(result)

        self.assertEqual(len(result), 14)
        self.assertEqual(type(result), list)

    def test_remove_bracket_then_add_negative(self):
        """
        Test remove brackets '()' on str item then add negative
        """
        item = '($5609.52)'
        result = self.open_csv.remove_bracket_then_add_negative(item)

        print 'item: %s' % item
        print 'result: %s' % result

        self.assertNotIn('(', result)
        self.assertNotIn(')', result)
        self.assertIn('-', result)

    def test_remove_dollar_symbols(self):
        """
        Test remove dollar symbol on str item
        """
        item = '3773.49'
        result = self.open_csv.remove_dollar_symbols(item)

        print 'item: %s' % item
        print 'result: %s' % result

        self.assertNotIn('$', result)

    def test_remove_percent_symbols(self):
        """
        Test remove dollar symbol on str item
        """
        item = '+1.77%'
        result = self.open_csv.remove_percent_symbols(item)

        print 'item: %s' % item
        print 'result: %s' % result

        self.assertNotIn('%', result)

    def test_is_positions(self):
        """
        Test using list decide it is positions or not
        """
        items = [
            [
                'TSLA', '', '', '', '', '', '5.18', '-.12', '1.29', '-1.06',
                '+4.46%', '$8.00', '$8.00', '($250.00)'
            ],
            [
                'TSLA', '', '', '', '', '', '5.18', '-.12', '1.29', '-1.06',
                '+4.46%', '$8.00', '$8.00'
            ],
            [
                'Instrument', '', '', '', '', '', '5.18', '-.12', '1.29',
                '-1.06', '+4.46%', '', '', '($250.00)'
            ],
        ]

        for key, item in enumerate(items):
            result = self.open_csv.is_positions(item)

            print 'items: %s' % item
            print 'result: %s\n' % result

            if key == 0:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_get_first_items(self):
        """
        Test get first item in a list
        """
        items = ['TSLA', '', '', '', '', '', '5.18', '-.12', '1.29']
        result = self.open_csv.get_first_items(items)

        print 'items: %s' % items
        print 'result: %s' % result

        self.assertEqual(result, 'TSLA')
        self.assertEqual(type(result), str)

    def test_is_instrument(self):
        """
        Test check the lines is instrument using first item
        """
        items = ['TSLA', 'ISHARES MSCI EAFE ETF', '100 AUG 14 69 CALL']

        for key, item in enumerate(items):
            result = self.open_csv.is_instrument(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), bool)

            if key == 0:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_is_stock(self):
        """
        Test check the lines is stock using first item
        """
        items = ['TSLA', 'ISHARES MSCI EAFE ETF', '100 AUG 14 69 CALL']

        for key, item in enumerate(items):
            result = self.open_csv.is_stock(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), bool)

            if key == 1:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_is_options(self):
        """
        Test check the lines is options using first item
        """
        items = ['TSLA', 'ISHARES MSCI EAFE ETF', '100 AUG 14 69 CALL']

        for key, item in enumerate(items):
            result = self.open_csv.is_options(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), bool)

            if key == 2:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_split_str_with_space(self):
        """
        Test split str with space
        """
        items = [
            '100 AUG 14 67.5 CALL', '100 (Weeklys) AUG1 14 50 PUT',
            '100 AUG 14 26.5 CALL'
        ]

        for item in items:
            result = self.open_csv.split_str_with_space(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), list)
            self.assertIn(len(result), (5, 6))

    def test_options_is_normal_contract(self):
        """
        Test check options is normal contract or not
        """
        items = [['100', 'AUG', '14', '67.5', 'CALL'],
                 ['100', 'Weeklys', 'AUG1', '14', '50', 'PUT']]

        for key, item in enumerate(items):
            result = self.open_csv.options_is_normal_contract(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), bool)

            if key == 0:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_add_normal_to_options_name(self):
        """
        Test add item into first position in list
        """
        items = [
            [1, 2, 3, 4],
            ['a', 'b', 'c'],
            ['100', 'AUG', '14', '67.5', 'CALL'],
        ]

        for item in items:
            print 'item before: %s' % item
            self.open_csv.add_normal_to_options_name(item)
            print 'item after: %s\n' % item

            self.assertEqual(item[1], 'Normal')

    def test_remove_brackets_only(self):
        """
        Test remove brackets on options name
        """
        items = [
            '100 AUG 14 47 PUT',
            '100 (Weeklys) AUG2 14 1990 CALL',
            '100 (Mini) AUG1 14 20 PUT',
        ]

        for item in items:
            result = self.open_csv.remove_brackets_only(item)

            print 'item: %s' % item
            print 'result: %s' % result

            self.assertNotIn('(', result)
            self.assertNotIn(')', result)

    def test_make_options_name_dict(self):
        """
        Test make options name from list into dict
        """
        items = [['100', 'Normal', 'AUG', '14', '67.5', 'CALL'],
                 ['100', 'Weeklys', 'AUG1', '14', '50', 'PUT']]

        columns = [
            'right', 'special', 'ex_month', 'ex_year', 'strike_price',
            'contract'
        ]

        for item in items:
            result = self.open_csv.make_options_name_dict(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), dict)

            for column in columns:
                self.assertIn(column, result.keys())

    def test_format_option_contract(self):
        """
        Test format option contract that split name into 5 parts
        :return:
        """
        items = [
            '100 AUG 14 67.5 CALL', '100 (Weeklys) AUG1 14 50 PUT',
            '100 AUG 14 26.5 CALL'
        ]

        for item in items:
            result = self.open_csv.format_option_contract(item)

            print 'item: %s' % item
            print 'result: %s' % result
            print 'result length: %d' % len(result)
            print 'result type: %s\n' % type(result)

            self.assertEqual(len(result), 6)
            self.assertEqual(type(result), dict)

    def test_make_pos_dict(self):
        """
        Test make positions dict using list item
        """
        items = [
            'TSLA', '', '', '', '', '', '5.18', '-.12', '1.29', '-1.06',
            '+4.46%', '$8.00', '$8.00', '($250.00)'
        ]
        result = self.open_csv.make_pos_dict(items)

        print 'item: %s' % items
        print 'result:'
        for k, r in result.items():
            print '%s: "%s"' % (k, r)
            self.assertIn(k, self.open_csv.position_columns)

        self.assertEqual(len(result), 14)
        self.assertEqual(type(result), dict)

    def test_reset_stock_and_options(self):
        """
        Test reset that return empty list and dict
        """
        stock, options = self.open_csv.reset_stock_and_options()

        print 'stock type: %s' % type(stock)
        print 'stock length: %s\n' % len(stock)

        self.assertEqual(type(stock), dict)
        self.assertFalse(len(stock))

        print 'options type: %s' % type(options)
        print 'options length: %s' % len(options)

        self.assertEqual(type(options), list)
        self.assertFalse(len(options))

    def test_reset_symbol_and_instrument(self):
        """
        Test reset that result str and dict
        """
        symbol, instrument = self.open_csv.reset_symbol_and_instrument()

        print 'symbol type: %s' % type(symbol)
        print 'symbol length: %s\n' % len(symbol)

        self.assertEqual(type(symbol), str)
        self.assertFalse(len(symbol))

        print 'instrument type: %s' % type(instrument)
        print 'instrument length: %s' % len(instrument)

        self.assertEqual(type(instrument), dict)
        self.assertFalse(len(instrument))

    def test_format_positions(self):
        """
        Test format position that ready for insert db
        """
        items = [[
            'ORACLE CORP COM', '0', '', '.00', '40.39', '-.57', '.00', '.00',
            '.00', '.00', '', '$0.00', '$0.00', ''
        ],
                 [
                     '100 AUG 14 76 CALL', '+1', '15', '.54', '.36', '-.61',
                     '22.01', '10.16', '-2.58', '4.57', '', '($18.00)',
                     '($18.00)', ''
                 ],
                 [
                     '100 AUG 14 67.5 CALL', '+2', '15', '.37', '.31', 'N/A',
                     '58.46', '39.94', '-3.41', '9.57', '', '($12.00)',
                     '($12.00)', ''
                 ]]

        for item in items:
            result = self.open_csv.format_positions(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertNotIn('N/A', result)
            self.assertNotIn('', result)
            self.assertNotIn('$', result)
            self.assertNotIn('(', result)
            self.assertNotIn(')', result)

    def test_get_company_name(self):
        """
        Test get company name from list
        :return:
        """
        stock = {
            'mark_change': '-1.19',
            'name': 'CELGENE CORP COM',
            'pl_open': '$0.00',
            'days': '',
            'mark': '87.15',
            'vega': '.00',
            'pl_day': '$0.00',
            'delta': '.00',
            'bp_effect': '',
            'theta': '.00',
            'pct_change': '',
            'quantity': '0',
            'gamma': '.00',
            'trade_price': '.00'
        }

        result = self.open_csv.get_company_name(stock)

        print 'stock: %s' % stock
        print 'result: %s' % result

        self.assertEqual(result, 'CELGENE CORP COM')
        self.assertEqual(type(result), str)

    def test_set_pos(self):
        """
        Test set positions into class with instrument, stock and options
        """
        symbol = 'CELG'

        instrument = {
            'mark_change': '',
            'name': 'CELG',
            'pl_open': '($7.50)',
            'days': '',
            'mark': '',
            'vega': '-.25',
            'pl_day': '($13.00)',
            'delta': '12.41',
            'bp_effect': '($150.00)',
            'theta': '.00',
            'pct_change': '-1.35%',
            'quantity': '',
            'gamma': '-.54',
            'trade_price': ''
        }

        stock = {
            'mark_change': '-1.19',
            'name': 'CELGENE CORP COM',
            'pl_open': '$0.00',
            'days': '',
            'mark': '87.15',
            'vega': '.00',
            'pl_day': '$0.00',
            'delta': '.00',
            'bp_effect': '',
            'theta': '.00',
            'pct_change': '',
            'quantity': '0',
            'gamma': '.00',
            'trade_price': '.00'
        }

        options = [{
            'mark_change': '+.46',
            'name': '100 AUG 14 86 PUT',
            'pl_open': '$13.50',
            'days': '15',
            'mark': '1.395',
            'vega': '7.02',
            'pl_day': '$46.00',
            'delta': '-39.37',
            'bp_effect': '',
            'theta': '-5.72',
            'pct_change': '',
            'quantity': '+1',
            'gamma': '7.94',
            'trade_price': '1.26'
        }, {
            'mark_change': '+.59',
            'name': '100 AUG 14 87.5 PUT',
            'pl_open': '($21.00)',
            'days': '15',
            'mark': '2.05',
            'vega': '-7.27',
            'pl_day': '($59.00)',
            'delta': '51.78',
            'bp_effect': '',
            'theta': '5.72',
            'pct_change': '',
            'quantity': '-1',
            'gamma': '-8.49',
            'trade_price': '1.84'
        }]

        self.open_csv.set_pos(symbol, instrument, stock, options)

        positions = self.open_csv.positions

        for pos in positions:
            self.assertEqual(pos['Symbol'], symbol)
            self.assertIn('Symbol', pos.keys())
            self.assertIn('Company', pos.keys())
            self.assertIn('Instrument', pos.keys())
            self.assertIn('Stock', pos.keys())
            self.assertIn('Options', pos.keys())

            print 'Symbol: %s' % pos['Symbol']
            print 'Company: %s' % pos['Company']
            print 'Instrument: %s' % pos['Instrument']
            print 'Stock: %s' % pos['Stock']
            print 'Options: %s' % pos['Options']

    def test_set_pos_from_lines(self):
        """
        Test open pos csv files then get instrument, stock, options
        and set it into class property
        """
        self.open_csv.set_pos_from_lines()

        positions = self.open_csv.positions

        self.assertEqual(len(positions), 21)

        for pos in positions:
            self.assertIn('Symbol', pos.keys())
            self.assertIn('Company', pos.keys())
            self.assertIn('Instrument', pos.keys())
            self.assertIn('Stock', pos.keys())
            self.assertIn('Options', pos.keys())

            print 'Symbol: %s' % pos['Symbol']
            print 'Company: %s' % pos['Company']
            print 'Instrument: %s' % pos['Instrument']
            print 'Stock: %s' % pos['Stock']
            print 'Options: %s' % pos['Options']
            print ''

    def test_last_five_lines(self):
        """
        Test using a list of lines get last 5 items
        """
        lines = range(10)
        result = self.open_csv.last_five_lines(lines)

        print 'lines type: %s' % type(result)
        print 'lines length: %s' % len(result)

        self.assertEqual(type(result), list)
        self.assertEqual(len(result), 5)

    def test_is_overall(self):
        """
        Test the line is overall or not
        """
        items = [['OVERNIGHT FUTURES BP', '$1873.49'],
                 ['Position Statement for 865073982 () on 8/1/14 04:55:00'],
                 ['BP ADJUSTMENT', '$0.00']]

        for item in items:
            result = self.open_csv.is_overall(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            if len(item) == 2:
                self.assertTrue(result)
            else:
                self.assertFalse(result)

    def test_get_overall_data_only(self):
        """
        Test return overall data only, do not return columns
        """
        items = [['OVERNIGHT FUTURES BP', '$1873.49'],
                 ['BP ADJUSTMENT', '$0.00']]

        for item in items:
            result = self.open_csv.get_overall_data_only(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), str)
            self.assertEqual(result, item[1])

    def test_format_overall(self):
        """
        Test format overall that remove symbols and signs
        """
        items = ['$3773.49', '($5609.52)', '$0.00', '$1873.49', '$1873.49']

        for item in items:
            result = self.open_csv.format_overall_item(item)

            print 'item: %s' % item
            print 'result: %s\n' % result

            self.assertEqual(type(result), float)

    def test_make_overall_dict(self):
        """
        Test using overall data list and make dict
        """
        items = ['$3773.49', '($5609.52)', '$0.00', '$1873.49', '$1873.49']

        result = self.open_csv.make_overall_dict(items)

        print 'items: %s\n' % items
        print 'result:'
        for k, r in result.items():
            print k, r

        print ''
        print 'result length: %d' % len(result)
        print 'result type: %s' % type(result)

        self.assertEqual(type(result), dict)
        self.assertEqual(len(result), 5)

        columns_name = [
            'cash_sweep', 'pl_ytd', 'bp_adjustment', 'futures_bp', 'available'
        ]

        for name in columns_name:
            self.assertIn(name, result.keys())

    def test_set_overall(self):
        """
        Test set overall into class property
        """
        items = ['$3773.49', '($5609.52)', '$0.00', '$1873.49', '$1873.49']
        self.open_csv.set_overall(items)

        overall = self.open_csv.overall

        print 'overall type: %s' % type(overall)
        print 'overall length: %d' % len(overall)

        self.assertEqual(type(overall), dict)
        self.assertEqual(len(overall), 5)

        print '\n' + 'overall dict:'
        for k, o in overall.items():
            print '%s: %s' % (k, o)

    def test_set_overall_from_lines(self):
        """
        Test open csv files and set overall property
        """
        self.open_csv.set_overall_from_lines()

        overall = self.open_csv.overall

        print 'overall type: %s' % type(overall)
        print 'overall length: %d' % len(overall)

        self.assertEqual(type(overall), dict)
        self.assertEqual(len(overall), 5)

        print '\n' + 'overall dict:'
        for k, o in overall.items():
            print '%s: %s' % (k, o)

    def test_read(self):
        """
        Final test, read csv files and return positions and overall dict
        """
        positions, overall = self.open_csv.read()

        print 'positions type: %s' % type(positions)
        print 'positions length: %d\n' % len(positions)

        for position in positions:
            for key, item in position.items():
                if key == 'Symbol' or key == 'Company':
                    self.assertEqual(type(item), str)
                elif key == 'Instrument' or key == 'Stock':
                    self.assertEqual(type(item), dict)
                    self.assertIn(len(item), (0, 14))
                elif key == 'Options':
                    self.assertEqual(type(item), list)

            self.assertIn('Symbol', position.keys())
            self.assertIn('Company', position.keys())
            self.assertIn('Instrument', position.keys())
            self.assertIn('Stock', position.keys())
            self.assertIn('Options', position.keys())

            print 'Symbol: %s' % position['Symbol']
            print 'Company: %s' % position['Company']
            print 'Instrument: %s' % position['Instrument']
            print 'Stock: %s' % position['Stock']
            print 'Options: %s' % position['Options']
            print ''

        # overall section
        print '\n' + 'overall type: %s' % type(overall)
        print 'overall length: %d' % len(overall)

        self.assertEqual(type(overall), dict)
        self.assertEqual(len(overall), 5)

        print '\n' + 'overall dict:'
        print overall

    def test_stock_only_files(self):
        """
        Test ready stock only files
        """
        test_date = '2014-03-10'
        test_path = FILES['tos_positions'] + 'tests/' + '2014-03-10-stock.csv'

        print 'file date: %s' % test_date
        print 'file path: %s\n' % test_path

        open_csv = OpenPosCSV(fname=test_path)

        positions, overalls = open_csv.read()

        for position in positions:
            for key, item in position.items():
                if key == 'Symbol' or key == 'Company':
                    self.assertEqual(type(item), str)
                elif key == 'Instrument' or key == 'Stock':
                    self.assertEqual(type(item), dict)
                    self.assertIn(len(item), (0, 14))
                elif key == 'Options':
                    self.assertEqual(type(item), list)

            for key in ['Symbol', 'Company', 'Instrument', 'Stock', 'Options']:
                self.assertIn(key, position.keys())
                print '%s found in positions!' % key

            print ''

    def test_ready_multiple_files(self):
        """
        Test read on all files inside tos.pos
        """
        files = [
            '2014-03-07-closed.csv', '2014-03-10-stock.csv',
            '2014-03-11-hedge.csv', '2014-03-12-one-leg.csv',
            '2014-03-13-two-legs.csv', '2014-03-14-three-legs.csv',
            '2014-03-17-four-legs-part-1.csv'
        ]

        for f in files:
            open_csv = OpenPosCSV(fname=FILES['tos_positions'] + 'tests/' + f)

            pos, ov = open_csv.read()

            print 'fname: %s' % f
            print 'positions length: %d' % len(pos)
            print 'overall length: %d\n' % len(ov)

            self.assertGreater(len(pos), 1)
            self.assertEqual(len(ov), 5)

    def test_2014_09_06_file(self):
        f = FILES['tos_positions'] + '2014-09-06-PositionStatement.csv'

        open_csv = OpenPosCSV(fname=f)

        pos, ov = open_csv.read()

        print 'fname: %s' % f
        print 'positions length: %d' % len(pos)
        print 'overall length: %d\n' % len(ov)