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
File details
Details for the file sqlalchemy-function-0.0.9.tar.gz
.
File metadata
- Download URL: sqlalchemy-function-0.0.9.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 50637b8a471b8841c574bf1c56816b727e70246805c7307bcd372dd1e1833518 |
|
MD5 | 128b1f92aedfa61c7d931bc27187d045 |
|
BLAKE2b-256 | 486b481f748fcd62b437bc71a8e4cd93460b019074685ae4d0450b7e015f751a |
File details
Details for the file sqlalchemy_function-0.0.9-py3-none-any.whl
.
File metadata
- Download URL: sqlalchemy_function-0.0.9-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 205ae671d16146de6d53b99c0325cfe05fa4bee7ae00153d0a711ecef099b64f |
|
MD5 | 99887ad475522153599fc59f3a541027 |
|
BLAKE2b-256 | 8701bae7db608bab520acdb0d6ec86ad978f3aece1bca28d00986a15767b134d |