{ "info": { "author": "Guillaume Gelin", "author_email": "ramnes@1000mercis.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "======\nThingy\n======\n\n.. image:: https://img.shields.io/pypi/v/thingy.svg\n :target: https://pypi.python.org/pypi/Thingy\n.. image:: https://img.shields.io/github/license/numberly/thingy.svg\n :target: https://github.com/numberly/thingy/blob/master/LICENSE\n.. image:: https://img.shields.io/travis/numberly/thingy.svg\n :target: https://travis-ci.org/numberly/thingy\n.. image:: https://img.shields.io/coveralls/numberly/thingy.svg\n :target: https://coveralls.io/github/numberly/thingy\n.. image:: https://readthedocs.org/projects/python-thingy/badge\n :target: https://python-thingy.readthedocs.io\n\n|\n\nDictionaries as objects, that can have different dictionary views!\n\n\nInstall\n=======\n\n.. code-block:: sh\n\n $ pip install thingy\n\n\nExamples\n========\n\nDictionaries as objects...\n--------------------------\n\n.. code-block:: python\n\n >>> class MyThingy(Thingy)\n ... @property\n ... def foobaz(self):\n ... return self.foo + self.baz\n\n >>> thingy = MyThingy({\"foo\": \"bar\", \"baz\": \"qux\"})\n >>> thingy.foo\n \"bar\"\n >>> thingy.foobaz\n \"barqux\"\n\n >>> thingy.foo = \"BARRRR\"\n >>> thingy.view()\n {\"foo\": \"BARRRR\", \"baz\": \"qux\"}\n\n\n...that can have different dictionary views!\n--------------------------------------------\n\n.. code-block:: python\n\n >>> MyThingy.add_view(name=\"fooz\", include=[\"foo\", \"foobaz\"])\n >>> MyThingy.add_view(name=\"no_foo\", defaults=True, exclude=\"foo\")\n\n >>> thingy = MyThingy({\"foo\": \"bar\", \"baz\": \"qux\"})\n >>> thingy.view(\"fooz\")\n {\"foo\": \"bar\", \"foobaz\": \"barqux\"}\n >>> thingy.view(\"no_foo\")\n {\"baz\": \"qux\"}\n\n\nWhy Thingy?\n===========\n\nBecause it's much more enjoyable to write ``foo.bar`` than ``foo[\"bar\"]``.\n\nThingy is mainly meant to be used inside other libraries to provide abstractions\nover dictionaries, which can be useful for writing ORMs or similar utilities.\n\nThingy's views system is also particularly useful as-is when you intensively\nmanipulate dictionaries and often restrict those dictionaries to a few redundant\nitems.\n\n\nTests\n=====\n\nTo run Thingy tests:\n\n* install developers requirements with ``pip install -r requirements.txt``;\n* run ``pytest``.\n\n\nLicense\n=======\n\nMIT\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/numberly/thingy", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "Thingy", "package_url": "https://pypi.org/project/Thingy/", "platform": "any", "project_url": "https://pypi.org/project/Thingy/", "project_urls": { "Homepage": "https://github.com/numberly/thingy" }, "release_url": "https://pypi.org/project/Thingy/0.8.5/", "requires_dist": null, "requires_python": "", "summary": "Dictionary as an object, that can have different views", "version": "0.8.5" }, "last_serial": 5708425, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "c05231a8bf19dd2c8065cf3fe935d324", "sha256": "b76b512198a586611c489d150b932eb353030c59aa91338bd92d48a7b0ef9df8" }, "downloads": -1, "filename": "Thingy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c05231a8bf19dd2c8065cf3fe935d324", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2540, "upload_time": "2017-03-10T14:12:45", "url": "https://files.pythonhosted.org/packages/7a/34/6a0ce0ae801d2c4cff1f43c0cd572d89c192aa13ced0af1b64a7d9b6d33b/Thingy-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "e6491382fe796a78479c078906a881c2", "sha256": "fcc092004169e038074182a5e4c096722f43dbd0fa01190db7064f67aa30ced5" }, "downloads": -1, "filename": "Thingy-0.2.0.tar.gz", "has_sig": false, "md5_digest": "e6491382fe796a78479c078906a881c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2523, "upload_time": "2017-04-10T13:10:17", "url": "https://files.pythonhosted.org/packages/74/28/36f195f5fd5ef30c24e4ea413aa8852a01be0ea6077d5df5f33079d60fdd/Thingy-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "738461334983d84c1decf82f4f94a3d7", "sha256": "cbc6682cb53f2debcc3e93202c7a1005ee45d3ca591eff0b82165824111b8bbe" }, "downloads": -1, "filename": "Thingy-0.2.1.tar.gz", "has_sig": false, "md5_digest": "738461334983d84c1decf82f4f94a3d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2891, "upload_time": "2017-04-10T14:09:34", "url": "https://files.pythonhosted.org/packages/c9/55/576033a96066dce84f92bbc703ca77a54c8692ad090ecd4cf010ccb9d202/Thingy-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "2ff343130b544017ee456e2002972274", "sha256": "964305ec8a6c0ac2115ac9a381082f058adf0f06f71ef4540d32a66dada14927" }, "downloads": -1, "filename": "Thingy-0.3.0.tar.gz", "has_sig": false, "md5_digest": "2ff343130b544017ee456e2002972274", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2874, "upload_time": "2017-04-12T09:13:04", "url": "https://files.pythonhosted.org/packages/19/54/33f87ae827a292d1ae0055fa877143a93f8d0f4fa22c27269ad53be50049/Thingy-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "3d6115f437e8200be547e81a1d898c24", "sha256": "c27c1b6d9b1ed8ace651f1c947b3f7da0d59313bf6a5efafbc1592f18de48094" }, "downloads": -1, "filename": "Thingy-0.4.0.tar.gz", "has_sig": false, "md5_digest": "3d6115f437e8200be547e81a1d898c24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2860, "upload_time": "2017-04-20T17:00:25", "url": "https://files.pythonhosted.org/packages/32/6d/bb7cfe7f5b771ec7e425375522d978ed6ea722c12292bc216bb49424ff36/Thingy-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "b2cbacc605bd059a9fea9c7990844fe6", "sha256": "802410d717e2a719ac1cd76243929e9617935f2cabed6f3f0dd9f5fc6da70017" }, "downloads": -1, "filename": "Thingy-0.5.0.tar.gz", "has_sig": false, "md5_digest": "b2cbacc605bd059a9fea9c7990844fe6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3069, "upload_time": "2017-04-27T11:13:33", "url": "https://files.pythonhosted.org/packages/4e/a7/678715a6422c4336de1e69bbe8308b47f9db7b1d96d4c0253f261ec07b34/Thingy-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "dcb1f3ea752e06a809c214e4e938f9ab", "sha256": "30f4635f165eebe3ec06a90a0c908678ff21c50d71cb61d33e373bc8a3d48b69" }, "downloads": -1, "filename": "Thingy-0.5.1.tar.gz", "has_sig": false, "md5_digest": "dcb1f3ea752e06a809c214e4e938f9ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3109, "upload_time": "2017-05-04T13:08:28", "url": "https://files.pythonhosted.org/packages/db/5e/43f755004949dab406cc9ec699f5c5cb0842410616e780eac945780b9f76/Thingy-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "20ff0f12a88ced30a85880cc4549386c", "sha256": "bf86d6a2c54681276c5b0210689a75faf5e6bbec00261c89f845d8b36d004429" }, "downloads": -1, "filename": "Thingy-0.5.2.tar.gz", "has_sig": false, "md5_digest": "20ff0f12a88ced30a85880cc4549386c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3115, "upload_time": "2017-05-04T13:15:27", "url": "https://files.pythonhosted.org/packages/5e/93/5a1d9edccf95c616344b5e1441eff8fed6586af2e8e598887688af7a3321/Thingy-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "a82a2a58f1f1a2e639f0a1e50104d701", "sha256": "43fe13994119f548b80ce732b817fbd48f45d32815b9c0e29bc787df30480f6f" }, "downloads": -1, "filename": "Thingy-0.6.0.tar.gz", "has_sig": false, "md5_digest": "a82a2a58f1f1a2e639f0a1e50104d701", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3141, "upload_time": "2017-06-01T13:51:52", "url": "https://files.pythonhosted.org/packages/65/98/ec99063ba4e2a4e8dddc57e32c94ee64296306fcf16f68fe670a6f72a074/Thingy-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "f05491c830c531044a6d7f675248b78c", "sha256": "b8628b16391cad864e2129c790a5488e5b448a5cde7e3f0d8fa4eeef88600ba9" }, "downloads": -1, "filename": "Thingy-0.6.1.tar.gz", "has_sig": false, "md5_digest": "f05491c830c531044a6d7f675248b78c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3322, "upload_time": "2017-06-08T09:33:10", "url": "https://files.pythonhosted.org/packages/b3/68/ada873c8917b65af79c4eef86073e2c3da4c143c49254d978d7aaa7087b8/Thingy-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "0e68619ba1cf1d21bf2ad470f1ef4493", "sha256": "99530f8523dbcf1814bf3c2defbd8c01eba467d4b06456a814f6dc97938a065a" }, "downloads": -1, "filename": "Thingy-0.6.2.tar.gz", "has_sig": false, "md5_digest": "0e68619ba1cf1d21bf2ad470f1ef4493", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3314, "upload_time": "2017-06-08T10:42:34", "url": "https://files.pythonhosted.org/packages/ff/66/c96ec42fd1fefdcfe4cd0eaac3713ba172daa17712d01de1711df753ac88/Thingy-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "dbd7ab60e4d56c342c46301dcd7282d9", "sha256": "06d348a7f5e24430862dd98241b5309a5504ccb9fe341ed764eee6514a193cfb" }, "downloads": -1, "filename": "Thingy-0.6.3.tar.gz", "has_sig": false, "md5_digest": "dbd7ab60e4d56c342c46301dcd7282d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3349, "upload_time": "2017-06-08T13:47:11", "url": "https://files.pythonhosted.org/packages/6a/9d/8851f9197ec3f2c6cabd7be1a4a327ae7bbc3e5a41a541f5ad2293d6f237/Thingy-0.6.3.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "65818139b654805d90b1d026fe69b595", "sha256": "effb47c69aab5092ff53b8d52399a18ae1715dba5968581f7f71dd21d44c8991" }, "downloads": -1, "filename": "Thingy-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "65818139b654805d90b1d026fe69b595", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 4988, "upload_time": "2017-11-02T18:59:29", "url": "https://files.pythonhosted.org/packages/bd/c1/26e9ab1a29d2713c6484e4299e214536571fadde8c777b4c1b80ef77df37/Thingy-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "01c3ac918f05aaacfc58e276c67fb913", "sha256": "d28bd751821ede18db4122f783db644d7d82738acc0f56cb9b12a49c1c421ec4" }, "downloads": -1, "filename": "Thingy-0.7.0.tar.gz", "has_sig": false, "md5_digest": "01c3ac918f05aaacfc58e276c67fb913", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3410, "upload_time": "2017-11-02T18:59:31", "url": "https://files.pythonhosted.org/packages/a7/06/9feb04dbce81dcc04d35bcdb8527a70d890abad20bff6526896ffbdc63f5/Thingy-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "5ccd5e08a0d5ac2dfb28fe1ba1b12ace", "sha256": "c0b28e3e7439a327205841348b0d51762e1ced949f7a6b76c1e1b2814c3213d0" }, "downloads": -1, "filename": "Thingy-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ccd5e08a0d5ac2dfb28fe1ba1b12ace", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 5060, "upload_time": "2017-11-07T16:08:24", "url": "https://files.pythonhosted.org/packages/0e/82/590ae5418f8e447f886194bf5191b9f385dca78dfb2296abf2337e4bb008/Thingy-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b81dacb21086e7f2c4c0fb8ccc53b3ed", "sha256": "3cd08b8303294bce0f738af60263ddb92b37e9a4b94423fdf171c0f2d4c7d941" }, "downloads": -1, "filename": "Thingy-0.8.0.tar.gz", "has_sig": false, "md5_digest": "b81dacb21086e7f2c4c0fb8ccc53b3ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3480, "upload_time": "2017-11-07T16:08:26", "url": "https://files.pythonhosted.org/packages/bc/52/ef3d3aaf7567be44f0be814bdb17965942533c0d1fa651d3dcffbd8b79d5/Thingy-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "a73f132b3f565cf55aea889ed8401ba7", "sha256": "528dd3ba735acaa0721b560a3c347087c119a5748b1018ba99335bd98b5278b8" }, "downloads": -1, "filename": "Thingy-0.8.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a73f132b3f565cf55aea889ed8401ba7", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 5076, "upload_time": "2017-11-08T14:20:01", "url": "https://files.pythonhosted.org/packages/28/24/4c91e5697be495d5da4d5d47b79312d22a133cda07c0deb10238039b152a/Thingy-0.8.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a8918093b0040cb7079c6ccad047b24", "sha256": "3e2420ffd966e193ed5c78d9e5b21f7a29c26542c9864d13362a4fd6c7f13831" }, "downloads": -1, "filename": "Thingy-0.8.1.tar.gz", "has_sig": false, "md5_digest": "1a8918093b0040cb7079c6ccad047b24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3493, "upload_time": "2017-11-08T14:20:03", "url": "https://files.pythonhosted.org/packages/51/56/f8f63669131cddc15fc912a50200037dfe260aaf78683b388c6febe992fb/Thingy-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "9eb26b67ac987097ecdbf7bba6c0578d", "sha256": "11f132f7dbe0c561408f6de8310d20fc0693699957bf1d8f3a57dd02228a3f94" }, "downloads": -1, "filename": "Thingy-0.8.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9eb26b67ac987097ecdbf7bba6c0578d", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 5133, "upload_time": "2017-11-08T17:07:13", "url": "https://files.pythonhosted.org/packages/27/b3/dba461777cd18897a4bef7292363a2656c4480d6ec8e2bc964084fa607fc/Thingy-0.8.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a1dde1d16995416dc2470db224c44c8", "sha256": "4ec157ef16b7228d65c9f87d2dd7deab2b7ff9994f50ff8ac55bd77a06c8ea7d" }, "downloads": -1, "filename": "Thingy-0.8.2.tar.gz", "has_sig": false, "md5_digest": "4a1dde1d16995416dc2470db224c44c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3547, "upload_time": "2017-11-08T17:07:15", "url": "https://files.pythonhosted.org/packages/a3/b6/6d4b55d8f79860c8512f616169840bf0e9f3abf3d6048bebcf0514f76737/Thingy-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "76ecc3dfa4d09b6c7ee723ee9ed2d8c0", "sha256": "60b895d399eb0ae16ba0c6b754760634a8bd256b908530441c045771a6e65077" }, "downloads": -1, "filename": "Thingy-0.8.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "76ecc3dfa4d09b6c7ee723ee9ed2d8c0", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 5152, "upload_time": "2018-02-07T16:12:13", "url": "https://files.pythonhosted.org/packages/da/8b/54587d62251eb595cc209d0d2ad6c0530a5749cf7f62945a14019c59f610/Thingy-0.8.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69a7a489a013c821741d47d60964679e", "sha256": "94ee0ef6a9d0d8a27d24b71b9919a26d1c9c4ba8633fe2769f1c2a79cb6dc1f1" }, "downloads": -1, "filename": "Thingy-0.8.3.tar.gz", "has_sig": false, "md5_digest": "69a7a489a013c821741d47d60964679e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3576, "upload_time": "2018-02-07T16:12:17", "url": "https://files.pythonhosted.org/packages/7e/81/bf809e6f61980471ad67318de8eb9be52924c2a2ac86bfa513b883ce8b9e/Thingy-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "929a75d63c8998ae740a38a9bcf4b96f", "sha256": "87d59ad9b7ea37e0c652993342e5d5e81fb09d21f5de71deddcee89398349ba7" }, "downloads": -1, "filename": "Thingy-0.8.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "929a75d63c8998ae740a38a9bcf4b96f", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 3602, "upload_time": "2018-04-12T17:12:07", "url": "https://files.pythonhosted.org/packages/16/3b/53c95280a87b3bd0b48ba83dac5c9e537377affed67bfff87868737e0284/Thingy-0.8.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1f75728fb41ddaacf65ddf7bb7973822", "sha256": "2b10e62a877af611a2cbf353344c31412619f1c39351fa1edbf57a1b9cf818d8" }, "downloads": -1, "filename": "Thingy-0.8.4.tar.gz", "has_sig": false, "md5_digest": "1f75728fb41ddaacf65ddf7bb7973822", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3728, "upload_time": "2018-04-12T17:12:06", "url": "https://files.pythonhosted.org/packages/cb/2f/be905cc80459b3808b4ec91173f8b0279ac8a3076b23a59fcd78faf571f8/Thingy-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "6b4234c852353d0298082ca108ba300d", "sha256": "e0337bc7f2923ad9d57e0028319c1665532e821b47bea4fea1c442347bedcbb3" }, "downloads": -1, "filename": "Thingy-0.8.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6b4234c852353d0298082ca108ba300d", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 5375, "upload_time": "2018-07-02T07:45:54", "url": "https://files.pythonhosted.org/packages/e9/d3/5c318baf532076e4671e22c7174ce7c1531726ddc0d78307884013898a06/Thingy-0.8.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "739019f776f6299faca9d1232560f3c8", "sha256": "b08e50a7806f6c3f19f1b207072212330ff3e8b29c7db9214c590cd15e4e23b6" }, "downloads": -1, "filename": "Thingy-0.8.5.tar.gz", "has_sig": false, "md5_digest": "739019f776f6299faca9d1232560f3c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3781, "upload_time": "2018-07-02T07:45:55", "url": "https://files.pythonhosted.org/packages/80/e7/ee5a018cb84dc36ee27d6f37ff170a907671966286a79a55f3c6b41580af/Thingy-0.8.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6b4234c852353d0298082ca108ba300d", "sha256": "e0337bc7f2923ad9d57e0028319c1665532e821b47bea4fea1c442347bedcbb3" }, "downloads": -1, "filename": "Thingy-0.8.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6b4234c852353d0298082ca108ba300d", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 5375, "upload_time": "2018-07-02T07:45:54", "url": "https://files.pythonhosted.org/packages/e9/d3/5c318baf532076e4671e22c7174ce7c1531726ddc0d78307884013898a06/Thingy-0.8.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "739019f776f6299faca9d1232560f3c8", "sha256": "b08e50a7806f6c3f19f1b207072212330ff3e8b29c7db9214c590cd15e4e23b6" }, "downloads": -1, "filename": "Thingy-0.8.5.tar.gz", "has_sig": false, "md5_digest": "739019f776f6299faca9d1232560f3c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3781, "upload_time": "2018-07-02T07:45:55", "url": "https://files.pythonhosted.org/packages/80/e7/ee5a018cb84dc36ee27d6f37ff170a907671966286a79a55f3c6b41580af/Thingy-0.8.5.tar.gz" } ] }