[![Build Status](https://travis-ci.org/rmorshea/spectate.svg?branch=master)](https://travis-ci.org/rmorshea/spectate/branches)
[![Documentation Status](https://readthedocs.org/projects/python-spectate/badge/?version=latest)](http://python-spectate.readthedocs.io/en/latest/?badge=latest)
[![Version Info](https://img.shields.io/pypi/v/spectate.svg)](https://pypi.python.org/pypi/spectate)
# Spectate
A library for Python 3.6 and above that can track changes to mutable data types.
With `spectate`, complicated protocols for managing updates don't need to be the outward responsibility of a user and can instead be done automagically in the background. For instance, syncing the state between a server and client can controlled by `spectate`, so users don't have to.
# Documentation
https://python-spectate.readthedocs.io/en/latest/
# Install
+ stable
```bash
pip install spectate
```
+ pre-release
```bash
pip install spectate --pre
```
+ master
```bash
pip install git+https://github.com/rmorshea/spectate.git#egg=spectate
```
+ developer
```bash
git clone https://github.com/rmorshea/spectate && cd spectate/ && pip install -e . -r requirements.txt
```
# At A Glance
If you're using Python 3.6 and above, create a model object
```python
from spectate import mvc
l = mvc.List()
```
Register a view function to it that observes changes
```python
@mvc.view(l)
def printer(l, events):
for e in events:
print(e)
```
Then modify your object and watch the view function react
```python
l.append(0)
l[0] = 1
l.extend([2, 3])
```
```
{'index': 0, 'old': Undefined, 'new': 0}
{'index': 0, 'old': 0, 'new': 1}
{'index': 1, 'old': Undefined, 'new': 2}
{'index': 2, 'old': Undefined, 'new': 3}
```
Raw data
{
"_id": null,
"home_page": "https://github.com/rmorshea/spectate",
"name": "spectate",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "eventful,callbacks,mutable,MVC,model,view,controller",
"author": "Ryan Morshead",
"author_email": "ryan.morshead@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/c8/8d/78dbadaeea943cc0fb9d3cd6b0a4f4668a46f84de1c5507fe3c9f02b8973/spectate-1.0.1.tar.gz",
"platform": "Linux",
"description": "[![Build Status](https://travis-ci.org/rmorshea/spectate.svg?branch=master)](https://travis-ci.org/rmorshea/spectate/branches)\n[![Documentation Status](https://readthedocs.org/projects/python-spectate/badge/?version=latest)](http://python-spectate.readthedocs.io/en/latest/?badge=latest)\n[![Version Info](https://img.shields.io/pypi/v/spectate.svg)](https://pypi.python.org/pypi/spectate)\n\n# Spectate\n\nA library for Python 3.6 and above that can track changes to mutable data types.\n\nWith `spectate`, complicated protocols for managing updates don't need to be the outward responsibility of a user and can instead be done automagically in the background. For instance, syncing the state between a server and client can controlled by `spectate`, so users don't have to.\n\n\n# Documentation\n\nhttps://python-spectate.readthedocs.io/en/latest/\n\n\n# Install\n\n+ stable\n\n```bash\npip install spectate\n```\n\n+ pre-release\n\n```bash\npip install spectate --pre\n```\n\n+ master\n\n```bash\npip install git+https://github.com/rmorshea/spectate.git#egg=spectate\n```\n\n+ developer\n\n```bash\ngit clone https://github.com/rmorshea/spectate && cd spectate/ && pip install -e . -r requirements.txt\n```\n\n\n# At A Glance\n\nIf you're using Python 3.6 and above, create a model object\n\n```python\nfrom spectate import mvc\n\nl = mvc.List()\n```\n\nRegister a view function to it that observes changes\n\n```python\n@mvc.view(l)\ndef printer(l, events):\n for e in events:\n print(e)\n```\n\nThen modify your object and watch the view function react\n\n```python\nl.append(0)\nl[0] = 1\nl.extend([2, 3])\n```\n\n```\n{'index': 0, 'old': Undefined, 'new': 0}\n{'index': 0, 'old': 0, 'new': 1}\n{'index': 1, 'old': Undefined, 'new': 2}\n{'index': 2, 'old': Undefined, 'new': 3}\n```\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Track changes to mutable data types.",
"version": "1.0.1",
"split_keywords": [
"eventful",
"callbacks",
"mutable",
"mvc",
"model",
"view",
"controller"
],
"urls": [
{
"comment_text": "",
"digests": {
"md5": "c759d7f9616f3611ddf3ee7dca229772",
"sha256": "c4585194c238979f953fbf2ecf9f94c84d9d0a929432c7104e39984f52c9e718"
},
"downloads": -1,
"filename": "spectate-1.0.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c759d7f9616f3611ddf3ee7dca229772",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=3.6",
"size": 11077,
"upload_time": "2021-03-05T17:17:47",
"upload_time_iso_8601": "2021-03-05T17:17:47.529708Z",
"url": "https://files.pythonhosted.org/packages/81/ec/8bdccea3ff7d557601183581340c3768b7bb7b1e32c8991f1130f0c1e2c4/spectate-1.0.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "0da35306b62c71e52a9662bccc16f5a3",
"sha256": "49a2dde0962fcecf120cb361cc293989489078eb29ba1d8c3d342a741e898b7e"
},
"downloads": -1,
"filename": "spectate-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "0da35306b62c71e52a9662bccc16f5a3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 14573,
"upload_time": "2021-03-05T17:17:48",
"upload_time_iso_8601": "2021-03-05T17:17:48.847368Z",
"url": "https://files.pythonhosted.org/packages/c8/8d/78dbadaeea943cc0fb9d3cd6b0a4f4668a46f84de1c5507fe3c9f02b8973/spectate-1.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2021-03-05 17:17:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "rmorshea",
"github_project": "spectate",
"travis_ci": true,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "twine",
"specs": []
},
{
"name": "wheel",
"specs": []
},
{
"name": "cmarkgfm",
"specs": []
},
{
"name": "furo",
"specs": []
},
{
"name": "sphinx-autodoc-typehints",
"specs": []
},
{
"name": "pytest",
"specs": []
},
{
"name": "flake8",
"specs": []
},
{
"name": "pytest-cov",
"specs": []
},
{
"name": "mypy",
"specs": []
},
{
"name": "black",
"specs": []
}
],
"tox": true,
"lcname": "spectate"
}