[Add] Added some comments
[Mod] rename files
This commit is contained in:
parent
5ee4672c29
commit
969c59a08a
@ -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_()
|
@ -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):
|
||||
|
@ -1,2 +0,0 @@
|
||||
APP_NAME = "CsvLoader"
|
||||
STOPORDER_PREFIX = "STOP"
|
@ -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
|
@ -1 +1 @@
|
||||
from .widget import CsvLoaderWidget
|
||||
from .csv_loader_widget import CsvLoaderWidget
|
||||
|
@ -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()
|
@ -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", "载入"))
|
@ -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_())
|
||||
|
Loading…
Reference in New Issue
Block a user