Files
py-pwr/README.md
senstella ca85a52839 init
2026-01-17 14:13:43 +09:00

72 lines
1.6 KiB
Markdown

# py-pwr
Minimal Python client for wharf/pwr files. It parses the wire format,
protobuf messages, and can apply patch ops when you provide file index
to path mappings.
## Features
- Read `.pwr`, `.pws`, `.pwm`, `.pww` files.
- Iterate sync ops and bsdiff controls.
- Apply patches for RSYNC and BSDIFF series using target/output file lists.
- Optional decompression for brotli/zstd if the modules are installed.
## Limitations
- TLC container decoding is not included. You can pass a decoder to
`PatchReader`/`SignatureReader` to parse the raw container bytes.
## Usage
Patch inspection:
```python
from pwr import PatchReader
with PatchReader.open("update.pwr") as reader:
for entry in reader.iter_file_entries():
if entry.is_rsync():
for op in entry.sync_ops:
pass
elif entry.is_bsdiff():
for ctrl in entry.bsdiff_controls:
pass
```
Apply a patch (requires file index mappings):
```python
from pwr import PatchReader, apply_patch
target_paths = [
"old/file0.bin",
"old/file1.bin",
]
output_paths = [
"new/file0.bin",
"new/file1.bin",
]
with PatchReader.open("update.pwr") as reader:
apply_patch(reader, target_paths, output_paths)
```
Apply to folders (uses embedded TLC container paths):
```python
from pwr import apply_patch_to_folders
apply_patch_to_folders("update.pwr", "old_folder", "new_folder")
```
Quick inspect:
```bash
python py-pwr/main.py path/to/file.pwr
```
Apply via CLI:
```bash
python py-pwr/main.py apply update.pwr /path/to/old_folder /path/to/new_folder
```