{ "info": { "author": "Azat Ibrakov", "author_email": "azatibrakov@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Hypothesis", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Database :: Database Engines/Servers" ], "description": "`hypothesis` strategies for `SQLAlchemy`\n========================================\n\n[![](https://travis-ci.org/lycantropos/hypothesis_sqlalchemy.svg?branch=master)](https://travis-ci.org/lycantropos/hypothesis_sqlalchemy \"Travis CI\")\n[![](https://dev.azure.com/lycantropos/hypothesis_sqlalchemy/_apis/build/status/lycantropos.hypothesis_sqlalchemy?branchName=master)](https://dev.azure.com/lycantropos/hypothesis_sqlalchemy/_build/latest?branchName=master \"Azure Pipelines\")\n[![](https://codecov.io/gh/lycantropos/hypothesis_sqlalchemy/branch/master/graph/badge.svg)](https://codecov.io/gh/lycantropos/hypothesis_sqlalchemy \"Codecov\")\n[![](https://img.shields.io/github/license/lycantropos/hypothesis_sqlalchemy.svg)](https://github.com/lycantropos/hypothesis_sqlalchemy/blob/master/LICENSE \"License\")\n[![](https://badge.fury.io/py/hypothesis-sqlalchemy.svg)](https://badge.fury.io/py/hypothesis-sqlalchemy \"PyPI\")\n\nIn what follows\n- `python` is an alias for `python3.5` or any later\nversion (`python3.6` and so on),\n- `pypy` is an alias for `pypy3.5` or any later\nversion (`pypy3.6` and so on).\n\nInstallation\n------------\n\nInstall the latest `pip` & `setuptools` packages versions:\n- with `CPython`\n ```bash\n python -m pip install --upgrade pip setuptools\n ```\n- with `PyPy`\n ```bash\n pypy -m pip install --upgrade pip setuptools\n ```\n\n### User\n\nDownload and install the latest stable version from `PyPI` repository:\n- with `CPython`\n ```bash\n python -m pip install --upgrade hypothesis_sqlalchemy\n ```\n- with `PyPy`\n ```bash\n pypy -m pip install --upgrade hypothesis_sqlalchemy\n ```\n\n### Developer\n\nDownload the latest version from `GitHub` repository\n```bash\ngit clone https://github.com/lycantropos/hypothesis_sqlalchemy.git\ncd hypothesis_sqlalchemy\n```\n\nInstall dependencies:\n- with `CPython`\n ```bash\n python -m pip install -r requirements.txt\n ```\n- with `PyPy`\n ```bash\n pypy -m pip install -r requirements.txt\n ```\n\nInstall:\n- with `CPython`\n ```bash\n python setup.py install\n ```\n- with `PyPy`\n ```bash\n pypy setup.py install\n ```\n\nUsage\n-----\n\nLet's take a look at what can be generated and how.\n\n### Tables\n\nWe can write a strategy that produces tables\n```python\n>>> from hypothesis_sqlalchemy import tabular\n>>> from sqlalchemy.schema import MetaData\n>>> tables = tabular.factory(metadata=MetaData(),\n... min_size=3,\n... max_size=10)\n>>> table = tables.example()\n>>> from sqlalchemy.schema import Table\n>>> isinstance(table, Table)\nTrue\n>>> from sqlalchemy.schema import Column\n>>> all(isinstance(column, Column) for column in table.columns)\nTrue\n>>> 3 <= len(table.columns) <= 10\nTrue\n\n```\n\n### Records\n\nSuppose we have a table\n```python\n>>> from sqlalchemy.schema import (Column,\n... MetaData,\n... Table)\n>>> from sqlalchemy.sql.sqltypes import (Integer,\n... String)\n>>> metadata = MetaData()\n>>> user_table = Table('user', metadata,\n... Column('user_id', Integer,\n... primary_key=True),\n... Column('user_name', String(16),\n... nullable=False),\n... Column('email_address', String(60)),\n... Column('password', String(20),\n... nullable=False))\n\n```\nand we can write strategy that\n* produces single records (as `tuple`s)\n ```python\n >>> from hypothesis import strategies\n >>> from hypothesis_sqlalchemy import tabular\n >>> records = tabular.records.factory(user_table, \n ... email_address=strategies.emails())\n >>> record = records.example()\n >>> isinstance(record, tuple)\n True\n >>> len(record) == len(user_table.columns)\n True\n >>> all(column.nullable and value is None\n ... or isinstance(value, column.type.python_type) \n ... for value, column in zip(record, user_table.columns))\n True\n\n ```\n* produces records `list`s (with configurable `list` size bounds)\n ```python\n >>> from hypothesis_sqlalchemy import tabular\n >>> records_lists = tabular.records.lists_factory(user_table,\n ... min_size=2,\n ... max_size=5, \n ... email_address=strategies.emails())\n >>> records_list = records_lists.example()\n >>> isinstance(records_list, list)\n True\n >>> 2 <= len(records_list) <= 5\n True\n >>> all(isinstance(record, tuple) for record in records_list)\n True\n >>> all(len(record) == len(user_table.columns) for record in records_list)\n True\n\n ```\n\nDevelopment\n-----------\n\n### Bumping version\n\n#### Preparation\n\nInstall\n[bump2version](https://github.com/c4urself/bump2version#installation).\n\n#### Pre-release\n\nChoose which version number category to bump following [semver\nspecification](http://semver.org/).\n\nTest bumping version\n```bash\nbump2version --dry-run --verbose $CATEGORY\n```\n\nwhere `$CATEGORY` is the target version number category name, possible\nvalues are `patch`/`minor`/`major`.\n\nBump version\n```bash\nbump2version --verbose $CATEGORY\n```\n\nThis will set version to `major.minor.patch-alpha`. \n\n#### Release\n\nTest bumping version\n```bash\nbump2version --dry-run --verbose release\n```\n\nBump version\n```bash\nbump2version --verbose release\n```\n\nThis will set version to `major.minor.patch`.\n\n### Running tests\n\nInstall dependencies:\n- with `CPython`\n ```bash\n python -m pip install -r requirements-tests.txt\n ```\n- with `PyPy`\n ```bash\n pypy -m pip install -r requirements-tests.txt\n ```\n\nPlain\n```bash\npytest\n```\n\nInside `Docker` container:\n- with `CPython`\n ```bash\n docker-compose --file docker-compose.cpython.yml up\n ```\n- with `PyPy`\n ```bash\n docker-compose --file docker-compose.pypy.yml up\n ```\n\n`Bash` script (e.g. can be used in `Git` hooks):\n- with `CPython`\n ```bash\n ./run-tests.sh\n ```\n or\n ```bash\n ./run-tests.sh cpython\n ```\n\n- with `PyPy`\n ```bash\n ./run-tests.sh pypy\n ```\n\n`PowerShell` script (e.g. can be used in `Git` hooks):\n- with `CPython`\n ```powershell\n .\\run-tests.ps1\n ```\n or\n ```powershell\n .\\run-tests.ps1 cpython\n ```\n- with `PyPy`\n ```powershell\n .\\run-tests.ps1 pypy\n ```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/lycantropos/hypothesis_sqlalchemy/archive/master.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lycantropos/hypothesis_sqlalchemy/", "keywords": "SQLAlchemy,hypothesis", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "hypothesis-sqlalchemy", "package_url": "https://pypi.org/project/hypothesis-sqlalchemy/", "platform": "", "project_url": "https://pypi.org/project/hypothesis-sqlalchemy/", "project_urls": { "Download": "https://github.com/lycantropos/hypothesis_sqlalchemy/archive/master.tar.gz", "Homepage": "https://github.com/lycantropos/hypothesis_sqlalchemy/" }, "release_url": "https://pypi.org/project/hypothesis-sqlalchemy/0.3.0/", "requires_dist": [ "sqlalchemy (>=1.1.0)", "hypothesis (>=4.22.0)" ], "requires_python": ">=3.5", "summary": "``hypothesis`` strategies for generating ``SQLAlchemy`` objects.", "version": "0.3.0" }, "last_serial": 5894816, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "5b67c2ca915439b51ba1f5d9b0256ba1", "sha256": "625305d4b285854e4b747f907abd4e56f75db499bc5b1b284bf5ae2ba3a8e99d" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.0.0.tar.gz", "has_sig": false, "md5_digest": "5b67c2ca915439b51ba1f5d9b0256ba1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4924, "upload_time": "2017-09-19T08:30:20", "url": "https://files.pythonhosted.org/packages/a8/8e/6a7958977ce847a93de86bd416558d21a91f0ae28a3cb36c0b814f3704d8/hypothesis_sqlalchemy-0.0.0.tar.gz" } ], "0.0.1": [ { "comment_text": "", "digests": { "md5": "1c1ce9a42eb8453d4b55efafebe53110", "sha256": "1c04f2d531402604508b0ee0414f57eaa279bc032f3c37f0d5ce1f508897fd02" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.0.1.tar.gz", "has_sig": false, "md5_digest": "1c1ce9a42eb8453d4b55efafebe53110", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6421, "upload_time": "2017-09-19T11:09:18", "url": "https://files.pythonhosted.org/packages/a8/a6/8adcbb00d54939c4c652cec538f311f33c5ac2cf7f8d72e9fd657a59e87a/hypothesis_sqlalchemy-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "af1ebf47b1d71b8e2199ae91e895dcf9", "sha256": "627427b6d9b7bbcf217440331fef712079fb86b611cc97320a47679040e7724f" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.0.2.tar.gz", "has_sig": false, "md5_digest": "af1ebf47b1d71b8e2199ae91e895dcf9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6271, "upload_time": "2017-09-19T21:34:13", "url": "https://files.pythonhosted.org/packages/69/83/20ec738397536d149278ae16a2fc74ffcc8a28d646d2806f612718265714/hypothesis_sqlalchemy-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "cfc9aa530ef10b1e9673f756d56acfae", "sha256": "296ee729b1d79428e529dd52ee04c58f5533e22f75494060bd7bda1a3f4043f5" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.0.3.tar.gz", "has_sig": false, "md5_digest": "cfc9aa530ef10b1e9673f756d56acfae", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 7668, "upload_time": "2018-08-03T16:25:39", "url": "https://files.pythonhosted.org/packages/e9/fa/357448474fa00fa244dbda6fcb001d34387facd1d974698a21e3b091d374/hypothesis_sqlalchemy-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "fe4d82dc1fec0af1e843acaeb56bc394", "sha256": "d8bc5e86b91f2050a4a2caa200eb25562676f286813521c0eb3c7707ac5bbf1e" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "fe4d82dc1fec0af1e843acaeb56bc394", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 12510, "upload_time": "2018-10-31T18:00:07", "url": "https://files.pythonhosted.org/packages/7a/5a/e2f7b8cacf85e276e175f5c5541c98c5f79a826e5de492ded94e93030164/hypothesis_sqlalchemy-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a09253b2fb18760e3aff4246d01c3690", "sha256": "cb8ff3f234acd9bcc9ed95a078e9d185cf8fa848473225f51722f66f8063291d" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.0.4.tar.gz", "has_sig": false, "md5_digest": "a09253b2fb18760e3aff4246d01c3690", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 8310, "upload_time": "2018-10-31T18:00:09", "url": "https://files.pythonhosted.org/packages/90/ed/72de4b83a9dbd3cce41f265afa67463e25ffddfade597087baec520d8d94/hypothesis_sqlalchemy-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "326bd193f8656d48fd36270c06b345dc", "sha256": "5c49823aa85f8a967a8932088690dec908f44aa66a9ed9aab73d5c0eae50d322" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "326bd193f8656d48fd36270c06b345dc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 12500, "upload_time": "2019-01-18T14:05:53", "url": "https://files.pythonhosted.org/packages/38/db/b457c2f6895464624e6460567188cabe0ba3d32109774ce3b26cba034fea/hypothesis_sqlalchemy-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "00af5bf32786ff90e231555619d7606c", "sha256": "351467b2bae6d2cd61b549b5ea91072e4b2173795389ad75c4fae3d0f2af1aa1" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.0.5.tar.gz", "has_sig": false, "md5_digest": "00af5bf32786ff90e231555619d7606c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 8280, "upload_time": "2019-01-18T14:05:54", "url": "https://files.pythonhosted.org/packages/e5/e9/a47cb110085611d438456a9d6ef9291fdcf1868e44ca7368d46475d7b4e7/hypothesis_sqlalchemy-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "f50fe11b78d59eab377d40873bb7c058", "sha256": "819f2e864adc7bb4e620a81d1caf7df7fc6917aadb3ff417e1354ab1de293543" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "f50fe11b78d59eab377d40873bb7c058", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 10440, "upload_time": "2019-03-06T13:40:40", "url": "https://files.pythonhosted.org/packages/0b/5b/2bcfda5be65922c7ef1810f194a1b2c411ef836dd6bbfe689f3e369e4d76/hypothesis_sqlalchemy-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a2dbc9ea64a39a8b6e658811655d8aa7", "sha256": "4171e77c54b4e6178c7ffcc9153a137f6ccababb918304ebaaac700ebbe6befa" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.0.6.tar.gz", "has_sig": false, "md5_digest": "a2dbc9ea64a39a8b6e658811655d8aa7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 7677, "upload_time": "2019-03-06T13:40:41", "url": "https://files.pythonhosted.org/packages/35/df/9cbf46c7741b1b99f24c71e549772d783f650b8afd70392016cf57071b2b/hypothesis_sqlalchemy-0.0.6.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "06184c4d5ff950c21485d9b4725f78f7", "sha256": "72a56693e2198f31ceda44f4f235168876da33b0e2f52c271e3939d53cd25bab" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "06184c4d5ff950c21485d9b4725f78f7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 11783, "upload_time": "2019-06-27T12:48:47", "url": "https://files.pythonhosted.org/packages/0b/2f/20d78cdef4ea07e8328c26ba9551409419690fd71806736d49e1254db8e0/hypothesis_sqlalchemy-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4da837d48550e35324363cffcae9e398", "sha256": "97bd090a03c579306a2b38d47a5a489e9fe290cee66209acfdc82fcfdfd2d0f0" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4da837d48550e35324363cffcae9e398", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 7891, "upload_time": "2019-06-27T12:48:48", "url": "https://files.pythonhosted.org/packages/3c/b2/aa197c3d8c7e58ae0ced60f595204c2b6dc97ab0baca79aafa44c1780fc9/hypothesis_sqlalchemy-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "1f0d4854e21e72fe1c295b8b4995cf6f", "sha256": "dd8854864f27cf291c272e12a197655a01c4e2640a0b5ca3610b3c55857c24f3" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1f0d4854e21e72fe1c295b8b4995cf6f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 11785, "upload_time": "2019-07-15T09:19:34", "url": "https://files.pythonhosted.org/packages/06/c6/5d6d3506f248c376b0d3a8c830ff4357ce45da6c9159dac6276fbe320746/hypothesis_sqlalchemy-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fdf8ab3cf4a9291bcf59d171ab8adac9", "sha256": "dfe07d15371022ac23036e03818017735b18c05e68e1aa6fc6451f1b09e20144" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.1.1.tar.gz", "has_sig": false, "md5_digest": "fdf8ab3cf4a9291bcf59d171ab8adac9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 7940, "upload_time": "2019-07-15T09:19:36", "url": "https://files.pythonhosted.org/packages/32/e8/65e7361511239eca9c2e1482913b62a035b80a63fd285b1262de6149085b/hypothesis_sqlalchemy-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "7869246ddd4860f325969e0cda2aae54", "sha256": "5189ad9c76e03ad22267f35414c569a43db8fe81e66a001b8e417f7e2f3847d3" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7869246ddd4860f325969e0cda2aae54", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 12599, "upload_time": "2019-09-26T07:30:48", "url": "https://files.pythonhosted.org/packages/88/ac/f5b327e52da5b9e19f411a81bed8f11a5b0c568ddaab785c0a3a6a197281/hypothesis_sqlalchemy-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1baeeef2e1b5c2f18f8884f92e193500", "sha256": "0571187d2ee5183186a2ab6c832f4c74d1ec03497ca1a709ebee6775efb893eb" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.2.0.tar.gz", "has_sig": false, "md5_digest": "1baeeef2e1b5c2f18f8884f92e193500", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 8521, "upload_time": "2019-09-26T07:30:50", "url": "https://files.pythonhosted.org/packages/6d/34/40cbadeb0d1d419750403f1d58a330260906cb2f0f79b78e11db44591c12/hypothesis_sqlalchemy-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "a82cf3f8179a3c78718735a4dd17a96a", "sha256": "f6105fff6754a90f73e032a8322b35140fc3428a8e0d567f5f24cbd66e990d5f" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a82cf3f8179a3c78718735a4dd17a96a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 13631, "upload_time": "2019-09-27T08:11:43", "url": "https://files.pythonhosted.org/packages/b4/62/16378365e424928a28dbee661f65f00b6e56127de1b3659aba83a41c7821/hypothesis_sqlalchemy-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "26903aaa6477f086f18fd1b29830d2bf", "sha256": "7404a649a6cfcbaef7208163827a83b40b21e69d8e904ee1bd7063c054bc4e57" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.3.0.tar.gz", "has_sig": false, "md5_digest": "26903aaa6477f086f18fd1b29830d2bf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 8978, "upload_time": "2019-09-27T08:11:45", "url": "https://files.pythonhosted.org/packages/52/fa/8e151a3bf15ae7a09a98a6b6e1541cc95bd060d1500d6d8935a8db424d65/hypothesis_sqlalchemy-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a82cf3f8179a3c78718735a4dd17a96a", "sha256": "f6105fff6754a90f73e032a8322b35140fc3428a8e0d567f5f24cbd66e990d5f" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a82cf3f8179a3c78718735a4dd17a96a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 13631, "upload_time": "2019-09-27T08:11:43", "url": "https://files.pythonhosted.org/packages/b4/62/16378365e424928a28dbee661f65f00b6e56127de1b3659aba83a41c7821/hypothesis_sqlalchemy-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "26903aaa6477f086f18fd1b29830d2bf", "sha256": "7404a649a6cfcbaef7208163827a83b40b21e69d8e904ee1bd7063c054bc4e57" }, "downloads": -1, "filename": "hypothesis_sqlalchemy-0.3.0.tar.gz", "has_sig": false, "md5_digest": "26903aaa6477f086f18fd1b29830d2bf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 8978, "upload_time": "2019-09-27T08:11:45", "url": "https://files.pythonhosted.org/packages/52/fa/8e151a3bf15ae7a09a98a6b6e1541cc95bd060d1500d6d8935a8db424d65/hypothesis_sqlalchemy-0.3.0.tar.gz" } ] }