{ "info": { "author": "Elvio Toccalino", "author_email": "me@etoccalino.com", "bugtrack_url": null, "classifiers": [], "description": "=======================================\ngrampg: Grumpy Admin Password Generator\n=======================================\n\n*Copyright 2012 Elvio Toccalino.*\n\n\nABOUT\n=====\n\nThe **grampg** (cue to *Grumpy Admin Password Generator*, and pronounced \"*grummpeegee*\") is a small Python library which allows to generate passwords according to (possibly complicated) *user specs*. The idea is simple: build an instance, feed it your desired specifications, then generate as many passwords as you want. Each password generated will be independent of the others, except from the fact that all of them will comply with the specs.\n\nThe objectives for the ``grampg`` are flexibility and easy of use. ``grampg`` fulfills by providing a *kind* interface to the user: When building the password generator the user writes the spec as if it were being pronounced. In this fashion, a set of complex rules is expressed in a declarative line.\n\n\nUSAGE\n=====\n\nTypical usage follows the pattern outlined before: build a generator instance, feed it your specs, collect your passwords. This brief explanation fails to explain *how*, which is the main attractive of the ``grampg``. As an example, consider the following:\n\n Your admin needs your system to produce passwords of between 5 and 10 letters, at least 4 numbers, adding up to 10 characters total. Oh, and since this passwords may be used in some-mail-system, they should start with a letter.\n\nThe constrains, or *specs*, are quite contrived, but they can be fed to ``grampg`` simply::\n\n from grampg import PasswordGenerator\n passwords = (PasswordGenerator().of().between(5, 10, 'letters')\n .at_least(4, 'numbers')\n .length(10)\n .beginning_with('letters')\n .done())\n return [passwords.generate() for i in xrange(so_many_passwords)]\n\nOnly one generator instance is created, and then used to produce as many passwords as are required.\n\nOther character sets available by default are 'lower_letters', 'upper_letters', and 'alphanumeric', but the user is free to build generator instances with any character sets desired (as well as overriding the defaults). For example::\n\n passwords = (PasswordGenerator({'special': list('%$#!*'), 'letters': list('abcde')})\n .of().exactly(3, special).at_most(2, 'special').done())\n\nFor more examples, execute and read the **many_passwords.py** program (which lives in ``grampg/demo``), a simple program that spits passwords according to somewhat realistic specifications. There is also the ``usecases.py`` file, which consists of many uses of the ``grampg`` and their expected output (both valid and not).\n\n\nTESTS\n=====\n\nThe ``grampg`` package includes the following files which purpose is to serve as test bed:\n\n**tests.py**\n Unit test suite.\n\n**usecases.py**\n Integration tests.\n\n**regression.py**\n Regression tests. Like integration, but actual examples that went awry and are now fixed.\n\n\nABOUT THE NAME\n==============\n\nThe name sucks, I know. It's meant as a silly joke to the person who inspired the code creation.\n\n\nLICENSE\n=======\n\nThe ``grampg`` software package (including tests, documentation and demonstration programs) is licensed under the GNU Affero GPL version 3.0. A copy of the license is included with the ``grampg`` package. For details about the license, visit http://www.gnu.org/licenses/agpl.html.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/etoccalino/grampg", "keywords": "grumpy admin password generator", "license": "GNU Affero General Public License (LICENSE.txt)", "maintainer": null, "maintainer_email": null, "name": "grampg", "package_url": "https://pypi.org/project/grampg/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/grampg/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://bitbucket.org/etoccalino/grampg" }, "release_url": "https://pypi.org/project/grampg/0.3.0/", "requires_dist": null, "requires_python": null, "summary": "Simple and flexible password generation library.", "version": "0.3.0" }, "last_serial": 1417275, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "de7ca41bf803608442ebd23de84988eb", "sha256": "85d5ed91e35c43ff7e4da69ec65fa6a5ae12c068137aed9434f6b6d6b0ff5f6a" }, "downloads": -1, "filename": "grampg-0.1.tar.gz", "has_sig": true, "md5_digest": "de7ca41bf803608442ebd23de84988eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26144, "upload_time": "2012-09-25T06:07:56", "url": "https://files.pythonhosted.org/packages/19/f5/a77cb34eb4e868e33ce5ae835d9e7e9b297381c1998bcb6743942f888e62/grampg-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "50dece7a3fd17eeb995635894d5faf63", "sha256": "09ddd6d398b8567c969072043437bc5e288a4884a2427c7b642e6a9dc29d4301" }, "downloads": -1, "filename": "grampg-0.1.1.tar.gz", "has_sig": true, "md5_digest": "50dece7a3fd17eeb995635894d5faf63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31682, "upload_time": "2012-09-25T06:20:30", "url": "https://files.pythonhosted.org/packages/3d/35/b0820411b24fb23a74a78073eb617d4652d9a6825d0f63a4df529c782ef4/grampg-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "53889b9e2a7140ef549e646dac3cdd2b", "sha256": "97ba82c39f8434ddcb8161be674a5d21d07eca187497ee36c45405a8398157e9" }, "downloads": -1, "filename": "grampg-0.1.2.tar.gz", "has_sig": true, "md5_digest": "53889b9e2a7140ef549e646dac3cdd2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31699, "upload_time": "2012-09-25T06:33:34", "url": "https://files.pythonhosted.org/packages/c9/92/4232fc962fed0a51fcbc079d3090e7472b9c42f1ce04f5d39ebdccb5717a/grampg-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "95d6ed593380310e570d82e00e949d2b", "sha256": "629612e153272df3d992b6835bdb739a670a6895efe7399f4230cc7b59a39147" }, "downloads": -1, "filename": "grampg-0.1.3.tar.gz", "has_sig": false, "md5_digest": "95d6ed593380310e570d82e00e949d2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34048, "upload_time": "2012-09-28T23:42:27", "url": "https://files.pythonhosted.org/packages/66/9d/b24e6a235f33ca197cbc87af5f24baa382e29eca16040285142d427551b2/grampg-0.1.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "e2e05205177b49be2dbe0f3d2601fe13", "sha256": "5ca62e65275bb32b90099a2064591ce90678561cae9ca52a859d0dd0b8d22081" }, "downloads": -1, "filename": "grampg-0.2.0.tar.gz", "has_sig": false, "md5_digest": "e2e05205177b49be2dbe0f3d2601fe13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34900, "upload_time": "2012-10-01T04:08:30", "url": "https://files.pythonhosted.org/packages/21/8e/77c47ce6a3d9c683d9a3af7127026df88735232132fa604059e6622342fa/grampg-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "7d70b155aa7425091a6fafd2ca9f158a", "sha256": "6b9d8e888f4434694eb21786c6d4c4a975551c6bfbb8b5664801a576586bf6c9" }, "downloads": -1, "filename": "grampg-0.3.0.tar.gz", "has_sig": false, "md5_digest": "7d70b155aa7425091a6fafd2ca9f158a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34785, "upload_time": "2015-02-10T05:37:34", "url": "https://files.pythonhosted.org/packages/84/6f/63cee4b51ee20b737606c3e682673f3d4c9697fae7147e9bc5beefa42e58/grampg-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7d70b155aa7425091a6fafd2ca9f158a", "sha256": "6b9d8e888f4434694eb21786c6d4c4a975551c6bfbb8b5664801a576586bf6c9" }, "downloads": -1, "filename": "grampg-0.3.0.tar.gz", "has_sig": false, "md5_digest": "7d70b155aa7425091a6fafd2ca9f158a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34785, "upload_time": "2015-02-10T05:37:34", "url": "https://files.pythonhosted.org/packages/84/6f/63cee4b51ee20b737606c3e682673f3d4c9697fae7147e9bc5beefa42e58/grampg-0.3.0.tar.gz" } ] }