{ "info": { "author": "Matthias Bussonnier", "author_email": "bussonniermatthias@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License" ], "description": "# Undefined\n\nEver needed a global object that act as `None` but not quite ?\n\nLike for example key-word argument for function, where `None` make sens, so you need a default value.\n\nOne solution is to create as singleton object:\n\n```\nmysingleton = object()\n```\n\nThough it becomes difficult to track the singleton across libraries,\nand teach users where to import this from. \n\nIt's also relatively annoying use this singleton across library. \n\n\nIntroducing `undefined`:\n\n```\n>>> import undefined\n>>> from undefined import Undefined\n>>> undefined is Undefined\nTrue\n```\n\n\n# behavior\n\nIt work (for now) mostly like a singleton object\n\nThough it's neither truthy not falsy\n\n```\n>>> if undefined: print(True)\nraise NotImplementedError\n```\n\n# Casing ?\n\nBecause it is a module you can use it lowercase:\n\n```\nimport undefined\n```\n\nBecause it looks more like a keyword (`None`, `True`, `False`), you can use it upper case:\n\n```\nimport undefined as Undefined\n```\n\nor\n\n```\nfrom undefined import Undefined\n```\n\nI tend to be torn between lowercase, for simplicity, and Uppercase.\n\n\n# Why not `None`, difference with `None`\n\n`undefined` is likely slower, and as it is a regular Python object there are a few on purpose (or not difference).\n\n### Unlike `None`, you can assign to it\n\n```\n>>> None = 3 \nSyntaxError: can't assign to keyword\n```\n\n```\n>>> undefined = 3\n>>> undefned\n3\n```\n\n### Unlike `None`, `undefined` is mutable\n\n```\n>>> undefined.value = 42\n>>> undefined.value\n42\n```\n\n(might be able to fix that with `__get_attr__`\n\n### Unlike `None`, `undefined` is neither true not false.\n\nIf you test for boolean value of `undefind` if will raise. \nThat is to say: the following will fail:\n\n```\nvalue = undefined\nif value:\n pass # will raise before reaching here.\n```\n\nYou have to check for identity:\n\n```\nvalue = undefined\nother = 1\nif value is undefined:\n pass # will execute\n```\n\nfor info, undefined is not `True`,`False`, not undefined with respect to identity\n\n```\n>>> undefined is True\nFalse\n\n>>> undefined is False\nFalse\n\n>>>: undefined is None\nFalse\n```\n\n### String form\n\n`str(undefined)` raises. `repr(undefined)` is the unicode string `'Undefined'`\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/Carreau/undefined", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "undefined", "package_url": "https://pypi.org/project/undefined/", "platform": "", "project_url": "https://pypi.org/project/undefined/", "project_urls": { "Homepage": "https://github.com/Carreau/undefined" }, "release_url": "https://pypi.org/project/undefined/0.0.8/", "requires_dist": null, "requires_python": ">=3.4", "summary": "a simple package", "version": "0.0.8" }, "last_serial": 5586417, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "033c2144ac3e8696f6de2fb0a5cd8444", "sha256": "9685a38f7ffa0988aee80c3db0f676ba6973ad3f3ec90dce5627858a526a4b15" }, "downloads": -1, "filename": "undefined-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "033c2144ac3e8696f6de2fb0a5cd8444", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 1125, "upload_time": "2015-12-22T18:52:56", "url": "https://files.pythonhosted.org/packages/10/42/14c3d33951bf7dd132401f0b5707ccc8088837609b8470a9a3e58329a2d1/undefined-0.0.1-py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "971715312fc525023b1bd3024880e641", "sha256": "5268b425688c66781b55095c6f8e32d9c74396357cadbd6ea5545689ff46f78e" }, "downloads": -1, "filename": "undefined-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "971715312fc525023b1bd3024880e641", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 5738, "upload_time": "2015-12-22T20:55:41", "url": "https://files.pythonhosted.org/packages/81/fc/34f716ba332be1c73a64c016a1e0d16c834e89ba0cd48d406307e44a8d2a/undefined-0.0.2-py3-none-any.whl" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "8f398403fc6f7f01ef892a2e47bf3526", "sha256": "9ba806f427cc2aae05f42b7ad333bdfb632da50d092876735263c771544864a4" }, "downloads": -1, "filename": "undefined-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "8f398403fc6f7f01ef892a2e47bf3526", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 2107, "upload_time": "2015-12-25T17:57:20", "url": "https://files.pythonhosted.org/packages/8e/b3/eb71b717066e10aae04f83f544d91144aea0463cf8497146f484612396b1/undefined-0.0.3-py3-none-any.whl" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "51675ffb417684de044f5549dca971d8", "sha256": "e09913e314cd9c37900d830914c9292e452b90088a18b3cfb28fefd27ae94848" }, "downloads": -1, "filename": "undefined-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "51675ffb417684de044f5549dca971d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 3057, "upload_time": "2015-12-27T13:33:58", "url": "https://files.pythonhosted.org/packages/cc/63/5be0574a60003bf9e6b984a0433622adb76ab13bdedf1b233f4b0932662f/undefined-0.0.4-py3-none-any.whl" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "0d136d42ec4cd878f6648b9963fc3823", "sha256": "eec0af5738be218c83d5866f7344548de02de88291a5c4463fbcb9d40f65f591" }, "downloads": -1, "filename": "undefined-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "0d136d42ec4cd878f6648b9963fc3823", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 19430, "upload_time": "2017-03-03T05:38:55", "url": "https://files.pythonhosted.org/packages/5e/74/09260d1a53531c4184fbe0a755ebf330441175336a749978b6cfc6c87378/undefined-0.0.5-py3-none-any.whl" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "028e822528087219a247a68e82ec1ecc", "sha256": "49d6478c458abda7db66ae122806d4e5d80dad0dfba490dce6e38208a33f34b1" }, "downloads": -1, "filename": "undefined-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "028e822528087219a247a68e82ec1ecc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 8246, "upload_time": "2017-06-19T21:49:15", "url": "https://files.pythonhosted.org/packages/e4/ff/82be5f2040a2e3ed2bc955a1e70bc4eeed0db59f1c58e8d309e29faa40cb/undefined-0.0.6-py3-none-any.whl" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "5c0b0657e6f893ccf372b9cc2770cbc0", "sha256": "560a5f86fa96442b3ad350cc9b1c07982bf47f08549b2cd0f1e71a7a0ede9945" }, "downloads": -1, "filename": "undefined-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "5c0b0657e6f893ccf372b9cc2770cbc0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 4839, "upload_time": "2019-07-26T01:36:24", "url": "https://files.pythonhosted.org/packages/47/ef/8e23666d6926e4969e676edfe3a3a6539a5bebf0cd76541fe552e0f19c55/undefined-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6adfdbb79078c6c8df5c3880af451cc5", "sha256": "282c2efeeffb1e422895bab80b9888de73b885043a8f4e68afdca7634d26023b" }, "downloads": -1, "filename": "undefined-0.0.7.tar.gz", "has_sig": false, "md5_digest": "6adfdbb79078c6c8df5c3880af451cc5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 3133, "upload_time": "2019-07-26T01:36:26", "url": "https://files.pythonhosted.org/packages/9b/43/0cc082953a5ec32b2e126397655b8143f7092d3a6bf139bef48e8c2c0193/undefined-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "c6c1a585d497eb3c787fb14ae1cf92a6", "sha256": "3e081023fd5c7d6bd83a3e2da51fce4314878b4d4cc555ade79b7fc0ef3211e9" }, "downloads": -1, "filename": "undefined-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "c6c1a585d497eb3c787fb14ae1cf92a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 4837, "upload_time": "2019-07-26T01:38:25", "url": "https://files.pythonhosted.org/packages/8a/6e/105abbbc21c39e835a2734325b1737934ad02259ea372f2c6a783fca1df1/undefined-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04c1c41dfaa0c04692c3d592ceaeb20d", "sha256": "c6f237c0e3d7e7519694b21bd471dc25ee3c3379d9c23b74ebf02aa349c5cff7" }, "downloads": -1, "filename": "undefined-0.0.8.tar.gz", "has_sig": false, "md5_digest": "04c1c41dfaa0c04692c3d592ceaeb20d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 3137, "upload_time": "2019-07-26T01:38:27", "url": "https://files.pythonhosted.org/packages/78/b2/af4330ffa42fc9c41533b06cdc95ac780f41cf4d3cb9c71f973847d0c398/undefined-0.0.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c6c1a585d497eb3c787fb14ae1cf92a6", "sha256": "3e081023fd5c7d6bd83a3e2da51fce4314878b4d4cc555ade79b7fc0ef3211e9" }, "downloads": -1, "filename": "undefined-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "c6c1a585d497eb3c787fb14ae1cf92a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 4837, "upload_time": "2019-07-26T01:38:25", "url": "https://files.pythonhosted.org/packages/8a/6e/105abbbc21c39e835a2734325b1737934ad02259ea372f2c6a783fca1df1/undefined-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04c1c41dfaa0c04692c3d592ceaeb20d", "sha256": "c6f237c0e3d7e7519694b21bd471dc25ee3c3379d9c23b74ebf02aa349c5cff7" }, "downloads": -1, "filename": "undefined-0.0.8.tar.gz", "has_sig": false, "md5_digest": "04c1c41dfaa0c04692c3d592ceaeb20d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 3137, "upload_time": "2019-07-26T01:38:27", "url": "https://files.pythonhosted.org/packages/78/b2/af4330ffa42fc9c41533b06cdc95ac780f41cf4d3cb9c71f973847d0c398/undefined-0.0.8.tar.gz" } ] }