tlpytools 0.2.2__tar.gz → 0.2.4__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 (60) hide show
  1. {tlpytools-0.2.2 → tlpytools-0.2.4}/.github/copilot-instructions.md +2 -2
  2. {tlpytools-0.2.2 → tlpytools-0.2.4}/.github/workflows/deploy.yml +1 -1
  3. {tlpytools-0.2.2 → tlpytools-0.2.4}/CHANGELOG.md +10 -0
  4. {tlpytools-0.2.2 → tlpytools-0.2.4}/DEVELOPER_GUIDE.md +2 -7
  5. {tlpytools-0.2.2 → tlpytools-0.2.4}/PKG-INFO +1 -1
  6. {tlpytools-0.2.2 → tlpytools-0.2.4}/pyproject.toml +1 -1
  7. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/__init__.py +1 -1
  8. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/orca/orchestrator.py +45 -12
  9. {tlpytools-0.2.2 → tlpytools-0.2.4}/uv.lock +842 -790
  10. {tlpytools-0.2.2 → tlpytools-0.2.4}/.env.example +0 -0
  11. {tlpytools-0.2.2 → tlpytools-0.2.4}/.github/skills/README.md +0 -0
  12. {tlpytools-0.2.2 → tlpytools-0.2.4}/.github/skills/prepare-official-release/SKILL.md +0 -0
  13. {tlpytools-0.2.2 → tlpytools-0.2.4}/.github/workflows/code-formatting-pr.yml +0 -0
  14. {tlpytools-0.2.2 → tlpytools-0.2.4}/.github/workflows/code-formatting.yml +0 -0
  15. {tlpytools-0.2.2 → tlpytools-0.2.4}/.github/workflows/test.yml +0 -0
  16. {tlpytools-0.2.2 → tlpytools-0.2.4}/.gitignore +0 -0
  17. {tlpytools-0.2.2 → tlpytools-0.2.4}/.pre-commit-config.yaml +0 -0
  18. {tlpytools-0.2.2 → tlpytools-0.2.4}/.python-version +0 -0
  19. {tlpytools-0.2.2 → tlpytools-0.2.4}/ENVIRONMENT_VARIABLES.md +0 -0
  20. {tlpytools-0.2.2 → tlpytools-0.2.4}/Makefile +0 -0
  21. {tlpytools-0.2.2 → tlpytools-0.2.4}/README.md +0 -0
  22. {tlpytools-0.2.2 → tlpytools-0.2.4}/docs/adls_server.md +0 -0
  23. {tlpytools-0.2.2 → tlpytools-0.2.4}/docs/azure_credential_manager.md +0 -0
  24. {tlpytools-0.2.2 → tlpytools-0.2.4}/docs/diagrams/README.md +0 -0
  25. {tlpytools-0.2.2 → tlpytools-0.2.4}/docs/diagrams/orca_cloud_workflow.drawio +0 -0
  26. {tlpytools-0.2.2 → tlpytools-0.2.4}/docs/diagrams/orca_detailed_steps.drawio +0 -0
  27. {tlpytools-0.2.2 → tlpytools-0.2.4}/docs/diagrams/orca_file_structure.drawio +0 -0
  28. {tlpytools-0.2.2 → tlpytools-0.2.4}/docs/diagrams/orca_local_workflow.drawio +0 -0
  29. {tlpytools-0.2.2 → tlpytools-0.2.4}/docs/diagrams/orca_main_features.drawio +0 -0
  30. {tlpytools-0.2.2 → tlpytools-0.2.4}/docs/unified_logging.md +0 -0
  31. {tlpytools-0.2.2 → tlpytools-0.2.4}/requirements.txt +0 -0
  32. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/examples/batchtask.py +0 -0
  33. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/examples/data_files/example.csv +0 -0
  34. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/examples/mydataproject.py +0 -0
  35. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/examples/readwritedata.py +0 -0
  36. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/examples/unified_logging.py +0 -0
  37. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/adls_server.py +0 -0
  38. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/azure_credential.py +0 -0
  39. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/config.py +0 -0
  40. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/data.py +0 -0
  41. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/data_store.py +0 -0
  42. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/env_config.py +0 -0
  43. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/log.py +0 -0
  44. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/orca/README.md +0 -0
  45. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/orca/__init__.py +0 -0
  46. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/orca/__main__.py +0 -0
  47. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/orca/batch_task_runner.py +0 -0
  48. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/orca/cli.py +0 -0
  49. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/orca/orca_model_config_barebone.yaml +0 -0
  50. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/orca/orca_model_config_example.yaml +0 -0
  51. {tlpytools-0.2.2 → tlpytools-0.2.4}/src/tlpytools/sql_server.py +0 -0
  52. {tlpytools-0.2.2 → tlpytools-0.2.4}/tests/README.md +0 -0
  53. {tlpytools-0.2.2 → tlpytools-0.2.4}/tests/__init__.py +0 -0
  54. {tlpytools-0.2.2 → tlpytools-0.2.4}/tests/conftest.py +0 -0
  55. {tlpytools-0.2.2 → tlpytools-0.2.4}/tests/run_tests.py +0 -0
  56. {tlpytools-0.2.2 → tlpytools-0.2.4}/tests/test_azure_credential.py +0 -0
  57. {tlpytools-0.2.2 → tlpytools-0.2.4}/tests/test_basic.py +0 -0
  58. {tlpytools-0.2.2 → tlpytools-0.2.4}/tests/test_core.py +0 -0
  59. {tlpytools-0.2.2 → tlpytools-0.2.4}/tests/test_orca_integration.py +0 -0
  60. {tlpytools-0.2.2 → tlpytools-0.2.4}/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.2.tar.gz`
102
- - `dist/tlpytools-0.2.2-py3-none-any.whl`
101
+ - `dist/tlpytools-0.2.4.tar.gz`
102
+ - `dist/tlpytools-0.2.4-py3-none-any.whl`
103
103
 
104
104
  ### 5) Run
105
105
  - ORCA CLI (module form):
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
  inputs:
6
6
  version:
7
- description: 'Version number to release (e.g., 0.2.2)'
7
+ description: 'Version number to release (e.g., 0.2.4)'
8
8
  required: true
9
9
  type: string
10
10
  prerelease:
@@ -2,6 +2,16 @@
2
2
 
3
3
  All notable changes to TLPyTools will be documented in this file.
4
4
 
5
+ ## [0.2.4]
6
+
7
+ ### Changed
8
+ * Optimize archive creation by copying single zip files directly and enhancing logging
9
+
10
+ ## [0.2.3]
11
+
12
+ ### Fixed
13
+ * Fix python cmd syntax issue introduced in 0.2.2
14
+
5
15
  ## [0.2.2]
6
16
 
7
17
  ### Fixed
@@ -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.2`)
203
+ - **Version number**: Enter the new version (e.g., `0.2.4`)
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.2 # Replace with your version
222
+ pip install tlpytools==0.2.4 # Replace with your version
223
223
 
