aemo-mdff-reader 2.1.0__tar.gz → 2.2.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 (42) hide show
  1. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/CHANGELOG.md +11 -0
  2. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/CONTRIBUTING.md +8 -8
  3. {aemo_mdff_reader-2.1.0/aemo_mdff_reader.egg-info → aemo_mdff_reader-2.2.0}/PKG-INFO +7 -8
  4. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/README.md +2 -2
  5. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/__init__.py +1 -1
  6. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0/aemo_mdff_reader.egg-info}/PKG-INFO +7 -8
  7. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader.egg-info/requires.txt +3 -3
  8. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/pyproject.toml +12 -15
  9. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/LICENSE +0 -0
  10. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/MANIFEST.in +0 -0
  11. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/aggregate.py +0 -0
  12. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/cli.py +0 -0
  13. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/parser.py +0 -0
  14. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/py.typed +0 -0
  15. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/reader.py +0 -0
  16. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/spec.py +0 -0
  17. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/sql/__init__.py +0 -0
  18. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/sql/query.py +0 -0
  19. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/sql/store.py +0 -0
  20. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader/types.py +0 -0
  21. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader.egg-info/SOURCES.txt +0 -0
  22. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader.egg-info/dependency_links.txt +0 -0
  23. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader.egg-info/entry_points.txt +0 -0
  24. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/aemo_mdff_reader.egg-info/top_level.txt +0 -0
  25. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/benchmarks/bench_parser.py +0 -0
  26. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/setup.cfg +0 -0
  27. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/setup.py +0 -0
  28. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/__init__.py +0 -0
  29. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/fixtures/generate.py +0 -0
  30. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/fixtures/sample_nem12.csv +0 -0
  31. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/fixtures/sample_nem13.csv +0 -0
  32. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_cli.py +0 -0
  33. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_datetime_formats.py +0 -0
  34. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_edge_cases.py +0 -0
  35. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_ergonomics.py +0 -0
  36. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_events_b2b.py +0 -0
  37. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_large_files.py +0 -0
  38. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_nem13.py +0 -0
  39. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_parser.py +0 -0
  40. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_spec.py +0 -0
  41. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_sql.py +0 -0
  42. {aemo_mdff_reader-2.1.0 → aemo_mdff_reader-2.2.0}/tests/test_validation.py +0 -0
