mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-27 19:14:36 +08:00
cleanup
This commit is contained in:
+477
@@ -0,0 +1,477 @@
|
||||
<?xml version="1.0" ?>
|
||||
<!DOCTYPE coverage
|
||||
SYSTEM 'http://cobertura.sourceforge.net/xml/coverage-03.dtd'>
|
||||
<coverage branch-rate="0" line-rate="0.3704" timestamp="1328803087680" version="3.5.1">
|
||||
<!-- Generated by coverage.py: http://nedbatchelder.com/code/coverage -->
|
||||
<packages>
|
||||
<package branch-rate="0" complexity="0" line-rate="0.5146" name="qsim">
|
||||
<classes>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/__init__.py" line-rate="0" name="__init__">
|
||||
<methods/>
|
||||
<lines/>
|
||||
</class>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/messaging.py" line-rate="0.5" name="messaging">
|
||||
<methods/>
|
||||
<lines>
|
||||
<line hits="1" number="4"/>
|
||||
<line hits="1" number="5"/>
|
||||
<line hits="1" number="6"/>
|
||||
<line hits="1" number="8"/>
|
||||
<line hits="1" number="10"/>
|
||||
<line hits="1" number="13"/>
|
||||
<line hits="1" number="14"/>
|
||||
<line hits="1" number="15"/>
|
||||
<line hits="1" number="16"/>
|
||||
<line hits="1" number="17"/>
|
||||
<line hits="1" number="18"/>
|
||||
<line hits="1" number="19"/>
|
||||
<line hits="1" number="20"/>
|
||||
<line hits="1" number="22"/>
|
||||
<line hits="0" number="23"/>
|
||||
<line hits="1" number="25"/>
|
||||
<line hits="0" number="26"/>
|
||||
<line hits="0" number="27"/>
|
||||
<line hits="1" number="29"/>
|
||||
<line hits="0" number="30"/>
|
||||
<line hits="0" number="31"/>
|
||||
<line hits="0" number="33"/>
|
||||
<line hits="0" number="34"/>
|
||||
<line hits="0" number="35"/>
|
||||
<line hits="0" number="36"/>
|
||||
<line hits="0" number="37"/>
|
||||
<line hits="0" number="38"/>
|
||||
<line hits="0" number="39"/>
|
||||
<line hits="0" number="40"/>
|
||||
<line hits="0" number="42"/>
|
||||
<line hits="0" number="43"/>
|
||||
<line hits="1" number="45"/>
|
||||
<line hits="0" number="46"/>
|
||||
<line hits="0" number="47"/>
|
||||
<line hits="0" number="48"/>
|
||||
<line hits="0" number="49"/>
|
||||
<line hits="1" number="51"/>
|
||||
<line hits="1" number="52"/>
|
||||
<line hits="1" number="53"/>
|
||||
<line hits="1" number="54"/>
|
||||
<line hits="1" number="55"/>
|
||||
<line hits="1" number="57"/>
|
||||
<line hits="0" number="58"/>
|
||||
<line hits="0" number="59"/>
|
||||
<line hits="0" number="60"/>
|
||||
<line hits="1" number="62"/>
|
||||
<line hits="0" number="63"/>
|
||||
<line hits="0" number="64"/>
|
||||
<line hits="0" number="66"/>
|
||||
<line hits="0" number="67"/>
|
||||
<line hits="0" number="68"/>
|
||||
<line hits="0" number="69"/>
|
||||
<line hits="1" number="72"/>
|
||||
<line hits="1" number="77"/>
|
||||
<line hits="0" number="78"/>
|
||||
<line hits="0" number="79"/>
|
||||
<line hits="0" number="80"/>
|
||||
<line hits="1" number="82"/>
|
||||
<line hits="0" number="84"/>
|
||||
<line hits="0" number="85"/>
|
||||
<line hits="0" number="87"/>
|
||||
<line hits="0" number="88"/>
|
||||
<line hits="0" number="89"/>
|
||||
<line hits="0" number="90"/>
|
||||
<line hits="0" number="91"/>
|
||||
<line hits="0" number="92"/>
|
||||
<line hits="0" number="93"/>
|
||||
<line hits="0" number="94"/>
|
||||
<line hits="1" number="97"/>
|
||||
<line hits="1" number="103"/>
|
||||
<line hits="1" number="104"/>
|
||||
<line hits="1" number="105"/>
|
||||
<line hits="1" number="106"/>
|
||||
<line hits="1" number="109"/>
|
||||
<line hits="1" number="111"/>
|
||||
<line hits="1" number="113"/>
|
||||
<line hits="1" number="114"/>
|
||||
<line hits="1" number="116"/>
|
||||
<line hits="1" number="118"/>
|
||||
<line hits="1" number="119"/>
|
||||
<line hits="1" number="120"/>
|
||||
<line hits="1" number="121"/>
|
||||
</lines>
|
||||
</class>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/util.py" line-rate="0.5714" name="util">
|
||||
<methods/>
|
||||
<lines>
|
||||
<line hits="1" number="6"/>
|
||||
<line hits="1" number="7"/>
|
||||
<line hits="1" number="8"/>
|
||||
<line hits="1" number="11"/>
|
||||
<line hits="1" number="13"/>
|
||||
<line hits="0" number="15"/>
|
||||
<line hits="0" number="16"/>
|
||||
<line hits="0" number="17"/>
|
||||
<line hits="0" number="18"/>
|
||||
<line hits="0" number="19"/>
|
||||
<line hits="1" number="21"/>
|
||||
<line hits="0" number="23"/>
|
||||
<line hits="0" number="24"/>
|
||||
<line hits="0" number="25"/>
|
||||
<line hits="0" number="26"/>
|
||||
<line hits="1" number="28"/>
|
||||
<line hits="1" number="29"/>
|
||||
<line hits="1" number="30"/>
|
||||
<line hits="1" number="31"/>
|
||||
<line hits="1" number="32"/>
|
||||
<line hits="1" number="33"/>
|
||||
</lines>
|
||||
</class>
|
||||
</classes>
|
||||
</package>
|
||||
<package branch-rate="0" complexity="0" line-rate="0.4231" name="qsim.simulator">
|
||||
<classes>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/simulator/__init__.py" line-rate="0" name="__init__">
|
||||
<methods/>
|
||||
<lines/>
|
||||
</class>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/simulator/config.py" line-rate="0.4138" name="config">
|
||||
<methods/>
|
||||
<lines>
|
||||
<line hits="1" number="2"/>
|
||||
<line hits="1" number="4"/>
|
||||
<line hits="1" number="7"/>
|
||||
<line hits="0" number="8"/>
|
||||
<line hits="1" number="10"/>
|
||||
<line hits="0" number="11"/>
|
||||
<line hits="1" number="13"/>
|
||||
<line hits="0" number="14"/>
|
||||
<line hits="0" number="15"/>
|
||||
<line hits="1" number="17"/>
|
||||
<line hits="0" number="18"/>
|
||||
<line hits="0" number="19"/>
|
||||
<line hits="0" number="21"/>
|
||||
<line hits="1" number="23"/>
|
||||
<line hits="0" number="25"/>
|
||||
<line hits="1" number="27"/>
|
||||
<line hits="0" number="29"/>
|
||||
<line hits="1" number="31"/>
|
||||
<line hits="0" number="33"/>
|
||||
<line hits="1" number="35"/>
|
||||
<line hits="0" number="40"/>
|
||||
<line hits="0" number="41"/>
|
||||
<line hits="0" number="42"/>
|
||||
<line hits="0" number="43"/>
|
||||
<line hits="0" number="45"/>
|
||||
<line hits="1" number="47"/>
|
||||
<line hits="0" number="49"/>
|
||||
<line hits="1" number="51"/>
|
||||
<line hits="0" number="53"/>
|
||||
</lines>
|
||||
</class>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/simulator/feed.py" line-rate="0.3889" name="feed">
|
||||
<methods/>
|
||||
<lines>
|
||||
<line hits="1" number="2"/>
|
||||
<line hits="1" number="3"/>
|
||||
<line hits="1" number="4"/>
|
||||
<line hits="1" number="5"/>
|
||||
<line hits="1" number="6"/>
|
||||
<line hits="1" number="7"/>
|
||||
<line hits="1" number="8"/>
|
||||
<line hits="1" number="10"/>
|
||||
<line hits="1" number="12"/>
|
||||
<line hits="1" number="13"/>
|
||||
<line hits="1" number="15"/>
|
||||
<line hits="1" number="16"/>
|
||||
<line hits="1" number="17"/>
|
||||
<line hits="1" number="19"/>
|
||||
<line hits="1" number="21"/>
|
||||
<line hits="1" number="22"/>
|
||||
<line hits="1" number="23"/>
|
||||
<line hits="1" number="24"/>
|
||||
<line hits="0" number="25"/>
|
||||
<line hits="0" number="26"/>
|
||||
<line hits="1" number="27"/>
|
||||
<line hits="1" number="28"/>
|
||||
<line hits="1" number="29"/>
|
||||
<line hits="1" number="31"/>
|
||||
<line hits="1" number="33"/>
|
||||
<line hits="0" number="35"/>
|
||||
<line hits="0" number="36"/>
|
||||
<line hits="0" number="37"/>
|
||||
<line hits="0" number="38"/>
|
||||
<line hits="1" number="40"/>
|
||||
<line hits="1" number="41"/>
|
||||
<line hits="1" number="43"/>
|
||||
<line hits="0" number="44"/>
|
||||
<line hits="0" number="45"/>
|
||||
<line hits="0" number="46"/>
|
||||
<line hits="0" number="48"/>
|
||||
<line hits="1" number="50"/>
|
||||
<line hits="0" number="52"/>
|
||||
<line hits="0" number="53"/>
|
||||
<line hits="0" number="54"/>
|
||||
<line hits="0" number="56"/>
|
||||
<line hits="0" number="58"/>
|
||||
<line hits="0" number="59"/>
|
||||
<line hits="0" number="62"/>
|
||||
<line hits="0" number="64"/>
|
||||
<line hits="0" number="65"/>
|
||||
<line hits="1" number="67"/>
|
||||
<line hits="0" number="69"/>
|
||||
<line hits="0" number="71"/>
|
||||
<line hits="0" number="75"/>
|
||||
<line hits="0" number="76"/>
|
||||
<line hits="0" number="79"/>
|
||||
<line hits="0" number="80"/>
|
||||
<line hits="0" number="82"/>
|
||||
<line hits="0" number="85"/>
|
||||
<line hits="0" number="88"/>
|
||||
<line hits="0" number="90"/>
|
||||
<line hits="0" number="92"/>
|
||||
<line hits="0" number="93"/>
|
||||
<line hits="0" number="94"/>
|
||||
<line hits="0" number="95"/>
|
||||
<line hits="0" number="96"/>
|
||||
<line hits="0" number="97"/>
|
||||
<line hits="0" number="98"/>
|
||||
<line hits="0" number="100"/>
|
||||
<line hits="0" number="101"/>
|
||||
<line hits="0" number="105"/>
|
||||
<line hits="0" number="108"/>
|
||||
<line hits="0" number="109"/>
|
||||
<line hits="0" number="110"/>
|
||||
<line hits="0" number="111"/>
|
||||
<line hits="0" number="112"/>
|
||||
</lines>
|
||||
</class>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/simulator/sources.py" line-rate="0.4727" name="sources">
|
||||
<methods/>
|
||||
<lines>
|
||||
<line hits="1" number="4"/>
|
||||
<line hits="1" number="5"/>
|
||||
<line hits="1" number="6"/>
|
||||
<line hits="1" number="7"/>
|
||||
<line hits="1" number="8"/>
|
||||
<line hits="1" number="10"/>
|
||||
<line hits="1" number="11"/>
|
||||
<line hits="1" number="13"/>
|
||||
<line hits="1" number="19"/>
|
||||
<line hits="1" number="20"/>
|
||||
<line hits="1" number="21"/>
|
||||
<line hits="1" number="22"/>
|
||||
<line hits="1" number="23"/>
|
||||
<line hits="1" number="24"/>
|
||||
<line hits="1" number="26"/>
|
||||
<line hits="0" number="28"/>
|
||||
<line hits="0" number="29"/>
|
||||
<line hits="1" number="32"/>
|
||||
<line hits="0" number="34"/>
|
||||
<line hits="0" number="38"/>
|
||||
<line hits="0" number="41"/>
|
||||
<line hits="0" number="42"/>
|
||||
<line hits="0" number="45"/>
|
||||
<line hits="0" number="46"/>
|
||||
<line hits="1" number="48"/>
|
||||
<line hits="0" number="50"/>
|
||||
<line hits="0" number="51"/>
|
||||
<line hits="0" number="52"/>
|
||||
<line hits="1" number="54"/>
|
||||
<line hits="0" number="56"/>
|
||||
<line hits="1" number="58"/>
|
||||
<line hits="0" number="64"/>
|
||||
<line hits="0" number="65"/>
|
||||
<line hits="0" number="66"/>
|
||||
<line hits="1" number="68"/>
|
||||
<line hits="0" number="72"/>
|
||||
<line hits="0" number="73"/>
|
||||
<line hits="0" number="74"/>
|
||||
<line hits="0" number="75"/>
|
||||
<line hits="0" number="76"/>
|
||||
<line hits="0" number="77"/>
|
||||
<line hits="0" number="78"/>
|
||||
<line hits="1" number="80"/>
|
||||
<line hits="1" number="83"/>
|
||||
<line hits="1" number="84"/>
|
||||
<line hits="1" number="85"/>
|
||||
<line hits="1" number="86"/>
|
||||
<line hits="1" number="88"/>
|
||||
<line hits="0" number="89"/>
|
||||
<line hits="0" number="90"/>
|
||||
<line hits="0" number="91"/>
|
||||
<line hits="0" number="93"/>
|
||||
<line hits="0" number="94"/>
|
||||
<line hits="0" number="95"/>
|
||||
<line hits="0" number="99"/>
|
||||
</lines>
|
||||
</class>
|
||||
</classes>
|
||||
</package>
|
||||
<package branch-rate="0" complexity="0" line-rate="0.2123" name="qsim.transforms">
|
||||
<classes>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/transforms/__init__.py" line-rate="0" name="__init__">
|
||||
<methods/>
|
||||
<lines/>
|
||||
</class>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/transforms/core.py" line-rate="0.2353" name="core">
|
||||
<methods/>
|
||||
<lines>
|
||||
<line hits="1" number="20"/>
|
||||
<line hits="1" number="21"/>
|
||||
<line hits="1" number="22"/>
|
||||
<line hits="1" number="23"/>
|
||||
<line hits="1" number="24"/>
|
||||
<line hits="1" number="27"/>
|
||||
<line hits="1" number="31"/>
|
||||
<line hits="0" number="41"/>
|
||||
<line hits="0" number="42"/>
|
||||
<line hits="0" number="43"/>
|
||||
<line hits="0" number="44"/>
|
||||
<line hits="0" number="45"/>
|
||||
<line hits="0" number="46"/>
|
||||
<line hits="0" number="47"/>
|
||||
<line hits="0" number="48"/>
|
||||
<line hits="0" number="49"/>
|
||||
<line hits="1" number="51"/>
|
||||
<line hits="0" number="59"/>
|
||||
<line hits="0" number="60"/>
|
||||
<line hits="0" number="61"/>
|
||||
<line hits="1" number="63"/>
|
||||
<line hits="0" number="67"/>
|
||||
<line hits="0" number="69"/>
|
||||
<line hits="0" number="72"/>
|
||||
<line hits="0" number="73"/>
|
||||
<line hits="0" number="74"/>
|
||||
<line hits="0" number="77"/>
|
||||
<line hits="0" number="78"/>
|
||||
<line hits="1" number="80"/>
|
||||
<line hits="0" number="87"/>
|
||||
<line hits="0" number="88"/>
|
||||
<line hits="0" number="90"/>
|
||||
<line hits="0" number="91"/>
|
||||
<line hits="0" number="92"/>
|
||||
<line hits="0" number="93"/>
|
||||
<line hits="0" number="94"/>
|
||||
<line hits="0" number="95"/>
|
||||
<line hits="0" number="96"/>
|
||||
<line hits="0" number="97"/>
|
||||
<line hits="0" number="98"/>
|
||||
<line hits="0" number="99"/>
|
||||
<line hits="0" number="100"/>
|
||||
<line hits="0" number="101"/>
|
||||
<line hits="0" number="102"/>
|
||||
<line hits="1" number="104"/>
|
||||
<line hits="0" number="108"/>
|
||||
<line hits="0" number="110"/>
|
||||
<line hits="0" number="111"/>
|
||||
<line hits="0" number="112"/>
|
||||
<line hits="1" number="114"/>
|
||||
<line hits="0" number="121"/>
|
||||
</lines>
|
||||
</class>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/transforms/merge.py" line-rate="0.1711" name="merge">
|
||||
<methods/>
|
||||
<lines>
|
||||
<line hits="1" number="1"/>
|
||||
<line hits="1" number="2"/>
|
||||
<line hits="1" number="3"/>
|
||||
<line hits="1" number="5"/>
|
||||
<line hits="1" number="6"/>
|
||||
<line hits="1" number="7"/>
|
||||
<line hits="1" number="8"/>
|
||||
<line hits="1" number="10"/>
|
||||
<line hits="1" number="18"/>
|
||||
<line hits="0" number="23"/>
|
||||
<line hits="0" number="24"/>
|
||||
<line hits="0" number="25"/>
|
||||
<line hits="0" number="26"/>
|
||||
<line hits="1" number="29"/>
|
||||
<line hits="0" number="35"/>
|
||||
<line hits="0" number="36"/>
|
||||
<line hits="0" number="37"/>
|
||||
<line hits="0" number="38"/>
|
||||
<line hits="0" number="39"/>
|
||||
<line hits="0" number="40"/>
|
||||
<line hits="0" number="42"/>
|
||||
<line hits="0" number="43"/>
|
||||
<line hits="0" number="44"/>
|
||||
<line hits="0" number="46"/>
|
||||
<line hits="0" number="47"/>
|
||||
<line hits="0" number="48"/>
|
||||
<line hits="1" number="50"/>
|
||||
<line hits="0" number="54"/>
|
||||
<line hits="0" number="56"/>
|
||||
<line hits="0" number="58"/>
|
||||
<line hits="0" number="59"/>
|
||||
<line hits="0" number="60"/>
|
||||
<line hits="0" number="63"/>
|
||||
<line hits="0" number="64"/>
|
||||
<line hits="0" number="67"/>
|
||||
<line hits="0" number="68"/>
|
||||
<line hits="0" number="69"/>
|
||||
<line hits="0" number="72"/>
|
||||
<line hits="0" number="73"/>
|
||||
<line hits="0" number="74"/>
|
||||
<line hits="0" number="76"/>
|
||||
<line hits="0" number="77"/>
|
||||
<line hits="0" number="78"/>
|
||||
<line hits="0" number="79"/>
|
||||
<line hits="0" number="81"/>
|
||||
<line hits="1" number="83"/>
|
||||
<line hits="0" number="87"/>
|
||||
<line hits="0" number="88"/>
|
||||
<line hits="1" number="90"/>
|
||||
<line hits="0" number="97"/>
|
||||
<line hits="0" number="98"/>
|
||||
<line hits="0" number="99"/>
|
||||
<line hits="0" number="101"/>
|
||||
<line hits="0" number="102"/>
|
||||
<line hits="0" number="103"/>
|
||||
<line hits="0" number="104"/>
|
||||
<line hits="0" number="105"/>
|
||||
<line hits="0" number="107"/>
|
||||
<line hits="0" number="108"/>
|
||||
<line hits="0" number="109"/>
|
||||
<line hits="0" number="111"/>
|
||||
<line hits="0" number="112"/>
|
||||
<line hits="0" number="113"/>
|
||||
<line hits="0" number="114"/>
|
||||
<line hits="0" number="115"/>
|
||||
<line hits="0" number="117"/>
|
||||
<line hits="0" number="118"/>
|
||||
<line hits="0" number="119"/>
|
||||
<line hits="0" number="121"/>
|
||||
<line hits="0" number="122"/>
|
||||
<line hits="0" number="124"/>
|
||||
<line hits="0" number="126"/>
|
||||
<line hits="0" number="127"/>
|
||||
<line hits="0" number="130"/>
|
||||
<line hits="0" number="133"/>
|
||||
<line hits="0" number="134"/>
|
||||
</lines>
|
||||
</class>
|
||||
<class branch-rate="0" complexity="0" filename="qsim/transforms/technical.py" line-rate="0.3158" name="technical">
|
||||
<methods/>
|
||||
<lines>
|
||||
<line hits="1" number="7"/>
|
||||
<line hits="1" number="8"/>
|
||||
<line hits="1" number="10"/>
|
||||
<line hits="1" number="12"/>
|
||||
<line hits="1" number="18"/>
|
||||
<line hits="0" number="19"/>
|
||||
<line hits="0" number="20"/>
|
||||
<line hits="0" number="22"/>
|
||||
<line hits="1" number="33"/>
|
||||
<line hits="0" number="36"/>
|
||||
<line hits="0" number="39"/>
|
||||
<line hits="0" number="41"/>
|
||||
<line hits="0" number="42"/>
|
||||
<line hits="0" number="44"/>
|
||||
<line hits="0" number="45"/>
|
||||
<line hits="0" number="46"/>
|
||||
<line hits="0" number="48"/>
|
||||
<line hits="0" number="50"/>
|
||||
<line hits="0" number="52"/>
|
||||
</lines>
|
||||
</class>
|
||||
</classes>
|
||||
</package>
|
||||
</packages>
|
||||
</coverage>
|
||||
+5
-1
@@ -3,9 +3,12 @@
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Welcome to QSim's documentation!
|
||||
Quantopian Simulator: QSim
|
||||
================================
|
||||
|
||||
Qsim runs backtests using asynchronous components and zeromq messaging for communication and coordination.
|
||||
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
@@ -13,6 +16,7 @@ Contents:
|
||||
|
||||
notes.rst
|
||||
modules.rst
|
||||
messaging.rst
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
"""
|
||||
QBT - Quantopian Backtest
|
||||
====================================
|
||||
|
||||
qbt runs backtests using multiple processes and zeromq messaging for communication and coordination.
|
||||
|
||||
Backtest is the primary process. It maintains both server and client sockets:
|
||||
@@ -27,41 +23,4 @@ zmq sockets for backtest clients:
|
||||
- event feed, ZMQ.RESP. Port = port_start + 6
|
||||
- backtest will bind to this socket and respond to requests from client for more data. Response data will be the queue of events that
|
||||
transpired since the last request.
|
||||
|
||||
|
||||
"""
|
||||
import copy
|
||||
import multiprocessing
|
||||
import zmq
|
||||
|
||||
import qsim.util as qutil
|
||||
import qsim.simulator.sources as sources
|
||||
|
||||
|
||||
|
||||
CONTROLLER_PORT = 9000
|
||||
DATA_SINK_PORT = 10000
|
||||
DATA_FEED_PORT = 30000
|
||||
|
||||
class Backtest(object):
|
||||
|
||||
def __init__(self, db, logger):
|
||||
qutil.logger = logger
|
||||
self.db = db
|
||||
self.feed = DataFeed(db, logger)
|
||||
|
||||
def start_feed(self):
|
||||
proc1 = multiprocessing.Process(target=feed.run)
|
||||
proc1.start()
|
||||
|
||||
def run(self):
|
||||
# Prepare our context and sockets
|
||||
self.context = zmq.Context()
|
||||
|
||||
#create the feed sink.
|
||||
self.feed_address = self.feed.data_address
|
||||
self.feed_socket = self.context.connect(self.feed_address)
|
||||
self.feed_socket.connect(zmq.PULL)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ paver apidocs html
|
||||
nosetests
|
||||
|
||||
#run pylint checks
|
||||
cp ./pylint.rcfile /mnt/jenkins/.pylintrc #default location for config file...
|
||||
pylint -f parseable qsim | tee pylint.out
|
||||
|
||||
#run sloccount analysis
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><testsuite name="nosetests" tests="1" errors="0" failures="0" skip="0"><testcase classname="qsim.test.test_messaging.MessagingTestCase" name="test_client" time="0.206" /></testsuite>
|
||||
<?xml version="1.0" encoding="UTF-8"?><testsuite name="nosetests" tests="1" errors="0" failures="0" skip="0"><testcase classname="qsim.test.test_messaging.MessagingTestCase" name="test_client" time="0.408" /></testsuite>
|
||||
+238
@@ -0,0 +1,238 @@
|
||||
[MASTER]
|
||||
|
||||
# Specify a configuration file.
|
||||
#rcfile=
|
||||
|
||||
# Python code to execute, usually for sys.path manipulation such as
|
||||
# pygtk.require().
|
||||
#init-hook=
|
||||
|
||||
# Profiled execution.
|
||||
profile=no
|
||||
|
||||
# Add <file or directory> to the black list. It should be a base name, not a
|
||||
# path. You may set this option multiple times.
|
||||
ignore=CVS
|
||||
|
||||
# Pickle collected data for later comparisons.
|
||||
persistent=yes
|
||||
|
||||
# List of plugins (as comma separated values of python modules names) to load,
|
||||
# usually to register additional checkers.
|
||||
load-plugins=
|
||||
|
||||
|
||||
[MESSAGES CONTROL]
|
||||
|
||||
# Enable the message, report, category or checker with the given id(s). You can
|
||||
# either give multiple identifier separated by comma (,) or put this option
|
||||
# multiple time.
|
||||
#enable=
|
||||
|
||||
# Disable the message, report, category or checker with the given id(s). You
|
||||
# can either give multiple identifier separated by comma (,) or put this option
|
||||
# multiple time (only on the command line, not in the configuration file where
|
||||
# it should appear only once).
|
||||
#disable=
|
||||
|
||||
|
||||
[REPORTS]
|
||||
|
||||
# Set the output format. Available formats are text, parseable, colorized, msvs
|
||||
# (visual studio) and html
|
||||
output-format=text
|
||||
|
||||
# Include message's id in output
|
||||
include-ids=no
|
||||
|
||||
# Put messages in a separate file for each module / package specified on the
|
||||
# command line instead of printing them on stdout. Reports (if any) will be
|
||||
# written in a file name "pylint_global.[txt|html]".
|
||||
files-output=no
|
||||
|
||||
# Tells whether to display a full report or only the messages
|
||||
reports=yes
|
||||
|
||||
# Python expression which should return a note less than 10 (10 is the highest
|
||||
# note). You have access to the variables errors warning, statement which
|
||||
# respectively contain the number of errors / warnings messages and the total
|
||||
# number of statements analyzed. This is used by the global evaluation report
|
||||
# (RP0004).
|
||||
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
|
||||
|
||||
# Add a comment according to your evaluation note. This is used by the global
|
||||
# evaluation report (RP0004).
|
||||
comment=no
|
||||
|
||||
|
||||
[BASIC]
|
||||
|
||||
# Required attributes for module, separated by a comma
|
||||
required-attributes=
|
||||
|
||||
# List of builtins function names that should not be used, separated by a comma
|
||||
bad-functions=map,filter,apply,input
|
||||
|
||||
# Regular expression which should only match correct module names
|
||||
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
|
||||
|
||||
# Regular expression which should only match correct module level names
|
||||
const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
|
||||
|
||||
# Regular expression which should only match correct class names
|
||||
class-rgx=[A-Z_][a-zA-Z0-9]+$
|
||||
|
||||
# Regular expression which should only match correct function names
|
||||
function-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match correct method names
|
||||
method-rgx=[a-z_][a-z0-9_]{2,30}$|setUp
|
||||
|
||||
# Regular expression which should only match correct instance attribute names
|
||||
attr-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match correct argument names
|
||||
argument-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match correct variable names
|
||||
variable-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match correct list comprehension /
|
||||
# generator expression variable names
|
||||
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
|
||||
|
||||
# Good variable names which should always be accepted, separated by a comma
|
||||
good-names=i,j,k,ex,Run,_
|
||||
|
||||
# Bad variable names which should always be refused, separated by a comma
|
||||
bad-names=foo,bar,baz,toto,tutu,tata
|
||||
|
||||
# Regular expression which should only match functions or classes name which do
|
||||
# not require a docstring
|
||||
no-docstring-rgx=__.*__
|
||||
|
||||
|
||||
[FORMAT]
|
||||
|
||||
# Maximum number of characters on a single line.
|
||||
max-line-length=125
|
||||
|
||||
# Maximum number of lines in a module
|
||||
max-module-lines=1000
|
||||
|
||||
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
|
||||
# tab).
|
||||
indent-string=' '
|
||||
|
||||
|
||||
[MISCELLANEOUS]
|
||||
|
||||
# List of note tags to take in consideration, separated by a comma.
|
||||
notes=FIXME,XXX,TODO
|
||||
|
||||
|
||||
[SIMILARITIES]
|
||||
|
||||
# Minimum lines number of a similarity.
|
||||
min-similarity-lines=4
|
||||
|
||||
# Ignore comments when computing similarities.
|
||||
ignore-comments=yes
|
||||
|
||||
# Ignore docstrings when computing similarities.
|
||||
ignore-docstrings=yes
|
||||
|
||||
|
||||
[TYPECHECK]
|
||||
|
||||
# Tells whether missing members accessed in mixin class should be ignored. A
|
||||
# mixin class is detected if its name ends with "mixin" (case insensitive).
|
||||
ignore-mixin-members=yes
|
||||
|
||||
# List of classes names for which member attributes should not be checked
|
||||
# (useful for classes with attributes dynamically set).
|
||||
ignored-classes=SQLObject
|
||||
|
||||
# When zope mode is activated, add a predefined set of Zope acquired attributes
|
||||
# to generated-members.
|
||||
zope=no
|
||||
|
||||
# List of members which are set dynamically and missed by pylint inference
|
||||
# system, and so shouldn't trigger E0201 when accessed.
|
||||
generated-members=REQUEST,acl_users,aq_parent
|
||||
|
||||
|
||||
[VARIABLES]
|
||||
|
||||
# Tells whether we should check for unused import in __init__ files.
|
||||
init-import=no
|
||||
|
||||
# A regular expression matching the beginning of the name of dummy variables
|
||||
# (i.e. not used).
|
||||
dummy-variables-rgx=_|dummy
|
||||
|
||||
# List of additional names supposed to be defined in builtins. Remember that
|
||||
# you should avoid to define new builtins when possible.
|
||||
additional-builtins=
|
||||
|
||||
|
||||
[CLASSES]
|
||||
|
||||
# List of interface methods to ignore, separated by a comma. This is used for
|
||||
# instance to not check methods defines in Zope's Interface base class.
|
||||
ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
|
||||
|
||||
# List of method names used to declare (i.e. assign) instance attributes.
|
||||
defining-attr-methods=__init__,__new__,setUp
|
||||
|
||||
|
||||
[DESIGN]
|
||||
|
||||
# Maximum number of arguments for function / method
|
||||
max-args=5
|
||||
|
||||
# Argument names that match this expression will be ignored. Default to name
|
||||
# with leading underscore
|
||||
ignored-argument-names=_.*
|
||||
|
||||
# Maximum number of locals for function / method body
|
||||
max-locals=15
|
||||
|
||||
# Maximum number of return / yield for function / method body
|
||||
max-returns=6
|
||||
|
||||
# Maximum number of branch for function / method body
|
||||
max-branchs=12
|
||||
|
||||
# Maximum number of statements in function / method body
|
||||
max-statements=50
|
||||
|
||||
# Maximum number of parents for a class (see R0901).
|
||||
max-parents=7
|
||||
|
||||
# Maximum number of attributes for a class (see R0902).
|
||||
max-attributes=7
|
||||
|
||||
# Minimum number of public methods for a class (see R0903).
|
||||
min-public-methods=2
|
||||
|
||||
# Maximum number of public methods for a class (see R0904).
|
||||
max-public-methods=20
|
||||
|
||||
|
||||
[IMPORTS]
|
||||
|
||||
# Deprecated modules which should not be used, separated by a comma
|
||||
deprecated-modules=regsub,string,TERMIOS,Bastion,rexec
|
||||
|
||||
# Create a graph of every (i.e. internal and external) dependencies in the
|
||||
# given file (report RP0402 must not be disabled)
|
||||
import-graph=
|
||||
|
||||
# Create a graph of external dependencies in the given file (report RP0402 must
|
||||
# not be disabled)
|
||||
ext-import-graph=
|
||||
|
||||
# Create a graph of internal dependencies in the given file (report RP0402 must
|
||||
# not be disabled)
|
||||
int-import-graph=
|
||||
+8
-3
@@ -5,7 +5,7 @@ import json
|
||||
import uuid
|
||||
import zmq
|
||||
|
||||
import util as qutil
|
||||
import qsim.util as qutil
|
||||
|
||||
class ParallelBuffer(object):
|
||||
""" holds several queues of events by key, allows retrieval in date order
|
||||
@@ -20,13 +20,16 @@ class ParallelBuffer(object):
|
||||
self.data_buffer[key] = []
|
||||
|
||||
def __len__(self):
|
||||
"""buffer's length is same as internal map holding separate sorted arrays of events keyed by source id"""
|
||||
return len(self.data_buffer)
|
||||
|
||||
def append(self, key, value):
|
||||
self.data_buffer[key].append(value)
|
||||
def append(self, source_id, value):
|
||||
"""add an event to the buffer for the source specified by source_id"""
|
||||
self.data_buffer[source_id].append(value)
|
||||
self.received_count += 1
|
||||
|
||||
def next(self):
|
||||
"""Get the next message in chronological order"""
|
||||
if(not(self.is_full() or self.draining)):
|
||||
return
|
||||
|
||||
@@ -43,12 +46,14 @@ class ParallelBuffer(object):
|
||||
return earliest.pop(0)
|
||||
|
||||
def is_full(self):
|
||||
"""indicates whether the buffer has messages in buffer for all un-DONE sources"""
|
||||
for source, events in self.data_buffer.iteritems():
|
||||
if (len(events) == 0):
|
||||
return False
|
||||
return True
|
||||
|
||||
def pending_messages(self):
|
||||
""""""
|
||||
total = 0
|
||||
for source, events in self.data_buffer.iteritems():
|
||||
total += len(events)
|
||||
|
||||
+31
-10
@@ -1,7 +1,9 @@
|
||||
"""
|
||||
Test suite for the messaging infrastructure of QSim.
|
||||
"""
|
||||
#don't worry about excessive public methods pylint: disable=R0904
|
||||
|
||||
import unittest2 as unittest
|
||||
import zmq
|
||||
import logging
|
||||
import tornado
|
||||
import multiprocessing
|
||||
|
||||
from qsim.simulator.feed import DataFeed
|
||||
@@ -12,9 +14,12 @@ import qsim.util as qutil
|
||||
from qsim.test.client import TestClient
|
||||
|
||||
|
||||
class MessagingTestCase(unittest.TestCase):
|
||||
class MessagingTestCase(unittest.TestCase):
|
||||
"""Tests the message passing: datasources -> feed -> transforms -> merge -> client"""
|
||||
|
||||
def setUp(self):
|
||||
"""generate some config objects for the datafeed, sources, and transforms."""
|
||||
|
||||
qutil.configure_logging()
|
||||
qutil.logger.info("testing...")
|
||||
self.total_data_count = 800
|
||||
@@ -25,9 +30,12 @@ class MessagingTestCase(unittest.TestCase):
|
||||
|
||||
self.config = {}
|
||||
self.config['name'] = '**merged feed**'
|
||||
self.config['transforms'] = [{'name':'mavg1', 'class':'MovingAverage', 'hours':1},{'name':'mavg2', 'class':'MovingAverage', 'hours':2}]
|
||||
self.config['transforms'] = [{'name':'mavg1', 'class':'MovingAverage', 'hours':1},
|
||||
{'name':'mavg2', 'class':'MovingAverage', 'hours':2}]
|
||||
|
||||
def test_client(self):
|
||||
def test_client(self):
|
||||
"""directly connect the test client to the feed, using two random data sources"""
|
||||
|
||||
#subscribe a client to the multiplexed feed
|
||||
client = TestClient(self.feed, self.feed.feed_address)
|
||||
|
||||
@@ -36,11 +44,18 @@ class MessagingTestCase(unittest.TestCase):
|
||||
|
||||
|
||||
client.run()
|
||||
self.assertEqual(self.feed.data_buffer.pending_messages(), 0, "The feed should be drained of all messages, found {n} remaining.".format(n=self.feed.data_buffer.pending_messages()))
|
||||
self.assertEqual(self.total_data_count, client.received_count, "The client should have received ({n}) the same number of messages as the feed sent ({m}).".format(n=client.received_count, m=self.total_data_count))
|
||||
self.assertEqual(self.feed.data_buffer.pending_messages(), 0,
|
||||
"The feed should be drained of all messages, found {n} remaining."
|
||||
.format(n=self.feed.data_buffer.pending_messages()))
|
||||
self.assertEqual(self.total_data_count, client.received_count,
|
||||
"The client should have received ({n}) the same number of messages as the feed sent ({m})."
|
||||
.format(n=client.received_count, m=self.total_data_count))
|
||||
|
||||
|
||||
def dtest_moving_average_to_client(self):
|
||||
"""2 datasources -> feed -> moving average transform -> testclient
|
||||
verify message count at client."""
|
||||
|
||||
mavg = MovingAverage(self.feed, self.config['transforms'][0], result_address="tcp://127.0.0.1:20202")
|
||||
mavg_proc = multiprocessing.Process(target=mavg.run)
|
||||
mavg_proc.start()
|
||||
@@ -52,9 +67,14 @@ class MessagingTestCase(unittest.TestCase):
|
||||
|
||||
client.run()
|
||||
self.assertEqual(self.feed.data_buffer.pending_messages(), 0, "The feed should be drained of all messages.")
|
||||
self.assertEqual(self.total_data_count, client.received_count, "The client should have received the same number of messages as the feed sent.")
|
||||
self.assertEqual(self.total_data_count, client.received_count,
|
||||
"The client should have received the same number of messages as the feed sent.")
|
||||
|
||||
def dtest_merged_to_client(self):
|
||||
"""
|
||||
2 datasources -> feed -> 2 moving average transforms -> transform merge -> testclient
|
||||
verify message count at client.
|
||||
"""
|
||||
merger = MergedTransformsFeed(self.feed, self.config)
|
||||
merger_proc = multiprocessing.Process(target=merger.run)
|
||||
merger_proc.start()
|
||||
@@ -66,5 +86,6 @@ class MessagingTestCase(unittest.TestCase):
|
||||
|
||||
client.run()
|
||||
self.assertEqual(self.feed.data_buffer.pending_messages(), 0, "The feed should be drained of all messages.")
|
||||
self.assertEqual(self.total_data_count, client.received_count, "The client should have received the same number of messages as the feed sent.")
|
||||
self.assertEqual(self.total_data_count, client.received_count,
|
||||
"The client should have received the same number of messages as the feed sent.")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user