[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 pathlib import Path
from vnpy.trader.app import BaseApp from vnpy.trader.app import BaseApp
from .CsvLoader import CsvLoader from .csv_loader import APP_NAME, CsvLoader
from .base import APP_NAME
class CsvLoaderApp(BaseApp): 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 import csv
from datetime import datetime from datetime import datetime
@ -7,7 +29,7 @@ from vnpy.trader.database import DbBarData
from vnpy.trader.engine import BaseEngine, MainEngine from vnpy.trader.engine import BaseEngine, MainEngine
from vnpy.trader.object import BarData from vnpy.trader.object import BarData
from .base import APP_NAME APP_NAME = "CsvLoader"
class CsvLoader(BaseEngine): class CsvLoader(BaseEngine):
@ -29,6 +51,7 @@ class CsvLoader(BaseEngine):
self.volume_head: str = '' self.volume_head: str = ''
def load(self): def load(self):
""""""
symbol = self.symbol symbol = self.symbol
exchange = self.exchange exchange = self.exchange
interval = self.interval 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 PyQt5.QtWidgets import QFileDialog
from vnpy.event import EventEngine from vnpy.event import EventEngine
from vnpy.trader.constant import Interval, Exchange from vnpy.trader.constant import Interval, Exchange
from vnpy.trader.engine import MainEngine from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import QtWidgets from vnpy.trader.ui import QtWidgets
from .uic.uic_CsvLoader import Ui_CsvLoader from .uic.uic_csv_loader import Ui_CsvLoader
from ..CsvLoader import CsvLoader from ..csv_loader import CsvLoader
class CsvLoaderWidget(QtWidgets.QWidget): class CsvLoaderWidget(QtWidgets.QWidget):
"""""" """"""
def __init__(self, main_engine: MainEngine, event_engine: EventEngine): def __init__(self, main_engine: MainEngine, event_engine: EventEngine):
""""""
super().__init__() super().__init__()
self.loader = CsvLoader(main_engine, event_engine) self.loader = CsvLoader(main_engine, event_engine)
self.ui = Ui_CsvLoader() self.ui = Ui_CsvLoader()
@ -19,6 +29,7 @@ class CsvLoaderWidget(QtWidgets.QWidget):
self.init_ui() self.init_ui()
def init_ui(self): def init_ui(self):
""""""
self.ui.setupUi(self) self.ui.setupUi(self)
for i in Interval: for i in Interval:
@ -28,12 +39,14 @@ class CsvLoaderWidget(QtWidgets.QWidget):
self.ui.exchange_combo.addItem(str(i), i) self.ui.exchange_combo.addItem(str(i), i)
def on_choose_button_pressed(self): def on_choose_button_pressed(self):
""""""
result: str = QFileDialog.getOpenFileName(self) result: str = QFileDialog.getOpenFileName(self)
filename = result[0] filename = result[0]
if filename: if filename:
self.ui.file_edit.setText(filename) self.ui.file_edit.setText(filename)
def on_load_button_pressed(self): def on_load_button_pressed(self):
""""""
self.loader.file_path = self.ui.file_edit.text() self.loader.file_path = self.ui.file_edit.text()
self.loader.symbol = self.ui.symbol_edit.text() self.loader.symbol = self.ui.symbol_edit.text()
self.loader.exchange = self.ui.exchange_combo.currentData() 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 -*- # -*- 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 # 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.label_12.setText(_translate("CsvLoader", "Exchange"))
self.load_button.setText(_translate("CsvLoader", "载入")) 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_())