Skip to main content

Package for embedded storage systems

Project description

coopstorage

A Python library for embedded storage tracking — models physical storage locations, containers, and the channel-processor rules that govern how items flow in and out of each slot.


Overview

coopstorage provides:

  • Locations — physical storage slots with configurable capacity, dimensions, and channel-processor type
  • Containers — items stored at locations, each with a UoM, optional contents, and resource qualifiers
  • Channel processors — pluggable rules that control which slots are addable/removable (FIFO, LIFO, OMNI, NoFlow, push variants, etc.)
  • Transfer requests — declarative add/move/remove operations resolved against qualifier criteria
  • Location qualifiers — filter locations by capacity, dimensions, UoM, resource type, occupied state, channel accessibility, and more
  • Live visualizer — browser-based isometric/top-down view with real-time SSE updates, slot overlays, UOM icons, and a legend

Channel Processor Types

Type Add Remove Flow
AllAvailableChannelProcessor any empty slot any occupied slot none
AllAvailableFlowChannelProcessor any empty slot any occupied slot forward
AllAvailableFlowBackwardChannelProcessor any empty slot any occupied slot backward
FIFOFlowChannelProcessor back of queue front (oldest) forward
FIFOFlowBackwardChannelProcessor front (push) front (oldest) backward
FIFONoFlowChannelProcessor deepest open slot deepest occupied (oldest) none
FIFONoFlowPushChannelProcessor slot 0 (push) deepest occupied (oldest) none
LIFOFlowChannelProcessor back of queue front (newest) forward
LIFOFlowBackwardChannelProcessor front (push) front (newest) backward
LIFONoFlowChannelProcessor deepest open slot shallowest occupied (newest) none
LIFONoFlowPushChannelProcessor slot 0 (push) shallowest occupied (newest) none
OMNIChannelProcessor adjacent to pack (either end) either end none
OMNIFlowChannelProcessor adjacent to pack (either end) either end forward
OMNIFlowBackwardChannelProcessor adjacent to pack (either end) either end backward

Quick Start

from coopstorage.storage.loc_load.storage import Storage
from coopstorage.storage.loc_load.location import Location
import coopstorage.storage.loc_load.dcs as dcs
import coopstorage.storage.loc_load.channel_processors as cps
from coopstorage.storage.loc_load.qualifiers import LocationQualifier
from coopstorage.storage.loc_load.transferRequest import TransferRequestCriteria

# Build storage with two locations
loc_a = Location(
    id='A',
    location_meta=dcs.LocationMeta(
        dims=(10, 10, 5),
        channel_processor=cps.FIFOFlowChannelProcessor(),
        capacity=5,
    ),
    coords=(0, 0, 0),
)
loc_b = Location(
    id='B',
    location_meta=dcs.LocationMeta(
        dims=(10, 10, 5),
        channel_processor=cps.LIFOFlowBackwardChannelProcessor(),
        capacity=5,
    ),
    coords=(15, 0, 0),
)

storage = Storage(locs=[loc_a, loc_b])

# Add a container to the first available location
storage.handle_transfer_requests([
    TransferRequestCriteria(
        new_container=dcs.Container(id='C001'),
        dest_loc_query_args=LocationQualifier(at_least_capacity=1, has_addable_position=True),
    )
])

Location Qualifiers

LocationQualifier filters candidate locations during transfer resolution:

from coopstorage.storage.loc_load.qualifiers import LocationQualifier, ContainerQualifier
from cooptools.qualifiers import PatternMatchQualifier, WhiteBlackListQualifier

# Destination: must have capacity, an accessible drop slot, and accept the container's UoM
LocationQualifier(
    at_least_capacity=1,
    has_addable_position=True,
)

# Source: must contain a container matching a pattern
LocationQualifier(
    has_all_containers=[ContainerQualifier(pattern=PatternMatchQualifier(regex='^C00'))]
)

Key parameters:

Parameter Description
at_least_capacity Minimum number of free slots
has_addable_position Channel processor has an accessible drop position
is_occupied True/False filter on whether any container is present
has_any_containers At least one container satisfies any of the given qualifiers
has_all_containers For each qualifier, at least one container satisfies it
has_content Total qty of a resource/UoM across all containers meets a minimum
uom_qualifier / ignore_uom_qualifier Container UoM must be allowed by location's whitelist
resource_type_qualifier / ignore_resource_type_qualifier Container resource types must be allowed
min_slot_dims All slot dimensions must be >= this
reserved Filter on reservation state

Visualizer

Start a live browser visualizer alongside a benchmark or simulation:

# Showcase: one of each channel processor type, lock-step add/remove
python run_viz_benchmark.py --mode showcase

# Continuous randomized simulation
python run_viz_benchmark.py --mode sim --config small

# Fixed benchmark workload
python run_viz_benchmark.py --mode benchmark --config medium

# Options
python run_viz_benchmark.py --delay 0.05 --log-level DEBUG --port 1219

The visualizer is served at http://localhost:1219/static/index.html.

Slot overlays:

Color Meaning
Green fill Occupied
Grey fill Available
Blue outline Droppable (addable position)
Purple outline Retrievable (removable position)

Each container label shows a unique icon per UoM type with a live legend.


Running Tests

python -m pytest tests/ -v

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

coopstorage-1.14.tar.gz (71.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

coopstorage-1.14-py3-none-any.whl (61.4 kB view details)

Uploaded Python 3

File details

Details for the file coopstorage-1.14.tar.gz.

File metadata

  • Download URL: coopstorage-1.14.tar.gz
  • Upload date:
  • Size: 71.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for coopstorage-1.14.tar.gz
Algorithm Hash digest
SHA256 8af90ce4fea5d039e832dc1b5d7fbbc9d0d5c4905f5fcf45952d26cccc261c87
MD5 1543cdb2c9db5763cdae8395fbc590af
BLAKE2b-256 d5aecd3706d0bb4d5ee0f821500a24ae893318401db8350c996e5d9d13985cd0

See more details on using hashes here.

File details

Details for the file coopstorage-1.14-py3-none-any.whl.

File metadata

  • Download URL: coopstorage-1.14-py3-none-any.whl
  • Upload date:
  • Size: 61.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for coopstorage-1.14-py3-none-any.whl
Algorithm Hash digest
SHA256 4c5548cabecd9e75db0f0467e44366483330dd784e4dd9408338dbeab2af67a3
MD5 9169405ffc0cab66aad4c63a8047cf4f
BLAKE2b-256 7f11651b881cbfd569d6d88d32909848720966305b5e0112fe628538cd73fe1f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page