tlpytools 0.2.1__tar.gz → 0.2.3__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.3}/.github/copilot-instructions.md +2 -2
- {tlpytools-0.2.1 → tlpytools-0.2.3}/.github/workflows/deploy.yml +1 -1
- {tlpytools-0.2.1 → tlpytools-0.2.3}/CHANGELOG.md +11 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/DEVELOPER_GUIDE.md +4 -4
- {tlpytools-0.2.1 → tlpytools-0.2.3}/PKG-INFO +1 -1
- {tlpytools-0.2.1 → tlpytools-0.2.3}/pyproject.toml +1 -1
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/__init__.py +1 -1
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/orca/orchestrator.py +26 -22
- {tlpytools-0.2.1 → tlpytools-0.2.3}/uv.lock +764 -755
- {tlpytools-0.2.1 → tlpytools-0.2.3}/.env.example +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/.github/skills/README.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/.github/skills/prepare-official-release/SKILL.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/.github/workflows/code-formatting-pr.yml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/.github/workflows/code-formatting.yml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/.github/workflows/test.yml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/.gitignore +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/.pre-commit-config.yaml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/.python-version +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/ENVIRONMENT_VARIABLES.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/Makefile +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/README.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/docs/adls_server.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/docs/azure_credential_manager.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/docs/diagrams/README.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/docs/diagrams/orca_cloud_workflow.drawio +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/docs/diagrams/orca_detailed_steps.drawio +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/docs/diagrams/orca_file_structure.drawio +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/docs/diagrams/orca_local_workflow.drawio +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/docs/diagrams/orca_main_features.drawio +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/docs/unified_logging.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/requirements.txt +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/examples/batchtask.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/examples/data_files/example.csv +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/examples/mydataproject.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/examples/readwritedata.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/examples/unified_logging.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/adls_server.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/azure_credential.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/config.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/data.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/data_store.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/env_config.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/log.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/orca/README.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/orca/__init__.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/orca/__main__.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/orca/batch_task_runner.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/orca/cli.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/orca/orca_model_config_barebone.yaml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/orca/orca_model_config_example.yaml +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/src/tlpytools/sql_server.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/tests/README.md +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/tests/__init__.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/tests/conftest.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/tests/run_tests.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/tests/test_azure_credential.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/tests/test_basic.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/tests/test_core.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/tests/test_orca_integration.py +0 -0
- {tlpytools-0.2.1 → tlpytools-0.2.3}/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.3.tar.gz`
|
|
102
|
+
- `dist/tlpytools-0.2.3-py3-none-any.whl`
|
|
103
103
|
|
|
104
104
|
### 5) Run
|
|
105
105
|
- ORCA CLI (module form):
|
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to TLPyTools will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.2.3]
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
* Fix python cmd syntax issue introduced in 0.2.2
|
|
9
|
+
|
|
10
|
+
## [0.2.2]
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
* Fix python path leaks by cleaning up PYTHONPATH and PYTHONHOME during sub component model runs
|
|
14
|
+
* Clear stale errors when resuming or starting new runs on old scenario folders
|
|
15
|
+
|
|
5
16
|
## [0.2.1]
|
|
6
17
|
|
|
7
18
|
### 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.3`)
|
|
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.3 # 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.3` (minor release)
|
|
239
|
+
- `0.2.3` → `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.3
|
|
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.3"
|
|
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,20 @@ 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
|
+
# Use quoted SET form to clear PYTHONHOME without risk of
|
|
3745
|
+
# capturing trailing whitespace (bare "set VAR= " would set
|
|
3746
|
+
# VAR to a space, breaking the Python stdlib path lookup).
|
|
3742
3747
|
pythonpath_cmd = (
|
|
3743
|
-
f
|
|
3748
|
+
f'set "PYTHONHOME=" && '
|
|
3749
|
+
f'set "PYTHONPATH={ORCA_DIR};{step_directory}" && '
|
|
3744
3750
|
)
|
|
3745
3751
|
else: # Unix/Linux/Mac
|
|
3746
3752
|
# On Unix-like systems, use export command
|
|
3747
|
-
pythonpath_cmd =
|
|
3748
|
-
f"export PYTHONPATH={ORCA_DIR}:{step_directory}:$PYTHONPATH && "
|
|
3749
|
-
)
|
|
3753
|
+
pythonpath_cmd = f"unset PYTHONHOME && export PYTHONPATH={ORCA_DIR}:{step_directory} && "
|
|
3750
3754
|
|
|
3751
3755
|
# Modify the command to ensure environment can be found
|
|
3752
3756
|
modified_command = f"{pythonpath_cmd}{command}"
|
|
@@ -6269,8 +6273,8 @@ class OrcaOrchestrator:
|
|
|
6269
6273
|
# Reload configuration to pick up any YAML changes
|
|
6270
6274
|
self.reload_configuration()
|
|
6271
6275
|
|
|
6272
|
-
# Update status
|
|
6273
|
-
self.state.update(status="running")
|
|
6276
|
+
# Update status and clear any stale error from a previous failed run
|
|
6277
|
+
self.state.update(status="running", error=None)
|
|
6274
6278
|
|
|
6275
6279
|
# Add safety counter to prevent infinite loops
|
|
6276
6280
|
max_steps = self.state.get("total_iterations", 1) * len(
|
|
@@ -6334,8 +6338,8 @@ class OrcaOrchestrator:
|
|
|
6334
6338
|
self.logger.error("Error executing step: %s", step_name)
|
|
6335
6339
|
return False
|
|
6336
6340
|
|
|
6337
|
-
# Update state to reflect completion
|
|
6338
|
-
self.state.update(status="completed")
|
|
6341
|
+
# Update state to reflect completion and clear any previously recorded error
|
|
6342
|
+
self.state.update(status="completed", error=None)
|
|
6339
6343
|
self.logger.info("Model run completed successfully")
|
|
6340
6344
|
return True
|
|
6341
6345
|
|
|
@@ -6356,8 +6360,8 @@ class OrcaOrchestrator:
|
|
|
6356
6360
|
# Reload configuration to pick up any YAML changes
|
|
6357
6361
|
self.reload_configuration()
|
|
6358
6362
|
|
|
6359
|
-
# Update status
|
|
6360
|
-
self.state.update(status="running")
|
|
6363
|
+
# Update status and clear any stale error from a previous failed run
|
|
6364
|
+
self.state.update(status="running", error=None)
|
|
6361
6365
|
|
|
6362
6366
|
# Add safety counter to prevent infinite loops
|
|
6363
6367
|
max_steps = self.state.get("total_iterations", 1) * len(
|
|
@@ -6437,8 +6441,8 @@ class OrcaOrchestrator:
|
|
|
6437
6441
|
|
|
6438
6442
|
return False
|
|
6439
6443
|
|
|
6440
|
-
# Update state to reflect completion
|
|
6441
|
-
self.state.update(status="completed")
|
|
6444
|
+
# Update state to reflect completion and clear any previously recorded error
|
|
6445
|
+
self.state.update(status="completed", error=None)
|
|
6442
6446
|
|
|
6443
6447
|
# Final sync to cloud after completion
|
|
6444
6448
|
self.logger.info("Final state sync to cloud after model completion")
|
|
@@ -6495,12 +6499,12 @@ class OrcaOrchestrator:
|
|
|
6495
6499
|
current_iter,
|
|
6496
6500
|
max_iteration,
|
|
6497
6501
|
)
|
|
6498
|
-
self.state.update(status="completed")
|
|
6502
|
+
self.state.update(status="completed", error=None)
|
|
6499
6503
|
return True
|
|
6500
6504
|
|
|
6501
|
-
# Update status to running if not already
|
|
6505
|
+
# Update status to running if not already, clearing any stale error
|
|
6502
6506
|
if self.state.get("status") != "running":
|
|
6503
|
-
self.state.update(status="running")
|
|
6507
|
+
self.state.update(status="running", error=None)
|
|
6504
6508
|
|
|
6505
6509
|
# Get the next step to execute
|
|
6506
6510
|
step_name = self.state.get_next_step()
|
|
@@ -6517,7 +6521,7 @@ class OrcaOrchestrator:
|
|
|
6517
6521
|
# Check if we've exceeded the total iterations
|
|
6518
6522
|
if self.state.is_all_iterations_complete():
|
|
6519
6523
|
self.logger.info("All iterations completed")
|
|
6520
|
-
self.state.update(status="completed")
|
|
6524
|
+
self.state.update(status="completed", error=None)
|
|
6521
6525
|
return True
|
|
6522
6526
|
|
|
6523
6527
|
# Get the first step of the new iteration
|
|
@@ -6552,7 +6556,7 @@ class OrcaOrchestrator:
|
|
|
6552
6556
|
|
|
6553
6557
|
# Check if we just completed the last iteration
|
|
6554
6558
|
if self.state.is_all_iterations_complete():
|
|
6555
|
-
self.state.update(status="completed")
|
|
6559
|
+
self.state.update(status="completed", error=None)
|
|
6556
6560
|
self.logger.info("Model run completed successfully")
|
|
6557
6561
|
|
|
6558
6562
|
self.logger.info("Step '%s' completed successfully", step_name)
|
|
@@ -6597,12 +6601,12 @@ class OrcaOrchestrator:
|
|
|
6597
6601
|
current_iter,
|
|
6598
6602
|
max_iteration,
|
|
6599
6603
|
)
|
|
6600
|
-
self.state.update(status="completed")
|
|
6604
|
+
self.state.update(status="completed", error=None)
|
|
6601
6605
|
return True
|
|
6602
6606
|
|
|
6603
|
-
# Update status to running if not already
|
|
6607
|
+
# Update status to running if not already, clearing any stale error
|
|
6604
6608
|
if self.state.get("status") != "running":
|
|
6605
|
-
self.state.update(status="running")
|
|
6609
|
+
self.state.update(status="running", error=None)
|
|
6606
6610
|
|
|
6607
6611
|
# Remember the starting iteration
|
|
6608
6612
|
starting_iter = self.state.get_display_iteration()
|
|
@@ -6624,7 +6628,7 @@ class OrcaOrchestrator:
|
|
|
6624
6628
|
|
|
6625
6629
|
# Check if we've completed all iterations
|
|
6626
6630
|
if self.state.is_all_iterations_complete():
|
|
6627
|
-
self.state.update(status="completed")
|
|
6631
|
+
self.state.update(status="completed", error=None)
|
|
6628
6632
|
self.logger.info("All iterations completed")
|
|
6629
6633
|
|
|
6630
6634
|
return True
|