Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
PyFund
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陈涛
PyFund
Commits
f011e512
Commit
f011e512
authored
Mar 29, 2023
by
杨明橙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加报价查询接口
parent
6c0633cc
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
44 additions
and
5 deletions
+44
-5
__init__.py
api/__init__.py
+2
-1
price.py
api/price.py
+29
-0
dependencies.py
dependencies.py
+1
-1
price.py
service/price.py
+12
-3
No files found.
api/__init__.py
View file @
f011e512
from
fastapi
import
APIRouter
from
api
import
bill
,
nav
,
fund
,
group
,
node
,
scheduler
from
api
import
bill
,
nav
,
fund
,
group
,
node
,
scheduler
,
price
api_router
=
APIRouter
()
...
...
@@ -8,4 +8,5 @@ api_router.include_router(nav.router, prefix="/nav", tags=["净值"])
api_router
.
include_router
(
fund
.
router
,
prefix
=
"/fund"
,
tags
=
[
"基金"
])
api_router
.
include_router
(
node
.
router
,
prefix
=
"/node"
,
tags
=
[
"节点"
])
api_router
.
include_router
(
group
.
router
,
prefix
=
"/group"
,
tags
=
[
"用户分组"
])
api_router
.
include_router
(
price
.
router
,
prefix
=
"/price"
,
tags
=
[
"报价"
])
api_router
.
include_router
(
scheduler
.
router
,
prefix
=
"/scheduler"
,
tags
=
[
"定时任务"
])
api/price.py
View file @
f011e512
from
typing
import
List
,
Any
,
Optional
from
fastapi
import
APIRouter
,
Depends
,
Query
from
motor.core
import
AgnosticCollection
from
db
import
AioRedisManager
from
dependencies
import
get_hour_price_collect
,
get_cmc_price_redis
from
model
import
Response
from
service.price
import
get_price
from
tools.time_helper
import
timestamp_to_datetime
router
=
APIRouter
()
@
router
.
get
(
'/cmc/'
,
summary
=
'查询报价'
,
description
=
'查询报价'
)
async
def
get
(
symbol
:
List
[
str
]
=
Query
(
...
,
description
=
'查询的币种'
),
query_time
:
Optional
[
float
]
=
Query
(
None
,
description
=
'查询时间,为空时返回最新报价'
),
hour_price_collect
:
AgnosticCollection
=
Depends
(
get_hour_price_collect
),
cmc_price_redis
:
AioRedisManager
=
Depends
(
get_cmc_price_redis
)
):
if
query_time
:
db_client
=
hour_price_collect
query_time
=
timestamp_to_datetime
(
query_time
)
else
:
db_client
=
cmc_price_redis
data
=
await
get_price
(
symbol
,
query_time
,
db_client
)
return
Response
[
Any
](
data
=
data
)
dependencies.py
View file @
f011e512
...
...
@@ -53,5 +53,5 @@ def get_cache_collect(mongodb_manager: AioMongodbManager = Depends(get_mongodb_m
# 获取redis Client
def
get_cmc_price_redis
(
redis_manager
:
AioRedisManager
=
Depends
(
get_redis_manager
)):
def
get_cmc_price_redis
(
redis_manager
:
AioRedisManager
=
Depends
(
get_redis_manager
))
->
AioRedisManager
:
return
redis_manager
.
get_client
(
name
=
'cmc_price'
)
service/price.py
View file @
f011e512
import
asyncio
import
datetime
import
json
from
typing
import
Dict
import
aiofiles
import
pytz
...
...
@@ -250,9 +251,16 @@ class CMCPrice:
await
self
.
start_update_ohlcv
()
async
def
get_price
(
coin_list
,
query_time
,
db_client
):
async
def
get_price
(
coin_list
,
query_time
,
db_client
)
->
Dict
[
str
,
float
]:
"""
如果传入 query_time 则从历史数据中查询,如果没有传入则查询最新报价,需要传入对应的db_client
:param coin_list:
:param query_time:
:param db_client:
:return: 返回字典 key为symbol,value为报价 没有查询到数据 则value为None
"""
coin_list_copy
=
coin_list
.
copy
()
result_dict
=
{}
result_dict
=
dict
.
fromkeys
(
coin_list
,
None
)
if
'USD'
in
coin_list_copy
:
coin_list_copy
.
remove
(
'USD'
)
...
...
@@ -266,7 +274,8 @@ async def get_price(coin_list, query_time, db_client):
temp_index
.
append
(
coin_item
)
data
=
await
pipe
.
execute
()
for
coin_name
,
result_item
in
zip
(
temp_index
,
data
):
result_dict
[
coin_name
]
=
float
(
result_item
)
if
result_item
:
result_dict
[
coin_name
]
=
float
(
result_item
)
else
:
cursor
=
db_client
.
find
({
'time'
:
query_time
,
"symbol"
:
{
"$in"
:
coin_list_copy
}})
temp_res
=
await
cursor
.
to_list
(
length
=
None
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment