Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

popoto

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

popoto

A Python Redis ORM

  • 0.8.3
  • PyPI
  • Socket score

Maintainers
1

Status

pypi package total downloads documentation status

Documentation: popoto.readthedocs.io

Popoto - A Redis ORM (Object-Relational Mapper)

Install

pip install popoto

Basic Usage

from popoto import Model, KeyField, Field

class Person(Model):
    name = KeyField()
    fav_color = Field()

Person.create(name="Lalisa Manobal", fav_color = "yellow")

lisa = Person.query.get(name="Lalisa Manobal")

print(f"{lisa.name} likes {lisa.fav_color}.")
> 'Lalisa Manobal likes yellow.'

Popoto Features

  • very fast stores and queries
  • familiar syntax, similar to Django models
  • Geometric distance search
  • Timeseries for streaming data and finance tickers
  • compatible with Pandas, Xarray for N-dimensional matrix search 🚧
  • PubSub for message queues, streaming data processing

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

class Person(popoto.Model):
    uuid = popoto.AutoKeyField()
    username = popoto.UniqueKeyField()
    title = popoto.KeyField()
    level = popoto.SortedField(type=int)
    last_active = popoto.SortedField(type=datetime)
    location = popoto.GeoField()
    invited_by = popoto.Relationship(model=Person)

Save Instances

lisa = Person(username="@LalisaManobal")
lisa.title = "Queen"
lisa.level = 99
lisa.location = (48.856373, 2.353016)  # Hôtel de Ville, Fashion Week 2021
lisa.last_active = datetime.now()
lisa.save()

Queries


paris_lat_long = (48.864716, 2.349014)
yesterday = datetime.now() - timedelta(days=1)

query_results = Person.query.filter(
    title__startswith="Queen",
    level__lt=100,
    last_active__gt=yesterday,
    location=paris_lat_long,
    location_radius=5, location_radius_unit='km'
)

len(query_results)
>>> 1

print(query_results)
>>> [{
    'uuid': 'f1063355b14943ed91fa1e1697806c4f', 
    'username': '@LalisaManobal', 
    'title': 'Queen', 
    'level': 99, 
    'last_active': datetime.datetime(2021, 11, 21, 14, 47, 19, 911023), 
    'location': (48.856373, 2.353016)
}, ]

lisa = query_results[0]
lisa.delete()
>>> True

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

Please post your questions on Stack Overflow.

Popoto gets it's name from the Māui dolphin subspeciesis - 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 RedisGraph to make it easy to manage streaming timeseries data on a social graph.

For help building applications with Python/Redis, contact Tom Counsell on LinkedIn.com/in/tomcounsell

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc