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.11.tar.gz (70.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.11-py3-none-any.whl (60.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: coopstorage-1.11.tar.gz
  • Upload date:
  • Size: 70.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.11.tar.gz
Algorithm Hash digest
SHA256 0154d0cc6169489a7288621c121b38a5019b9c98ac5263bd336f55d367d1643c
MD5 fc7347e07973051520893ae12649cae6
BLAKE2b-256 47fbdb665640ac7ba0b469d4884b647f6818c9dbf9dbb48503a986c6b74e9471

See more details on using hashes here.

File details

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

File metadata

  • Download URL: coopstorage-1.11-py3-none-any.whl
  • Upload date:
  • Size: 60.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.11-py3-none-any.whl
Algorithm Hash digest
SHA256 22749e6f53a89f3b95fc4db06a2160c8adf7a3ddc1fa5457b3143a371de99702
MD5 d12b218a4d569a6338695c7df41aa587
BLAKE2b-256 e6632b53dce63d030db384feba2a32fae280833a1a971289cd880f22e9dfb0b8

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