mtcli 3.8.0.dev16__tar.gz → 3.8.0.dev17__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.
Files changed (102) hide show
  1. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/PKG-INFO +1 -1
  2. mtcli-3.8.0.dev17/mtcli/utils/time.py +65 -0
  3. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/pyproject.toml +1 -1
  4. mtcli-3.8.0.dev16/mtcli/utils/time.py +0 -16
  5. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/LICENSE +0 -0
  6. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/README.md +0 -0
  7. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/__init__.py +0 -0
  8. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/__main__.py +0 -0
  9. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/cli.py +0 -0
  10. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/cli_dev.py +0 -0
  11. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/__init__.py +0 -0
  12. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/backfill.py +0 -0
  13. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/bars.py +0 -0
  14. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/conf.py +0 -0
  15. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/doctor.py +0 -0
  16. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/ticks.py +0 -0
  17. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands_dev/__init__.py +0 -0
  18. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands_dev/migrate.py +0 -0
  19. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/conecta.py +0 -0
  20. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/conf.py +0 -0
  21. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/config_registre.py +0 -0
  22. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/data/__init__.py +0 -0
  23. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/data/base.py +0 -0
  24. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/data/csv.py +0 -0
  25. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/data/mt5.py +0 -0
  26. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/database.py +0 -0
  27. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/domain/__init__.py +0 -0
  28. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/domain/timeframe.py +0 -0
  29. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/logger.py +0 -0
  30. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/__init__.py +0 -0
  31. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/backfill_engine.py +0 -0
  32. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/tick_bus.py +0 -0
  33. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/tick_cache.py +0 -0
  34. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/tick_engine.py +0 -0
  35. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/tick_repository.py +0 -0
  36. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/tick_writer.py +0 -0
  37. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/trade_tick_filter.py +0 -0
  38. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/001_initial_schema.py +0 -0
  39. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/002_ticks_time_msc.py +0 -0
  40. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/003_optimize_ticks_without_rowid.py +0 -0
  41. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/004_ticks_pk_time_msc.py +0 -0
  42. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/005_tick_price_compression.py +0 -0
  43. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/006_add_index_ticks_symbol_time.py +0 -0
  44. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/007_deduplicate_ticks_and_add_unique_index.py +0 -0
  45. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/008_fix_ticks_unique_index.py +0 -0
  46. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/009_keep_only_trade_ticks.py +0 -0
  47. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/__init__.py +0 -0
  48. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/__main__.py +0 -0
  49. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/runner.py +0 -0
  50. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/__init__.py +0 -0
  51. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/bar_model.py +0 -0
  52. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/bars_model.py +0 -0
  53. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/chart_model.py +0 -0
  54. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/conf_model.py +0 -0
  55. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/consecutive_bars_model.py +0 -0
  56. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/rates_model.py +0 -0
  57. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/signals_model.py +0 -0
  58. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/unconsecutive_bar_model.py +0 -0
  59. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/mt5_context.py +0 -0
  60. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugin.py +0 -0
  61. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugin_loader.py +0 -0
  62. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugin_manager.py +0 -0
  63. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/__init__.py +0 -0
  64. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/exemplo.py-dist +0 -0
  65. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/__init__.py +0 -0
  66. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/cli.py +0 -0
  67. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/conf.py +0 -0
  68. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/models/__init__.py +0 -0
  69. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/models/model_media_movel.py +0 -0
  70. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/tests/__init__.py +0 -0
  71. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/tests/test_mm.py +0 -0
  72. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/tests/test_model_media_movel.py +0 -0
  73. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/__init__.py +0 -0
  74. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/cli.py +0 -0
  75. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/conf.py +0 -0
  76. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/models/__init__.py +0 -0
  77. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/models/average_range_model.py +0 -0
  78. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/tests/__init__.py +0 -0
  79. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/tests/test_rm.py +0 -0
  80. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/__init__.py +0 -0
  81. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/cli.py +0 -0
  82. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/conf.py +0 -0
  83. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/models/__init__.py +0 -0
  84. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/models/model_average_volume.py +0 -0
  85. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/tests/__init__.py +0 -0
  86. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/tests/test_vm.py +0 -0
  87. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/services/__init__.py +0 -0
  88. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/services/maintenance_service.py +0 -0
  89. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/services/tick_service.py +0 -0
  90. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/utils/__init__.py +0 -0
  91. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/utils/pidfile.py +0 -0
  92. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/__init__.py +0 -0
  93. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/close_view.py +0 -0
  94. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/full_view.py +0 -0
  95. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/high_view.py +0 -0
  96. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/low_view.py +0 -0
  97. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/min_view.py +0 -0
  98. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/open_view.py +0 -0
  99. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/ranges_view.py +0 -0
  100. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/rates_view.py +0 -0
  101. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/vars_view.py +0 -0
  102. {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/volumes_view.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mtcli
3
- Version: 3.8.0.dev16
3
+ Version: 3.8.0.dev17
4
4
  Summary: Aplicativo CLI para exibir gráficos do MetaTrader 5 screen reader friendly
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -0,0 +1,65 @@
1
+ """
2
+ Utilitários de conversão de tempo para o mtcli.
3
+
4
+ Este módulo fornece funções para:
5
+ - Obter o horário atual em UTC
6
+ - Converter datas de UTC para o timezone da B3 (Brasil)
7
+ - Converter datas da B3 para UTC
8
+
9
+ Todas as funções trabalham com objetos datetime timezone-aware.
10
+ """
11
+
12
+ from datetime import datetime
13
+ from zoneinfo import ZoneInfo
14
+
15
+
16
+ # Timezones padrão
17
+ UTC = ZoneInfo("UTC")
18
+ B3_TZ = ZoneInfo("America/Sao_Paulo")
19
+
20
+
21
+ def now_utc():
22
+ """
23
+ Retorna o horário atual em UTC.
24
+
25
+ Returns:
26
+ datetime: Data/hora atual com timezone UTC (aware).
27
+ """
28
+ return datetime.now(tz=UTC)
29
+
30
+
31
+ def utc_to_b3(dt):
32
+ """
33
+ Converte um datetime em UTC para o timezone da B3.
34
+
35
+ Caso o datetime seja naive (sem timezone), assume-se que ele já está em UTC.
36
+
37
+ Args:
38
+ dt (datetime): Data/hora em UTC (aware ou naive).
39
+
40
+ Returns:
41
+ datetime: Data/hora convertida para o timezone da B3.
42
+ """
43
+ if dt.tzinfo is None:
44
+ dt = dt.replace(tzinfo=UTC)
45
+
46
+ return dt.astimezone(B3_TZ)
47
+
48
+
49
+ def b3_to_utc(dt):
50
+ """
51
+ Converte um datetime do timezone da B3 para UTC.
52
+
53
+ Caso o datetime seja naive (sem timezone), assume-se que ele já está
54
+ no horário da B3 (America/Sao_Paulo).
55
+
56
+ Args:
57
+ dt (datetime): Data/hora no timezone da B3 (aware ou naive).
58
+
59
+ Returns:
60
+ datetime: Data/hora convertida para UTC.
61
+ """
62
+ if dt.tzinfo is None:
63
+ dt = dt.replace(tzinfo=B3_TZ)
64
+
65
+ return dt.astimezone(UTC)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mtcli"
3
- version = "3.8.0.dev16"
3
+ version = "3.8.0.dev17"
4
4
  description = "Aplicativo CLI para exibir gráficos do MetaTrader 5 screen reader friendly"
5
5
  authors = [
6
6
  {name = "Valmir França",email = "vfranca3@gmail.com"}
@@ -1,16 +0,0 @@
1
- from datetime import datetime
2
- from zoneinfo import ZoneInfo
3
-
4
-
5
- UTC = ZoneInfo("UTC")
6
- B3_TZ = ZoneInfo("America/Sao_Paulo")
7
-
8
-
9
- def now_utc():
10
- return datetime.now(tz=UTC)
11
-
12
-
13
- def utc_to_b3(dt):
14
- if dt.tzinfo is None:
15
- dt = dt.replace(tzinfo=UTC)
16
- return dt.astimezone(B3_TZ)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes