Arowana
Arowana provides a simple local base and drive. Base is a NoSQL wrapper for sqlite3 and drive is a wrapper for the filesystem. Arowana is a sister project of fishweb.
Installation
pip install arowana
Base
Base is a simple NoSQL wrapper for sqlite3. To get started define the location and name of the base.
from arowana import Arowana
arowana = Arowana("data") # Creates 'data' folder
base = arowana.Base("testing") # Creates base/table 'testing'
put
Put item into base. Overrides existing item if key already exists
Args:
- data: The data to be stored
- key: The key to store the data under. If None, a new key will be generated
Returns:
- dict: Added item details
# Key is automatically generated
# Returns: {"name": "sofa", "price": 20, "key": "generated_key"}
base.put({"name": "sofa", "price": 20})
# Set key as "one"
# Returns: {"name": "sofa", "price": 20, "key": "one"}
base.put({"name": "sofa", "price": 20}, "one")
# The key can also be included in the object
# Returns: {"name": "sofa", "price": 20, "key": "test"}
base.put({"name": "sofa", "price": 20, "key": "test"})
# Supports multiple types
# Returns: {"key": "generated_key", "value": "hello, worlds"}
base.put("hello, worlds")
# Returns: {"key": "generated_key", "value": 7}
base.put(7)
# Returns: {"key": "generated_key", "value": true}
base.put(True)
# Returns: {"key": "name", "value": "sofa"}
base.put(data="sofa", key="name")
puts
Put multiple items into base
Args:
- items: Items to add
Returns:
- dict: Added items details
# Returns: {"items": [
# {"name": "sofa", "hometown": "Sofa islands", "key": "slumberdemon"},
# {"key": "generated_key", "value": ["nemo", "arowana", "fishweb", "clownfish"]},
# {"key": "generated_key", "value": "goldfish"}
# ]}
base.puts(
[
{"name": "sofa", "hometown": "Sofa islands", "key": "slumberdemon"}, # Key provided.
["nemo", "arowana", "fishweb", "clownfish"], # Key auto-generated.
"goldfish", # Key auto-generated.
],
)
insert
Insert item to base. Does not override existing item if key already exists
Args:
- data: The data to be stored
- key: The key to store the data under. If None, a new key will be generated
Returns:
- dict: Added item details
# Will succeed and auto generate a key
# Returns: {"key": "generated_key", "value": "hello, world"}
base.insert("hello, world")
# Will succeed with key "greeting1"
# Returns: {"message": "hello, world", "key": "greeting1"}
base.insert({"message": "hello, world"}, "greeting1")
# Will raise an error as key "greeting1" already exists
base.insert({"message": "hello, there"}, "greeting1")
get
Get item from base.
Args:
- key: key of the item to retrieve
Returns:
- dict: Retrieved item details
# If the stored item is a dictionary, returns the dict with a "key" field:
# {"name": "sofa", "price": 20, "key": "one"}
base.get("one")
# If the stored item is a non-dict value, returns:
# {"key": "my_key", "value": "stored_value"}
base.get("my_key")
delete
Delete item from base.
Args:
- key: key of the item to delete
base.delete("sofa")
update
Update item in base
Args:
- data: Attributes to update
- key: Key of the item to update
base.update(
{
"name": "sofa", # Set name to "sofa"
"status.active": True, # Set "status.active" to True
"description": base.util.trim(), # Remove description element
"likes": base.util.append("fishing"), # Append fishing to likes array
"age": base.util.increment(1), # Increment age by 1
},
"slumberdemon",
)
all
Get all items in base
Returns:
- dict: All items
# Returns: {"items": [
# {"name": "sofa", "price": 20, "key": "one"},
# {"key": "my_string", "value": "hello world"},
# ...
# ]}
base.all()
drop
Delete base from database
base.drop()
utils
util.trim()- Remove element from dictutil.increment(value)- Increment element by valueutil.subtract(value)- Subtract element by valueutil.append(value)- Append element to list
Drive
Drive makes it super easy to store and manage files.
from arowana import Arowana
arowana = Arowana("data") # Creates 'data' folder
drive = arowana.Drive("testing") # Creates folder/drive 'testing'
put
Put file
Args:
- name: Name and path of the file
- data: Data content of file
- path: Path of file to get content from
Returns:
- str: Name of the file
# Put content directly
drive.put("hello.txt", "Hello world")
drive.put(b"hello.txt", "Hello world")
import io
# Provide file content object
drive.put("arowana.txt", io.StringIO("hello world"))
drive.put("arowana.txt", io.BytesIO(b"hello world"))
with open("./arowana.txt", "r") as file:
drive.put("arowana.txt", file)
# Provide a path to a file.
drive.put("arowana.txt", path="./arowana.txt")
get
Get file content
Args:
- name: Name and path of the file
Returns:
- bytes: File bytes
drive.get("arowana.txt")
list
List all files
Args:
- prefix: Prefix that file names start with
Returns:
- list: List of file names
drive.list()
delete
Delete file
Args:
- name: Name and path of the file
Returns:
- str: Name of the deleted file
drive.delete("arowana.txt")
Fishweb
To learn more about using arowana with fishweb read the documentation.
Inspirations
Release files for arowana 0.1.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| arowana-0.1.6.tar.gz | 18.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| arowana-0.1.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.9 kB
Release files / arowana-0.1.6.tar.gz
| Download URL | arowana-0.1.6.tar.gz |
|---|---|
| Size | 18.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fcbf1f6f18d4008850d8acb11202b05d525219e905f0a011cc5f2b6095ca96d5
|
|
BLAKE2b-256 checksum How to use checksums |
57959a726310a12534688f5c68f0ee120ec2fc50833fbf57c64f498b5c9e4677
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 21, 2026.
Transparency logRelease files / arowana-0.1.6-py3-none-any.whl
| Download URL | arowana-0.1.6-py3-none-any.whl |
|---|---|
| Size | 19.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7c3fa89781498f22df950ffa64f60c49a31382ea6858fd6e6c4ec1e27b8c37b3
|
|
BLAKE2b-256 checksum How to use checksums |
282afc476fda593e7907d02c73692ba5e6cc03c7b65fc8aa033f6a2e29e51f7f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 21, 2026.
Transparency log