tlpytools 0.2.1__tar.gz → 0.2.2__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.
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.github/copilot-instructions.md +2 -2
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.github/workflows/deploy.yml +1 -1
- {tlpytools-0.2.1 → tlpytools-0.2.2}/CHANGELOG.md +6 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/DEVELOPER_GUIDE.md +4 -4
- {tlpytools-0.2.1 → tlpytools-0.2.2}/PKG-INFO +1 -1
- {tlpytools-0.2.1 → tlpytools-0.2.2}/pyproject.toml +1 -1
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/__init__.py +1 -1
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/orca/orchestrator.py +22 -23
- {tlpytools-0.2.1 → tlpytools-0.2.2}/uv.lock +1 -1
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.env.example +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.github/skills/README.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.github/skills/prepare-official-release/SKILL.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.github/workflows/code-formatting-pr.yml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.github/workflows/code-formatting.yml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.github/workflows/test.yml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.gitignore +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.pre-commit-config.yaml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/.python-version +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/ENVIRONMENT_VARIABLES.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/Makefile +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/README.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/docs/adls_server.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/docs/azure_credential_manager.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/docs/diagrams/README.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/docs/diagrams/orca_cloud_workflow.drawio +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/docs/diagrams/orca_detailed_steps.drawio +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/docs/diagrams/orca_file_structure.drawio +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/docs/diagrams/orca_local_workflow.drawio +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/docs/diagrams/orca_main_features.drawio +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/docs/unified_logging.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/requirements.txt +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/examples/batchtask.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/examples/data_files/example.csv +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/examples/mydataproject.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/examples/readwritedata.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/examples/unified_logging.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/adls_server.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/azure_credential.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/config.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/data.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/data_store.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/env_config.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/log.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/orca/README.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/orca/__init__.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/orca/__main__.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/orca/batch_task_runner.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/orca/cli.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/orca/orca_model_config_barebone.yaml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/orca/orca_model_config_example.yaml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/src/tlpytools/sql_server.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/tests/README.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/tests/__init__.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/tests/conftest.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/tests/run_tests.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/tests/test_azure_credential.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/tests/test_basic.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/tests/test_core.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/tests/test_orca_integration.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.2}/tests/test_orca_unit.py +0 -0
|
@@ -98,8 +98,8 @@ Interpretation for agent PRs:
|
|
|
98
98
|
|
|
99
99
|
Observed result:
|
|
100
100
|
- Build succeeds and produces:
|
|
101
|
-
- `dist/tlpytools-0.2.
|
|
102
|
-
- `dist/tlpytools-0.2.
|
|
101
|
+
- `dist/tlpytools-0.2.2.tar.gz`
|
|
102
|
+
- `dist/tlpytools-0.2.2-py3-none-any.whl`
|
|
103
103
|
|
|
104
104
|
### 5) Run
|
|
105
105
|
- ORCA CLI (module form):
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to TLPyTools will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.2.2]
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
* Fix python path leaks by cleaning up PYTHONPATH and PYTHONHOME during sub component model runs
|
|
9
|
+
* Clear stale errors when resuming or starting new runs on old scenario folders
|
|
10
|
+
|
|
5
11
|
## [0.2.1]
|
|
6
12
|
|
|
7
13
|
### Changed
|
|
@@ -200,7 +200,7 @@ make check-all
|
|
|
200
200
|
4. Click **"Run workflow"** button
|
|
201
201
|
5. Fill in the required information:
|
|
202
202
|
- **Branch**: Select `main` (or your release branch)
|
|
203
|
-
- **Version number**: Enter the new version (e.g., `0.2.
|
|
203
|
+
- **Version number**: Enter the new version (e.g., `0.2.2`)
|
|
204
204
|
- **Is this a pre-release?**: Check if this is a pre-release version
|
|
205
205
|
|
|
206
206
|
#### 3. Monitor the Release
|
|
@@ -219,7 +219,7 @@ After the workflow completes:
|
|
|
219
219
|
|
|
220
220
|
```bash
|
|
221
221
|
# Verify the package is available on PyPI
|
|
222
|
-
pip install tlpytools==0.2.
|
|
222
|
+
pip install tlpytools==0.2.2 # Replace with your version
|
|
223
223
|
|
|
224
224
|
# Test installation in a fresh environment
|
|
225
225
|
python -c "import tlpytools; print(tlpytools.__version__)"
|
|
@@ -235,8 +235,8 @@ TLPyTools follows semantic versioning (SemVer):
|
|
|
235
235
|
|
|
236
236
|
Examples:
|
|
237
237
|
- `0.1.7` → `0.1.8` (patch release)
|
|
238
|
-
- `0.1.8` → `0.2.
|
|
239
|
-
- `0.2.
|
|
238
|
+
- `0.1.8` → `0.2.2` (minor release)
|
|
239
|
+
- `0.2.2` → `1.0.0` (major release)
|
|
240
240
|
|
|
241
241
|
### Pre-releases
|
|
242
242
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tlpytools
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: TransLink's Python Tools - A comprehensive toolkit for transportation modeling and forecasting
|
|
5
5
|
Project-URL: Homepage, https://github.com/TransLinkForecasting/tlpytools
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/TransLinkForecasting/tlpytools/issues
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tlpytools"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.2"
|
|
8
8
|
description = "TransLink's Python Tools - A comprehensive toolkit for transportation modeling and forecasting"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10.0, <3.13"
|
|
@@ -3737,16 +3737,15 @@ class OrcaOrchestrator:
|
|
|
3737
3737
|
|
|
3738
3738
|
# Create a platform-specific command to set the PYTHONPATH
|
|
3739
3739
|
# Use step_directory instead of os.getcwd() for consistency
|
|
3740
|
+
# PYTHONHOME and PYTHONPATH are cleared first to prevent the parent
|
|
3741
|
+
# Python process (e.g. Jupyter/tlpytools env) from leaking its
|
|
3742
|
+
# library paths into the component subprocess
|
|
3740
3743
|
if os.name == "nt": # Windows
|
|
3741
3744
|
# On Windows, use SET command
|
|
3742
|
-
pythonpath_cmd =
|
|
3743
|
-
f"set PYTHONPATH={ORCA_DIR};{step_directory};%PYTHONPATH% && "
|
|
3744
|
-
)
|
|
3745
|
+
pythonpath_cmd = f"set PYTHONHOME= && set PYTHONPATH={ORCA_DIR};{step_directory} && "
|
|
3745
3746
|
else: # Unix/Linux/Mac
|
|
3746
3747
|
# On Unix-like systems, use export command
|
|
3747
|
-
pythonpath_cmd =
|
|
3748
|
-
f"export PYTHONPATH={ORCA_DIR}:{step_directory}:$PYTHONPATH && "
|
|
3749
|
-
)
|
|
3748
|
+
pythonpath_cmd = f"unset PYTHONHOME && export PYTHONPATH={ORCA_DIR}:{step_directory} && "
|
|
3750
3749
|
|
|
3751
3750
|
# Modify the command to ensure environment can be found
|
|
3752
3751
|
modified_command = f"{pythonpath_cmd}{command}"
|
|
@@ -6269,8 +6268,8 @@ class OrcaOrchestrator:
|
|
|
6269
6268
|
# Reload configuration to pick up any YAML changes
|
|
6270
6269
|
self.reload_configuration()
|
|
6271
6270
|
|
|
6272
|
-
# Update status
|
|
6273
|
-
self.state.update(status="running")
|
|
6271
|
+
# Update status and clear any stale error from a previous failed run
|
|
6272
|
+
self.state.update(status="running", error=None)
|
|
6274
6273
|
|
|
6275
6274
|
# Add safety counter to prevent infinite loops
|
|
6276
6275
|
max_steps = self.state.get("total_iterations", 1) * len(
|
|
@@ -6334,8 +6333,8 @@ class OrcaOrchestrator:
|
|
|
6334
6333
|
self.logger.error("Error executing step: %s", step_name)
|
|
6335
6334
|
return False
|
|
6336
6335
|
|
|
6337
|
-
# Update state to reflect completion
|
|
6338
|
-
self.state.update(status="completed")
|
|
6336
|
+
# Update state to reflect completion and clear any previously recorded error
|
|
6337
|
+
self.state.update(status="completed", error=None)
|
|
6339
6338
|
self.logger.info("Model run completed successfully")
|
|
6340
6339
|
return True
|
|
6341
6340
|
|
|
@@ -6356,8 +6355,8 @@ class OrcaOrchestrator:
|
|
|
6356
6355
|
# Reload configuration to pick up any YAML changes
|
|
6357
6356
|
self.reload_configuration()
|
|
6358
6357
|
|
|
6359
|
-
# Update status
|
|
6360
|
-
self.state.update(status="running")
|
|
6358
|
+
# Update status and clear any stale error from a previous failed run
|
|
6359
|
+
self.state.update(status="running", error=None)
|
|
6361
6360
|
|
|
6362
6361
|
# Add safety counter to prevent infinite loops
|
|
6363
6362
|
max_steps = self.state.get("total_iterations", 1) * len(
|
|
@@ -6437,8 +6436,8 @@ class OrcaOrchestrator:
|
|
|
6437
6436
|
|
|
6438
6437
|
return False
|
|
6439
6438
|
|
|
6440
|
-
# Update state to reflect completion
|
|
6441
|
-
self.state.update(status="completed")
|
|
6439
|
+
# Update state to reflect completion and clear any previously recorded error
|
|
6440
|
+
self.state.update(status="completed", error=None)
|
|
6442
6441
|
|
|
6443
6442
|
# Final sync to cloud after completion
|
|
6444
6443
|
self.logger.info("Final state sync to cloud after model completion")
|
|
@@ -6495,12 +6494,12 @@ class OrcaOrchestrator:
|
|
|
6495
6494
|
current_iter,
|
|
6496
6495
|
max_iteration,
|
|
6497
6496
|
)
|
|
6498
|
-
self.state.update(status="completed")
|
|
6497
|
+
self.state.update(status="completed", error=None)
|
|
6499
6498
|
return True
|
|
6500
6499
|
|
|
6501
|
-
# Update status to running if not already
|
|
6500
|
+
# Update status to running if not already, clearing any stale error
|
|
6502
6501
|
if self.state.get("status") != "running":
|
|
6503
|
-
self.state.update(status="running")
|
|
6502
|
+
self.state.update(status="running", error=None)
|
|
6504
6503
|
|
|
6505
6504
|
# Get the next step to execute
|
|
6506
6505
|
step_name = self.state.get_next_step()
|
|
@@ -6517,7 +6516,7 @@ class OrcaOrchestrator:
|
|
|
6517
6516
|
# Check if we've exceeded the total iterations
|
|
6518
6517
|
if self.state.is_all_iterations_complete():
|
|
6519
6518
|
self.logger.info("All iterations completed")
|
|
6520
|
-
self.state.update(status="completed")
|
|
6519
|
+
self.state.update(status="completed", error=None)
|
|
6521
6520
|
return True
|
|
6522
6521
|
|
|
6523
6522
|
# Get the first step of the new iteration
|
|
@@ -6552,7 +6551,7 @@ class OrcaOrchestrator:
|
|
|
6552
6551
|
|
|
6553
6552
|
# Check if we just completed the last iteration
|
|
6554
6553
|
if self.state.is_all_iterations_complete():
|
|
6555
|
-
self.state.update(status="completed")
|
|
6554
|
+
self.state.update(status="completed", error=None)
|
|
6556
6555
|
self.logger.info("Model run completed successfully")
|
|
6557
6556
|
|
|
6558
6557
|
self.logger.info("Step '%s' completed successfully", step_name)
|
|
@@ -6597,12 +6596,12 @@ class OrcaOrchestrator:
|
|
|
6597
6596
|
current_iter,
|
|
6598
6597
|
max_iteration,
|
|
6599
6598
|
)
|
|
6600
|
-
self.state.update(status="completed")
|
|
6599
|
+
self.state.update(status="completed", error=None)
|
|
6601
6600
|
return True
|
|
6602
6601
|
|
|
6603
|
-
# Update status to running if not already
|
|
6602
|
+
# Update status to running if not already, clearing any stale error
|
|
6604
6603
|
if self.state.get("status") != "running":
|
|
6605
|
-
self.state.update(status="running")
|
|
6604
|
+
self.state.update(status="running", error=None)
|
|
6606
6605
|
|
|
6607
6606
|
# Remember the starting iteration
|
|
6608
6607
|
starting_iter = self.state.get_display_iteration()
|
|
@@ -6624,7 +6623,7 @@ class OrcaOrchestrator:
|
|
|
6624
6623
|
|
|
6625
6624
|
# Check if we've completed all iterations
|
|
6626
6625
|
if self.state.is_all_iterations_complete():
|
|
6627
|
-
self.state.update(status="completed")
|
|
6626
|
+
self.state.update(status="completed", error=None)
|
|
6628
6627
|
self.logger.info("All iterations completed")
|
|
6629
6628
|
|
|
6630
6629
|
return True
|
|
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
|
|
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
|