-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy pathapplication.py
More file actions
137 lines (122 loc) · 4.63 KB
/
application.py
File metadata and controls
137 lines (122 loc) · 4.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
from flask import Flask, request
from flask_cors import CORS
from flask_restful import reqparse, abort, Api, Resource, fields, marshal_with
from stocklab.db_handler.mongodb_handler import MongoDBHandler
import datetime
app = Flask(__name__)
CORS(app)
api = Api(app)
code_hname_to_eng = {
"단축코드": "code",
"확장코드": "extend_code",
"종목명": "name",
"시장구분": "market",
"ETF구분": "is_etf",
"주문수량단위": "memedan",
"기업인수목적회사구분": "is_spac"
}
price_hname_to_eng = {
"날짜": "date",
"종가": "close",
"시가": "open",
"고가": "high",
"저가": "low",
"전일대비": "diff",
"전일대비구분": "diff_type"
}
code_fields = {
"code": fields.String,
"extend_code": fields.String,
"name": fields.String,
"memedan": fields.Integer,
"market": fields.String,
"is_etf": fields.String,
"is_spac": fields.String,
"uri": fields.Url("code")
}
code_list_short_fields = {
"code": fields.String,
"name": fields.String
}
code_list_fields = {
"count": fields.Integer,
"code_list": fields.List(fields.Nested(code_fields)),
"uri": fields.Url("codes")
}
price_fields = {
"date": fields.Integer,
"start": fields.Integer,
"close": fields.Integer,
"open": fields.Integer,
"high": fields.Integer,
"low": fields.Integer,
"diff": fields.Float,
"diff_type": fields.Integer
}
price_list_fields = {
"count": fields.Integer,
"price_list": fields.List(fields.Nested(price_fields)),
}
mongodb = MongoDBHandler()
#https://flask-restful.readthedocs.io/en/0.3.3/intermediate-usage.html#full-parameter-parsing-example
class Code(Resource):
@marshal_with(code_fields)
def get(self, code):
result = mongodb.find_item({"단축코드":code}, "stocklab", "code_info")
if result is None:
return {}, 404
code_info = {}
code_info = { code_hname_to_eng[field]: result[field]
for field in result.keys() if field in code_hname_to_eng }
return code_info
class CodeList(Resource):
@marshal_with(code_list_fields)
def get(self):
market = request.args.get('market', default="0", type=str)
if market == "0":
results = list(mongodb.find_items({}, "stocklab", "code_info"))
elif market == "1" or market == "2":
results = list(mongodb.find_items({"시장구분":market}, "stocklab", "code_info"))
result_list = []
for item in results:
code_info = {}
code_info = { code_hname_to_eng[field]: item[field] for field in item.keys() if field in code_hname_to_eng }
result_list.append(code_info)
return {"code_list" : result_list, "count": len(result_list)}, 200
class Price(Resource):
@marshal_with(price_list_fields)
def get(self, code):
today = datetime.datetime.now().strftime("%Y%m%d")
default_start_date = datetime.datetime.now() - datetime.timedelta(days=7)
start_date = request.args.get('start_date', default=default_start_date.strftime("%Y%m%d"), type=str)
end_date = request.args.get('end_date', default=today, type=str)
results = list(mongodb.find_items({"code":code, "날짜": {"$gte":start_date, "$lte":end_date}},
"stocklab", "price_info"))
result_object = {}
price_info_list = []
for item in results:
price_info = { price_hname_to_eng[field]: item[field] for field in item.keys() if field in price_hname_to_eng }
price_info_list.append(price_info)
result_object["price_list"] = price_info_list
result_object["count"] = len(price_info_list)
return result_object, 200
class OrderList(Resource):
def get(self):
status = request.args.get('status', default="all", type=str)
if status == 'all':
result_list = list(mongodb.find_items({}, "stocklab_demo", "order"))
elif status in ["buy_ordered", "buy_completed", "sell_ordered", "sell_completed"]:
result_list = list(mongodb.find_items({"status":status}, "stocklab_demo", "order"))
else:
return {}, 404
return { "count": len(result_list), "order_list": result_list }, 200
class Hello(Resource):
def get(self):
return "Hello world"
api.add_resource(CodeList, "/codes", endpoint="codes")
api.add_resource(Code, "/codes/<string:code>", endpoint="code")
api.add_resource(Price, "/codes/<string:code>/price", endpoint="price")
api.add_resource(OrderList, "/orders", endpoint="orders")
api.add_resource(Hello, "/")
if __name__ == "__main__":
app.run(debug=True)