[profitpy commit] r323 - in trunk/profit: models session workbench workbench/widgets

1 view
Skip to first unread message

codesite...@google.com

unread,
Aug 2, 2008, 11:33:12 PM8/2/08
to profitp...@googlegroups.com
Author: troy.melhase
Date: Sat Aug 2 20:32:07 2008
New Revision: 323

Added:
trunk/profit/models/ticker.py (contents, props changed)
trunk/profit/models/tickers.py (contents, props changed)
Modified:
trunk/profit/models/__init__.py
trunk/profit/models/orders.py
trunk/profit/session/__init__.py
trunk/profit/workbench/tickerdisplay.py
trunk/profit/workbench/widgets/ui_tickerdisplay.ui

Log:
Fixes broken import of old replayPortfolio function.

Modified: trunk/profit/models/__init__.py
==============================================================================
--- trunk/profit/models/__init__.py (original)
+++ trunk/profit/models/__init__.py Sat Aug 2 20:32:07 2008
@@ -5,7 +5,7 @@
# Distributed under the terms of the GNU General Public License v2
# Author: Troy Melhase <tr...@gci.net>

-from PyQt4.QtCore import Qt, QModelIndex, QVariant, QAbstractItemModel
+from PyQt4.QtCore import Qt, QModelIndex, QObject, QVariant, QAbstractItemModel


class BasicItem(object):
@@ -87,3 +87,27 @@
return 0
return self.indexItem(index).childCount()

+
+
+class MiniDict(QObject):
+ def __init__(self):
+ QObject.__init__(self)
+ self.data = {}
+
+ def __contains__(self, item):
+ return item in self.data
+
+ def __getitem__(self, name):
+ return self.data[name]
+
+ def __setitem__(self, name, value):
+ self.data[name] = value
+
+ def keys(self):
+ return self.data.keys()
+
+ def items(self):
+ return self.data.items()
+
+ def setdefault(self, key, default):
+ return self.data.setdefault(key, default)

Modified: trunk/profit/models/orders.py
==============================================================================
--- trunk/profit/models/orders.py (original)
+++ trunk/profit/models/orders.py Sat Aug 2 20:32:07 2008
@@ -29,7 +29,7 @@
item = index.internalPointer()
data = QVariant()
column = index.column()
- if (role == Qt.DecorationRole and column == 1):
+ if role == Qt.DecorationRole and column == 1:
data = QVariant(self.symbolIcon(item.symbol()))
elif role in (Qt.DisplayRole, Qt.ToolTipRole):
data = QVariant(item[column])

Added: trunk/profit/models/ticker.py
==============================================================================
--- (empty file)
+++ trunk/profit/models/ticker.py Sat Aug 2 20:32:07 2008
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright 2007 Troy Melhase <tr...@gci.net>
+# Distributed under the terms of the GNU General Public License v2
+
+from PyQt4.QtCore import Qt, QModelIndex, QVariant, QString
+from profit.lib import valueAlign
+from profit.models import BasicItem, BasicItemModel
+
+
+class TickerModel(BasicItemModel):
+ """ Model for a single ticker.
+
+ """
+ def __init__(self, session=None, parent=None):
+ BasicItemModel.__init__(self, TickerRootItem(), parent)
+ self.symbolIcon = lambda x:None
+ self.session = session
+ if session is not None:
+ session.registerMeta(self)

