mtcli 3.7.0.dev1__tar.gz → 3.7.0.dev3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/PKG-INFO +1 -1
- mtcli-3.7.0.dev3/mtcli/plugin_loader.py +226 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/pyproject.toml +1 -1
- mtcli-3.7.0.dev1/mtcli/plugin_loader.py +0 -147
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/LICENSE +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/README.md +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/cli.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/commands/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/commands/bars.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/commands/conf.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/conecta.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/conf.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/config_registre.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/data/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/data/base.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/data/csv.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/data/mt5.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/database.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/domain/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/domain/timeframe.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/logger.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/marketdata/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/marketdata/tick_cache.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/marketdata/tick_repository.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/models/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/models/bar_model.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/models/bars_model.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/models/chart_model.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/models/conf_model.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/models/consecutive_bars_model.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/models/rates_model.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/models/signals_model.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/models/unconsecutive_bar_model.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/mt5_context.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugin.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugin_manager.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/exemplo.py-dist +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/media_movel/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/media_movel/cli.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/media_movel/conf.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/media_movel/models/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/media_movel/models/model_media_movel.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/media_movel/tests/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/media_movel/tests/test_mm.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/media_movel/tests/test_model_media_movel.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/range_medio/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/range_medio/cli.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/range_medio/conf.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/range_medio/models/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/range_medio/models/average_range_model.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/range_medio/tests/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/range_medio/tests/test_rm.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/volume_medio/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/volume_medio/cli.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/volume_medio/conf.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/volume_medio/models/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/volume_medio/models/model_average_volume.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/volume_medio/tests/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/volume_medio/tests/test_vm.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/__init__.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/close_view.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/full_view.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/high_view.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/low_view.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/min_view.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/open_view.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/ranges_view.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/rates_view.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/vars_view.py +0 -0
- {mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/views/volumes_view.py +0 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Sistema de carregamento de plugins do mtcli.
|
|
3
|
+
|
|
4
|
+
Este módulo descobre e registra plugins de duas fontes:
|
|
5
|
+
|
|
6
|
+
1. Plugins internos localizados em ``mtcli.plugins``
|
|
7
|
+
2. Plugins externos registrados via entry points ``mtcli.plugins``
|
|
8
|
+
|
|
9
|
+
Plugins podem expor:
|
|
10
|
+
|
|
11
|
+
• função ``register(cli)``
|
|
12
|
+
• objeto ``click.Command``
|
|
13
|
+
|
|
14
|
+
Entry point exemplo:
|
|
15
|
+
|
|
16
|
+
[project.entry-points."mtcli.plugins"]
|
|
17
|
+
renko = "mtcli_renko.plugin:register"
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import importlib
|
|
23
|
+
import logging
|
|
24
|
+
import pkgutil
|
|
25
|
+
from typing import Iterable, List
|
|
26
|
+
|
|
27
|
+
import click
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
from importlib.metadata import EntryPoint, entry_points
|
|
31
|
+
except ImportError: # pragma: no cover
|
|
32
|
+
from importlib_metadata import EntryPoint, entry_points
|
|
33
|
+
|
|
34
|
+
import mtcli.plugins
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
logger = logging.getLogger(__name__)
|
|
38
|
+
|
|
39
|
+
PLUGIN_GROUP = "mtcli.plugins"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# ---------------------------------------------------------
|
|
43
|
+
# Descoberta de plugins externos
|
|
44
|
+
# ---------------------------------------------------------
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def discover_external_plugins() -> Iterable[EntryPoint]:
|
|
48
|
+
"""
|
|
49
|
+
Descobre plugins externos via entry points.
|
|
50
|
+
|
|
51
|
+
Returns
|
|
52
|
+
-------
|
|
53
|
+
Iterable[EntryPoint]
|
|
54
|
+
Entry points encontrados no grupo ``mtcli.plugins``.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
try:
|
|
58
|
+
eps = entry_points()
|
|
59
|
+
|
|
60
|
+
if hasattr(eps, "select"):
|
|
61
|
+
return eps.select(group=PLUGIN_GROUP)
|
|
62
|
+
|
|
63
|
+
return eps.get(PLUGIN_GROUP, [])
|
|
64
|
+
|
|
65
|
+
except Exception as exc: # pragma: no cover
|
|
66
|
+
logger.error("Erro ao descobrir plugins externos: %s", exc)
|
|
67
|
+
return []
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# ---------------------------------------------------------
|
|
71
|
+
# Registro de plugin
|
|
72
|
+
# ---------------------------------------------------------
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def register_plugin(cli: click.Group, plugin, name: str) -> None:
|
|
76
|
+
"""
|
|
77
|
+
Registra um plugin no CLI.
|
|
78
|
+
|
|
79
|
+
O plugin pode ser:
|
|
80
|
+
|
|
81
|
+
• função ``register(cli)``
|
|
82
|
+
• objeto ``click.Command``
|
|
83
|
+
|
|
84
|
+
Parameters
|
|
85
|
+
----------
|
|
86
|
+
cli : click.Group
|
|
87
|
+
CLI principal.
|
|
88
|
+
plugin : Any
|
|
89
|
+
Objeto do plugin carregado.
|
|
90
|
+
name : str
|
|
91
|
+
Nome do plugin.
|
|
92
|
+
"""
|
|
93
|
+
|
|
94
|
+
if callable(plugin) and not isinstance(plugin, click.Command):
|
|
95
|
+
plugin(cli)
|
|
96
|
+
logger.debug("Plugin '%s' registrado via register()", name)
|
|
97
|
+
|
|
98
|
+
elif isinstance(plugin, click.Command):
|
|
99
|
+
cli.add_command(plugin)
|
|
100
|
+
logger.debug("Plugin '%s' registrado como comando", name)
|
|
101
|
+
|
|
102
|
+
else:
|
|
103
|
+
raise TypeError(
|
|
104
|
+
f"Plugin '{name}' inválido: não é click.Command nem register(cli)"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
# ---------------------------------------------------------
|
|
109
|
+
# Plugins internos
|
|
110
|
+
# ---------------------------------------------------------
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def load_internal_plugins(cli: click.Group) -> List[str]:
|
|
114
|
+
"""
|
|
115
|
+
Carrega plugins internos do pacote ``mtcli.plugins``.
|
|
116
|
+
|
|
117
|
+
Cada módulo deve expor a função:
|
|
118
|
+
|
|
119
|
+
register(cli)
|
|
120
|
+
|
|
121
|
+
Returns
|
|
122
|
+
-------
|
|
123
|
+
list[str]
|
|
124
|
+
Lista de plugins carregados.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
loaded = []
|
|
128
|
+
|
|
129
|
+
for module_info in pkgutil.iter_modules(mtcli.plugins.__path__):
|
|
130
|
+
|
|
131
|
+
module_name = f"mtcli.plugins.{module_info.name}"
|
|
132
|
+
|
|
133
|
+
try:
|
|
134
|
+
module = importlib.import_module(module_name)
|
|
135
|
+
|
|
136
|
+
if hasattr(module, "register"):
|
|
137
|
+
module.register(cli)
|
|
138
|
+
loaded.append(module_info.name)
|
|
139
|
+
|
|
140
|
+
logger.debug("Plugin interno carregado: %s", module_info.name)
|
|
141
|
+
|
|
142
|
+
except Exception as exc:
|
|
143
|
+
logger.error(
|
|
144
|
+
"Falha ao carregar plugin interno '%s': %s",
|
|
145
|
+
module_info.name,
|
|
146
|
+
exc,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
return loaded
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
# ---------------------------------------------------------
|
|
153
|
+
# Plugins externos
|
|
154
|
+
# ---------------------------------------------------------
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def load_external_plugins(cli: click.Group) -> List[str]:
|
|
158
|
+
"""
|
|
159
|
+
Carrega plugins externos instalados via entry points.
|
|
160
|
+
|
|
161
|
+
Returns
|
|
162
|
+
-------
|
|
163
|
+
list[str]
|
|
164
|
+
Lista de plugins carregados.
|
|
165
|
+
"""
|
|
166
|
+
|
|
167
|
+
loaded = []
|
|
168
|
+
seen = set()
|
|
169
|
+
|
|
170
|
+
for ep in discover_external_plugins():
|
|
171
|
+
|
|
172
|
+
if ep.name in seen:
|
|
173
|
+
logger.warning("Plugin duplicado ignorado: %s", ep.name)
|
|
174
|
+
continue
|
|
175
|
+
|
|
176
|
+
try:
|
|
177
|
+
plugin = ep.load()
|
|
178
|
+
|
|
179
|
+
register_plugin(cli, plugin, ep.name)
|
|
180
|
+
|
|
181
|
+
loaded.append(ep.name)
|
|
182
|
+
seen.add(ep.name)
|
|
183
|
+
|
|
184
|
+
except Exception as exc:
|
|
185
|
+
logger.error(
|
|
186
|
+
"Falha ao carregar plugin '%s': %s",
|
|
187
|
+
ep.name,
|
|
188
|
+
exc,
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
return loaded
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
# ---------------------------------------------------------
|
|
195
|
+
# Loader principal
|
|
196
|
+
# ---------------------------------------------------------
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def load_plugins(cli: click.Group) -> List[str]:
|
|
200
|
+
"""
|
|
201
|
+
Carrega todos os plugins do mtcli.
|
|
202
|
+
|
|
203
|
+
Isso inclui:
|
|
204
|
+
|
|
205
|
+
• plugins internos
|
|
206
|
+
• plugins externos
|
|
207
|
+
|
|
208
|
+
Parameters
|
|
209
|
+
----------
|
|
210
|
+
cli : click.Group
|
|
211
|
+
CLI principal.
|
|
212
|
+
|
|
213
|
+
Returns
|
|
214
|
+
-------
|
|
215
|
+
list[str]
|
|
216
|
+
Lista com todos os plugins carregados.
|
|
217
|
+
"""
|
|
218
|
+
|
|
219
|
+
loaded = []
|
|
220
|
+
|
|
221
|
+
loaded.extend(load_internal_plugins(cli))
|
|
222
|
+
loaded.extend(load_external_plugins(cli))
|
|
223
|
+
|
|
224
|
+
logger.info("Plugins carregados: %d", len(loaded))
|
|
225
|
+
|
|
226
|
+
return loaded
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Sistema de carregamento de plugins do mtcli.
|
|
3
|
-
|
|
4
|
-
Este módulo é responsável por descobrir e registrar plugins externos
|
|
5
|
-
instalados via entry points do Python.
|
|
6
|
-
|
|
7
|
-
Plugins devem declarar entry points no grupo:
|
|
8
|
-
|
|
9
|
-
mtcli.plugins
|
|
10
|
-
|
|
11
|
-
Um plugin pode expor:
|
|
12
|
-
|
|
13
|
-
1. Uma função ``register(cli)``
|
|
14
|
-
2. Um objeto ``click.Command``
|
|
15
|
-
|
|
16
|
-
Exemplo de entry point no pyproject.toml:
|
|
17
|
-
|
|
18
|
-
[project.entry-points."mtcli.plugins"]
|
|
19
|
-
renko = "mtcli_renko.plugin:register"
|
|
20
|
-
|
|
21
|
-
Ou diretamente um comando:
|
|
22
|
-
|
|
23
|
-
renko = "mtcli_renko.cli:renko"
|
|
24
|
-
|
|
25
|
-
Este loader garante:
|
|
26
|
-
|
|
27
|
-
- compatibilidade com Python 3.8+
|
|
28
|
-
- proteção contra plugins duplicados
|
|
29
|
-
- logging estruturado
|
|
30
|
-
- isolamento de falhas de plugins
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
from __future__ import annotations
|
|
34
|
-
|
|
35
|
-
import logging
|
|
36
|
-
from typing import Iterable, List
|
|
37
|
-
|
|
38
|
-
import click
|
|
39
|
-
|
|
40
|
-
try:
|
|
41
|
-
from importlib.metadata import EntryPoint, entry_points
|
|
42
|
-
except ImportError: # pragma: no cover
|
|
43
|
-
from importlib_metadata import EntryPoint, entry_points
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
logger = logging.getLogger(__name__)
|
|
47
|
-
|
|
48
|
-
PLUGIN_GROUP = "mtcli.plugins"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def discover_plugins() -> Iterable[EntryPoint]:
|
|
52
|
-
"""
|
|
53
|
-
Descobre plugins registrados via entry points.
|
|
54
|
-
|
|
55
|
-
Returns
|
|
56
|
-
-------
|
|
57
|
-
Iterable[EntryPoint]
|
|
58
|
-
Lista de entry points encontrados no grupo ``mtcli.plugins``.
|
|
59
|
-
"""
|
|
60
|
-
|
|
61
|
-
try:
|
|
62
|
-
eps = entry_points()
|
|
63
|
-
|
|
64
|
-
if hasattr(eps, "select"):
|
|
65
|
-
return eps.select(group=PLUGIN_GROUP)
|
|
66
|
-
|
|
67
|
-
return eps.get(PLUGIN_GROUP, [])
|
|
68
|
-
|
|
69
|
-
except Exception as exc: # pragma: no cover
|
|
70
|
-
logger.error("Erro ao descobrir plugins: %s", exc)
|
|
71
|
-
return []
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def register_plugin(cli: click.Group, ep: EntryPoint) -> None:
|
|
75
|
-
"""
|
|
76
|
-
Carrega e registra um plugin individual.
|
|
77
|
-
|
|
78
|
-
O plugin pode ser:
|
|
79
|
-
|
|
80
|
-
- função register(cli)
|
|
81
|
-
- objeto click.Command
|
|
82
|
-
|
|
83
|
-
Parameters
|
|
84
|
-
----------
|
|
85
|
-
cli : click.Group
|
|
86
|
-
CLI principal do mtcli.
|
|
87
|
-
ep : EntryPoint
|
|
88
|
-
Entry point do plugin.
|
|
89
|
-
"""
|
|
90
|
-
|
|
91
|
-
plugin = ep.load()
|
|
92
|
-
|
|
93
|
-
if callable(plugin) and not isinstance(plugin, click.Command):
|
|
94
|
-
plugin(cli)
|
|
95
|
-
logger.debug("Plugin '%s' registrado via register()", ep.name)
|
|
96
|
-
|
|
97
|
-
elif isinstance(plugin, click.Command):
|
|
98
|
-
cli.add_command(plugin)
|
|
99
|
-
logger.debug("Plugin '%s' registrado como comando", ep.name)
|
|
100
|
-
|
|
101
|
-
else:
|
|
102
|
-
raise TypeError(
|
|
103
|
-
f"Plugin '{ep.name}' inválido: "
|
|
104
|
-
"não é click.Command nem função register(cli)"
|
|
105
|
-
)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
def load_plugins(cli: click.Group) -> List[str]:
|
|
109
|
-
"""
|
|
110
|
-
Descobre e carrega todos os plugins instalados.
|
|
111
|
-
|
|
112
|
-
Parameters
|
|
113
|
-
----------
|
|
114
|
-
cli : click.Group
|
|
115
|
-
CLI principal do mtcli.
|
|
116
|
-
|
|
117
|
-
Returns
|
|
118
|
-
-------
|
|
119
|
-
list[str]
|
|
120
|
-
Lista com os nomes dos plugins carregados com sucesso.
|
|
121
|
-
"""
|
|
122
|
-
|
|
123
|
-
loaded: List[str] = []
|
|
124
|
-
seen = set()
|
|
125
|
-
|
|
126
|
-
for ep in discover_plugins():
|
|
127
|
-
|
|
128
|
-
if ep.name in seen:
|
|
129
|
-
logger.warning("Plugin duplicado ignorado: %s", ep.name)
|
|
130
|
-
continue
|
|
131
|
-
|
|
132
|
-
try:
|
|
133
|
-
register_plugin(cli, ep)
|
|
134
|
-
|
|
135
|
-
seen.add(ep.name)
|
|
136
|
-
loaded.append(ep.name)
|
|
137
|
-
|
|
138
|
-
except Exception as exc:
|
|
139
|
-
logger.error(
|
|
140
|
-
"Falha ao carregar plugin '%s': %s",
|
|
141
|
-
ep.name,
|
|
142
|
-
exc,
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
logger.info("Plugins carregados: %d", len(loaded))
|
|
146
|
-
|
|
147
|
-
return loaded
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/media_movel/tests/test_model_media_movel.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/range_medio/models/average_range_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mtcli-3.7.0.dev1 → mtcli-3.7.0.dev3}/mtcli/plugins/volume_medio/models/model_average_volume.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|