Ejemplo n.º 1
0
    dburl = 'postgresql+psycopg2:///' + db_name
    engine = create_engine(dburl)

    # Create schema and tables
    try: engine.execute(CreateSchema(schema))
    except ProgrammingError: pass
    Account.__table__.schema = schema
    Position.__table__.schema = schema
    Account.__table__.create(engine, checkfirst=True)
    Position.__table__.create(engine, checkfirst=True)
    Session = sessionmaker(bind=engine)
    session = Session()

    # Create the account entry
    account_info = {'institution': 'Test', 'account': 'Test'}
    pos_data = {}
    pos_data['id'] = get_id(account_info, session)

    # Get the timestamp
    f = open(pos_fname, 'r')
    pos_data['timestamp'] = f.readline().strip().split()[-1]

    c = csv.DictReader(f)
    for row in c:
        pos_data.update(gen_position_data(row, fieldmap))
        session.add(Position(**pos_data))
        try: session.commit()
        except IntegrityError as err:
            if 'duplicate key' in str(err): session.rollback()
            else: raise(err)
Ejemplo n.º 2
0
        if tid in trades_dict: 
            row = dict(sofl.attrib.items() + trades_dict[tid].items())
            try: row['commission'] = row.pop('ibCommission')
            except KeyError: pass
            try: row['commissionCurrency'] = row.pop('ibCommissionCurrency')
            except KeyError: pass
            row.pop('date')
            row['timestamp'] = ' '.join(add_timezone(row.pop('tradeDate'), 
                                                     row.pop('tradeTime'), 
                                                     fmt='%Y%m%d %H%M%S'))
        else: 
            row = dict(sofl.attrib)
            row['tradeID'] = -1
            row['timestamp'] = ' '.join(add_timezone(row.pop('date'), '160000',
                                                     fmt='%Y-%m-%d %H%M%S'))
        row['id'] = get_id({'account': row.pop('accountId'),
                            'institution': 'IB'}, session)
        row = dict([(k,row[k]) for k in row if row[k] not in NULL_SYMBOLS])
        t = Transaction(**row)
        tpk = dict([(k, row[k]) 
                    for k in t.__table__.primary_key.columns.keys()])
        session.add(t)
        try:
            session.commit()
            print >> sys.stderr, "Inserted", tpk
        except IntegrityError as err:
            session.rollback()
            if 'duplicate key value' in err.args[0]:
                print >> sys.stderr, err.args[0].split('\n')[1]
            else: raise err
    session.close()