{ "info": { "author": "Paul Yuan", "author_email": "puyuan1@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Utilities" ], "description": "# Nano ID\n\n[![CircleCI](https://circleci.com/gh/puyuan/py-nanoid/tree/master.svg?style=svg)](https://circleci.com/gh/puyuan/py-nanoid/tree/master)\n\nA tiny, secure, URL-friendly, unique string ID generator for Python.\n\n* __Safe__. It uses cryptographically strong random APIs and tests distribution of symbols;\n* __Compact__. It uses a larger alphabet than UUID (A-Za-z0-9_-). So ID size was reduced from 36 to 21 symbols.\n\n## Usage\n\nInstall Nano ID using pip:\n\n```\npip install nanoid\n```\n\n### Normal\n\nThe main module uses URL-friendly symbols (A-Za-z0-9_-) and returns an ID with 21 characters (to have a collision probability similar to UUID v4).\n\n\n```python\nfrom nanoid import generate\n\ngenerate() # => NDzkGoTCdRcaRyt7GOepg\n```\n\nSymbols `-,.()` are not encoded in the URL. If used at the end of a link they could be identified as a punctuation symbol.\n\nIf you want to reduce ID length (and increase collisions probability), you can pass the length as an argument.\n\n```python\nfrom nanoid import generate\n\ngenerate(size=10) # => \"IRFa-VaY2b\"\n\n```\n\nDon\u2019t forget to check the safety of your ID length in ID [collision probability calculator](https://zelark.github.io/nano-id-cc/).\n\n\n## Custom Alphabet or Length\n\nIf you want to change the ID's alphabet or length you can use the internal generate module.\n\n```python\nfrom nanoid import generate\n\ngenerate('1234567890abcdef', 10) # => \"4f9zd13a42\"\n```\n\nNon-secure API is also available:\n\n```python\nfrom nanoid import non_secure_generate\n\nnon_secure_generate('1234567890abcdef', 10)\n```\n\n## Tools\n\n* [ID size calculator](https://zelark.github.io/nano-id-cc/) to choice smaller ID size depends on your case.\nnanoid-dictionary with popular alphabets to use with nanoid/generate;\n* [`nanoid-dictionary`](https://github.com/aidarkhanov/py-nanoid-dictionary) with popular alphabets to use.\n\n\n\n## Other Programming Languages\n\n* [C#](https://github.com/codeyu/nanoid-net)\n* [Clojure and ClojureScript](https://github.com/zelark/nano-id)\n* [Crystal](https://github.com/mamantoha/nanoid.cr)\n* [Dart](https://github.com/pd4d10/nanoid)\n* [Go](https://github.com/matoous/go-nanoid)\n* [Elixir](https://github.com/railsmechanic/nanoid)\n* [Haskell](https://github.com/4e6/nanoid-hs)\n* [Java](https://github.com/aventrix/jnanoid)\n* [JavaScript](https://github.com/ai/nanoid)\n* [Nim](https://github.com/icyphox/nanoid.nim)\n* [PHP](https://github.com/hidehalo/nanoid-php)\n* [Ruby](https://github.com/radeno/nanoid.rb)\n* [Rust](https://github.com/nikolay-govorov/nanoid)\n* [Swift](https://github.com/antiflasher/NanoID)\n\n\n## Changelog\n- v2.0.0\n - Replace ~ to - in default alphabet\n - Add non-secure fast generator\n - Reduce default characters from 22 to 21\n- v0.3.0\n - Fix array out of bound error.\n\n## Credits\n\n- Andrey Sitnik for [Nano ID](https://github.com/ai/nanoid);\n- [Dair Aidarkhanov](https://github.com/aidarkhanov) for main contribution to v2.0, and adding test cases.\n- Aleksandr Zhuravlev for [ID collision probability](https://zelark.github.io/nano-id-cc/).\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/puyuan/py-nanoid", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "nanoid", "package_url": "https://pypi.org/project/nanoid/", "platform": "", "project_url": "https://pypi.org/project/nanoid/", "project_urls": { "Homepage": "https://github.com/puyuan/py-nanoid" }, "release_url": "https://pypi.org/project/nanoid/2.0.0/", "requires_dist": null, "requires_python": "", "summary": "A tiny, secure, URL-friendly, unique string ID generator for Python", "version": "2.0.0" }, "last_serial": 4507753, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "17f49924214a6804d3fb70197c079661", "sha256": "56f78d3b96fa0e794f8845dab23c624fa9abf2c87cd3e587fe9deebd0e299728" }, "downloads": -1, "filename": "nanoid-0.1.tar.gz", "has_sig": false, "md5_digest": "17f49924214a6804d3fb70197c079661", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1181, "upload_time": "2017-09-14T02:45:42", "url": "https://files.pythonhosted.org/packages/39/9e/c00ab17aace48e84c6227d602f36eb5fbe661c3835987f78f858fbdf1b8f/nanoid-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "856c2c44d7be4f81eb6133bb09b881bc", "sha256": "7f566acf60844a02fe0350e1d35ff60ec388b8f14a8aa78e5111d34f6fb27376" }, "downloads": -1, "filename": "nanoid-0.2.tar.gz", "has_sig": false, "md5_digest": "856c2c44d7be4f81eb6133bb09b881bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1660, "upload_time": "2017-09-21T08:44:25", "url": "https://files.pythonhosted.org/packages/b4/bb/e95d8636175b71c65fdb9cdf047cc69dcb35a36e7f963f278a839eaed5db/nanoid-0.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "98ea9336157c97587bf9b3259b99b6c0", "sha256": "e4d60fdcc6c347e62976d7fd9a854507b282770a8c2cd83439aa886d8fe354bf" }, "downloads": -1, "filename": "nanoid-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "98ea9336157c97587bf9b3259b99b6c0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2427, "upload_time": "2018-07-13T06:53:22", "url": "https://files.pythonhosted.org/packages/93/d0/fe42b6c1dbd18bc07590d00b30ff70a05fd5da73ce0f60f8db12b8bc2ff5/nanoid-0.3.0-py3-none-any.whl" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "4a367b47e3baea9e7fe25adee4efc6f7", "sha256": "90aefa650e328cffb0893bbd4c236cfd44c48bc1f2d0b525ecc53c3187b653bb" }, "downloads": -1, "filename": "nanoid-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4a367b47e3baea9e7fe25adee4efc6f7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5844, "upload_time": "2018-11-20T14:45:50", "url": "https://files.pythonhosted.org/packages/2e/0d/8630f13998638dc01e187fadd2e5c6d42d127d08aeb4943d231664d6e539/nanoid-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84e2b2db9264e5e0ee9c13481ff46903", "sha256": "5a80cad5e9c6e9ae3a41fa2fb34ae189f7cb420b2a5d8f82bd9d23466e4efa68" }, "downloads": -1, "filename": "nanoid-2.0.0.tar.gz", "has_sig": false, "md5_digest": "84e2b2db9264e5e0ee9c13481ff46903", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3290, "upload_time": "2018-11-20T14:45:51", "url": "https://files.pythonhosted.org/packages/b7/9d/0250bf5935d88e214df469d35eccc0f6ff7e9db046fc8a9aeb4b2a192775/nanoid-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4a367b47e3baea9e7fe25adee4efc6f7", "sha256": "90aefa650e328cffb0893bbd4c236cfd44c48bc1f2d0b525ecc53c3187b653bb" }, "downloads": -1, "filename": "nanoid-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4a367b47e3baea9e7fe25adee4efc6f7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5844, "upload_time": "2018-11-20T14:45:50", "url": "https://files.pythonhosted.org/packages/2e/0d/8630f13998638dc01e187fadd2e5c6d42d127d08aeb4943d231664d6e539/nanoid-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84e2b2db9264e5e0ee9c13481ff46903", "sha256": "5a80cad5e9c6e9ae3a41fa2fb34ae189f7cb420b2a5d8f82bd9d23466e4efa68" }, "downloads": -1, "filename": "nanoid-2.0.0.tar.gz", "has_sig": false, "md5_digest": "84e2b2db9264e5e0ee9c13481ff46903", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3290, "upload_time": "2018-11-20T14:45:51", "url": "https://files.pythonhosted.org/packages/b7/9d/0250bf5935d88e214df469d35eccc0f6ff7e9db046fc8a9aeb4b2a192775/nanoid-2.0.0.tar.gz" } ] }