{ "info": { "author": "Dillon Bowen", "author_email": "dsbowen@wharton.upenn.edu", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "SQLAlchemy-Function defines a [SQLALchemy Mixin](https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/mixins.html) for creating Function models.\n\nA 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.\n\n## Installation\n\n```\n$ pip install sqlalchemy-function\n```\n\n## Quickstart\n\nIn the setup, we create a SQLAlchemy session, define a Parent model \nsubclassing `FunctionRelator`, and a Function model subclassing \n`FunctionMixin`.\n\n```python\nfrom sqlalchemy_function import FunctionMixin, FunctionRelator\n\nfrom sqlalchemy import create_engine, Column, ForeignKey, Integer\nfrom sqlalchemy.orm import relationship, sessionmaker, scoped_session\nfrom sqlalchemy.ext.declarative import declarative_base\n\n# standard session creation\nengine = create_engine('sqlite:///:memory:')\nsession_factory = sessionmaker(bind=engine)\nSession = scoped_session(session_factory)\nsession = Session()\nBase = declarative_base()\n\n# define a Function model parent\nclass Parent(FunctionRelator, Base):\n __tablename__ = 'parent'\n id = Column(Integer, primary_key=True)\n\n # Fuction models must reference their parent with a `parent` attribute\n functions = relationship('Function', backref='parent')\n\n# define a Function model with the FunctionMixin\nclass Function(FunctionMixin, Base):\n __tablename__ = 'function'\n id = Column(Integer, primary_key=True)\n parent_id = Column(Integer, ForeignKey('parent.id'))\n\nBase.metadata.create_all(engine)\n```\n\nWe can now register, store, and call functions as follows.\n\n```python\n@Function.register\ndef foo(parent, *args, **kwargs):\n print('My parent is', parent)\n print('My args are', args)\n print('My kwargs are', kwargs)\n return 'return value'\n\nparent = Parent()\nFunction.foo(parent, 'hello world', goodbye='moon')\nparent.functions[0]()\n```\n\nOut:\n\n```\nMy parent is <__main__.Parent object at 0x7f8b4d200518>\nMy args are ('hello world',)\nMy kwargs are {'goodbye': 'moon'}\n'return value'\n```\n\n## Citation\n\n```\n@software{bowen2020sqlalchemy-function,\n author = {Dillon Bowen},\n title = {SQLAlchemy-Function},\n url = {https://dsbowen.github.io/sqlalchemy-function/},\n date = {2020-06-05},\n}\n```\n\n## License\n\nUsers must cite this package in any publications which use it.\n\nIt is licensed with the MIT [License](https://github.com/dsbowen/sqlalchemy-function/blob/master/LICENSE).\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://dsbowen.github.io/sqlalchemy-function/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "sqlalchemy-function", "package_url": "https://pypi.org/project/sqlalchemy-function/", "platform": "", "project_url": "https://pypi.org/project/sqlalchemy-function/", "project_urls": { "Homepage": "https://dsbowen.github.io/sqlalchemy-function/" }, "release_url": "https://pypi.org/project/sqlalchemy-function/0.0.9/", "requires_dist": [ "sqlalchemy (>=1.3.12)", "sqlalchemy-mutable (>=0.0.8)" ], "requires_python": ">=3.6", "summary": "Bases and Mixins to store functions for later execution", "version": "0.0.9", "yanked": false, "yanked_reason": null }, "last_serial": 7496986, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "dc0dfdccbaabf64ec173ed858d874d95", "sha256": "a8cd554b1183edd0cc8c8a530b80bad4ee0152216f6064fd2055a6c3a68220dd" }, "downloads": -1, "filename": "sqlalchemy_function-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dc0dfdccbaabf64ec173ed858d874d95", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4291, "upload_time": "2019-10-28T05:54:10", "upload_time_iso_8601": "2019-10-28T05:54:10.633763Z", "url": "https://files.pythonhosted.org/packages/ec/9f/eab19ecc9e3b1c614767b8d13e1301325c5d6ba2fccc5e3957e597d004bc/sqlalchemy_function-0.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "501f1f6b9f371756dc218483d63c8f48", "sha256": "05cab016727770434318c704a3653ae771bc665de810ecade5108176b39316d0" }, "downloads": -1, "filename": "sqlalchemy-function-0.0.1.tar.gz", "has_sig": false, "md5_digest": "501f1f6b9f371756dc218483d63c8f48", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3083, "upload_time": "2019-10-28T05:54:12", "upload_time_iso_8601": "2019-10-28T05:54:12.715519Z", "url": "https://files.pythonhosted.org/packages/fd/5d/13a552369206822d7b118538f8ec38c63bd932032fe787da63f53d8f6285/sqlalchemy-function-0.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "b53455928adeb819ef8d70a8bfd6378c", "sha256": "7e196f09491d2ee8ebed111774b63cb14ae96c58c4c1aa5c286cd744a1077361" }, "downloads": -1, "filename": "sqlalchemy_function-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b53455928adeb819ef8d70a8bfd6378c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4378, "upload_time": "2019-11-20T01:20:04", "upload_time_iso_8601": "2019-11-20T01:20:04.875024Z", "url": "https://files.pythonhosted.org/packages/ed/c7/09cec8e2788b4b6bd3f2e08d095c76c35d16b50acc93ce1a604ddd2a9aef/sqlalchemy_function-0.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9f9b2f894ce169935571c854362bb8f6", "sha256": "1f946a0095306ed1192f36862808931fa373115113587f3efcc3d37fe1a461e9" }, "downloads": -1, "filename": "sqlalchemy-function-0.0.2.tar.gz", "has_sig": false, "md5_digest": "9f9b2f894ce169935571c854362bb8f6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3186, "upload_time": "2019-11-20T01:20:05", "upload_time_iso_8601": "2019-11-20T01:20:05.901376Z", "url": "https://files.pythonhosted.org/packages/f5/1a/f67841d8692267682df7f38e21d390162b8bef6c3b51ffcb1c135d853b1a/sqlalchemy-function-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "71851d260e0f7f1e32d01bf4a881ba28", "sha256": "52ef398111b1a787c90f31250e11f7ed65a4b04ee2ed21cf5764e9bc1ad19197" }, "downloads": -1, "filename": "sqlalchemy_function-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "71851d260e0f7f1e32d01bf4a881ba28", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4559, "upload_time": "2019-12-28T18:01:47", "upload_time_iso_8601": "2019-12-28T18:01:47.494191Z", "url": "https://files.pythonhosted.org/packages/09/e5/79039345c48f5d1ec368b91436b970bb2dc86cd4f5567e52a7dff85ec320/sqlalchemy_function-0.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "cd9f38338b53d8f41e812632deb40a37", "sha256": "d759b2f9d862ed5ba6e38d32d2ac8fd3ade3d0fdd6ce9d47db35a3eafdc9103c" }, "downloads": -1, "filename": "sqlalchemy-function-0.0.3.tar.gz", "has_sig": false, "md5_digest": "cd9f38338b53d8f41e812632deb40a37", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3347, "upload_time": "2019-12-28T18:01:49", "upload_time_iso_8601": "2019-12-28T18:01:49.671669Z", "url": "https://files.pythonhosted.org/packages/f9/ff/eb5fac4e5fcf2a9dfecaf696c6792f0ca58b6ae2b92b89a6d8c8e19f6e89/sqlalchemy-function-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "cf7f4f4944f38fc0581c5b61d5fd559f", "sha256": "35d00bc075e1939467ce1f7ba3a6b735342f03d6c4eb3a75d3a6617fbfd2b0c0" }, "downloads": -1, "filename": "sqlalchemy_function-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "cf7f4f4944f38fc0581c5b61d5fd559f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4502, "upload_time": "2019-12-29T14:55:35", "upload_time_iso_8601": "2019-12-29T14:55:35.716361Z", "url": "https://files.pythonhosted.org/packages/fc/48/de47c6f16d1e419bfc7aa67e8207b51383ec2bf65e304365650fc3ef4c2d/sqlalchemy_function-0.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "132d317484d8a088bc9cd921ccbe13a8", "sha256": "ea2bb58f7ea1d00983473361e23942c7d9287676ed403ab26f1d9c8c5dd4d150" }, "downloads": -1, "filename": "sqlalchemy-function-0.0.4.tar.gz", "has_sig": false, "md5_digest": "132d317484d8a088bc9cd921ccbe13a8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3283, "upload_time": "2019-12-29T14:55:37", "upload_time_iso_8601": "2019-12-29T14:55:37.176893Z", "url": "https://files.pythonhosted.org/packages/7f/1c/fa84d09c0785d1db6cbe5cfb328b1d8438b467b5a3215255852238fa171b/sqlalchemy-function-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "1aac21bca4e35e8cbf27c3036052c517", "sha256": "63d137da132b2a6f6ef6b8d859d0f8690b2c4d42577ea73b772c986cf9dfa646" }, "downloads": -1, "filename": "sqlalchemy_function-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "1aac21bca4e35e8cbf27c3036052c517", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4532, "upload_time": "2020-01-18T16:51:54", "upload_time_iso_8601": "2020-01-18T16:51:54.157761Z", "url": "https://files.pythonhosted.org/packages/fe/0e/c8330c45d5888aeac6704803a409a2782b059c346e8e2ea484998812bba4/sqlalchemy_function-0.0.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "318372bfa71df0fab579094862506d0c", "sha256": "7479e7670518556b014ad87a580cebcd5aefac65f13beff14d2d7a99bbad5088" }, "downloads": -1, "filename": "sqlalchemy-function-0.0.5.tar.gz", "has_sig": false, "md5_digest": "318372bfa71df0fab579094862506d0c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3338, "upload_time": "2020-01-18T16:51:55", "upload_time_iso_8601": "2020-01-18T16:51:55.808264Z", "url": "https://files.pythonhosted.org/packages/89/c1/b22767c18979af5f29c7a75da0e18d25e7ba355a14eb3bc1bfccc4cc016b/sqlalchemy-function-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "7f26b24cd3c6e8cb79d3b491f7246323", "sha256": "c71166ac8f6aabcfd53fe495548e93e46299e94ef4f75bc58301f39c625b5cf4" }, "downloads": -1, "filename": "sqlalchemy_function-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "7f26b24cd3c6e8cb79d3b491f7246323", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7495, "upload_time": "2020-06-09T21:59:43", "upload_time_iso_8601": "2020-06-09T21:59:43.477122Z", "url": "https://files.pythonhosted.org/packages/d3/42/2a36286dc0e06ae95c1b39b78074ba335fc173a2dc45e5e903589c89d96b/sqlalchemy_function-0.0.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "891372d9a84cffbe2b4d14e3449f2345", "sha256": "5eac94a7f17b802a9690a72afe5615389190cf8c73fbcd5b945cd35f398dd023" }, "downloads": -1, "filename": "sqlalchemy-function-0.0.6.tar.gz", "has_sig": false, "md5_digest": "891372d9a84cffbe2b4d14e3449f2345", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4774, "upload_time": "2020-06-09T21:59:44", "upload_time_iso_8601": "2020-06-09T21:59:44.720917Z", "url": "https://files.pythonhosted.org/packages/0a/7c/821326723054dbb33762e6e5adbbe0ece7c4f461976e791b4415aadb2e72/sqlalchemy-function-0.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "c6e7a71aecfa2414dd100796d82ebf5a", "sha256": "0a0315b7b9822894a89b8204473fa807d97a27212ee0ef9ee3e1931895053c71" }, "downloads": -1, "filename": "sqlalchemy_function-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "c6e7a71aecfa2414dd100796d82ebf5a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6852, "upload_time": "2020-06-15T12:58:33", "upload_time_iso_8601": "2020-06-15T12:58:33.980658Z", "url": "https://files.pythonhosted.org/packages/d5/d1/4b0fc3844f9da05b1f517058a384581188c6cb6c5493c919d0ae3cf1f4e2/sqlalchemy_function-0.0.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2afbc8e27fd1be3e08a71eeaee69f5fd", "sha256": "43bd7eb99bad69768d636987785bafc9e83ea0978ef98f64b9b39db0065a801f" }, "downloads": -1, "filename": "sqlalchemy-function-0.0.7.tar.gz", "has_sig": false, "md5_digest": "2afbc8e27fd1be3e08a71eeaee69f5fd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4458, "upload_time": "2020-06-15T12:58:35", "upload_time_iso_8601": "2020-06-15T12:58:35.267473Z", "url": "https://files.pythonhosted.org/packages/6d/a5/41141a213ac8e248516bb178dbf448b7ebe61f117e795a61981038eb173a/sqlalchemy-function-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "7db217f3b8a5c4936f92fd74651e76e7", "sha256": "1c5a885c69a9c299d55242c35048de59f07b9ea535cb1e3203eedfcc6796b38f" }, "downloads": -1, "filename": "sqlalchemy_function-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "7db217f3b8a5c4936f92fd74651e76e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7008, "upload_time": "2020-06-15T19:46:28", "upload_time_iso_8601": "2020-06-15T19:46:28.506786Z", "url": "https://files.pythonhosted.org/packages/58/28/37cc4dc6b6967273c3d01f713b357c57c751b414f97f18dd87801a10b1b0/sqlalchemy_function-0.0.8-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ba901664094de7edf4e96cd45c1abf46", "sha256": "cad39c168e4f0bba028e15eaf7f6c93747b64ea47e87421722c27378d6fcae85" }, "downloads": -1, "filename": "sqlalchemy-function-0.0.8.tar.gz", "has_sig": false, "md5_digest": "ba901664094de7edf4e96cd45c1abf46", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4584, "upload_time": "2020-06-15T19:46:29", "upload_time_iso_8601": "2020-06-15T19:46:29.998864Z", "url": "https://files.pythonhosted.org/packages/f4/32/25e548264c6520c098cfb9acca254a5b3439a19685c13972fda7829fcae7/sqlalchemy-function-0.0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "99887ad475522153599fc59f3a541027", "sha256": "205ae671d16146de6d53b99c0325cfe05fa4bee7ae00153d0a711ecef099b64f" }, "downloads": -1, "filename": "sqlalchemy_function-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "99887ad475522153599fc59f3a541027", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7143, "upload_time": "2020-06-17T13:26:53", "upload_time_iso_8601": "2020-06-17T13:26:53.021752Z", "url": "https://files.pythonhosted.org/packages/87/01/bae7db608bab520acdb0d6ec86ad978f3aece1bca28d00986a15767b134d/sqlalchemy_function-0.0.9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "128b1f92aedfa61c7d931bc27187d045", "sha256": "50637b8a471b8841c574bf1c56816b727e70246805c7307bcd372dd1e1833518" }, "downloads": -1, "filename": "sqlalchemy-function-0.0.9.tar.gz", "has_sig": false, "md5_digest": "128b1f92aedfa61c7d931bc27187d045", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4714, "upload_time": "2020-06-17T13:26:54", "upload_time_iso_8601": "2020-06-17T13:26:54.339927Z", "url": "https://files.pythonhosted.org/packages/48/6b/481f748fcd62b437bc71a8e4cd93460b019074685ae4d0450b7e015f751a/sqlalchemy-function-0.0.9.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "99887ad475522153599fc59f3a541027", "sha256": "205ae671d16146de6d53b99c0325cfe05fa4bee7ae00153d0a711ecef099b64f" }, "downloads": -1, "filename": "sqlalchemy_function-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "99887ad475522153599fc59f3a541027", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7143, "upload_time": "2020-06-17T13:26:53", "upload_time_iso_8601": "2020-06-17T13:26:53.021752Z", "url": "https://files.pythonhosted.org/packages/87/01/bae7db608bab520acdb0d6ec86ad978f3aece1bca28d00986a15767b134d/sqlalchemy_function-0.0.9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "128b1f92aedfa61c7d931bc27187d045", "sha256": "50637b8a471b8841c574bf1c56816b727e70246805c7307bcd372dd1e1833518" }, "downloads": -1, "filename": "sqlalchemy-function-0.0.9.tar.gz", "has_sig": false, "md5_digest": "128b1f92aedfa61c7d931bc27187d045", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4714, "upload_time": "2020-06-17T13:26:54", "upload_time_iso_8601": "2020-06-17T13:26:54.339927Z", "url": "https://files.pythonhosted.org/packages/48/6b/481f748fcd62b437bc71a8e4cd93460b019074685ae4d0450b7e015f751a/sqlalchemy-function-0.0.9.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }