Passed
Push — dev ( 6a1e3c...3c73d5 )
by Konstantinos
01:31
created

test_data_manager   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 96
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 64
dl 0
loc 96
rs 10
c 0
b 0
f 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
A test_engine_registration() 0 28 2
B test_data_manager() 0 52 1
1
from green_magic.data.commands_manager import CommandsManager
2
from green_magic.data.backend import Backend, DataEngine
3
from green_magic.data.data_manager import DataManager
4
from green_magic.data.backend import panda_handling
5
6
7
8
def test_engine_registration():
9
    from green_magic.data.backend import DataEngine
10
    from green_magic.data.backend.engine import EngineType
11
    assert type(DataEngine) == EngineType
12
    from green_magic.data.commands_manager import CommandRegistrator
13
14
    # type(type(DataEngine))
15
    ATTRS = ('registry', '_commands', 'command')
16
    DataEngine.new('test_pd')
17
    assert 'test_pd' in DataEngine.subclasses
18
    assert type(DataEngine.test_pd) == type(DataEngine)
19
    assert all(hasattr(DataEngine.test_pd, x) for x in ATTRS)
20
21
    DataEngine.new('data_lib')
22
    assert 'data_lib' in DataEngine.subclasses
23
    assert type(DataEngine.data_lib) == type(DataEngine)
24
    assert all(hasattr(DataEngine.data_lib, x) for x in ATTRS)
25
26
    for x in ATTRS:
27
        print(getattr(DataEngine.test_pd, x), getattr(DataEngine.data_lib, x))
28
        assert id(getattr(DataEngine.test_pd, x)) != id(getattr(DataEngine.data_lib, x)) != id(DataEngine.registry)
29
30
    assert id(DataEngine.test_pd.datapoints_factory) == id(DataEngine.data_lib.datapoints_factory)
31
32
    import pandas as pd
33
    @DataEngine.test_pd.command
34
    def observations(file_path):
35
        return pd.read_json(file_path, lines=True)
36
37
    # TODO uncomment below
38
    # assert len(DataEngine.test_pd.registry) == 1
39
    # assert len(DataEngine.data_lib.registry) == 0
40
41
    # assert all(id(getattr(DataEngine.test_pd, x) != id(getattr(DataEngine.data_lib, x)) for x in ATTRS))
42
43
44
def test_data_manager(sample_json):
45
    import types
46
    from green_magic.utils.commands import Command
47
    from green_magic.data.backend.panda_handling.df_backend import PDTabularIterator, PDTabularRetriever
48
    DataEngine.new('test_pd')
49
    assert 'test_pd' in DataEngine.subclasses
50
    assert hasattr(DataEngine, 'state')
51
    assert hasattr(DataEngine, 'registry')
52
53
    data_api = DataManager(CommandsManager(), Backend(DataEngine.create('test_pd')))
54
    # make the datapoint_manager listen to newly created Datapoints objects events
55
    assert hasattr(data_api, 'commands_manager')
56
    assert hasattr(data_api.commands_manager, 'command')
57
    assert hasattr(data_api.backend, 'datapoints_manager')
58
59
    data_api.backend.engine.__class__.datapoints_factory.subject.attach(data_api.backend.datapoints_manager)
60
    DataEngine.test_pd.command_factory.attach(data_api.commands_manager.command.accumulator)
61
62
    # test runtime command registration
63
    import pandas as pd
64
    @DataEngine.test_pd.dec()
65
    def observations(file_path):
66
        return pd.read_json(file_path, lines=True)
67
68
    assert type(DataEngine.test_pd) == type(DataEngine)
69
    assert type(DataEngine.test_pd.registry) == dict
70
    assert type(DataEngine.test_pd._commands) == dict
71
    assert 'observations' in DataEngine.test_pd.registry
72
    assert 'observations' in DataEngine.test_pd._commands
73
    assert 'observations' not in DataEngine.registry
74
75
    assert type(DataEngine.test_pd._commands['observations']) == Command
76
77
    cmd = DataEngine.test_pd._commands['observations']
78
    # cmd = data_api.command.observations
79
    cmd.args = [sample_json]
80
81
    assert type(cmd._receiver) == types.FunctionType
82
    assert cmd._method == '__call__'
83
    assert cmd.args == [sample_json]
84
85
    from green_magic.utils.commands import Invoker, CommandHistory
86
87
    DataEngine.test_pd.retriever = PDTabularRetriever()
88
    DataEngine.test_pd.iterator = PDTabularIterator()
89
90
    inv = Invoker(CommandHistory())
91
    inv.execute_command(cmd)
92
93
    assert data_api.backend.datapoints_manager.datapoints
94
95
    assert len(data_api.backend.datapoints_manager.datapoints) == 100