rushti 2.0.0__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 (38) hide show
  1. rushti-2.0.0/LICENSE +21 -0
  2. rushti-2.0.0/PKG-INFO +168 -0
  3. rushti-2.0.0/README.md +126 -0
  4. rushti-2.0.0/pyproject.toml +125 -0
  5. rushti-2.0.0/setup.cfg +4 -0
  6. rushti-2.0.0/src/rushti/__init__.py +33 -0
  7. rushti-2.0.0/src/rushti/checkpoint.py +642 -0
  8. rushti-2.0.0/src/rushti/cli.py +1329 -0
  9. rushti-2.0.0/src/rushti/commands.py +2025 -0
  10. rushti-2.0.0/src/rushti/contention_analyzer.py +1012 -0
  11. rushti-2.0.0/src/rushti/dag.py +421 -0
  12. rushti-2.0.0/src/rushti/dashboard.py +1595 -0
  13. rushti-2.0.0/src/rushti/db_admin.py +774 -0
  14. rushti-2.0.0/src/rushti/exclusive.py +316 -0
  15. rushti-2.0.0/src/rushti/execution.py +713 -0
  16. rushti-2.0.0/src/rushti/logging.py +353 -0
  17. rushti-2.0.0/src/rushti/messages.py +74 -0
  18. rushti-2.0.0/src/rushti/optimization_report.py +1053 -0
  19. rushti-2.0.0/src/rushti/optimizer.py +423 -0
  20. rushti-2.0.0/src/rushti/parsing.py +413 -0
  21. rushti-2.0.0/src/rushti/settings.py +436 -0
  22. rushti-2.0.0/src/rushti/stats.py +846 -0
  23. rushti-2.0.0/src/rushti/task.py +151 -0
  24. rushti-2.0.0/src/rushti/taskfile.py +710 -0
  25. rushti-2.0.0/src/rushti/taskfile_ops.py +1222 -0
  26. rushti-2.0.0/src/rushti/templates/__init__.py +1 -0
  27. rushti-2.0.0/src/rushti/templates/visualization.html +1054 -0
  28. rushti-2.0.0/src/rushti/tm1_build.py +651 -0
  29. rushti-2.0.0/src/rushti/tm1_integration.py +520 -0
  30. rushti-2.0.0/src/rushti/tm1_objects.py +776 -0
  31. rushti-2.0.0/src/rushti/utils.py +166 -0
  32. rushti-2.0.0/src/rushti/visualization_template.py +1067 -0
  33. rushti-2.0.0/src/rushti.egg-info/PKG-INFO +168 -0
  34. rushti-2.0.0/src/rushti.egg-info/SOURCES.txt +36 -0
  35. rushti-2.0.0/src/rushti.egg-info/dependency_links.txt +1 -0
  36. rushti-2.0.0/src/rushti.egg-info/entry_points.txt +2 -0
  37. rushti-2.0.0/src/rushti.egg-info/requires.txt +14 -0
  38. rushti-2.0.0/src/rushti.egg-info/top_level.txt +1 -0