@@ -4,6 +4,17 @@ All notable changes are documented here. The format is based on
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the
5
5
  project follows [Semantic Versioning](https://semver.org/).
6
6
 
7
+ ## [2.2.0](https://github.com/Utilified/aemo-mdff-reader/compare/v2.1.0...v2.2.0) (2026-05-10)
8
+
9
+
10
+ ### ⚠ BREAKING CHANGES
11
+
12
+ * minimum Python version is now 3.11. Users on 3.10 should pin to `aemo-mdff-reader<2.2`.
13
+
14
+ ### Features
15
+
16
+ * drop Python 3.10, bump dev floor to pandas 3 / numpy 2.x ([876c863](https://github.com/Utilified/aemo-mdff-reader/commit/876c863186a7de14b05fa35b0a864b38e4292701))
17
+
7
18
  ## [2.1.0](https://github.com/Utilified/aemo-mdff-reader/compare/v2.0.4...v2.1.0) (2026-05-10)
8
19
 
9
20
 
@@ -36,19 +36,19 @@ To regenerate manually after editing them or `pyproject.toml`:
36
36
 
37
37
  ```bash
38
38
  pip install uv
39
- uv pip compile --generate-hashes --strip-extras --python-version 3.10 --output-file requirements/dev.txt requirements/dev.in
40
- uv pip compile --generate-hashes --strip-extras --python-version 3.10 --output-file requirements/lint.txt requirements/lint.in
41
- uv pip compile --generate-hashes --strip-extras --python-version 3.10 --output-file requirements/build.txt requirements/build.in
42
- uv pip compile --generate-hashes --strip-extras --python-version 3.10 --output-file requirements/audit.txt requirements/audit.in
39
+ uv pip compile --generate-hashes --strip-extras --python-version 3.11 --output-file requirements/dev.txt requirements/dev.in
40
+ uv pip compile --generate-hashes --strip-extras --python-version 3.11 --output-file requirements/lint.txt requirements/lint.in
41
+ uv pip compile --generate-hashes --strip-extras --python-version 3.11 --output-file requirements/build.txt requirements/build.in
42
+ uv pip compile --generate-hashes --strip-extras --python-version 3.11 --output-file requirements/audit.txt requirements/audit.in
43
43
  ```
44
44
 
45
45
  `uv` is used over `pip-tools` because its resolver handles the
46
- 3.10–3.12 matrix without back-tracking failures, and it emits hashes
46
+ 3.11–3.12 matrix without back-tracking failures, and it emits hashes
47
47
  for every wheel of each pinned version (so a single lock file works
48
- across the whole CI matrix). The `--python-version 3.10` flag pins
48
+ across the whole CI matrix). The `--python-version 3.11` flag pins
49
49
  resolution to the lowest supported interpreter so packages whose
50
- latest releases dropped 3.10 are correctly stepped back to a
51
- compatible version.
50
+ latest releases dropped support for it are correctly stepped back
51
+ to a compatible version.
52
52
 
53
53
  ## Running the test suite
54
54
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aemo-mdff-reader
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Fast streaming reader for AEMO MDFF NEM12 / NEM13 metering files. Zero required dependencies.
5
5
  Author: Utilified Holdings Pty Ltd
6
6
  License-Expression: MIT
@@ -15,27 +15,26 @@ Classifier: Intended Audience :: Information Technology
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python :: 3
17
17
  Classifier: Programming Language :: Python :: 3 :: Only
18
- Classifier: Programming Language :: Python :: 3.10
19
18
  Classifier: Programming Language :: Python :: 3.11
20
19
  Classifier: Programming Language :: Python :: 3.12
21
20
  Classifier: Programming Language :: Python :: 3.13
22
21
  Classifier: Topic :: Office/Business :: Financial
23
22
  Classifier: Topic :: Scientific/Engineering
24
23
  Classifier: Topic :: Utilities
25
- Requires-Python: >=3.10
24
+ Requires-Python: >=3.11
26
25
  Description-Content-Type: text/markdown
27
26
  License-File: LICENSE
28
27
  Provides-Extra: pandas
29
- Requires-Dist: pandas>=1.3; extra == "pandas"
28
+ Requires-Dist: pandas>=2; extra == "pandas"
30
29
  Provides-Extra: parquet
31
- Requires-Dist: pandas>=1.3; extra == "parquet"
30
+ Requires-Dist: pandas>=2; extra == "parquet"
32
31
  Requires-Dist: pyarrow>=10; extra == "parquet"
33
32
  Provides-Extra: mysql
34
33
  Requires-Dist: PyMySQL>=1.0; extra == "mysql"
35
34
  Provides-Extra: dev
36
35
  Requires-Dist: pytest>=7; extra == "dev"
37
36
  Requires-Dist: pytest-cov>=4; extra == "dev"
38
- Requires-Dist: pandas>=1.3; extra == "dev"
37
+ Requires-Dist: pandas>=2; extra == "dev"
39
38
  Requires-Dist: pyarrow>=10; extra == "dev"
40
39
  Requires-Dist: mypy>=1.8; extra == "dev"
41
40
  Requires-Dist: ruff>=0.5; extra == "dev"
@@ -48,7 +47,7 @@ Dynamic: license-file
48
47
 
49
48
  [![CI](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/ci.yml/badge.svg)](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/ci.yml)
50
49
  [![PyPI](https://img.shields.io/pypi/v/aemo-mdff-reader.svg)](https://pypi.org/project/aemo-mdff-reader/)
51
- [![Python versions](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue)](https://pypi.org/project/aemo-mdff-reader/)
50
+ [![Python versions](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13-blue)](https://pypi.org/project/aemo-mdff-reader/)
52
51
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
53
52
  [![CodeQL](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/codeql.yml/badge.svg)](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/codeql.yml)
54
53
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/Utilified/aemo-mdff-reader/badge)](https://scorecard.dev/viewer/?uri=github.com/Utilified/aemo-mdff-reader)
@@ -238,7 +237,7 @@ pip install -e .[dev]
238
237
  pytest
239
238
  ```
240
239
 
241
- CI runs ruff, mypy --strict, the test matrix on Python 3.10 → 3.12 /
240
+ CI runs ruff, mypy --strict, the test matrix on Python 3.11 → 3.12 /
242
241
  Linux / macOS / Windows, `pip-audit`, `bandit`, CodeQL, OpenSSF
243
242
  Scorecard, and a wheel-install smoke test.
244
243
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![CI](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/ci.yml/badge.svg)](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/ci.yml)
4
4
  [![PyPI](https://img.shields.io/pypi/v/aemo-mdff-reader.svg)](https://pypi.org/project/aemo-mdff-reader/)
5
- [![Python versions](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue)](https://pypi.org/project/aemo-mdff-reader/)
5
+ [![Python versions](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13-blue)](https://pypi.org/project/aemo-mdff-reader/)
6
6
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
7
7
  [![CodeQL](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/codeql.yml/badge.svg)](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/codeql.yml)
8
8
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/Utilified/aemo-mdff-reader/badge)](https://scorecard.dev/viewer/?uri=github.com/Utilified/aemo-mdff-reader)
@@ -192,7 +192,7 @@ pip install -e .[dev]
192
192
  pytest
193
193
  ```
194
194
 
195
- CI runs ruff, mypy --strict, the test matrix on Python 3.10 → 3.12 /
195
+ CI runs ruff, mypy --strict, the test matrix on Python 3.11 → 3.12 /
196
196
  Linux / macOS / Windows, `pip-audit`, `bandit`, CodeQL, OpenSSF
197
197
  Scorecard, and a wheel-install smoke test.
198
198
 
@@ -48,7 +48,7 @@ from .types import (
48
48
  NMIDetails,
49
49
  )
50
50
 
51
- __version__ = "2.1.0" # x-release-please-version
51
+ __version__ = "2.2.0" # x-release-please-version
52
52
 
53
53
  __all__ = [
54
54
  "INTERVAL_DATA_OUTPUT_HEADERS",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aemo-mdff-reader
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Fast streaming reader for AEMO MDFF NEM12 / NEM13 metering files. Zero required dependencies.
5
5
  Author: Utilified Holdings Pty Ltd
6
6
  License-Expression: MIT
@@ -15,27 +15,26 @@ Classifier: Intended Audience :: Information Technology
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python :: 3
17
17
  Classifier: Programming Language :: Python :: 3 :: Only
18
- Classifier: Programming Language :: Python :: 3.10
19
18
  Classifier: Programming Language :: Python :: 3.11
20
19
  Classifier: Programming Language :: Python :: 3.12
21
20
  Classifier: Programming Language :: Python :: 3.13
22
21
  Classifier: Topic :: Office/Business :: Financial
23
22
  Classifier: Topic :: Scientific/Engineering
24
23
  Classifier: Topic :: Utilities
25
- Requires-Python: >=3.10
24
+ Requires-Python: >=3.11
26
25
  Description-Content-Type: text/markdown
27
26
  License-File: LICENSE
28
27
  Provides-Extra: pandas
29
- Requires-Dist: pandas>=1.3; extra == "pandas"
28
+ Requires-Dist: pandas>=2; extra == "pandas"
30
29
  Provides-Extra: parquet
31
- Requires-Dist: pandas>=1.3; extra == "parquet"
30
+ Requires-Dist: pandas>=2; extra == "parquet"
32
31
  Requires-Dist: pyarrow>=10; extra == "parquet"
33
32
  Provides-Extra: mysql
34
33
  Requires-Dist: PyMySQL>=1.0; extra == "mysql"
35
34
  Provides-Extra: dev
36
35
  Requires-Dist: pytest>=7; extra == "dev"
37
36
  Requires-Dist: pytest-cov>=4; extra == "dev"
38
- Requires-Dist: pandas>=1.3; extra == "dev"
37
+ Requires-Dist: pandas>=2; extra == "dev"
39
38
  Requires-Dist: pyarrow>=10; extra == "dev"
40
39
  Requires-Dist: mypy>=1.8; extra == "dev"
41
40
  Requires-Dist: ruff>=0.5; extra == "dev"
@@ -48,7 +47,7 @@ Dynamic: license-file
48
47
 
49
48
  [![CI](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/ci.yml/badge.svg)](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/ci.yml)
50
49
  [![PyPI](https://img.shields.io/pypi/v/aemo-mdff-reader.svg)](https://pypi.org/project/aemo-mdff-reader/)
51
- [![Python versions](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue)](https://pypi.org/project/aemo-mdff-reader/)
50
+ [![Python versions](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13-blue)](https://pypi.org/project/aemo-mdff-reader/)
52
51
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
53
52
  [![CodeQL](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/codeql.yml/badge.svg)](https://github.com/Utilified/aemo-mdff-reader/actions/workflows/codeql.yml)
54
53
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/Utilified/aemo-mdff-reader/badge)](https://scorecard.dev/viewer/?uri=github.com/Utilified/aemo-mdff-reader)
@@ -238,7 +237,7 @@ pip install -e .[dev]
238
237
  pytest
239
238
  ```
240
239
 
241
- CI runs ruff, mypy --strict, the test matrix on Python 3.10 → 3.12 /
240
+ CI runs ruff, mypy --strict, the test matrix on Python 3.11 → 3.12 /
242
241
  Linux / macOS / Windows, `pip-audit`, `bandit`, CodeQL, OpenSSF
243
242
  Scorecard, and a wheel-install smoke test.
244
243
 
@@ -2,7 +2,7 @@
2
2
  [dev]
3
3
  pytest>=7
4
4
  pytest-cov>=4
5
- pandas>=1.3
5
+ pandas>=2
6
6
  pyarrow>=10
7
7
  mypy>=1.8
8
8
  ruff>=0.5
@@ -14,8 +14,8 @@ packaging>=24.2
14
14
  PyMySQL>=1.0
15
15
 
16
16
  [pandas]
17
- pandas>=1.3
17
+ pandas>=2
18
18
 
19
19
  [parquet]
20
- pandas>=1.3
20
+ pandas>=2
21
21
  pyarrow>=10
@@ -11,15 +11,15 @@ build-backend = "setuptools.build_meta"
11
11
  # Pillow / PIL precedent (``pip install Pillow`` → ``import PIL``)
12
12
  # applies here.
13
13
  name = "aemo-mdff-reader"
14
- version = "2.1.0"
14
+ version = "2.2.0"
15
15
  description = "Fast streaming reader for AEMO MDFF NEM12 / NEM13 metering files. Zero required dependencies."
16
16
  readme = "README.md"
17
17
  license = "MIT"
18
18
  license-files = ["LICENSE"]
19
- # Python 3.9 reached end-of-life in October 2025; CI hash-pinning of
20
- # pandas/pyarrow/numpy no longer resolves cleanly against 3.9 wheels.
21
- # 3.10 is the lowest supported runtime as of v3.0.
22
- requires-python = ">=3.10"
19
+ # Python 3.9 reached EOL in October 2025; pandas 3.0 dropped Python
20
+ # 3.10 support. Bumping the floor to 3.11 keeps us aligned with the
21
+ # upstream pandas/numpy/pyarrow release trains used by the dev extras.
22
+ requires-python = ">=3.11"
23
23
  authors = [
24
24
  { name = "Utilified Holdings Pty Ltd" },
25
25
  ]
@@ -31,7 +31,6 @@ classifiers = [
31
31
  "Operating System :: OS Independent",
32
32
  "Programming Language :: Python :: 3",
33
33
  "Programming Language :: Python :: 3 :: Only",
34
- "Programming Language :: Python :: 3.10",
35
34
  "Programming Language :: Python :: 3.11",
36
35
  "Programming Language :: Python :: 3.12",
37
36
  "Programming Language :: Python :: 3.13",
@@ -43,13 +42,13 @@ classifiers = [
43
42
  dependencies = []
44
43
 
45
44
  [project.optional-dependencies]
46
- pandas = ["pandas>=1.3"]
47
- parquet = ["pandas>=1.3", "pyarrow>=10"]
45
+ pandas = ["pandas>=2"]
46
+ parquet = ["pandas>=2", "pyarrow>=10"]
48
47
  mysql = ["PyMySQL>=1.0"]
49
48
  dev = [
50
49
  "pytest>=7",
51
50
  "pytest-cov>=4",
52
- "pandas>=1.3",
51
+ "pandas>=2",
53
52
  "pyarrow>=10",
54
53
  "mypy>=1.8",
55
54
  "ruff>=0.5",
@@ -95,7 +94,7 @@ exclude_lines = [
95
94
 
96
95
  [tool.ruff]
97
96
  line-length = 100
98
- target-version = "py310"
97
+ target-version = "py311"
99
98
 
100
99
  [tool.ruff.lint]
101
100
  select = [
@@ -109,10 +108,8 @@ select = [
109
108
  ]
110
109
  ignore = [
111
110
  "E501", # line too long — handled by formatter
112
- # We use ``Union[...]`` / ``Optional[...]`` / ``Dict[...]`` so the
113
- # type aliases work at runtime on 3.9 without ``from __future__
114
- # import annotations`` everywhere. Adopting PEP 604 / PEP 585 syntax
115
- # is a follow-up; left as-is to keep the public-API diff small.
111
+ # PEP 604 / PEP 585 typing migration is a follow-up; left for now
112
+ # to keep the public-API surface diff small for 2.x.
116
113
  "UP007", # Use X | Y instead of Union[X, Y]
117
114
  "UP045", # Use X | None instead of Optional[X]
118
115
  "UP006", # Use builtin generics (dict[X, Y]) instead of typing.Dict
@@ -128,7 +125,7 @@ ignore = [
128
125
  "aemo_mdff_reader/sql/*" = ["F401", "F403", "F405", "UP031"]
129
126
 
130
127
  [tool.mypy]
131
- python_version = "3.10"
128
+ python_version = "3.11"
132
129
  strict = true
133
130
  files = ["aemo_mdff_reader"]
134
131
  # Optional dependencies that don't ship type stubs.