224
224
  # Test installation in a fresh environment
225
225
  python -c "import tlpytools; print(tlpytools.__version__)"
@@ -233,11 +233,6 @@ TLPyTools follows semantic versioning (SemVer):
233
233
  - **Minor** (0.x.0): New features, backwards compatible
234
234
  - **Patch** (0.0.x): Bug fixes, backwards compatible
235
235
 
236
- Examples:
237
- - `0.1.7` → `0.1.8` (patch release)
238
- - `0.1.8` → `0.2.2` (minor release)
239
- - `0.2.2` → `1.0.0` (major release)
240
-
241
236
  ### Pre-releases
242
237
 
243
238
  For testing purposes, you can create pre-release versions:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tlpytools
3
- Version: 0.2.2
3
+ Version: 0.2.4
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.2"
7
+ version = "0.2.4"
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"
@@ -2,7 +2,7 @@
2
2
  TLPyTools - A set of tools for building models at the TransLink Forecasting Team
3
3
  """
4
4
 
5
- __version__ = "0.2.2"
5
+ __version__ = "0.2.4"
6
6
 
7
7
  # Core modules that should always be available (minimal dependencies)
8
8
  from . import log
@@ -3741,8 +3741,13 @@ class OrcaOrchestrator:
3741
3741
  # Python process (e.g. Jupyter/tlpytools env) from leaking its
3742
3742
  # library paths into the component subprocess
3743
3743
  if os.name == "nt": # Windows
3744
- # On Windows, use SET command
3745
- pythonpath_cmd = f"set PYTHONHOME= && set PYTHONPATH={ORCA_DIR};{step_directory} && "
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).
3747
+ pythonpath_cmd = (
3748
+ f'set "PYTHONHOME=" && '
3749
+ f'set "PYTHONPATH={ORCA_DIR};{step_directory}" && '
3750
+ )
3746
3751
  else: # Unix/Linux/Mac
3747
3752
  # On Unix-like systems, use export command
3748
3753
  pythonpath_cmd = f"unset PYTHONHOME && export PYTHONPATH={ORCA_DIR}:{step_directory} && "
@@ -4057,18 +4062,46 @@ class OrcaOrchestrator:
4057
4062
  "Failed to delete existing archive %s: %s", zip_filename, e
4058
4063
  )
4059
4064
 
4060
- # Use the zip_directory utility function to create the archive
4061
- # Note: zip_directory now logs its own summary
4062
- self.scenario.zip_directory(
4063
- dir_path=step_dir,
4064
- zip_path=archive_path,
4065
- # Skip everything except the specified patterns
4066
- skip_patterns=["*"] + [f"!{pattern}" for pattern in patterns],
4067
- include_empty_dirs=False,
4068
- compression_type=compression_type,
4069
- compresslevel=compresslevel,
4065
+ # Optimisation: if patterns is a single zip file with no wildcards,
4066
+ # copy and rename it directly instead of wrapping it in another zip.
4067
+ single_zip_pattern = (
4068
+ len(patterns) == 1
4069
+ and patterns[0].endswith(".zip")
4070
+ and "*" not in patterns[0]
4071
+ and "?" not in patterns[0]
4070
4072
  )
4071
4073
 
4074
+ if single_zip_pattern:
4075
+ source_zip = os.path.join(step_dir, patterns[0])
4076
+ if os.path.exists(source_zip):
4077
+ os.makedirs(os.path.dirname(archive_path), exist_ok=True)
4078
+ shutil.copy2(source_zip, archive_path)
4079
+ self.logger.info(
4080
+ "Copied single zip file %s -> %s",
4081
+ os.path.basename(source_zip),
4082
+ zip_filename,
4083
+ )
4084
+ else:
4085
+ self.logger.warning(
4086
+ "Single zip pattern '%s' not found at %s, skipping archive: %s",
4087
+ patterns[0],
4088
+ source_zip,
4089
+ archive_name,
4090
+ )
4091
+ continue
4092
+ else:
4093
+ # Use the zip_directory utility function to create the archive
4094
+ # Note: zip_directory now logs its own summary
4095
+ self.scenario.zip_directory(
4096
+ dir_path=step_dir,
4097
+ zip_path=archive_path,
4098
+ # Skip everything except the specified patterns
4099
+ skip_patterns=["*"] + [f"!{pattern}" for pattern in patterns],
4100
+ include_empty_dirs=False,
4101
+ compression_type=compression_type,
4102
+ compresslevel=compresslevel,
4103
+ )
4104
+
4072
4105
  # Register the archive in state for future retrieval
4073
4106
  self._register_output_archive(
4074
4107
  step_name, archive_name, zip_filename, display_iteration