Skip to main content

EasyVersion

Goals

  • Many Archives: Can store in many archives at once.
  • Emergent Complexity: Small implementation surface but reasonable usage requirements.

Commands

  • ev [COMMANDS | OPTIONS | ARGUMENTS | FLAGS]... [--help | -h]: List all sub commands + a small description of the intended usage.
  • ev archive <archive:URL> register [user:ID]: Request to claim a new user ID on the given archive URL.
  • ev archive <archive:URL> unregister <user:ID>: Request to be forgotten with the passed user ID on the given archive URL.
  • ev <workspace:PATH> login <api:URL> <user:ID>: Add this api URL + user ID to the list of active archives for the specified workspace.
  • ev <workspace:PATH> logout <api:URL> <user:ID>: Remove this api URL + user ID from the list of active archives for the specified workspace.
  • ev <workspace:PATH> logout <api:URL> <user:ID>: Remove this api URL + user ID from the list of active archives for the specified workspace.
  • ev <workspace:PATH> save [--note <comment:TEXT> | -n <comment:TEXT>]: Save the current state of this workspace as a new version. With the specified comment if provided.
  • ev <workspace:PATH> list [--version <version:NUMBER> | -v <version:NUMBER>]: List every version of the passed workspace so far or just the specific one requested. With their respective notes if set.
  • ev <source:PATH> clone <target:PATH> [--version <version:NUMBER> | -v <version:NUMBER>]: Clone the source workspace to the target workspace. Target may not exist yet. Clone the workspace as it was on the specified version if passed.
  • ev <source:PATH> forget {--version <version:NUMBER> | -v <version:NUMBER> | --all | -a}: Request the active workspaces to forget the selected version. Or all if requested. Does not clear the current workspace state.

Archive

  • URL Specified: Each archive only be accessed programatically by users through its URL.

Endpoints

Accounts

POST /user/register
  • Claims an available user.
  • If successful returns the claimed user.
POST /user/register:id
  • Attempts to claim the specfied user.
DELETE /user/:user_id/
  • Attempts to forget the provided user.
GET /user/:user_id/
  • Returns an object containing:
    • An array of all workspace IDs for the given user.

Workspace

GET /user/:user_id/workspace/:workspace_id
  • Returns a workspace object containing:
    • An array of all snapshot IDs for the given user's workspace.
PUT /user/:user_id/workspace/:workspace_id
  • Replace the user's specified workspace with the new workspace object containing:
    • An array of all snapshot IDs for the given user's workspace.
DELETE /user/:user_id/workspace/:workspace_id
  • Forget the user's specified workspace.

Snapshot

GET /user/:user_id/snapshot/:snapshot_id
  • Returns an object containing:
    • An array of all manifest IDs for the given user's snapshot.
    • An optional note string for the given user's snapshot.
PUT /user/:user_id/snapshot/:snapshot_id
  • Create the user's specified snapshot from the provided snapshot object containing:
    • A manifest IDs for the given user's snapshot.
    • An optional note string for the given user's snapshot.
DELETE /user/:user_id/snapshot/:snapshot_id
  • Forget the user's specified snapshot.

Manifest

GET /user/:user_id/manifest/:manifest_id
  • Returns an object containing:
    • An array of all reference IDs for the given user's manifest.
PUT /user/:user_id/manifest/:manifest_id
  • Create the user's specified manifest from the provided manifest object containing:
    • An array of all reference IDs for the given user's manifest.
DELETE /user/:user_id/manifest/:manifest_id
  • Forget the user's specified manifest.

Reference

GET /user/:user_id/reference/:reference_id
  • Returns an object containing:
    • The reference's relative file path.
    • The reference's content digest.
PUT /user/:user_id/reference/:reference_id
  • Create the user's specified reference from the provided reference object containing:
    • The reference's relative file path.
    • The reference's content digest.
DELETE /user/:user_id/reference/:reference_id
  • Forget the user's specified reference.

Content

GET /user/:user_id/content/:content_id
  • Returns a byte stream containing:
    • The encoded content data.
PUT /user/:user_id/content/:content_id
  • Create the user's specified reference from the provided content byte stream containing:
    • The encoded content data.
DELETE /user/:user_id/content/:content_id
  • Forget the user's specified reference.

Invariants

  • All non user IDs are blake3 hashes.

Client

Invariants

  • All config information is stored in the .ev folder at the workspace root.
  • The workspace login command appends the provided archive configuration to the currently active archive configurations in .ev/archives.
  • If an internal error happens the program should never continue.
  • User IDs are provided and used as is by the archive. No extra mapping.

Release files for evserver 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for evserver 0.1.0
File Size Uploaded
evserver-0.1.0.tar.gz 5.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for evserver 0.1.0
File Interpreter ABI Platform
evserver-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 11.3 kB

Release files / evserver-0.1.0.tar.gz

Download URL evserver-0.1.0.tar.gz
Size 5.0 kB
Tags Source
SHA-256 checksum
How to use checksums
547dea55f7bdcc919c67a1074b76d95035953a20c5ec06e5cacced6f34eb3aeb
BLAKE2b-256 checksum
How to use checksums
bfb431b7733903bdd6c1703dece93a240f3b64838569588b04caa4cfd13ad25d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / evserver-0.1.0-py3-none-any.whl

Download URL evserver-0.1.0-py3-none-any.whl
Size 6.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
80ccc8debeb0390af8365ce93fd0776bc339d0afb43e93ff272c3efd918cdeed
BLAKE2b-256 checksum
How to use checksums
4a70491ab23c8a41cdac61245479f9f5a24aa0920f23505d498f220816c507f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page