Passed
Push — dev ( 4bfa05...67478a )
by Konstantinos
01:31
created

conftest.data_manager()   A

Complexity

Conditions 2

Size

Total Lines 44
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 33
dl 0
loc 44
rs 9.0879
c 0
b 0
f 0
cc 2
nop 0
1
import os
2
import pytest
3
4
5
my_dir = os.path.dirname(os.path.realpath(__file__))
6
7
####### Files and folders
8
@pytest.fixture
9
def tests_root_dir():
10
    return my_dir
11
12
@pytest.fixture
13
def tests_data_root(tests_root_dir):
14
    return os.path.join(tests_root_dir, 'dts')
15
16
17
@pytest.fixture
18
def sample_json(tests_data_root):
19
    return os.path.join(tests_data_root, 'sample-strains.jl')
20
21
@pytest.fixture
22
def sample_collaped_json(tests_data_root):
23
    return os.path.join(tests_data_root, 'sample-strains-colapsed.jl')
24
25
26
@pytest.fixture()
27
def test_json_data(sample_json):
28
    return {
29
        'file_path': sample_json,
30
        'nb_lines': 100,
31
        'attributes': {'flavors', 'name', 'medical', 'description', 'image_urls', 'parents', 'negatives', 'grow_info', '_id', 'type', 'image_paths', 'effects'},
32
    }
33
34
35
@pytest.fixture
36
def r_data_manager():
37
    from green_magic.data.data_manager import DataManager
38
39
40
41
@pytest.fixture
42
def data_manager():
43
    from green_magic.data.backend import Backend, DataEngine, pd_engine
44
    from green_magic.data.data_manager import DataManager
45
    from green_magic.data.commands_manager import CommandsManager
46
    from green_magic.data.dataset import DatapointsFactory
47
    from green_magic.data.command_factories import MagicCommandFactory
48
    from green_magic.data.features.phi import PhiFunction
49
50
    data_api = DataManager(Backend(DataEngine.create('test_pd')))
51
52
    datapoints_fact = data_api.backend.engine.__class__.datapoints_factory
53
    cmd_fact = DataEngine.test_pd.command_factory
54
    assert isinstance(datapoints_fact, DatapointsFactory)
55
    assert isinstance(cmd_fact, MagicCommandFactory)
56
57
    subjects = [datapoints_fact.subject, cmd_fact, PhiFunction.subject]
58
    assert len(set([id(x._observers) for x in subjects])) == len(subjects)
59
60
    for s in subjects:
61
        s._observers = []
62
        # print('FFFF', type(s), id(s), id(s._observers), len(s._observers))
63
    assert all(len(x._observers) == 0 for x in subjects)
64
65
    data_api.backend.engine.__class__.datapoints_factory.subject.attach(data_api.backend.datapoints_manager)
66
    DataEngine.test_pd.command_factory.attach(data_api.commands_manager.command.accumulator)
67
    PhiFunction.subject.attach(data_api.phis)
68
69
    print(f"dtp-fact: {type(datapoints_fact)} -> observers: [{', '.join(str(_) for _ in datapoints_fact.subject._observers)}]")
70
    print(
71
        f"cmd-fact: {type(cmd_fact)} -> observers: [{', '.join(str(_) for _ in cmd_fact._observers)}]")
72
    print('----------------------')
73
    print(
74
        f"dtp-fact: {type(datapoints_fact)} -> observers: [{', '.join(str(_) for _ in datapoints_fact.subject._observers)}]")
75
    print(
76
        f"cmd-fact: {type(cmd_fact)} -> observers: [{', '.join(str(_) for _ in cmd_fact._observers)}]")
77
78
79
    assert datapoints_fact.subject._observers[0] == data_api.backend.datapoints_manager
80
    assert cmd_fact._observers[0] == data_api.commands_manager.command.accumulator
81
82
    assert all(len(x._observers) == 1 for x in subjects)
83
84
    return data_api
85
86
87
@pytest.fixture
88
def test_engine(data_manager):
89
    from green_magic.data.backend import DataEngine
90
    from green_magic.data.backend.panda_handling.df_backend import PDTabularIterator, PDTabularRetriever, PDTabularMutator
91
    DataEngine.new('test_pd')
92
    DataEngine.test_pd.retriever = PDTabularRetriever
93
    DataEngine.test_pd.iterator = PDTabularIterator
94
    DataEngine.test_pd.mutator = PDTabularMutator
95
    subjects = [
96
        data_manager.backend.engine.__class__.datapoints_factory.subject,
97
        DataEngine.test_pd.command_factory,
98
    ]
99
    for s in subjects:
100
        for o in s._observers:
101
            s.detach(o)
102
103
    subjects[0].attach(data_manager.backend.datapoints_manager)
104
    subjects[1].attach(data_manager.commands_manager.command.accumulator)
105
106
    assert all([len(x) == 1 for x in (
107
        data_manager.backend.engine.__class__.datapoints_factory.subject._observers,
108
        DataEngine.test_pd.command_factory._observers,
109
    )])
110
    # DataEngine.test_pd.command_factory(data_structure, res, [_ for _ in []],
111
    #                                                                cls.retriever(),
112
    #                                                                cls.iterator(),
113
    #                                                                cls.mutator())
114
    return DataEngine.test_pd
115
116
117
@pytest.fixture
118
def define_observations_command(test_engine):
119
    import pandas as pd
120
    @test_engine.dec()
121
    def observations(file_path):
122
        return pd.read_json(file_path, lines=True)
123
    assert 'observations' in test_engine.registry
124
    assert len(test_engine.registry) == 1
125
126
127
@pytest.fixture
128
def datapoints(data_manager, define_observations_command, test_json_data):
129
    cmd = data_manager.command.observations
130
    cmd.args = [test_json_data['file_path']]
131
132
    from green_magic.utils.commands import Invoker, CommandHistory
133
134
    inv = Invoker(CommandHistory())
135
    inv.execute_command(cmd)
136
    return data_manager.backend.datapoints_manager.datapoints
137
138
# Helpers
139
@pytest.fixture
140
def factories():
141
    def factories_dict(data_manager_instance):
142
        return {'cmd': DataEngine.test_pd.command_factory}
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable DataEngine does not seem to be defined.
Loading history...