[Add] Added some comments

[Mod] rename files
This commit is contained in:
nanoric 2019-03-19 02:36:59 -04:00
parent 5ee4672c29
commit 969c59a08a
9 changed files with 42 additions and 228 deletions

View File

@ -1,89 +0,0 @@
import subprocess
from argparse import ArgumentParser
import os
import logging
def is_ui_file(path):
return os.path.splitext(path)[1] == '.ui'
def is_py_file(path):
return os.path.splitext(path)[1] == '.py'
def seek_files(root, comp): # type(str)->list[str]
results = []
for root, dirs, files in os.walk(root, followlinks=True):
for filename in files:
try:
path = os.path.join(root, filename)
if comp(path):
results.append(path)
except: # noqa
pass
return results
class UICompiler(object):
def __init__(self, root, uic_bin_path, lupdate_bin_path, ts_output,
strip_ui_prefix,
): # type: (str, str, str, str, bool)->UICompiler
self.root = root
self.lupdate_bin_path = lupdate_bin_path
self.uic_bin_path = uic_bin_path
self.ts_output = ts_output
self.strip_ui_prefix = strip_ui_prefix
self.ui_files = []
def collect_ui(self, path): # type(str)->None
self.ui_files.append(path)
def compile_ui(self, path, out_path): # type: (str, any)->int
if out_path is None:
dir, filename = os.path.split(path)
basename, ext = os.path.splitext(filename)
out_path = [os.path.join(dir, 'uic/uic_{}.py'.format(basename))]
if self.strip_ui_prefix and basename.startswith('ui'):
out_path[0] = os.path.join(dir, 'uic/uic_{}.py'.format(basename[2:]))
out_path = out_path[0]
uic_dir = os.path.dirname(out_path)
if not os.path.exists(uic_dir):
os.mkdir(uic_dir)
res = subprocess.check_call('{} {} -o {} -x'.format(self.uic_bin_path, path, out_path))
logging.info('ui compiled : {}', path)
return res
def lupdate(self, py_files, ts_output): # type: (list[str], str)->int
uis = " ".join(py_files)
return subprocess.check_call('{} {} -ts {}'.format(self.lupdate_bin_path, uis, ts_output))
def compile_all_ui(self):
for ui_file in self.ui_files:
self.compile_ui(ui_file, None)
def exec_(self):
self.ui_files = seek_files(self.root, comp=is_ui_file)
self.compile_all_ui()
# translation is not needed currently
# py_files = seek_files(self.root, comp=is_py_file)
# self.lupdate(py_files=py_files, ts_output=self.ts_output)
if __name__ == "__main__":
parser = ArgumentParser()
parser.add_argument('--root', default='.')
parser.add_argument('--strip-ui-prefix', type=bool, default=True)
parser.add_argument('--uic', default='pyuic5.exe')
parser.add_argument('--lupdate', default='pylupdate5.exe')
parser.add_argument('--ts-output', default='CryptoTrader/translate.ts')
args = parser.parse_args()
compiler = UICompiler(root=args.root, uic_bin_path=args.uic, lupdate_bin_path=args.lupdate, ts_output=args.ts_output,
strip_ui_prefix=args.strip_ui_prefix)
compiler.exec_()

View File

@ -1,8 +1,7 @@
from pathlib import Path
from vnpy.trader.app import BaseApp
from .CsvLoader import CsvLoader
from .base import APP_NAME
from .csv_loader import APP_NAME, CsvLoader
class CsvLoaderApp(BaseApp):

View File

@ -1,2 +0,0 @@
APP_NAME = "CsvLoader"
STOPORDER_PREFIX = "STOP"

View File

@ -1,3 +1,25 @@
"""
Author: nanoric
Load data from a csv file.
Differences to 1.9.2:
* combine Date column and Time column into one DateTime column
Sample csv file:
```csv
"DateTime","Open","High","Low","Close","Volume"
2010-04-16T09:16:00.000000,3450.0,3488.0,3450.0,3468.0,489
2010-04-16T09:17:00.000000,3468.0,3473.8,3467.0,3467.0,302
2010-04-16T09:18:00.000000,3467.0,3471.0,3466.0,3467.0,203
2010-04-16T09:19:00.000000,3467.0,3468.2,3448.0,3448.0,280
2010-04-16T09:20:00.000000,3448.0,3459.0,3448.0,3454.0,250
2010-04-16T09:21:00.000000,3454.0,3456.8,3454.0,3456.8,109
```
"""
import csv
from datetime import datetime
@ -7,7 +29,7 @@ from vnpy.trader.database import DbBarData
from vnpy.trader.engine import BaseEngine, MainEngine
from vnpy.trader.object import BarData
from .base import APP_NAME
APP_NAME = "CsvLoader"
class CsvLoader(BaseEngine):
@ -29,6 +51,7 @@ class CsvLoader(BaseEngine):
self.volume_head: str = ''
def load(self):
""""""
symbol = self.symbol
exchange = self.exchange
interval = self.interval

