Metadata-Version: 2.4
Name: codecraftai-restclient-linode
Version: 1.2.0
Summary: Code Craft AI - Linode REST client
License-Expression: LicenseRef-CodeCraftAI-Source-Available
License-File: LICENSE.md
Keywords: python,automation,ccai,restclient,linode
Author: Myron Walker
Author-email: myron.walker@gmail.com
Requires-Python: >=3.10,<4.0
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: POSIX
Requires-Dist: codecraftai-credentials (<2.0.0)
Requires-Dist: codecraftai-foundations (<2.0.0)
Requires-Dist: codecraftai-restclient-base (<2.0.0)
Requires-Dist: requests (>=2.32.4,<3.0.0)
Project-URL: Issues, https://github.com/code-craft-ai-company/codecraftai-restclient-linode/issues
Project-URL: Repository, https://github.com/code-craft-ai-company/codecraftai-restclient-linode
Description-Content-Type: text/x-rst

==================================
Code Craft AI - Linode REST client
==================================

A pure-Python client for the Linode (Akamai Cloud) API v4.

The Linode API is plain REST over HTTPS with JSON bodies and a Bearer
personal-access token, so this package speaks it directly rather than
depending on the ``linode_api4`` SDK — keeping the fleet's pure-Python
guarantee.

Design
======

**Api groups mirror the SDK's grouping** — ``linode`` (instances),
``volumes``, ``vpcs``, ``networking``, ``object_storage``, ``domains``,
``profile`` — and the collection groups are callable, so SDK-era call shapes
like ``client.volumes()`` and ``client.linode.instance_create(...)`` keep
working unchanged.

**Resources are active record.** A listed resource carries the client and
its own collection path, so ``volume.delete()``, ``volume.detach()`` and
``instance.resize(new_type=...)`` work without the caller tracking which
endpoint produced the object. That is how callers already work with these
objects, and it is what lets a consumer migrate off the SDK without
rewriting its teardown paths.

**Collections are fully walked.** Linode paginates with ``page``/``pages``;
list calls follow every page. A silently truncated first page would
under-report owned resources, which in a teardown path means leaked
infrastructure.

**Errors name the field.** Linode reports failures as an ``errors`` array
with ``field`` and ``reason``; ``LinodeApiRequestError.reason`` carries the
joined result rather than the bare HTTP phrase.