Added: trunk/profit/models/tickers.py
==============================================================================
--- (empty file)
+++ trunk/profit/models/tickers.py Sat Aug 2 20:32:07 2008
@@ -0,0 +1,109 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright 2007 Troy Melhase <tr...@gci.net>
+# Distributed under the terms of the GNU General Public License v2
+
+from PyQt4.QtCore import Qt, QModelIndex, QObject, QVariant, QString
+from profit.lib import valueAlign
+from profit.models import BasicItem, BasicItemModel
+
+
+class TickersModel(BasicItemModel):
+ """ Model for a collection of tickers.
+
+ """
+ def __init__(self, session=None, parent=None):
+ BasicItemModel.__init__(self, TickersRootItem(), parent)
+ self.symbolIcon = lambda x:None
+ self.session = session
+ if session is not None:
+ session.registerMeta(self)
+
+ def data(self, index, role):
+ if not index.isValid():
+ return QVariant()
+ item = index.internalPointer()
+ column = index.column()
+ data = QVariant()
+ if role in (Qt.DecorationRole, Qt.ToolTipRole):
+ data = QVariant(item[column])
+ return data
+
+ def findContract(self, contract):
+ pass
+
+ def findTicker(self, tickerId):
+ tickerItems = self.invisibleRootItem.children
+ try:
+ return [item for item in tickerItems if item[0]==tickerId][0]
+ except (IndexError, ):
+ pass
+
+ def on_session_TickPrice_TickSize(self, message):
+ tickerId = message.tickerId
+ item = self.findTicker(tickerId)
+ if item:
+ item.update(message)
+ else:
+ root = self.invisibleRootItem
+ root.append(TickersItem.fromMessage(message, root))
+ print '####', len(root.data), [i.toString() for i in root.data]
+ self.reset()
+
+
+class TickersItem(BasicItem):
+ columnLookups = [
+ ('Ticker Id', lambda msg:msg.tickerId),
+ ('Field', lambda msg:msg.field),
+ ('Price', lambda msg:msg.price),
+ ('Size', lambda msg:msg.size),
+ ('Can Auto Execute', lambda msg: msg.canAutoExecute),
+ ]
+
+ def __init__(self, data, parent=None, message=None):
+ BasicItem.__init__(self, data, parent)
+ self.message = message
+
+ @classmethod
+ def fromMessage(cls, message, parent):
+ """ New instance from message values
+
+ @param cls class object
+ @param message ib.opt.message object
+ @param parent parent of this item
+ @return new instance of cls
+ """
+ values = []
+ for label, lookup in cls.columnLookups:
+ try:
+ value = lookup(message)
+ except (AttributeError, ):
+ value = 0
+ values.append(value)
+ return cls(values, parent, message)
+
+ def update(self, message):
+ """ Update the item with values from a message.
+
+ @param message ib.opt.message object
+ @return None
+ """
+ for column, (label, lookup) in enumerate(self.columnLookups):
+ try:
+ self[column] = lookup(message)
+ except (AttributeError, ):
+ pass
+
+class TickersRootItem(TickersItem):
+ """ Tickers model item with automatic values (for horizontal headers).
+
+ """
+ def __init__(self):
+ TickersItem.__init__(self, self.horizontalLabels())
+
+ def horizontalLabels(self):
+ """ Generates list of horizontal header values.
+
+ """
+ return map(QVariant, [label for label, lookup in self.columnLookups])

Modified: trunk/profit/session/__init__.py
==============================================================================
--- trunk/profit/session/__init__.py (original)
+++ trunk/profit/session/__init__.py Sat Aug 2 20:32:07 2008
@@ -24,6 +24,7 @@

from profit.models.orders import OrdersModel
from profit.models.portfolio import PortfolioModel
+from profit.models.tickers import TickersModel


class DataMaps(object):
@@ -40,6 +41,8 @@
def __init__(self, session):
self.orders = OrdersModel(session)
self.portfolio = PortfolioModel(session)
+ self.tickers = TickersModel(session)
+

class Session(QObject):
""" This is the big-honkin Session class.

Modified: trunk/profit/workbench/tickerdisplay.py
==============================================================================
--- trunk/profit/workbench/tickerdisplay.py (original)
+++ trunk/profit/workbench/tickerdisplay.py Sat Aug 2 20:32:07 2008
@@ -16,11 +16,11 @@
from profit.lib import (
BasicHandler, DataRoles, Signals, defaults, instance,
makeCheckNames, )
from profit.lib.gui import (
- UrlRequestor, ValueTableItem, separator, makeUrlAction, )
+ UrlRequestor, ValueTableItem, separator, makeUrlAction,
symbolIcon, )
from profit.lib.widgets.tickfieldselect import (
ExField, fieldIds, itemTickField, setItemTickField, )

-from profit.workbench.portfoliodisplay import replayPortfolio
+#from profit.workbench.portfoliodisplay import replayPortfolio
from profit.workbench.widgets.ui_tickerdisplay import Ui_TickerDisplay


@@ -104,6 +104,11 @@
@return None
"""
self.session = session
+ model = session.models.tickers
+ model.symbolIcon = symbolIcon
+ #self.connect(model, Signals.modelReset, self.resizeTree)
+ self.tickersView.setModel(model)
+
symbols = session.strategy.symbols()
#replayTickerMessages(session.messages, symbols,
# self.on_session_TickPrice_TickSize)

Modified: trunk/profit/workbench/widgets/ui_tickerdisplay.ui
==============================================================================
--- trunk/profit/workbench/widgets/ui_tickerdisplay.ui (original)
+++ trunk/profit/workbench/widgets/ui_tickerdisplay.ui Sat Aug 2
20:32:07 2008
@@ -55,6 +55,9 @@
</property>
</widget>
</item>
+ <item>
+ <widget class="QTreeView" name="tickersView" />
+ </item>
</layout>
</widget>
</widget>

Reply all
Reply to author
Forward
0 new messages