View File

@ -1 +1 @@
from .widget import CsvLoaderWidget
from .csv_loader_widget import CsvLoaderWidget

View File

@ -1,17 +1,27 @@
"""
Author: nanoric
UI is designed by Qt Designer. source at csv_loader.ui
compile:
```
pyuic5 csv_loader.ui -o uic/uic_csv_loader.py
```
"""
from PyQt5.QtWidgets import QFileDialog
from vnpy.event import EventEngine
from vnpy.trader.constant import Interval, Exchange
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import QtWidgets
from .uic.uic_CsvLoader import Ui_CsvLoader
from ..CsvLoader import CsvLoader
from .uic.uic_csv_loader import Ui_CsvLoader
from ..csv_loader import CsvLoader
class CsvLoaderWidget(QtWidgets.QWidget):
""""""
def __init__(self, main_engine: MainEngine, event_engine: EventEngine):
""""""
super().__init__()
self.loader = CsvLoader(main_engine, event_engine)
self.ui = Ui_CsvLoader()
@ -19,6 +29,7 @@ class CsvLoaderWidget(QtWidgets.QWidget):
self.init_ui()
def init_ui(self):
""""""
self.ui.setupUi(self)
for i in Interval:
@ -28,12 +39,14 @@ class CsvLoaderWidget(QtWidgets.QWidget):
self.ui.exchange_combo.addItem(str(i), i)
def on_choose_button_pressed(self):
""""""
result: str = QFileDialog.getOpenFileName(self)
filename = result[0]
if filename:
self.ui.file_edit.setText(filename)
def on_load_button_pressed(self):
""""""
self.loader.file_path = self.ui.file_edit.text()
self.loader.symbol = self.ui.symbol_edit.text()
self.loader.exchange = self.ui.exchange_combo.currentData()

View File

