oaknut 0.1.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.
- oaknut-0.1.0/PKG-INFO +88 -0
- oaknut-0.1.0/README.md +63 -0
- oaknut-0.1.0/oaknut.egg-info/PKG-INFO +88 -0
- oaknut-0.1.0/oaknut.egg-info/SOURCES.txt +7 -0
- oaknut-0.1.0/oaknut.egg-info/dependency_links.txt +1 -0
- oaknut-0.1.0/oaknut.egg-info/requires.txt +3 -0
- oaknut-0.1.0/oaknut.egg-info/top_level.txt +1 -0
- oaknut-0.1.0/pyproject.toml +98 -0
- oaknut-0.1.0/setup.cfg +4 -0
oaknut-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: oaknut
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Oaknut family meta-distribution — tools for Acorn computer filesystems, files, and formats.
|
|
5
|
+
Author-email: Robert Smallshire <robert@smallshire.org.uk>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/rob-smallshire/oaknut
|
|
8
|
+
Project-URL: Repository, https://github.com/rob-smallshire/oaknut
|
|
9
|
+
Project-URL: Issues, https://github.com/rob-smallshire/oaknut/issues
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
Requires-Dist: oaknut-file>=1.0
|
|
23
|
+
Requires-Dist: oaknut-dfs>=4.0
|
|
24
|
+
Requires-Dist: oaknut-zip>=2.0
|
|
25
|
+
|
|
26
|
+
# oaknut
|
|
27
|
+
|
|
28
|
+
Python tools for Acorn computer filesystems, files, and formats — the BBC Micro, Electron, Archimedes, and their descendants.
|
|
29
|
+
|
|
30
|
+
This repository is a `uv` workspace monorepo containing the `oaknut-*` family of packages. Each package is independently published to PyPI, but they all contribute to a shared `oaknut.` Python namespace so that imports read naturally:
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
from oaknut.file import AcornMeta, MetaFormat
|
|
34
|
+
from oaknut.dfs import DFS, DFSPath
|
|
35
|
+
from oaknut.zip import extract_archive
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Packages
|
|
39
|
+
|
|
40
|
+
| PyPI distribution | Import path | Scope |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| [`oaknut-file`](packages/oaknut-file/) | `oaknut.file` | Acorn file metadata — INF sidecars (traditional + PiEconetBridge), filename encoding, xattr namespaces, access flags, host bridge |
|
|
43
|
+
| [`oaknut-dfs`](packages/oaknut-dfs/) | `oaknut.dfs` | Acorn DFS / Watford DDFS disc images (SSD, DSD), and ADFS disc images (pending extraction into a dedicated `oaknut-adfs` package) |
|
|
44
|
+
| [`oaknut-zip`](packages/oaknut-zip/) | `oaknut.zip` | ZIP archives containing Acorn files — SparkFS extras, INF resolution, RISC OS filetype decoding |
|
|
45
|
+
|
|
46
|
+
Planned additional packages (see `docs/monorepo.md`):
|
|
47
|
+
|
|
48
|
+
- `oaknut-fs` — universal filesystem abstractions (catalogue ABC, Acorn codec, boot options)
|
|
49
|
+
- `oaknut-image` — disc-image abstractions (sector access, geometry, free-space maps)
|
|
50
|
+
- `oaknut-adfs` — ADFS (extracted from the current `oaknut-dfs`)
|
|
51
|
+
- `oaknut-basic` — BBC BASIC tokeniser / detokeniser
|
|
52
|
+
- `oaknut-disc` — the `disc` CLI binary
|
|
53
|
+
|
|
54
|
+
## Quick start
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
git clone https://github.com/rob-smallshire/oaknut.git
|
|
58
|
+
cd oaknut
|
|
59
|
+
uv sync
|
|
60
|
+
uv run pytest
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The workspace uses [uv](https://github.com/astral-sh/uv) for dependency management. Sibling packages are wired together as path dependencies during development via `[tool.uv.sources]` in the workspace-root `pyproject.toml`, so any change in one package is immediately visible to the others without a publish round-trip.
|
|
64
|
+
|
|
65
|
+
## Installing from PyPI
|
|
66
|
+
|
|
67
|
+
Each library package is independently installable:
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
pip install oaknut-file
|
|
71
|
+
pip install oaknut-dfs
|
|
72
|
+
pip install oaknut-zip
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Or install the whole family via the meta-distribution:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
pip install oaknut
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Documentation
|
|
82
|
+
|
|
83
|
+
- [`docs/monorepo.md`](docs/monorepo.md) — monorepo design, architectural target, package layering
|
|
84
|
+
- [`docs/cli-design.md`](docs/cli-design.md) — design of the forthcoming `disc` CLI
|
|
85
|
+
|
|
86
|
+
## Licence
|
|
87
|
+
|
|
88
|
+
MIT. See each package's `LICENSE` file.
|
oaknut-0.1.0/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# oaknut
|
|
2
|
+
|
|
3
|
+
Python tools for Acorn computer filesystems, files, and formats — the BBC Micro, Electron, Archimedes, and their descendants.
|
|
4
|
+
|
|
5
|
+
This repository is a `uv` workspace monorepo containing the `oaknut-*` family of packages. Each package is independently published to PyPI, but they all contribute to a shared `oaknut.` Python namespace so that imports read naturally:
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from oaknut.file import AcornMeta, MetaFormat
|
|
9
|
+
from oaknut.dfs import DFS, DFSPath
|
|
10
|
+
from oaknut.zip import extract_archive
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Packages
|
|
14
|
+
|
|
15
|
+
| PyPI distribution | Import path | Scope |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| [`oaknut-file`](packages/oaknut-file/) | `oaknut.file` | Acorn file metadata — INF sidecars (traditional + PiEconetBridge), filename encoding, xattr namespaces, access flags, host bridge |
|
|
18
|
+
| [`oaknut-dfs`](packages/oaknut-dfs/) | `oaknut.dfs` | Acorn DFS / Watford DDFS disc images (SSD, DSD), and ADFS disc images (pending extraction into a dedicated `oaknut-adfs` package) |
|
|
19
|
+
| [`oaknut-zip`](packages/oaknut-zip/) | `oaknut.zip` | ZIP archives containing Acorn files — SparkFS extras, INF resolution, RISC OS filetype decoding |
|
|
20
|
+
|
|
21
|
+
Planned additional packages (see `docs/monorepo.md`):
|
|
22
|
+
|
|
23
|
+
- `oaknut-fs` — universal filesystem abstractions (catalogue ABC, Acorn codec, boot options)
|
|
24
|
+
- `oaknut-image` — disc-image abstractions (sector access, geometry, free-space maps)
|
|
25
|
+
- `oaknut-adfs` — ADFS (extracted from the current `oaknut-dfs`)
|
|
26
|
+
- `oaknut-basic` — BBC BASIC tokeniser / detokeniser
|
|
27
|
+
- `oaknut-disc` — the `disc` CLI binary
|
|
28
|
+
|
|
29
|
+
## Quick start
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
git clone https://github.com/rob-smallshire/oaknut.git
|
|
33
|
+
cd oaknut
|
|
34
|
+
uv sync
|
|
35
|
+
uv run pytest
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The workspace uses [uv](https://github.com/astral-sh/uv) for dependency management. Sibling packages are wired together as path dependencies during development via `[tool.uv.sources]` in the workspace-root `pyproject.toml`, so any change in one package is immediately visible to the others without a publish round-trip.
|
|
39
|
+
|
|
40
|
+
## Installing from PyPI
|
|
41
|
+
|
|
42
|
+
Each library package is independently installable:
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
pip install oaknut-file
|
|
46
|
+
pip install oaknut-dfs
|
|
47
|
+
pip install oaknut-zip
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Or install the whole family via the meta-distribution:
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
pip install oaknut
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Documentation
|
|
57
|
+
|
|
58
|
+
- [`docs/monorepo.md`](docs/monorepo.md) — monorepo design, architectural target, package layering
|
|
59
|
+
- [`docs/cli-design.md`](docs/cli-design.md) — design of the forthcoming `disc` CLI
|
|
60
|
+
|
|
61
|
+
## Licence
|
|
62
|
+
|
|
63
|
+
MIT. See each package's `LICENSE` file.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: oaknut
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Oaknut family meta-distribution — tools for Acorn computer filesystems, files, and formats.
|
|
5
|
+
Author-email: Robert Smallshire <robert@smallshire.org.uk>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/rob-smallshire/oaknut
|
|
8
|
+
Project-URL: Repository, https://github.com/rob-smallshire/oaknut
|
|
9
|
+
Project-URL: Issues, https://github.com/rob-smallshire/oaknut/issues
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
Requires-Dist: oaknut-file>=1.0
|
|
23
|
+
Requires-Dist: oaknut-dfs>=4.0
|
|
24
|
+
Requires-Dist: oaknut-zip>=2.0
|
|
25
|
+
|
|
26
|
+
# oaknut
|
|
27
|
+
|
|
28
|
+
Python tools for Acorn computer filesystems, files, and formats — the BBC Micro, Electron, Archimedes, and their descendants.
|
|
29
|
+
|
|
30
|
+
This repository is a `uv` workspace monorepo containing the `oaknut-*` family of packages. Each package is independently published to PyPI, but they all contribute to a shared `oaknut.` Python namespace so that imports read naturally:
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
from oaknut.file import AcornMeta, MetaFormat
|
|
34
|
+
from oaknut.dfs import DFS, DFSPath
|
|
35
|
+
from oaknut.zip import extract_archive
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Packages
|
|
39
|
+
|
|
40
|
+
| PyPI distribution | Import path | Scope |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| [`oaknut-file`](packages/oaknut-file/) | `oaknut.file` | Acorn file metadata — INF sidecars (traditional + PiEconetBridge), filename encoding, xattr namespaces, access flags, host bridge |
|
|
43
|
+
| [`oaknut-dfs`](packages/oaknut-dfs/) | `oaknut.dfs` | Acorn DFS / Watford DDFS disc images (SSD, DSD), and ADFS disc images (pending extraction into a dedicated `oaknut-adfs` package) |
|
|
44
|
+
| [`oaknut-zip`](packages/oaknut-zip/) | `oaknut.zip` | ZIP archives containing Acorn files — SparkFS extras, INF resolution, RISC OS filetype decoding |
|
|
45
|
+
|
|
46
|
+
Planned additional packages (see `docs/monorepo.md`):
|
|
47
|
+
|
|
48
|
+
- `oaknut-fs` — universal filesystem abstractions (catalogue ABC, Acorn codec, boot options)
|
|
49
|
+
- `oaknut-image` — disc-image abstractions (sector access, geometry, free-space maps)
|
|
50
|
+
- `oaknut-adfs` — ADFS (extracted from the current `oaknut-dfs`)
|
|
51
|
+
- `oaknut-basic` — BBC BASIC tokeniser / detokeniser
|
|
52
|
+
- `oaknut-disc` — the `disc` CLI binary
|
|
53
|
+
|
|
54
|
+
## Quick start
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
git clone https://github.com/rob-smallshire/oaknut.git
|
|
58
|
+
cd oaknut
|
|
59
|
+
uv sync
|
|
60
|
+
uv run pytest
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The workspace uses [uv](https://github.com/astral-sh/uv) for dependency management. Sibling packages are wired together as path dependencies during development via `[tool.uv.sources]` in the workspace-root `pyproject.toml`, so any change in one package is immediately visible to the others without a publish round-trip.
|
|
64
|
+
|
|
65
|
+
## Installing from PyPI
|
|
66
|
+
|
|
67
|
+
Each library package is independently installable:
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
pip install oaknut-file
|
|
71
|
+
pip install oaknut-dfs
|
|
72
|
+
pip install oaknut-zip
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Or install the whole family via the meta-distribution:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
pip install oaknut
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Documentation
|
|
82
|
+
|
|
83
|
+
- [`docs/monorepo.md`](docs/monorepo.md) — monorepo design, architectural target, package layering
|
|
84
|
+
- [`docs/cli-design.md`](docs/cli-design.md) — design of the forthcoming `disc` CLI
|
|
85
|
+
|
|
86
|
+
## Licence
|
|
87
|
+
|
|
88
|
+
MIT. See each package's `LICENSE` file.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# oaknut — workspace root.
|
|
2
|
+
#
|
|
3
|
+
# This pyproject.toml serves two purposes:
|
|
4
|
+
#
|
|
5
|
+
# 1. It declares the uv workspace that stitches together the
|
|
6
|
+
# packages/oaknut-* members into a single development environment.
|
|
7
|
+
#
|
|
8
|
+
# 2. It defines an optional `oaknut` meta-distribution on PyPI whose
|
|
9
|
+
# only job is to depend on every family member, so `pip install
|
|
10
|
+
# oaknut` is a one-shot install of the whole suite. Publishing it
|
|
11
|
+
# also claims the bare `oaknut` name on PyPI before anyone else.
|
|
12
|
+
#
|
|
13
|
+
# All packages in packages/ contribute to a single PEP 420 implicit
|
|
14
|
+
# namespace package (`oaknut`). No package ever ships
|
|
15
|
+
# src/oaknut/__init__.py — that is enforced by scripts/check_no_namespace_init.sh
|
|
16
|
+
# which runs both locally via pre-commit and in CI.
|
|
17
|
+
|
|
18
|
+
[build-system]
|
|
19
|
+
requires = ["setuptools>=68"]
|
|
20
|
+
build-backend = "setuptools.build_meta"
|
|
21
|
+
|
|
22
|
+
[project]
|
|
23
|
+
name = "oaknut"
|
|
24
|
+
version = "0.1.0"
|
|
25
|
+
requires-python = ">=3.11"
|
|
26
|
+
description = "Oaknut family meta-distribution — tools for Acorn computer filesystems, files, and formats."
|
|
27
|
+
readme = "README.md"
|
|
28
|
+
license = "MIT"
|
|
29
|
+
authors = [{ name = "Robert Smallshire", email = "robert@smallshire.org.uk" }]
|
|
30
|
+
classifiers = [
|
|
31
|
+
"Development Status :: 3 - Alpha",
|
|
32
|
+
"Environment :: Console",
|
|
33
|
+
"Intended Audience :: Developers",
|
|
34
|
+
"Operating System :: OS Independent",
|
|
35
|
+
"Programming Language :: Python",
|
|
36
|
+
"Programming Language :: Python :: 3",
|
|
37
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
38
|
+
"Programming Language :: Python :: 3.11",
|
|
39
|
+
"Programming Language :: Python :: 3.12",
|
|
40
|
+
"Programming Language :: Python :: 3.13",
|
|
41
|
+
]
|
|
42
|
+
dependencies = [
|
|
43
|
+
"oaknut-file>=1.0",
|
|
44
|
+
"oaknut-dfs>=4.0",
|
|
45
|
+
"oaknut-zip>=2.0",
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
[project.urls]
|
|
49
|
+
Homepage = "https://github.com/rob-smallshire/oaknut"
|
|
50
|
+
Repository = "https://github.com/rob-smallshire/oaknut"
|
|
51
|
+
Issues = "https://github.com/rob-smallshire/oaknut/issues"
|
|
52
|
+
|
|
53
|
+
[tool.setuptools]
|
|
54
|
+
# The meta-distribution itself ships no code — only dependencies.
|
|
55
|
+
packages = []
|
|
56
|
+
|
|
57
|
+
[tool.uv.workspace]
|
|
58
|
+
members = ["packages/oaknut-*"]
|
|
59
|
+
|
|
60
|
+
[tool.uv.sources]
|
|
61
|
+
oaknut-file = { workspace = true }
|
|
62
|
+
oaknut-dfs = { workspace = true }
|
|
63
|
+
oaknut-zip = { workspace = true }
|
|
64
|
+
|
|
65
|
+
[tool.uv]
|
|
66
|
+
default-groups = ["test", "lint", "dev"]
|
|
67
|
+
|
|
68
|
+
[dependency-groups]
|
|
69
|
+
test = [
|
|
70
|
+
"pytest>=8.3",
|
|
71
|
+
"pytest-cov>=5",
|
|
72
|
+
]
|
|
73
|
+
lint = [
|
|
74
|
+
"ruff>=0.9",
|
|
75
|
+
]
|
|
76
|
+
dev = [
|
|
77
|
+
"pre-commit>=3",
|
|
78
|
+
"bump-my-version>=0.28",
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
[tool.pytest.ini_options]
|
|
82
|
+
# importlib mode is required for PEP 420 namespace packages. The
|
|
83
|
+
# default prepend mode collides with sibling packages that contribute
|
|
84
|
+
# to the same namespace — they stop resolving each other.
|
|
85
|
+
minversion = "8.0"
|
|
86
|
+
addopts = ["--import-mode=importlib"]
|
|
87
|
+
testpaths = [
|
|
88
|
+
"packages/oaknut-file/tests",
|
|
89
|
+
"packages/oaknut-dfs/tests",
|
|
90
|
+
"packages/oaknut-zip/tests",
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
[tool.ruff]
|
|
94
|
+
line-length = 100
|
|
95
|
+
target-version = "py311"
|
|
96
|
+
|
|
97
|
+
[tool.ruff.lint]
|
|
98
|
+
select = ["E", "F", "W", "I"]
|
oaknut-0.1.0/setup.cfg
ADDED