{ "info": { "author": "Maciej Szymkiewicz", "author_email": "matthew.szymkiewicz@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3" ], "description": "TryingSnake\n===========\n\n[![Build\nStatus](https://travis-ci.org/zero323/tryingsnake.svg?branch=master)](https://travis-ci.org/zero323/tryingsnake)\n[![Coverage\nStatus](https://coveralls.io/repos/zero323/tryingsnake/badge.svg?branch=master&service=github)](https://coveralls.io/github/zero323/tryingsnake?branch=master)\n[![Code\nClimate](https://codeclimate.com/github/zero323/tryingsnake/badges/gpa.svg)](https://codeclimate.com/github/zero323/tryingsnake)\n[![PyPI\nversion](https://badge.fury.io/py/tryingsnake.svg)](https://badge.fury.io/py/tryingsnake)\n[![License\nMIT](https://img.shields.io/pypi/l/tryingsnake.svg)](https://github.com/zero323/tryingsnake/blob/master/LICENSE)\n\nA simple, `Try` implementation inspired by\n[scala.util.Try](http://www.scala-lang.org/files/archive/nightly/docs/library/index.html#scala.util.Try)\n\nExamples\n========\n\n- Wrap functions with arguments:\n\n ``` {.sourceCode .python}\n >>> from tryingsnake import Try, Try_, Success, Failure\n >>> from operator import add, truediv\n >>> Try(add, 0, 1)\n Success(1)\n >>> Try(truediv, 1, 0) # doctest:+ELLIPSIS\n Failure(ZeroDivisionError(...))\n ```\n\n- Avoid sentinel values:\n\n ``` {.sourceCode .python}\n >>> def mean_1(xs):\n ... try:\n ... return sum(xs) / len(xs)\n ... except ZeroDivisionError as e:\n ... return float(\"inf\") # What does it mean?\n >>> mean_1([])\n inf\n ```\n\n vs.\n\n ``` {.sourceCode .python}\n >>> def mean_2(xs):\n ... return sum(xs) / len(xs)\n >>> Try(mean_2, []) # doctest:+ELLIPSIS\n Failure(ZeroDivisionError(...))\n >>> Try(mean_2, [\"foo\", \"bar\"]) # doctest:+ELLIPSIS\n Failure(TypeError(...))\n ```\n\n- Follow the happy path:\n\n ``` {.sourceCode .python}\n >>> def inc(x): return x + 1\n >>> def inv(x): return 1. / x\n\n >>> Success(1).map(inc).map(inv)\n Success(0.5)\n\n >>> Failure(Exception(\"e\")).map(inc).map(inv) # doctest:+ELLIPSIS\n Failure(Exception(...))\n\n >>> Success(-1).map(inc).map(inv) # doctest:+ELLIPSIS\n Failure(ZeroDivisionError(...))\n ```\n\n- Recover:\n\n ``` {.sourceCode .python}\n >>> def get(url):\n ... if \"mirror\" in url:\n ... raise IOError(\"No address associated with hostname\")\n ... return url\n >>> mirrors = [\"http://mirror1.example.com\", \"http://example.com\"]\n >>> Try(get, mirrors[0]).recover(lambda _: get(mirrors[1]))\n Success('http://example.com')\n ```\n\n- Let them fail:\n\n ``` {.sourceCode .python}\n >>> from operator import getitem\n >>> Try(getitem, [], 0) # doctest:+ELLIPSIS\n Failure(IndexError(...))\n >>> Try_.set_unhandled([IndexError])\n >>> Try(getitem, [], 0)\n Traceback (most recent call last):\n ...\n IndexError: list index out of range\n ```\n\n- Make things (relatively) simple\n\n ``` {.sourceCode .python}\n >>> import math\n >>> xs = [1.0, 0.0, \"-1\", -3, 2, 1 + 2j]\n >>> sqrts = [Try(math.sqrt, x) for x in xs]\n >>> [x.get() for x in sqrts if x.isSuccess]\n [1.0, 0.0, 1.4142135623730951]\n >>> def get_etype(e):\n ... return Try(lambda x: type(x).__name__, e)\n >>> [x.recoverWith(get_etype).get() for x in sqrts if x.isFailure]\n ['TypeError', 'ValueError', 'TypeError']\n ```\n\nInstallation\n============\n\n pip install tryingsnake\n\nor\n\n easy_install tryingsnake\n\nDependencies\n=======\n\n`tryingsnake` supports Python 3.6 or later and\nrequires no external dependencies.\n\nLicense\n=======\n\nMIT, See\n[LICENSE](https://github.com/zero323/tryingsnake/blob/master/LICENSE)\n\nFAQ\n===\n\n- Q: Is this project production-ready?\n- A: No, and it probably won\\'t be.\n- Q: Why to use mixedCase method names instead of lowercase\n recommended by PEP8?\n- A: Mostly to make switching between Python and Scala code as\n painless as possible.", "description_content_type": "text/markdown", "docs_url": "https://pythonhosted.org/tryingsnake/", "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/zero323/tryingsnake", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "tryingsnake", "package_url": "https://pypi.org/project/tryingsnake/", "platform": "", "project_url": "https://pypi.org/project/tryingsnake/", "project_urls": { "Homepage": "https://github.com/zero323/tryingsnake" }, "release_url": "https://pypi.org/project/tryingsnake/0.3.1/", "requires_dist": null, "requires_python": "", "summary": "Exception handling, the functional way.", "version": "0.3.1" }, "last_serial": 5876589, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "9c7a6cbcd9ea8b8886f03c8c3cd3f6fa", "sha256": "b2b926d9ff0c98c6dafc75acd8473b90c003f6fa3b0afa365e507ce9e208f706" }, "downloads": -1, "filename": "tryingsnake-0.1.0.tar.gz", "has_sig": false, "md5_digest": "9c7a6cbcd9ea8b8886f03c8c3cd3f6fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3109, "upload_time": "2015-10-30T11:36:34", "url": "https://files.pythonhosted.org/packages/ea/a5/37496293b5a78aebfc44db8574fda4459f7883c716ba6c06294bf40fd83c/tryingsnake-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "fa82dd18c03a8169d49f677cc7237ab3", "sha256": "00493e224d48563be12662cb5ee7d14b0ae9c31a1c73a64390f286ccb6231fb0" }, "downloads": -1, "filename": "tryingsnake-0.2.0.tar.gz", "has_sig": false, "md5_digest": "fa82dd18c03a8169d49f677cc7237ab3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3614, "upload_time": "2015-10-31T17:15:07", "url": "https://files.pythonhosted.org/packages/c4/b6/5120f1723d76b89f5dafebb3e5e0525689e604534489935dae64b5ca0f44/tryingsnake-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "7f319eb36976785abf2372b962fbc017", "sha256": "12856bda186df351a32bbdd61c7c4d0f24e7f493f82ac3481fc5042efca0e777" }, "downloads": -1, "filename": "tryingsnake-0.2.1.tar.gz", "has_sig": true, "md5_digest": "7f319eb36976785abf2372b962fbc017", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4901, "upload_time": "2015-10-31T18:15:49", "url": "https://files.pythonhosted.org/packages/fb/c8/bb5c573cb7e130fadbd1905d0b64bb36c24404ce954a98b30f3e07c8e227/tryingsnake-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "980b37f5628be345143d5074efe37a52", "sha256": "17d9eb778bd5e200abd16388fb87c2356f096a2e9f2ca37f1db763324bf79d11" }, "downloads": -1, "filename": "tryingsnake-0.2.2.tar.gz", "has_sig": true, "md5_digest": "980b37f5628be345143d5074efe37a52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4908, "upload_time": "2015-10-31T18:36:14", "url": "https://files.pythonhosted.org/packages/d0/8d/ce9d5b25a97fd0cf0e789179e203aa991ea4fbc8e0ee40ac12126f9ef153/tryingsnake-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "ab372ecce77ec313d82b754c0c2be0fa", "sha256": "a31b02248ed36d5841463c3f0482c2e200db4ce204a1ec0d08ce2a126e07958c" }, "downloads": -1, "filename": "tryingsnake-0.2.3.tar.gz", "has_sig": true, "md5_digest": "ab372ecce77ec313d82b754c0c2be0fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5041, "upload_time": "2015-11-01T02:44:50", "url": "https://files.pythonhosted.org/packages/49/2d/72fc6be8d8c208cb9202804a94b63878ecf76fd15165ee8f6b17c7270a57/tryingsnake-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "87f87ea3dc85503c067d5ecb239c1cb5", "sha256": "ba522b924efc1173159ab789e4451c279c70e475e3a611e043f8cab3a4198abc" }, "downloads": -1, "filename": "tryingsnake-0.2.4.tar.gz", "has_sig": true, "md5_digest": "87f87ea3dc85503c067d5ecb239c1cb5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5009, "upload_time": "2015-11-01T13:03:15", "url": "https://files.pythonhosted.org/packages/c5/4e/fa07c0f5aa06a62abd35d86193a366d6f2b338870b5f0bd68541a4611c9a/tryingsnake-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "53fffe10d97b1753a504d67aad9a7088", "sha256": "8c7c918e61b2c8310b5e7d91b08ee2100ea8bfc398e1845fa64664be5ae82ebd" }, "downloads": -1, "filename": "tryingsnake-0.2.5.tar.gz", "has_sig": true, "md5_digest": "53fffe10d97b1753a504d67aad9a7088", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5028, "upload_time": "2015-11-01T23:39:50", "url": "https://files.pythonhosted.org/packages/51/ac/ddd24edc18d29f0f9f33947be426f6af6c802d166d736d28138f81d04773/tryingsnake-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "38c08be8dad835b2326df0ae3080bde0", "sha256": "f60d3009e1ae0511f1f34998d10bf68a443a5d0d2cfb13c1e9c8ebd8c6d070c1" }, "downloads": -1, "filename": "tryingsnake-0.2.6.tar.gz", "has_sig": true, "md5_digest": "38c08be8dad835b2326df0ae3080bde0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5070, "upload_time": "2016-03-07T04:06:10", "url": "https://files.pythonhosted.org/packages/32/ee/32778a245a5d46b7a605b9bedad0235e9efdefc1cc733b75847865ad9ff0/tryingsnake-0.2.6.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "49681b0652939cee713d2cb291d24431", "sha256": "d002ff30e6728b0b9ec22da1d79472db17d3d60c13c14265f400f706b116e77f" }, "downloads": -1, "filename": "tryingsnake-0.3.1.tar.gz", "has_sig": false, "md5_digest": "49681b0652939cee713d2cb291d24431", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6657, "upload_time": "2019-09-23T23:29:21", "url": "https://files.pythonhosted.org/packages/94/4b/77f05ef5951746067fdf6988c2f91011c696f15c2032153c16189a9a4f9f/tryingsnake-0.3.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "49681b0652939cee713d2cb291d24431", "sha256": "d002ff30e6728b0b9ec22da1d79472db17d3d60c13c14265f400f706b116e77f" }, "downloads": -1, "filename": "tryingsnake-0.3.1.tar.gz", "has_sig": false, "md5_digest": "49681b0652939cee713d2cb291d24431", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6657, "upload_time": "2019-09-23T23:29:21", "url": "https://files.pythonhosted.org/packages/94/4b/77f05ef5951746067fdf6988c2f91011c696f15c2032153c16189a9a4f9f/tryingsnake-0.3.1.tar.gz" } ] }