rushti-2.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Marius Wirtz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
rushti-2.0.0/PKG-INFO ADDED
@@ -0,0 +1,168 @@
1
+ Metadata-Version: 2.4
2
+ Name: rushti
3
+ Version: 2.0.0
4
+ Summary: RushTI - Parallel TM1 TurboIntegrator Process Execution
5
+ Author-email: nicolasbisurgi <nbisurgi@cubewise.com>, Marius Wirtz <mwirtz@cubewise.com>
6
+ Maintainer: Cubewise CODE
7
+ License-Expression: MIT
8
+ Project-URL: Homepage, https://cubewise-code.github.io/rushti/
9
+ Project-URL: Documentation, https://cubewise-code.github.io/rushti/docs/
10
+ Project-URL: Repository, https://github.com/cubewise-code/rushti
11
+ Project-URL: Issues, https://github.com/cubewise-code/rushti/issues
12
+ Project-URL: Changelog, https://github.com/cubewise-code/rushti/releases
13
+ Keywords: TM1,Planning Analytics,TM1Py,TurboIntegrator,orchestration,automation,ETL
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Intended Audience :: System Administrators
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Topic :: Database
24
+ Classifier: Topic :: System :: Systems Administration
25
+ Requires-Python: >=3.9
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Requires-Dist: TM1py>=2.0.0
29
+ Requires-Dist: keyring>=25.7.0
30
+ Requires-Dist: chardet>=5.2.0
31
+ Requires-Dist: pandas>=2.0.0
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
34
+ Requires-Dist: pytest-asyncio; extra == "dev"
35
+ Requires-Dist: pytest-cov; extra == "dev"
36
+ Requires-Dist: pyinstaller>=5.0.0; extra == "dev"
37
+ Requires-Dist: pre-commit; extra == "dev"
38
+ Requires-Dist: black>=24.10.0; extra == "dev"
39
+ Requires-Dist: ruff>=0.8.0; extra == "dev"
40
+ Requires-Dist: mypy; extra == "dev"
41
+ Dynamic: license-file
42
+
43
+ <p align="center">
44
+ <img src="https://raw.githubusercontent.com/cubewise-code/rushti/rushti2dot0/docs/assets/images/rushti/RushTi2026_blue.svg" alt="RushTI" width="400" />
45
+ </p>
46
+
47
+ <p align="center">
48
+ <strong>Parallel TI execution engine for IBM Planning Analytics</strong>
49
+ </p>
50
+
51
+ <p align="center">
52
+ <a href="https://pypi.org/project/rushti/"><img src="https://img.shields.io/pypi/v/rushti?color=blue" alt="PyPI"></a>
53
+ <a href="https://pypi.org/project/rushti/"><img src="https://img.shields.io/pypi/pyversions/rushti" alt="Python"></a>
54
+ <a href="https://github.com/cubewise-code/rushti/blob/master/LICENSE"><img src="https://img.shields.io/github/license/cubewise-code/rushti" alt="License"></a>
55
+ </p>
56
+
57
+ ---
58
+
59
+ RushTI transforms sequential TurboIntegrator execution into intelligent, parallel workflows. Define task dependencies as a DAG, and RushTI schedules them across multiple workers — starting each task the moment its predecessors complete.
60
+
61
+ ## What's New in 2.0
62
+
63
+ - **DAG Execution** — True dependency-based scheduling replaces wait-based sequencing
64
+ - **JSON Task Files** — Structured format with metadata, settings, and stages
65
+ - **Self-Optimization** — EWMA-based learning reorders tasks from historical performance
66
+ - **Checkpoint & Resume** — Automatic progress saving with failure recovery
67
+ - **Exclusive Mode** — Prevents concurrent runs on shared TM1 servers
68
+ - **SQLite Statistics** — Persistent execution history with dashboards and analysis
69
+ - **TM1 Integration** — Read tasks from and write results to a TM1 cube
70
+ - **100% Backwards Compatible** — Legacy TXT task files work without changes
71
+
72
+ ## Installation
73
+
74
+ ### pip (recommended)
75
+
76
+ ```bash
77
+ pip install rushti
78
+ ```
79
+
80
+ For the latest beta:
81
+
82
+ ```bash
83
+ pip install rushti --pre
84
+ ```
85
+
86
+ ### uv
87
+
88
+ ```bash
89
+ uv pip install rushti
90
+ ```
91
+
92
+ ### Executable (no Python required)
93
+
94
+ Download `rushti.exe` from [GitHub Releases](https://github.com/cubewise-code/rushti/releases) — includes all dependencies.
95
+
96
+ ## Quick Start
97
+
98
+ **1. Configure TM1 connection**
99
+
100
+ ```ini
101
+ # config/config.ini
102
+ [tm1-finance]
103
+ address = localhost
104
+ port = 12354
105
+ ssl = true
106
+ user = admin
107
+ password = apple
108
+ ```
109
+
110
+ **2. Create a task file**
111
+
112
+ ```json
113
+ {
114
+ "version": "2.0",
115
+ "tasks": [
116
+ { "id": "1", "instance": "tm1-finance", "process": "Extract.GL.Data" },
117
+ { "id": "2", "instance": "tm1-finance", "process": "Extract.FX.Rates" },
118
+ {
119
+ "id": "3",
120
+ "instance": "tm1-finance",
121
+ "process": "Transform.Currency",
122
+ "predecessors": ["1", "2"]
123
+ },
124
+ {
125
+ "id": "4",
126
+ "instance": "tm1-finance",
127
+ "process": "Build.Reports",
128
+ "predecessors": ["3"]
129
+ }
130
+ ]
131
+ }
132
+ ```
133
+
134
+ **3. Validate and run**
135
+
136
+ ```bash
137
+ rushti tasks validate --tasks daily-refresh.json --skip-tm1-check
138
+ rushti run --tasks daily-refresh.json --max-workers 4
139
+ ```
140
+
141
+ ## Documentation
142
+
143
+ Full documentation is available at **[cubewise-code.github.io/rushti/docs](https://cubewise-code.github.io/rushti/docs/)**
144
+
145
+ - [Installation](https://cubewise-code.github.io/rushti/docs/getting-started/installation/)
146
+ - [Quick Start](https://cubewise-code.github.io/rushti/docs/getting-started/quick-start/)
147
+ - [Task Files](https://cubewise-code.github.io/rushti/docs/getting-started/task-files/)
148
+ - [CLI Reference](https://cubewise-code.github.io/rushti/docs/advanced/cli-reference/)
149
+ - [Settings Reference](https://cubewise-code.github.io/rushti/docs/advanced/settings-reference/)
150
+
151
+ ## Website
152
+
153
+ Visit **[cubewise-code.github.io/rushti](https://cubewise-code.github.io/rushti/)** for interactive demos, feature overviews, and architecture visualizations.
154
+
155
+ ## Links
156
+
157
+ - [GitHub](https://github.com/cubewise-code/rushti)
158
+ - [PyPI](https://pypi.org/project/rushti/)
159
+ - [Issues](https://github.com/cubewise-code/rushti/issues)
160
+ - [Changelog](https://github.com/cubewise-code/rushti/releases)
161
+
162
+ ## Built With
163
+
164
+ [TM1py](https://github.com/cubewise-code/TM1py) — Python interface to the TM1 REST API
165
+
166
+ ## License
167
+
168
+ MIT — see [LICENSE](LICENSE) for details.
rushti-2.0.0/README.md ADDED
@@ -0,0 +1,126 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/cubewise-code/rushti/rushti2dot0/docs/assets/images/rushti/RushTi2026_blue.svg" alt="RushTI" width="400" />
3
+ </p>
4
+
5
+ <p align="center">
6
+ <strong>Parallel TI execution engine for IBM Planning Analytics</strong>
7
+ </p>
8
+
9
+ <p align="center">
10
+ <a href="https://pypi.org/project/rushti/"><img src="https://img.shields.io/pypi/v/rushti?color=blue" alt="PyPI"></a>
11
+ <a href="https://pypi.org/project/rushti/"><img src="https://img.shields.io/pypi/pyversions/rushti" alt="Python"></a>
12
+ <a href="https://github.com/cubewise-code/rushti/blob/master/LICENSE"><img src="https://img.shields.io/github/license/cubewise-code/rushti" alt="License"></a>
13
+ </p>
14
+
15
+ ---
16
+
17
+ RushTI transforms sequential TurboIntegrator execution into intelligent, parallel workflows. Define task dependencies as a DAG, and RushTI schedules them across multiple workers — starting each task the moment its predecessors complete.
18
+
19
+ ## What's New in 2.0
20
+
21
+ - **DAG Execution** — True dependency-based scheduling replaces wait-based sequencing
22
+ - **JSON Task Files** — Structured format with metadata, settings, and stages
23
+ - **Self-Optimization** — EWMA-based learning reorders tasks from historical performance
24
+ - **Checkpoint & Resume** — Automatic progress saving with failure recovery
25
+ - **Exclusive Mode** — Prevents concurrent runs on shared TM1 servers
26
+ - **SQLite Statistics** — Persistent execution history with dashboards and analysis
27
+ - **TM1 Integration** — Read tasks from and write results to a TM1 cube
28
+ - **100% Backwards Compatible** — Legacy TXT task files work without changes
29
+
30
+ ## Installation
31
+
32
+ ### pip (recommended)
33
+
34
+ ```bash
35
+ pip install rushti
36
+ ```
37
+
38
+ For the latest beta:
39
+
40
+ ```bash
41
+ pip install rushti --pre
42
+ ```
43
+
44
+ ### uv
45
+
46
+ ```bash
47
+ uv pip install rushti
48
+ ```
49
+
50
+ ### Executable (no Python required)
51
+
52
+ Download `rushti.exe` from [GitHub Releases](https://github.com/cubewise-code/rushti/releases) — includes all dependencies.
53
+
54
+ ## Quick Start
55
+
56
+ **1. Configure TM1 connection**
57
+
58
+ ```ini
59
+ # config/config.ini
60
+ [tm1-finance]
61
+ address = localhost
62
+ port = 12354
63
+ ssl = true
64
+ user = admin
65
+ password = apple
66
+ ```
67
+
68
+ **2. Create a task file**
69
+
70
+ ```json
71
+ {
72
+ "version": "2.0",
73
+ "tasks": [
74
+ { "id": "1", "instance": "tm1-finance", "process": "Extract.GL.Data" },
75
+ { "id": "2", "instance": "tm1-finance", "process": "Extract.FX.Rates" },
76
+ {
77
+ "id": "3",
78
+ "instance": "tm1-finance",
79
+ "process": "Transform.Currency",
80
+ "predecessors": ["1", "2"]
81
+ },
82
+ {
83
+ "id": "4",
84
+ "instance": "tm1-finance",
85
+ "process": "Build.Reports",
86
+ "predecessors": ["3"]
87
+ }
88
+ ]
89
+ }
90
+ ```
91
+
92
+ **3. Validate and run**
93
+
94
+ ```bash
95
+ rushti tasks validate --tasks daily-refresh.json --skip-tm1-check
96
+ rushti run --tasks daily-refresh.json --max-workers 4
97
+ ```
98
+
99
+ ## Documentation
100
+
101
+ Full documentation is available at **[cubewise-code.github.io/rushti/docs](https://cubewise-code.github.io/rushti/docs/)**
102
+
103
+ - [Installation](https://cubewise-code.github.io/rushti/docs/getting-started/installation/)
104
+ - [Quick Start](https://cubewise-code.github.io/rushti/docs/getting-started/quick-start/)
105
+ - [Task Files](https://cubewise-code.github.io/rushti/docs/getting-started/task-files/)
106
+ - [CLI Reference](https://cubewise-code.github.io/rushti/docs/advanced/cli-reference/)
107
+ - [Settings Reference](https://cubewise-code.github.io/rushti/docs/advanced/settings-reference/)
108
+
109
+ ## Website
110
+
111
+ Visit **[cubewise-code.github.io/rushti](https://cubewise-code.github.io/rushti/)** for interactive demos, feature overviews, and architecture visualizations.
112
+
113
+ ## Links
114
+
115
+ - [GitHub](https://github.com/cubewise-code/rushti)
116
+ - [PyPI](https://pypi.org/project/rushti/)
117
+ - [Issues](https://github.com/cubewise-code/rushti/issues)
118
+ - [Changelog](https://github.com/cubewise-code/rushti/releases)
119
+
120
+ ## Built With
121
+
122
+ [TM1py](https://github.com/cubewise-code/TM1py) — Python interface to the TM1 REST API
123
+
124
+ ## License
125
+
126
+ MIT — see [LICENSE](LICENSE) for details.
@@ -0,0 +1,125 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "rushti"
7
+ version = "2.0.0"
8
+ description = "RushTI - Parallel TM1 TurboIntegrator Process Execution"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ authors = [
12
+ {name = "nicolasbisurgi", email = "nbisurgi@cubewise.com"},
13
+ {name = "Marius Wirtz", email = "mwirtz@cubewise.com"}
14
+ ]
15
+ maintainers = [
16
+ {name = "Cubewise CODE"},
17
+ ]
18
+ keywords = ["TM1", "Planning Analytics", "TM1Py", "TurboIntegrator", "orchestration", "automation", "ETL"]
19
+ classifiers = [
20
+ "Development Status :: 5 - Production/Stable",
21
+ "Intended Audience :: Developers",
22
+ "Intended Audience :: System Administrators",
23
+ "Operating System :: OS Independent",
24
+ "Programming Language :: Python :: 3",
25
+ "Programming Language :: Python :: 3.9",
26
+ "Programming Language :: Python :: 3.10",
27
+ "Programming Language :: Python :: 3.11",
28
+ "Programming Language :: Python :: 3.12",
29
+ "Topic :: Database",
30
+ "Topic :: System :: Systems Administration",
31
+ ]
32
+ requires-python = ">=3.9"
33
+ dependencies = [
34
+ "TM1py>=2.0.0",
35
+ "keyring>=25.7.0",
36
+ "chardet>=5.2.0",
37
+ "pandas>=2.0.0",
38
+ ]
39
+
40
+ [project.optional-dependencies]
41
+ dev = [
42
+ "pytest>=7.0.0",
43
+ "pytest-asyncio",
44
+ "pytest-cov",
45
+ "pyinstaller>=5.0.0",
46
+ "pre-commit",
47
+ "black>=24.10.0",
48
+ "ruff>=0.8.0",
49
+ "mypy",
50
+ ]
51
+
52
+ [project.urls]
53
+ Homepage = "https://cubewise-code.github.io/rushti/"
54
+ Documentation = "https://cubewise-code.github.io/rushti/docs/"
55
+ Repository = "https://github.com/cubewise-code/rushti"
56
+ Issues = "https://github.com/cubewise-code/rushti/issues"
57
+ Changelog = "https://github.com/cubewise-code/rushti/releases"
58
+
59
+ [project.scripts]
60
+ rushti = "rushti.cli:main"
61
+
62
+ [tool.setuptools]
63
+ package-dir = {"" = "src"}
64
+
65
+ [tool.setuptools.packages.find]
66
+ where = ["src"]
67
+
68
+ [tool.setuptools.package-data]
69
+ "rushti.templates" = ["*.html"]
70
+
71
+ [tool.pytest.ini_options]
72
+ pythonpath = ["src"]
73
+ testpaths = ["tests"]
74
+ python_files = ["test_*.py"]
75
+ python_classes = ["Test*"]
76
+ python_functions = ["test_*"]
77
+ markers = [
78
+ "requires_tm1: marks tests as requiring TM1 connection (deselect with '-m \"not requires_tm1\"')",
79
+ "slow: marks tests as slow running",
80
+ "integration: marks tests as integration tests",
81
+ ]
82
+ asyncio_mode = "auto"
83
+
84
+ [tool.black]
85
+ line-length = 100
86
+ target-version = ["py39", "py310", "py311", "py312"]
87
+ include = '\.pyi?$'
88
+ exclude = '''
89
+ /(
90
+ \.eggs
91
+ | \.git
92
+ | \.hg
93
+ | \.mypy_cache
94
+ | \.tox
95
+ | \.venv
96
+ | _build
97
+ | buck-out
98
+ | build
99
+ | dist
100
+ )/
101
+ '''
102
+
103
+ [tool.isort]
104
+ profile = "black"
105
+ line_length = 100
106
+ src_paths = ["src", "tests"]
107
+
108
+ [tool.ruff]
109
+ line-length = 100
110
+ target-version = "py39"
111
+
112
+ [tool.ruff.lint]
113
+ select = ["E", "F", "W"]
114
+ # E501 handled by Black formatter (which intentionally skips strings/comments)
115
+ ignore = ["E501"]
116
+
117
+ [tool.ruff.lint.per-file-ignores]
118
+ # Integration tests manipulate sys.path before imports (standard pattern)
119
+ "tests/integration/*.py" = ["E402"]
120
+
121
+ [tool.mypy]
122
+ python_version = "3.9"
123
+ warn_return_any = true
124
+ warn_unused_configs = true
125
+ ignore_missing_imports = true
rushti-2.0.0/setup.cfg ADDED
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,33 @@
1
+ """
2
+ RushTI - Parallel TM1 TurboIntegrator Process Execution.
3
+
4
+ This package provides tools for executing TM1 TI processes in parallel
5
+ with dependency management, checkpoint/resume support, and execution logging.
6
+ """
7
+
8
+ __version__ = "2.0.0"
9
+ __app_name__ = "RushTI"
10
+
11
+ # Core exports for programmatic use
12
+ from rushti.task import Task, OptimizedTask, ExecutionMode
13
+ from rushti.dag import DAG
14
+ from rushti.checkpoint import Checkpoint, CheckpointManager
15
+ from rushti.settings import Settings, load_settings
16
+ from rushti.taskfile import Taskfile, TaskDefinition, parse_json_taskfile
17
+
18
+ __all__ = [
19
+ "__version__",
20
+ "__app_name__",
21
+ # Core classes
22
+ "Task",
23
+ "OptimizedTask",
24
+ "ExecutionMode",
25
+ "DAG",
26
+ "Checkpoint",
27
+ "CheckpointManager",
28
+ "Settings",
29
+ "load_settings",
30
+ "Taskfile",
31
+ "TaskDefinition",
32
+ "parse_json_taskfile",
33
+ ]