flake8 reported 49 findings and pyright 10, and two of them were real
bugs rather than matters of style. The rest were unused imports and
four functions over the complexity limit.
- Unlock a DOI folder with the id the DOI response carries, rather
than an attribute the model does not have, which raised
`AttributeError` on every locked DOI folder.
- Size the `ls` Size column from the sub-folder on the row rather than
from its parent, which pushed the later columns out of line.
- Share the path resolution and the destination checks between `cp`
and `mv`, and split the recursive download and the `ls` row
printing, bringing all four functions under the complexity limit.
- Accept a client built without a connection, which `config` and
`version` rely on, and report the reason if one is then asked for.
- Declare the config protocol's constructor for the type checker
alone, so the protocol keeps its guard against being instantiated.
- Remove 41 unused imports, and let flake8 accept black's spacing.
- Point pyright at the project's own environment, without which it
resolved no dependency and reported 124 findings that were not real.
- Cover the two fixes and the shared `cp`/`mv` paths with new tests.
To improve the tool's portability as a Python library, the core logic
has been decoupled from the CLI interface. This allows developers to
programmatically interact with MDRS without relying on CLI-specific
argument parsing or local file-based caches.
- Introduce `MdrsClient` service layer to handle core operations.
- Abstract authentication state using `CacheInterface` and `InMemoryCache`.
- Migrate all CLI commands to utilize `MdrsClient` for execution.
- Separate `Doi` data model from API responses and move to `models/doi.py`.
- Update `README.md` to include Python API usage examples.
- Bump package version to 1.3.17.