Metadata-Version: 2.1
Name: sito-io
Version: 0.0.1
Summary: Standard Interfaces for Object Transformation - File I/O Structures
Home-page: https://github.com/xkortex/sito-io
Author: Michael McDermott
Author-email: michaelmcdermott11@gmail.com
License: MIT
Keywords: setup,distutils
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python
Description-Content-Type: text/markdown; charset=UTF-8

# sito-io
Standard Interfaces for Transforming Objects - File I/O

The goal of this library is to provide data structures and interfaces which are 
at least as ergonomic as existing file I/O and path primitives (`open`, `Path`, etc),
while providing strongly typed functionality to facilitate transformations of collections of
files. 

### Core concepts

#### Resource

A Resource is the core unit of abstraction. It is kind of like a sum type of a `os.Path` and `urllib.parse.ParseResult`. 
Its essence is to act as a handle to a more sophisticated resource, such as a file, directory, 
URL, endpoint, transaction, FIFO, special file, etc. 

#### Context

A Context is a Resource that can be used to "anchor" another Resource. For example, a context might be 
`http://example.com`, `/home/user`, or even `.`. A context can be: 
- Fully qualified - `file:///home/user/foo/bar`, `http://example.com/foo/bar`, `ftp://example.com/foo/bar`
- Absolute - `/home/user/foo/bar`, `/home/user/arch.tar::/foo/bar`
- Relative - `./bar` - Relative contexts must be rooted before they can be fully 
resolved
- Naive - `bar` - Naive contexts must be rooted before they can be fully resolved

#### Manifest

A Manifest is a collection of Resources. This might be files on disk (or a description thereof, it need not exist),
or files in a TAR file, or endpoints. The primary purpose is to facilitate moving collections of files atomically, 
capturing I/O of a process, and "slurping up" the data, thus allowing stateful processes to be modeled as a transaction. 
This makes a process behave less like a mutation and more like a lambda, improving referential transparency 
in pipelines. 

A Manifest can be used to generate a ManifestFile, a serialized index of the manifest. This can be packed 
with the files and give an easy handle to verify the contents of a transaction.



