Skip to main content

A Python Redis ORM

Project description

Status

pypi package total downloads documentation status

Documentation: popoto.readthedocs.io

Popoto - A Redis/Valkey ORM (Object-Relational Mapper)

Install

pip install popoto

Basic Usage

from popoto import Model, KeyField, Field, SortedField

class Restaurant(Model):
    name = KeyField()
    cuisine = Field()
    rating = SortedField(type=float)

Restaurant.create(name="Burger Palace", cuisine="American", rating=4.5)

restaurant = Restaurant.query.get(name="Burger Palace")

print(f"{restaurant.name} serves {restaurant.cuisine} food.")
# => "Burger Palace serves American food."

Popoto Features

  • very fast stores and queries
  • familiar syntax, similar to Django models
  • Async operations for asyncio-based applications
  • Geometric distance search
  • Timeseries for streaming data
  • compatible with Pandas, Xarray for N-dimensional matrix search
  • PubSub for message queues, streaming data processing
  • Full Redis and Valkey support - works with both out of the box
  • Agent Memory - programmable memory primitives for AI agents (decay, confidence, associations, context assembly)
  • Content & Embeddings - large content storage, vector embeddings, and semantic search

Popoto is ideal for streaming data. The pub/sub module allows you to trigger state updates in real time. Currently being used in production for:

  • trigger buy/sell actions from streaming price data
  • robots sending each other messages for teamwork
  • compressing sensor data and training neural networks

Advanced Usage

import popoto
from popoto import Relationship, DatetimeField

class Restaurant(popoto.Model):
    name = popoto.KeyField()
    cuisine = popoto.Field()
    rating = popoto.SortedField(type=float)
    location = popoto.GeoField()

class Order(popoto.Model):
    order_id = popoto.AutoKeyField()
    restaurant = Relationship(Restaurant)
    total = popoto.SortedField(type=float)
    status = popoto.Field(default="pending")
    created_at = DatetimeField(auto_now_add=True)

    class Meta:
        order_by = "-created_at"
        ttl = 2592000  # 30 days

Save Instances

restaurant = Restaurant(name="Burger Palace")
restaurant.cuisine = "American"
restaurant.rating = 4.5
restaurant.location = (40.7128, -74.0060)
restaurant.save()

order = Order.create(restaurant=restaurant, total=24.99)

Queries

from datetime import datetime, timedelta

midtown = (40.7549, -73.9840)
yesterday = datetime.now() - timedelta(days=1)

nearby_restaurants = Restaurant.query.filter(
    location=midtown,
    location_radius=5, location_radius_unit='km',
    rating__gte=4.0
)

print(len(nearby_restaurants))
# => 1

recent_orders = Order.query.filter(
    created_at__gte=yesterday,
    total__gte=10.00
)

Documentation

Documentation is available at popoto.readthedocs.io

Please create new feature and documentation related issues github.com/tomcounsell/popoto/issues or make a pull request with your improvements.

License

Popoto ORM is released under the MIT Open Source license.

Popoto Community

Questions, bug reports, and feature requests are welcome on GitHub Issues and GitHub Discussions. Contributions via pull request are encouraged.

Popoto gets its name from the Maui dolphin subspecies - the world's smallest dolphin subspecies. Because dolphins are fast moving, agile, and work together in social groups. In the same way, Popoto wraps Redis and Valkey to make it easy to manage streaming timeseries data and object persistence.

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

popoto-1.4.3.tar.gz (380.8 kB view details)

Uploaded Source

Built Distribution

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

popoto-1.4.3-py3-none-any.whl (243.5 kB view details)

Uploaded Python 3

File details

Details for the file popoto-1.4.3.tar.gz.

File metadata

  • Download URL: popoto-1.4.3.tar.gz
  • Upload date:
  • Size: 380.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.6

File hashes

Hashes for popoto-1.4.3.tar.gz
Algorithm Hash digest
SHA256 344ad0face7615834bf64925eea3fe938ccb54f2dacdbda31a26d890b059a5c3
MD5 afb2763073f62f3cbcfe4a2e17f52fd0
BLAKE2b-256 2bd71feb935f2e2474f20d46b4f48810c31749d8f91f03751f1f3ca11e1c3d95

See more details on using hashes here.

File details

Details for the file popoto-1.4.3-py3-none-any.whl.

File metadata

  • Download URL: popoto-1.4.3-py3-none-any.whl
  • Upload date:
  • Size: 243.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.6

File hashes

Hashes for popoto-1.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9bf0d16c3021e8a1dab1d6ccb93568b920587802a7eaa0e2e3c9f5277f7200fb
MD5 a5f9be595a12f54af8cb1e92d21212b6
BLAKE2b-256 a15795f6b5fb2e1b20bcf625958d63606ae960903650be72a58f774054f16e54

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