Move format_ms_time to datetime_helpers
This commit is contained in:
@@ -14,8 +14,8 @@ from freqtrade.data.history.idatahandler import IDataHandler, get_datahandler
|
|||||||
from freqtrade.enums import CandleType
|
from freqtrade.enums import CandleType
|
||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.exchange import Exchange
|
from freqtrade.exchange import Exchange
|
||||||
from freqtrade.misc import format_ms_time
|
|
||||||
from freqtrade.plugins.pairlist.pairlist_helpers import dynamic_expand_pairlist
|
from freqtrade.plugins.pairlist.pairlist_helpers import dynamic_expand_pairlist
|
||||||
|
from freqtrade.util import format_ms_time
|
||||||
from freqtrade.util.binance_mig import migrate_binance_futures_data
|
from freqtrade.util.binance_mig import migrate_binance_futures_data
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ Various tool function for Freqtrade and scripts
|
|||||||
"""
|
"""
|
||||||
import gzip
|
import gzip
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Iterator, List, Mapping, Optional, TextIO, Union
|
from typing import Any, Dict, Iterator, List, Mapping, Optional, TextIO, Union
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
@@ -123,14 +122,6 @@ def pair_to_filename(pair: str) -> str:
|
|||||||
return pair
|
return pair
|
||||||
|
|
||||||
|
|
||||||
def format_ms_time(date: int) -> str:
|
|
||||||
"""
|
|
||||||
convert MS date to readable format.
|
|
||||||
: epoch-string in ms
|
|
||||||
"""
|
|
||||||
return datetime.fromtimestamp(date / 1000.0).strftime('%Y-%m-%dT%H:%M:%S')
|
|
||||||
|
|
||||||
|
|
||||||
def deep_merge_dicts(source, destination, allow_null_overrides: bool = True):
|
def deep_merge_dicts(source, destination, allow_null_overrides: bool = True):
|
||||||
"""
|
"""
|
||||||
Values from Source override destination, destination is returned (and modified!!)
|
Values from Source override destination, destination is returned (and modified!!)
|
||||||
|
|||||||
@@ -13,9 +13,8 @@ from freqtrade.constants import Config, ListPairsWithTimeframes
|
|||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date
|
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date
|
||||||
from freqtrade.exchange.types import Tickers
|
from freqtrade.exchange.types import Tickers
|
||||||
from freqtrade.misc import format_ms_time
|
|
||||||
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter
|
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter
|
||||||
from freqtrade.util import dt_now
|
from freqtrade.util import dt_now, format_ms_time
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from freqtrade.util.datetime_helpers import (dt_floor_day, dt_from_ts, dt_humanize, dt_now, dt_ts,
|
from freqtrade.util.datetime_helpers import (dt_floor_day, dt_from_ts, dt_humanize, dt_now, dt_ts,
|
||||||
dt_utc, shorten_date)
|
dt_utc, format_ms_time, shorten_date)
|
||||||
from freqtrade.util.ft_precise import FtPrecise
|
from freqtrade.util.ft_precise import FtPrecise
|
||||||
from freqtrade.util.periodic_cache import PeriodicCache
|
from freqtrade.util.periodic_cache import PeriodicCache
|
||||||
|
|
||||||
@@ -7,11 +7,12 @@ from freqtrade.util.periodic_cache import PeriodicCache
|
|||||||
__all__ = [
|
__all__ = [
|
||||||
'dt_floor_day',
|
'dt_floor_day',
|
||||||
'dt_from_ts',
|
'dt_from_ts',
|
||||||
|
'dt_humanize',
|
||||||
'dt_now',
|
'dt_now',
|
||||||
'dt_ts',
|
'dt_ts',
|
||||||
'dt_utc',
|
'dt_utc',
|
||||||
'dt_humanize',
|
'format_ms_time',
|
||||||
'shorten_date',
|
|
||||||
'FtPrecise',
|
'FtPrecise',
|
||||||
'PeriodicCache',
|
'PeriodicCache',
|
||||||
|
'shorten_date',
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -61,3 +61,11 @@ def dt_humanize(dt: datetime, **kwargs) -> str:
|
|||||||
:param kwargs: kwargs to pass to arrow's humanize()
|
:param kwargs: kwargs to pass to arrow's humanize()
|
||||||
"""
|
"""
|
||||||
return arrow.get(dt).humanize(**kwargs)
|
return arrow.get(dt).humanize(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def format_ms_time(date: int) -> str:
|
||||||
|
"""
|
||||||
|
convert MS date to readable format.
|
||||||
|
: epoch-string in ms
|
||||||
|
"""
|
||||||
|
return datetime.fromtimestamp(date / 1000.0).strftime('%Y-%m-%dT%H:%M:%S')
|
||||||
|
|||||||
+1
-15
@@ -1,6 +1,5 @@
|
|||||||
# pragma pylint: disable=missing-docstring,C0103
|
# pragma pylint: disable=missing-docstring,C0103
|
||||||
|
|
||||||
import datetime
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
@@ -9,7 +8,7 @@ import pandas as pd
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from freqtrade.misc import (dataframe_to_json, decimals_per_coin, deep_merge_dicts, file_dump_json,
|
from freqtrade.misc import (dataframe_to_json, decimals_per_coin, deep_merge_dicts, file_dump_json,
|
||||||
file_load_json, format_ms_time, json_to_dataframe, pair_to_filename,
|
file_load_json, json_to_dataframe, pair_to_filename,
|
||||||
parse_db_uri_for_logging, plural, render_template,
|
parse_db_uri_for_logging, plural, render_template,
|
||||||
render_template_with_fallback, round_coin_value, safe_value_fallback,
|
render_template_with_fallback, round_coin_value, safe_value_fallback,
|
||||||
safe_value_fallback2)
|
safe_value_fallback2)
|
||||||
@@ -91,19 +90,6 @@ def test_pair_to_filename(pair, expected_result):
|
|||||||
assert pair_s == expected_result
|
assert pair_s == expected_result
|
||||||
|
|
||||||
|
|
||||||
def test_format_ms_time() -> None:
|
|
||||||
# Date 2018-04-10 18:02:01
|
|
||||||
date_in_epoch_ms = 1523383321000
|
|
||||||
date = format_ms_time(date_in_epoch_ms)
|
|
||||||
assert type(date) is str
|
|
||||||
res = datetime.datetime(2018, 4, 10, 18, 2, 1, tzinfo=datetime.timezone.utc)
|
|
||||||
assert date == res.astimezone(None).strftime('%Y-%m-%dT%H:%M:%S')
|
|
||||||
res = datetime.datetime(2017, 12, 13, 8, 2, 1, tzinfo=datetime.timezone.utc)
|
|
||||||
# Date 2017-12-13 08:02:01
|
|
||||||
date_in_epoch_ms = 1513152121000
|
|
||||||
assert format_ms_time(date_in_epoch_ms) == res.astimezone(None).strftime('%Y-%m-%dT%H:%M:%S')
|
|
||||||
|
|
||||||
|
|
||||||
def test_safe_value_fallback():
|
def test_safe_value_fallback():
|
||||||
dict1 = {'keya': None, 'keyb': 2, 'keyc': 5, 'keyd': None}
|
dict1 = {'keya': None, 'keyb': 2, 'keyc': 5, 'keyd': None}
|
||||||
assert safe_value_fallback(dict1, 'keya', 'keyb') == 2
|
assert safe_value_fallback(dict1, 'keya', 'keyb') == 2
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ from datetime import datetime, timedelta, timezone
|
|||||||
import pytest
|
import pytest
|
||||||
import time_machine
|
import time_machine
|
||||||
|
|
||||||
from freqtrade.util import dt_floor_day, dt_from_ts, dt_now, dt_ts, dt_utc, shorten_date
|
from freqtrade.util import (dt_floor_day, dt_from_ts, dt_humanize, dt_now, dt_ts, dt_utc,
|
||||||
from freqtrade.util.datetime_helpers import dt_humanize
|
format_ms_time, shorten_date)
|
||||||
|
|
||||||
|
|
||||||
def test_dt_now():
|
def test_dt_now():
|
||||||
@@ -57,3 +57,16 @@ def test_dt_humanize() -> None:
|
|||||||
assert dt_humanize(dt_now()) == 'just now'
|
assert dt_humanize(dt_now()) == 'just now'
|
||||||
assert dt_humanize(dt_now(), only_distance=True) == 'instantly'
|
assert dt_humanize(dt_now(), only_distance=True) == 'instantly'
|
||||||
assert dt_humanize(dt_now() - timedelta(hours=16), only_distance=True) == '16 hours'
|
assert dt_humanize(dt_now() - timedelta(hours=16), only_distance=True) == '16 hours'
|
||||||
|
|
||||||
|
|
||||||
|
def test_format_ms_time() -> None:
|
||||||
|
# Date 2018-04-10 18:02:01
|
||||||
|
date_in_epoch_ms = 1523383321000
|
||||||
|
date = format_ms_time(date_in_epoch_ms)
|
||||||
|
assert type(date) is str
|
||||||
|
res = datetime(2018, 4, 10, 18, 2, 1, tzinfo=timezone.utc)
|
||||||
|
assert date == res.astimezone(None).strftime('%Y-%m-%dT%H:%M:%S')
|
||||||
|
res = datetime(2017, 12, 13, 8, 2, 1, tzinfo=timezone.utc)
|
||||||
|
# Date 2017-12-13 08:02:01
|
||||||
|
date_in_epoch_ms = 1513152121000
|
||||||
|
assert format_ms_time(date_in_epoch_ms) == res.astimezone(None).strftime('%Y-%m-%dT%H:%M:%S')
|
||||||
|
|||||||
Reference in New Issue
Block a user