Code Structure ============== The public workflow is ``Baserow`` to ``Table`` to ``Row``. Fields hold schema knowledge, while a small set of independent records preserve identity for structured Baserow values. Baserow Class ------------- ``Baserow`` is the client and request boundary. It owns authentication, safe read retries, transport errors, table construction and discovery, and file upload operations. It does not configure application logging. Table Class ----------- ``Table`` owns schema metadata and row operations. ``fields`` and ``writable_fields`` are ordered, read-only mappings from field name to Field. Specific Field classes expose Baserow metadata and own decoding, validation, and API encoding. Discovered Tables retain name, database, order, and raw metadata. Recreate the Table to retrieve changed hosted schema. Row Class --------- ``Row`` holds one raw Baserow response and delegates value decoding to the Table's Fields. Indexing and ``values`` expose decoded values; ``raw_values`` exposes the original Baserow values. Rows do not stage mutations. ``update``, ``move``, and ``delete`` are thin conveniences over Table operations. Structured Baserow Values ------------------------- Select options, linked rows, files, collaborators, and lookup results use small independent records that preserve Baserow IDs and raw metadata. These records contain no HTTP behavior and can be passed back to the corresponding writable Field. Scalar reads remain ordinary Python values. Filter Objects -------------- Filters describe Baserow row-query conditions. Field/operator compatibility is advisory because hosted Baserow is not version-pinned; normal queries allow unknown operators to reach the service.