@ -1,120 +0,0 @@
from PyQt5 import QtCore, QtWidgets
from vnpy.trader.constant import Exchange, Interval
class CsvLoaderUI(object):
def __init__(self, instance: QtWidgets.QDialog):
instance.setObjectName("CsvLoader")
self.vertical_layout = QtWidgets.QVBoxLayout(instance)
self.vertical_layout.setObjectName("verticalLayout")
self.horizontal_layout = QtWidgets.QHBoxLayout()
self.horizontal_layout.setObjectName("horizontalLayout")
self.choose_button = QtWidgets.QPushButton(instance)
self.choose_button.setObjectName("choose_button")
self.horizontal_layout.addWidget(self.choose_button)
self.file_edit = QtWidgets.QLineEdit(instance)
self.file_edit.setObjectName("file_edit")
self.horizontal_layout.addWidget(self.file_edit)
self.vertical_layout.addLayout(self.horizontal_layout)
self.form_layout = QtWidgets.QFormLayout()
self.form_layout.setObjectName("formLayout")
self.label_8 = QtWidgets.QLabel(instance)
self.label_8.setObjectName("label_8")
self.form_layout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.label_8)
self.label_9 = QtWidgets.QLabel(instance)
self.label_9.setObjectName("label_9")
self.form_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_9)
self.symbol_edit = QtWidgets.QLineEdit(instance)
self.symbol_edit.setObjectName("symbol_edit")
self.form_layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.symbol_edit)
self.label_12 = QtWidgets.QLabel(instance)
self.label_12.setObjectName("label_12")
self.form_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_12)
self.exchange_combo = QtWidgets.QComboBox(instance)
self.exchange_combo.setObjectName("exchange_combo")
self.form_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.exchange_combo)
self.label_11 = QtWidgets.QLabel(instance)
self.label_11.setObjectName("label_11")
self.form_layout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_11)
self.interval_combo = QtWidgets.QComboBox(instance)
self.interval_combo.setObjectName("interval_combo")
self.form_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.interval_combo)
self.label = QtWidgets.QLabel(instance)
self.label.setObjectName("label")
self.form_layout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.label)
self.label_2 = QtWidgets.QLabel(instance)
self.label_2.setObjectName("label_2")
self.form_layout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_2)
self.datetime_edit = QtWidgets.QLineEdit(instance)
self.datetime_edit.setObjectName("datetime_edit")
self.form_layout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.datetime_edit)
self.label_3 = QtWidgets.QLabel(instance)
self.label_3.setObjectName("label_3")
self.form_layout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_3)
self.open_edit = QtWidgets.QLineEdit(instance)
self.open_edit.setObjectName("open_edit")
self.form_layout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.open_edit)
self.label_4 = QtWidgets.QLabel(instance)
self.label_4.setObjectName("label_4")
self.form_layout.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.label_4)
self.high_edit = QtWidgets.QLineEdit(instance)
self.high_edit.setObjectName("high_edit")
self.form_layout.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.high_edit)
self.label_5 = QtWidgets.QLabel(instance)
self.label_5.setObjectName("label_5")
self.form_layout.setWidget(8, QtWidgets.QFormLayout.LabelRole, self.label_5)
self.low_edit = QtWidgets.QLineEdit(instance)
self.low_edit.setObjectName("low_edit")
self.form_layout.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.low_edit)
self.label_6 = QtWidgets.QLabel(instance)
self.label_6.setObjectName("label_6")
self.form_layout.setWidget(9, QtWidgets.QFormLayout.LabelRole, self.label_6)
self.close_edit = QtWidgets.QLineEdit(instance)
self.close_edit.setObjectName("close_edit")
self.form_layout.setWidget(9, QtWidgets.QFormLayout.FieldRole, self.close_edit)
self.label_7 = QtWidgets.QLabel(instance)
self.label_7.setObjectName("label_7")
self.form_layout.setWidget(10, QtWidgets.QFormLayout.LabelRole, self.label_7)
self.volume_edit = QtWidgets.QLineEdit(instance)
self.volume_edit.setObjectName("volume_edit")
self.form_layout.setWidget(10, QtWidgets.QFormLayout.FieldRole, self.volume_edit)
self.vertical_layout.addLayout(self.form_layout)
self.load_button = QtWidgets.QPushButton(instance)
self.load_button.setObjectName("load_button")
self.vertical_layout.addWidget(self.load_button)
for i in Interval:
self.interval_combo.addItem(str(i), i)
for i in Exchange:
self.exchange_combo.addItem(str(i), i)
self.retranslate_ui(instance)
QtCore.QMetaObject.connectSlotsByName(instance)
def retranslate_ui(self, instance):
_translate = QtCore.QCoreApplication.translate
instance.setWindowTitle(_translate("CsvLoader", "Csv载入器"))
self.choose_button.setText(_translate("CsvLoader", "选择文件"))
self.label_8.setText(_translate("CsvLoader", "合约信息"))
self.label_9.setText(_translate("CsvLoader", "Symbol"))
self.label_11.setText(_translate("CsvLoader", "Interval"))
self.label_12.setText(_translate("CsvLoader", "Exchange"))
self.label.setText(_translate("CsvLoader", "表头属性"))
self.label_2.setText(_translate("CsvLoader", "Datetime"))
self.datetime_edit.setText(_translate("CsvLoader", "DateTime"))
self.label_3.setText(_translate("CsvLoader", "Open"))
self.open_edit.setText(_translate("CsvLoader", "Open"))
self.label_4.setText(_translate("CsvLoader", "High"))
self.high_edit.setText(_translate("CsvLoader", "High"))
self.label_5.setText(_translate("CsvLoader", "Low"))
self.low_edit.setText(_translate("CsvLoader", "Low"))
self.label_6.setText(_translate("CsvLoader", "Close"))
self.close_edit.setText(_translate("CsvLoader", "Close"))
self.label_7.setText(_translate("CsvLoader", "Volume"))
self.volume_edit.setText(_translate("CsvLoader", "Volume"))
self.load_button.setText(_translate("CsvLoader", "载入"))

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '.\vnpy\app\csv_loader\ui\CsvLoader.ui'
# Form implementation generated from reading ui file 'csv_loader.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
@ -115,13 +115,3 @@ class Ui_CsvLoader(object):
self.label_12.setText(_translate("CsvLoader", "Exchange"))
self.load_button.setText(_translate("CsvLoader", "载入"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
CsvLoader = QtWidgets.QDialog()
ui = Ui_CsvLoader()
ui.setupUi(CsvLoader)
CsvLoader.show()
sys.exit(app.exec_())