Bases and Mixins to store functions for later execution
Project description
SQLAlchemy-Function defines a SQLALchemy Mixin for creating Function models.
A Function model has a parent (optional), a function, arguments, and keyword arguments. When called, the Function model executes its function, passing in its parent (if applicable), its arguments, and its keyword arguments.
Installation
$ pip install sqlalchemy-function
Quickstart
In the setup, we create a SQLAlchemy session, define a Parent model
subclassing FunctionRelator
, and a Function model subclassing
FunctionMixin
.
from sqlalchemy_function import FunctionMixin, FunctionRelator from sqlalchemy import create_engine, Column, ForeignKey, Integer from sqlalchemy.orm import relationship, sessionmaker, scoped_session from sqlalchemy.ext.declarative import declarative_base # standard session creation engine = create_engine('sqlite:///:memory:') session_factory = sessionmaker(bind=engine) Session = scoped_session(session_factory) session = Session() Base = declarative_base() # define a Function model parent class Parent(FunctionRelator, Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) # Fuction models must reference their parent with a `parent` attribute functions = relationship('Function', backref='parent') # define a Function model with the FunctionMixin class Function(FunctionMixin, Base): __tablename__ = 'function' id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('parent.id')) Base.metadata.create_all(engine)
We can now register, store, and call functions as follows.
@Function.register def foo(parent, *args, **kwargs): print('My parent is', parent) print('My args are', args) print('My kwargs are', kwargs) return 'return value' parent = Parent() Function.foo(parent, 'hello world', goodbye='moon') parent.functions[0]()
Out:
My parent is <__main__.Parent object at 0x7f8b4d200518>
My args are ('hello world',)
My kwargs are {'goodbye': 'moon'}
'return value'
Citation
@software{bowen2020sqlalchemy-function,
author = {Dillon Bowen},
title = {SQLAlchemy-Function},
url = {https://dsbowen.github.io/sqlalchemy-function/},
date = {2020-06-05},
}
License
Users must cite this package in any publications which use it.
It is licensed with the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for sqlalchemy-function-0.0.9.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 50637b8a471b8841c574bf1c56816b727e70246805c7307bcd372dd1e1833518 |
|
MD5 | 128b1f92aedfa61c7d931bc27187d045 |
|
BLAKE2-256 | 486b481f748fcd62b437bc71a8e4cd93460b019074685ae4d0450b7e015f751a |
Hashes for sqlalchemy_function-0.0.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 205ae671d16146de6d53b99c0325cfe05fa4bee7ae00153d0a711ecef099b64f |
|
MD5 | 99887ad475522153599fc59f3a541027 |
|
BLAKE2-256 | 8701bae7db608bab520acdb0d6ec86ad978f3aece1bca28d00986a15767b134d |