{ "info": { "author": "Ryan Morshead", "author_email": "ryan.morshead@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers" ], "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 2 and 3 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 user's 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", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rmorshea/spectate", "keywords": "eventful,callbacks,mutable,MVC,model,view,controller", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "spectate", "package_url": "https://pypi.org/project/spectate/", "platform": "Linux", "project_url": "https://pypi.org/project/spectate/", "project_urls": { "Homepage": "https://github.com/rmorshea/spectate" }, "release_url": "https://pypi.org/project/spectate/0.4.1/", "requires_dist": [ "funcsigs ; python_version < '3.6'" ], "requires_python": "", "summary": "Track changes to mutable data types.", "version": "0.4.1" }, "last_serial": 5353244, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "894e849e63798cd9d67aa6550e6f71e6", "sha256": "b75c354439509f00e6253af197e435176761370933a2e259dc59310de76d73f3" }, "downloads": -1, "filename": "spectate-0.0.1.tar.gz", "has_sig": false, "md5_digest": "894e849e63798cd9d67aa6550e6f71e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9319, "upload_time": "2017-08-14T06:49:14", "url": "https://files.pythonhosted.org/packages/87/0e/3ed7262525c1356c6bb8ff91519c592e949040c46984d054ce5463429fbd/spectate-0.0.1.tar.gz" } ], "0.0.1.dev0": [ { "comment_text": "", "digests": { "md5": "a30b18318269c5726387f13814c02a7e", "sha256": "f16296468dadbe458b9e75fa6c4a7bc87b2c9c25f6b9a1ee935340b3d3ac9105" }, "downloads": -1, "filename": "spectate-0.0.1.dev0.tar.gz", "has_sig": false, "md5_digest": "a30b18318269c5726387f13814c02a7e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9324, "upload_time": "2017-08-14T07:39:39", "url": "https://files.pythonhosted.org/packages/6d/65/c25eda8c5b5f7b28fadf03b4e37ee24c693a044117598222c1705d0d7154/spectate-0.0.1.dev0.tar.gz" } ], "0.0.1.dev1": [ { "comment_text": "", "digests": { "md5": "fdc6bdbf256efe0837d8419526162c4e", "sha256": "74e0fb4837e652cbe7f901c72d594382bcbdef5231d9db4fc07512755d27acff" }, "downloads": -1, "filename": "spectate-0.0.1.dev1.tar.gz", "has_sig": false, "md5_digest": "fdc6bdbf256efe0837d8419526162c4e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10295, "upload_time": "2017-08-30T06:38:37", "url": "https://files.pythonhosted.org/packages/e1/50/ebcef656287b431cc16e9c03d199d7ae8c01561c4376dbd0592ceca1c2e8/spectate-0.0.1.dev1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "6f3cdf2d6638b00c77ee1e873a859f91", "sha256": "aca2d0fe6693a7ac9473d735f2ed5ccb4bdff8c84d3484e0c7eb11d2c73e16ef" }, "downloads": -1, "filename": "spectate-0.0.2.tar.gz", "has_sig": false, "md5_digest": "6f3cdf2d6638b00c77ee1e873a859f91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10281, "upload_time": "2017-08-30T06:39:29", "url": "https://files.pythonhosted.org/packages/f5/83/ead41e677b737bebcdae6b16e12518008ea827226b4a28a4382a0f360258/spectate-0.0.2.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "d2adda240893143951d803d82df8a258", "sha256": "addfa642c40637380721917ba8928a9379bdd903673e95430797ea6c4f7eab78" }, "downloads": -1, "filename": "spectate-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d2adda240893143951d803d82df8a258", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9400, "upload_time": "2018-01-23T13:23:40", "url": "https://files.pythonhosted.org/packages/67/55/69942fed800c7f407db5e7e9e4ea53920efa7898b5494aec2565be26fa89/spectate-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aa4dd31bdec306896051bfa74b9e8701", "sha256": "4ab8d8097eb2c916b3ad39ae8910fe24e13ed0c74d26a7c61946791ab7874c3b" }, "downloads": -1, "filename": "spectate-0.1.0.tar.gz", "has_sig": false, "md5_digest": "aa4dd31bdec306896051bfa74b9e8701", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10851, "upload_time": "2018-01-23T13:23:41", "url": "https://files.pythonhosted.org/packages/9d/2a/8a07f5a91b2e8626b1d8e583de4014036b539942153c09382bc28c498b56/spectate-0.1.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "815751adab5efb820231abc65bbf6642", "sha256": "a1eb552429852d430e2e17e8f7894ea68d0a3c805eb727956350f9b2fbb1effa" }, "downloads": -1, "filename": "spectate-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "815751adab5efb820231abc65bbf6642", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20184, "upload_time": "2018-06-08T02:03:34", "url": "https://files.pythonhosted.org/packages/0f/80/ea920abf37e9539b138ce40ea46235c4b554487fb7f76555134d2fa14046/spectate-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "078ad8d2401d89c6a80436cd98a33ed0", "sha256": "2e5551f394586e239d028d0ffca86f78447ac1ee65a97a431d0cbd24b2a27653" }, "downloads": -1, "filename": "spectate-0.2.1.tar.gz", "has_sig": false, "md5_digest": "078ad8d2401d89c6a80436cd98a33ed0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20579, "upload_time": "2018-06-08T02:03:35", "url": "https://files.pythonhosted.org/packages/b8/8e/4c2f72b0f7d753b5af71cd6de7e2b62702437fa8f4c98760f2b43d07a368/spectate-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "4a146527091007f8fbfd232eb9105896", "sha256": "1c33954d2b022532e2ad4cb04b03ea7666cfb9ed04f67377ef9e80008a692851" }, "downloads": -1, "filename": "spectate-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "4a146527091007f8fbfd232eb9105896", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20191, "upload_time": "2018-07-22T21:23:18", "url": "https://files.pythonhosted.org/packages/f0/11/ac3265b8ffb072a4b7099fdfce69728204f6e1ccecec51b1036ea721f36f/spectate-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "219d40c6b6af3e070e3e3780e7f91715", "sha256": "b8f91f4e33ec4ee3958ebc2babab0af4542a4f5d9a7c8930f269892ada8f8af2" }, "downloads": -1, "filename": "spectate-0.2.2.tar.gz", "has_sig": false, "md5_digest": "219d40c6b6af3e070e3e3780e7f91715", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18276, "upload_time": "2018-07-22T21:23:19", "url": "https://files.pythonhosted.org/packages/63/0d/48e487aff16f1db87e99b850e8aa56b058f02cf1d522e0ea3a1076a9e8aa/spectate-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "4057df021f28e952eca7a52689c92e14", "sha256": "d46473c7b43b38327c0f9f0528ce201bf3bdaf89ce56cafc5261dddf6900b59f" }, "downloads": -1, "filename": "spectate-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "4057df021f28e952eca7a52689c92e14", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20359, "upload_time": "2018-11-25T05:30:56", "url": "https://files.pythonhosted.org/packages/e3/86/b706cfb11dc91a4020bbc464b0b3d60c4419800debd86784c9e40d34eeff/spectate-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d9f304ff5d281f087640d83eb51c8da9", "sha256": "e0542f6e667ecf94b41657a89d268f6bd899300e160975b67d1de2908bb0c5be" }, "downloads": -1, "filename": "spectate-0.2.3.tar.gz", "has_sig": false, "md5_digest": "d9f304ff5d281f087640d83eb51c8da9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18513, "upload_time": "2018-11-25T05:30:58", "url": "https://files.pythonhosted.org/packages/a2/cc/ce34692b31da54128706d1daa7416d39e5a8b40cdd5d14570f997447b556/spectate-0.2.3.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "5387a52e9c6df69126c6fa8c1d1ddf4b", "sha256": "18227d0e71dbe14a8f544f96f861c3b2038b43d4491d3e92137711ed936383c1" }, "downloads": -1, "filename": "spectate-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5387a52e9c6df69126c6fa8c1d1ddf4b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21688, "upload_time": "2019-04-26T18:36:49", "url": "https://files.pythonhosted.org/packages/b7/d7/0f11225286a1006e4ee1f9e5f29c5823a2827b737a0ae80aa7ffd7c1d7fa/spectate-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7fe37a4a18977e70d0f0ef9201a2f872", "sha256": "1734874443d4d14509d5028ccc4f8f4ce8c85feb6edfcbdbd490fbb509e160f2" }, "downloads": -1, "filename": "spectate-0.3.0.tar.gz", "has_sig": false, "md5_digest": "7fe37a4a18977e70d0f0ef9201a2f872", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18877, "upload_time": "2019-04-26T18:36:52", "url": "https://files.pythonhosted.org/packages/de/21/b9c2c7e308b54d660946cff33973cb11bed2afac5cd25ac91812dd2bcd13/spectate-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "6fb1bf43ee9bfa3e9328ae86b41d6262", "sha256": "16e0413e7beea7a5548cf48c1be7de062ad7ea73134999f58a7d641f858dea6c" }, "downloads": -1, "filename": "spectate-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6fb1bf43ee9bfa3e9328ae86b41d6262", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24960, "upload_time": "2019-04-26T19:00:40", "url": "https://files.pythonhosted.org/packages/4a/e9/059da685b7ed1da9f1ca925c86ad5e83ca52c596b3f430aca207cd160a7c/spectate-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ae5a39abd4557e20e049919ed210c507", "sha256": "1231db5d405d01be6e1c2c242c132b8373021081050a2f1301f7f54d072b0746" }, "downloads": -1, "filename": "spectate-0.4.0.tar.gz", "has_sig": false, "md5_digest": "ae5a39abd4557e20e049919ed210c507", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18334, "upload_time": "2019-04-26T19:00:44", "url": "https://files.pythonhosted.org/packages/63/7b/90dc334345b0fc57a93093f7e66d98bd738451b77e1a9cda7c6832aaaf4e/spectate-0.4.0.tar.gz" } ], "0.4.0a1": [ { "comment_text": "", "digests": { "md5": "32bdd3d54a0ca6ec02fdcdb0177b191e", "sha256": "6fe11751d12140bf83c323a9d10fb45e8f1960babe8b88ea3081031d14cc5b0c" }, "downloads": -1, "filename": "spectate-0.4.0a1-py3-none-any.whl", "has_sig": false, "md5_digest": "32bdd3d54a0ca6ec02fdcdb0177b191e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24734, "upload_time": "2019-04-26T18:40:06", "url": "https://files.pythonhosted.org/packages/85/03/1cb1e2d5466f581581a425a61304c91999aeaad4ee5f6ab10f2afd94221f/spectate-0.4.0a1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9726b9a461236ed8a49e3294313795d0", "sha256": "b290a919b0c736eb9b80871eb7e2e4485a32d1b8e1ea26d767807cb29cff7589" }, "downloads": -1, "filename": "spectate-0.4.0a1.tar.gz", "has_sig": false, "md5_digest": "9726b9a461236ed8a49e3294313795d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18051, "upload_time": "2019-04-26T18:40:09", "url": "https://files.pythonhosted.org/packages/84/3d/a01338ec277dda318cf20d94988be5e05fc6d37c051382b93f66281b1af5/spectate-0.4.0a1.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "86bd48c191f062e8aae4dca77609d9ab", "sha256": "36fd2984c3af8bb742df948407de8df8afd26873d338c54f533c48db73acce8f" }, "downloads": -1, "filename": "spectate-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "86bd48c191f062e8aae4dca77609d9ab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24953, "upload_time": "2019-06-03T15:35:42", "url": "https://files.pythonhosted.org/packages/9f/12/fe35059af8049e5714ef029b94691f0872f7b610a7fd203c04202511fcf6/spectate-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "761b4d28131ba6a3ff30b7190df20c18", "sha256": "d4d985589d755b4bf118696eb794bc35c4131809be812eecd95fd9938809efbf" }, "downloads": -1, "filename": "spectate-0.4.1.tar.gz", "has_sig": false, "md5_digest": "761b4d28131ba6a3ff30b7190df20c18", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18354, "upload_time": "2019-06-03T15:35:44", "url": "https://files.pythonhosted.org/packages/19/8d/3b7a2f76700737c9ae1ce72f4b8b3a11b741b3e65c8e6d6a7912a8e6ae1b/spectate-0.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "86bd48c191f062e8aae4dca77609d9ab", "sha256": "36fd2984c3af8bb742df948407de8df8afd26873d338c54f533c48db73acce8f" }, "downloads": -1, "filename": "spectate-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "86bd48c191f062e8aae4dca77609d9ab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24953, "upload_time": "2019-06-03T15:35:42", "url": "https://files.pythonhosted.org/packages/9f/12/fe35059af8049e5714ef029b94691f0872f7b610a7fd203c04202511fcf6/spectate-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "761b4d28131ba6a3ff30b7190df20c18", "sha256": "d4d985589d755b4bf118696eb794bc35c4131809be812eecd95fd9938809efbf" }, "downloads": -1, "filename": "spectate-0.4.1.tar.gz", "has_sig": false, "md5_digest": "761b4d28131ba6a3ff30b7190df20c18", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18354, "upload_time": "2019-06-03T15:35:44", "url": "https://files.pythonhosted.org/packages/19/8d/3b7a2f76700737c9ae1ce72f4b8b3a11b741b3e65c8e6d6a7912a8e6ae1b/spectate-0.4.1.tar.gz" } ] }