Skip to content

Commit

Permalink
[Version] v1.5.4
Browse files Browse the repository at this point in the history
  • Loading branch information
Herklos committed May 3, 2020
1 parent 4289137 commit 9cf0a44
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 194 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.5.4] - 2020-05-03
### Fixed
- [EventTree] Remove event related methods in matrix_manager

## [1.5.3] - 2020-05-02
### Added
- [Channel] Synchronization support
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# OctoBot-Evaluators [1.5.3](https://github.com/Drakkar-Software/OctoBot-Evaluators/blob/master/CHANGELOG.md)
# OctoBot-Evaluators [1.5.4](https://github.com/Drakkar-Software/OctoBot-Evaluators/blob/master/CHANGELOG.md)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/a0c08eab5d4c440aa6e3fc3061ad0520)](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Evaluators?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Evaluators&utm_campaign=Badge_Grade_Dashboard)
[![PyPI](https://img.shields.io/pypi/v/OctoBot-Evaluators.svg)](https://pypi.python.org/pypi/OctoBot-Evaluators/)
[![Coverage Status](https://coveralls.io/repos/github/Drakkar-Software/OctoBot-Evaluators/badge.svg)](https://coveralls.io/github/Drakkar-Software/OctoBot-Evaluators)
Expand Down
2 changes: 1 addition & 1 deletion octobot_evaluators/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@
# License along with this library.

PROJECT_NAME = "OctoBot-Evaluators"
VERSION = "1.5.3" # major.minor.revision
VERSION = "1.5.4" # major.minor.revision
37 changes: 0 additions & 37 deletions octobot_evaluators/data_manager/matrix_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,30 +186,6 @@ def get_tentacle_value_path(cryptocurrency=None, symbol=None, time_frame=None) -
return node_path


async def get_nodes_event(matrix_id, nodes_paths, timeout=None):
"""
Return the asyncio.wait of nodes event
:param matrix_id: the matrix id
:param nodes_paths: the tentacle node paths
:param timeout: the event waiting timeout (when None no timeout)
:return: the
"""
return asyncio.gather(*[asyncio.wait_for(get_tentacle_node(matrix_id, node_path).node_event.wait(), timeout=timeout)
for node_path in nodes_paths])


async def get_nodes_clear_event(matrix_id, nodes_paths, timeout=None):
"""
Return the asyncio.wait of nodes clear event
:param matrix_id: the matrix id
:param nodes_paths: the tentacle node path
:param timeout: the event waiting timeout (when None no timeout)
:return: the
"""
return asyncio.gather(*[asyncio.wait_for(get_tentacle_node(matrix_id, node_path).node_clear_event.wait(),
timeout=timeout) for node_path in nodes_paths])


def get_evaluations_by_evaluator(matrix_id,
exchange_name=None,
tentacle_type=None,
Expand Down Expand Up @@ -308,19 +284,6 @@ def get_available_symbols(matrix_id,
return []


async def subscribe_nodes_event(matrix_id, nodes_path, callback, timeout=None):
"""
:param matrix_id: the matrix id
:param nodes_path: the tentacle node path
:param callback:
:param timeout: the event waiting timeout (when None no timeout)
:return:
"""
await get_nodes_event(matrix_id, nodes_path, timeout=timeout)
callback()


def is_tentacle_value_valid(matrix_id, tentacle_path, timestamp=0, delta=10) -> bool:
"""
Check if the node is ready to be used
Expand Down
1 change: 0 additions & 1 deletion octobot_evaluators/evaluator/strategy_evaluator.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ async def strategy_matrix_callback(self,
symbol,
time_frame):
# do not call the strategy
self.logger.debug(f"False and {TimeFrames(time_frame) not in self.strategy_time_frames}")
return
await self.matrix_callback(
matrix_id,
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ numpy==1.18.3

# Drakkar-Software requirements
OctoBot-Channels>=1.4.0, <1.5
OctoBot-Commons>=1.3.14, <1.4
OctoBot-Commons>=1.3.16, <1.4
OctoBot-Tentacles-Manager>=2.0.4, <2.1

# Cryptocurrency trading
Expand Down
163 changes: 10 additions & 153 deletions tests/data_manager/test_matrix_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,8 @@
from octobot_evaluators.data.matrix import Matrix
from octobot_evaluators.data_manager.matrix_manager import get_tentacle_path, get_tentacle_value_path, \
get_tentacle_nodes, get_tentacles_value_nodes, get_matrix_default_value_path, set_tentacle_value, \
get_tentacle_value, get_nodes_event, get_nodes_clear_event, get_tentacle_node, \
is_tentacle_value_valid, is_tentacles_values_valid, get_evaluations_by_evaluator, get_available_time_frames, \
get_available_symbols
get_tentacle_value, get_tentacle_node, get_available_symbols, \
is_tentacle_value_valid, is_tentacles_values_valid, get_evaluations_by_evaluator, get_available_time_frames
from octobot_evaluators.errors import UnsetTentacleEvaluation
from octobot_evaluators.matrices.matrices import Matrices

Expand Down Expand Up @@ -353,147 +352,6 @@ async def test_get_tentacles_value_nodes_mixed():
Matrices.instance().del_matrix(matrix.matrix_id)


@pytest.mark.asyncio
async def test_get_nodes_event():
matrix = Matrix()
Matrices.instance().add_matrix(matrix)

evaluator_1_path = get_matrix_default_value_path(tentacle_type="TA", tentacle_name="Test-TA", cryptocurrency="BTC")
evaluator_2_path = get_matrix_default_value_path(tentacle_type="TA", tentacle_name="Test-TA", cryptocurrency="ETH",
symbol="ETH/USD", time_frame="1m")
evaluator_3_path = get_matrix_default_value_path(tentacle_type="TA", tentacle_name="Test-TA", cryptocurrency="ETH")
evaluator_4_path = get_matrix_default_value_path(tentacle_type="TA", tentacle_name="Test-TA", cryptocurrency="BTC",
symbol="BTC/USD", time_frame="1m")
evaluator_5_path = get_matrix_default_value_path(tentacle_type="TA", tentacle_name="Test-TA", cryptocurrency="BTC",
symbol="BTC/USD", time_frame="5m")

# simulate AbstractEvaluator.initialize()
set_tentacle_value(matrix.matrix_id, evaluator_1_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_2_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_3_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_4_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_5_path, "TA", None)

# Asserts that a newly created event can't be successfuly awaited
with pytest.raises(asyncio.TimeoutError):
await asyncio.wait_for(await get_nodes_event(matrix.matrix_id, [evaluator_1_path, evaluator_3_path]), timeout=1)

wait_should_succeed = asyncio.wait_for(await get_nodes_event(matrix.matrix_id,
[evaluator_1_path, evaluator_4_path]), timeout=1)
wait_should_failed = asyncio.wait_for(await get_nodes_event(matrix.matrix_id,
[evaluator_1_path, evaluator_3_path, evaluator_4_path]),
timeout=1)
set_tentacle_value(matrix.matrix_id, evaluator_1_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_4_path, "TA", None)

await wait_should_succeed
with pytest.raises(asyncio.TimeoutError):
await wait_should_failed

wait_should_succeed = asyncio.wait_for(await get_nodes_event(matrix.matrix_id,
[get_matrix_default_value_path(tentacle_type="TA",
tentacle_name="Test-TA",
cryptocurrency="ETH")]),
timeout=1)
wait_should_failed = asyncio.wait_for(await get_nodes_event(matrix.matrix_id,
[get_matrix_default_value_path(tentacle_type="TA",
tentacle_name="Test-TA",
cryptocurrency="BTC")]),
timeout=1)
set_tentacle_value(matrix.matrix_id, evaluator_2_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_3_path, "TA", None)

await wait_should_succeed
with pytest.raises(asyncio.TimeoutError):
await wait_should_failed

wait_should_failed = asyncio.wait_for(await get_nodes_event(matrix.matrix_id,
[get_matrix_default_value_path(tentacle_type="TA",
tentacle_name="Test-TA",
cryptocurrency="BTC",
symbol="BTC/USD")]),
timeout=1)
wait_should_succeed = asyncio.wait_for(await get_nodes_event(matrix.matrix_id,
[get_matrix_default_value_path(tentacle_type="TA",
tentacle_name="Test-TA",
cryptocurrency="BTC",
symbol="BTC/USD",
time_frame="1m")]),
timeout=1)

set_tentacle_value(matrix.matrix_id, evaluator_4_path, "TA", None)
await wait_should_succeed
with pytest.raises(asyncio.TimeoutError):
await wait_should_failed

Matrices.instance().del_matrix(matrix.matrix_id)


@pytest.mark.asyncio
async def test_get_nodes_clear_event():
matrix = Matrix()
Matrices.instance().add_matrix(matrix)

evaluator_1_path = get_matrix_default_value_path(tentacle_type="TA", tentacle_name="Test-TA",
cryptocurrency="BTC",
symbol="BTC/USD",
time_frame="1m")
evaluator_2_path = get_matrix_default_value_path(tentacle_type="TA", tentacle_name="Test-TA",
cryptocurrency="BTC",
symbol="BTC/USD",
time_frame="5m")
evaluator_3_path = get_matrix_default_value_path(tentacle_type="TA", tentacle_name="Test-TA",
cryptocurrency="BTC",
symbol="BTC/USD",
time_frame="1h")
evaluator_4_path = get_matrix_default_value_path(tentacle_type="TA", tentacle_name="Test-TA",
cryptocurrency="BTC",
symbol="BTC/USD",
time_frame="4h")
evaluator_5_path = get_matrix_default_value_path(tentacle_type="TA", tentacle_name="Test-TA",
cryptocurrency="BTC",
symbol="BTC/USD",
time_frame="1d")

# simulate AbstractEvaluator.initialize()
set_tentacle_value(matrix.matrix_id, evaluator_1_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_2_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_3_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_4_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_5_path, "TA", None)

set_tentacle_value(matrix.matrix_id, evaluator_1_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_2_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_3_path, "TA", None)
await asyncio.wait_for(await get_nodes_clear_event(matrix.matrix_id,
[get_matrix_default_value_path(
tentacle_type="TA",
tentacle_name="Test-TA",
cryptocurrency="BTC")]),
timeout=1)
assert all([not get_tentacle_node(matrix.matrix_id, node_path).node_event.is_set()
for node_path in
[evaluator_1_path, evaluator_2_path, evaluator_3_path, evaluator_4_path, evaluator_5_path]])
set_tentacle_value(matrix.matrix_id, evaluator_4_path, "TA", None)
set_tentacle_value(matrix.matrix_id, evaluator_5_path, "TA", None)
assert not all([not get_tentacle_node(matrix.matrix_id, node_path).node_event.is_set()
for node_path in
[evaluator_1_path, evaluator_2_path, evaluator_3_path, evaluator_4_path, evaluator_5_path]])
assert all([get_tentacle_node(matrix.matrix_id, node_path).node_event.is_set()
for node_path in
[evaluator_4_path, evaluator_5_path]])
await asyncio.wait_for(await get_nodes_clear_event(matrix.matrix_id,
[get_matrix_default_value_path(
tentacle_type="TA",
tentacle_name="Test-TA",
cryptocurrency="BTC")]),
timeout=1)
assert all([not get_tentacle_node(matrix.matrix_id, node_path).node_event.is_set()
for node_path in
[evaluator_1_path, evaluator_2_path, evaluator_3_path, evaluator_4_path, evaluator_5_path]])
Matrices.instance().del_matrix(matrix.matrix_id)


@pytest.mark.asyncio
async def test_is_tentacle_value_valid():
matrix = Matrix()
Expand Down Expand Up @@ -621,9 +479,9 @@ async def test_get_evaluations_by_evaluator():
cryptocurrency="BTC",
symbol="BTC/USD",
time_frame="1m") == {
"RSI": get_tentacle_node(matrix.matrix_id, evaluator_1_path),
"ADX": get_tentacle_node(matrix.matrix_id, evaluator_2_path)
}
"RSI": get_tentacle_node(matrix.matrix_id, evaluator_1_path),
"ADX": get_tentacle_node(matrix.matrix_id, evaluator_2_path)
}

# set invalid value to not to add this value in result dict
set_tentacle_value(matrix.matrix_id, evaluator_2_path, "TA", START_PENDING_EVAL_NOTE)
Expand All @@ -642,8 +500,8 @@ async def test_get_evaluations_by_evaluator():
symbol="BTC/USD",
time_frame="1m",
allow_missing=True) == {
"RSI": get_tentacle_node(matrix.matrix_id, evaluator_1_path)
}
"RSI": get_tentacle_node(matrix.matrix_id, evaluator_1_path)
}
assert get_evaluations_by_evaluator(matrix.matrix_id,
tentacle_type="TA",
exchange_name="kraken",
Expand All @@ -652,9 +510,9 @@ async def test_get_evaluations_by_evaluator():
time_frame="1m",
allow_missing=True,
allowed_values=[START_PENDING_EVAL_NOTE]) == {
"RSI": get_tentacle_node(matrix.matrix_id, evaluator_1_path),
"ADX": get_tentacle_node(matrix.matrix_id, evaluator_2_path)
}
"RSI": get_tentacle_node(matrix.matrix_id, evaluator_1_path),
"ADX": get_tentacle_node(matrix.matrix_id, evaluator_2_path)
}

# invalid path
assert get_evaluations_by_evaluator(matrix.matrix_id,
Expand Down Expand Up @@ -719,7 +577,6 @@ async def test_get_available_time_frames():

@pytest.mark.asyncio
async def test_get_available_symbols():

matrix = Matrix()
Matrices.instance().add_matrix(matrix)

Expand Down

0 comments on commit 9cf0a44

Please sign in to comment.