{ "info": { "author": "Takeshi Komiya", "author_email": "i.tkomiya@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Database", "Topic :: Software Development", "Topic :: Software Development :: Testing" ], "description": "About\n=====\n``testing.common.database`` is utilities for testing.* package.\n\n.. image:: https://travis-ci.org/tk0miya/testing.common.database.svg?branch=master\n :target: https://travis-ci.org/tk0miya/testing.common.database\n\n.. image:: https://codeclimate.com/github/tk0miya/testing.common.database/badges/gpa.svg\n :target: https://codeclimate.com/github/tk0miya/testing.common.database\n\n\nInstall\n=======\nUse pip::\n\n $ pip install testing.common.database\n\n\nHelpers\n=======\nclass Database(object):\n\n ``Database`` is a base class for database testing packages.\n To create your database testing class, inherit this class and override methods below.\n\n def initialize(self):\n\n Handler for initialize database object.\n\n def get_data_directory(self):\n\n Path to data directory of your databse.\n\n Example::\n\n def get_data_directory(self):\n return os.path.join(self.base_dir, 'data')\n\n def initialize_database(self):\n\n Handler to initialize your database.\n\n Example::\n\n def initialize_database(self):\n if not os.path.exists(os.path.join(self.base_dir, 'data', 'PG_VERSION')):\n args = ([self.initdb, '-D', os.path.join(self.base_dir, 'data'), '--lc-messages=C'] +\n self.settings['initdb_args'].split())\n\n try:\n p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n output, err = p.communicate()\n if p.returncode != 0:\n raise RuntimeError(\"initdb failed: %r\" % err)\n except OSError as exc:\n raise RuntimeError(\"failed to spawn initdb: %s\" % exc)\n\n def get_server_commandline(self):\n\n Command line to invoke your database server.\n\n Example::\n\n def get_server_commandline(self):\n return (['postgres',\n '-p', str(self.settings['port']),\n '-D', os.path.join(self.base_dir, 'data'),\n '-k', os.path.join(self.base_dir, 'tmp')] +\n self.settings['postgres_args'].split())\n\n def prestart(self):\n\n Handler called before invoking your database server.\n\n def poststart(self):\n\n Hander called after invoking your database server.\n\n def is_server_available(self):\n\n Methods check your database server available.\n The ``Database`` class uses this method to check the server boots up.\n\n Example::\n\n try:\n with closing(pg8000.connect(**self.dsn(database='template1'))):\n pass\n except pg8000.Error:\n return False\n else:\n return True\n\n def is_alive(self):\n\n Methods check the database server is alive.\n\n @property\n def server_pid(self):\n\n Process ID of the database server.\n\n\nclass DatabaseFactory(object):\n\n ``DatabaseFactory`` is a factory class for the database class.\n To create your database factory class, inherit this class and set ``target_class`` variable::\n\n class PostgresqlFactory(DatabaseFactory):\n target_class = Postgresql\n\n The factory class should work like a ``target_class``::\n\n # The factory class generates like a ``target_class``, in this case, generates ``Postgresql`` class\n Postgresql = PostgresqlFactory()\n\n # The generated class works same as ``target_class``\n with Postgresql() as pgsql:\n #\n # do any tests using the database ...\n #\n\n It can bypass parameters to the ``target_class`` on every instantiation::\n\n Postgresql = PostgresqlFactory(copy_data_from='/path/to/database')\n\n with Postgresql() as pgsql:\n #\n # Test with ``copy_data_from`` parameter :-)\n #\n\n Also, it is able to cache the database generated at ``Database.initialize_database()``\n with ``cache_initialized_db`` parameter.\n It avoids running database initialization on every tests::\n\n # Initialize database once\n Postgresql = PostgresqlFactory(cache_initialized_db=True)\n\n with Postgresql() as pgsql:\n # copy cached database for this test.\n\n If you want to fixtures to the database, use ``on_initialized`` parameter::\n\n def handler(pgsql):\n # inserting fixtures\n\n # Initialize database once, and call ``on_initialized`` handler\n Postgresql = PostgresqlFactory(cache_initialized_db=True,\n on_initialized=handler)\n\nclass SkipIfNotInstalledDecorator(object):\n\n Generates decorator that skips the testcase if database command not found.\n To create decorator, inherit this class and set ``name`` variable and override ``search_server()`` method.\n\n Example::\n\n class PostgresqlSkipIfNotInstalledDecorator(SkipIfNotInstalledDecorator):\n name = 'PostgreSQL'\n\n def search_server(self):\n find_program('postgres', ['bin']) # raise exception if not found\n\n\n skipIfNotFound = skipIfNotInstalled = PostgresqlSkipIfNotInstalledDecorator()\n\n @skipIfNotFound\n def test():\n # testcase\n\ndef get_unused_port():\n\n Get free TCP port.\n\ndef get_path_of(name):\n\n Searchs command from search paths. It works like ``which`` command.\n\n\nRequirements\n============\n* Python 2.7, 3.4, 3.5, 3.6\n\nLicense\n=======\nApache License 2.0\n\nRelease signatures\n==================\nReleases are signed with following keys:\n\n* `498D6B9E `_\n\nHistory\n=======\n\n2.0.3 (2017-10-24)\n-------------------\n* Fix a bug:\n\n - Handle exceptions from get_path_of()\n\n2.0.2 (2017-10-08)\n-------------------\n* Fix a bug:\n\n - #18: Fix launch when using cache_initialized_db without init_handler \n\n2.0.1 (2017-07-15)\n-------------------\n* #9: Database always gets instantiated with correct settings\n* #10: Remove explicit path to which\n* #11: Make database server kill-timeout more configurable\n\n2.0.0 (2016-08-20)\n-------------------\n* Use subprocess.Popen() instead of fork & exec\n* Support windows platform (experimental)\n* #4: Add boot_timeout parameter\n* Fix bugs:\n\n - Fix syntax errors for Python3\n - Show error messages if rescue from GC failed (ref: #1)\n\n1.1.0 (2016-02-05)\n-------------------\n* Add Database#server_pid to get pid of the database server\n* Add Database#is_alive() to check server is alive\n* Define BOOT_TIMEOUT as constant\n* Fix AttributeError if any exceptions are raised in bootstrap\n\n1.0.0 (2016-02-01)\n-------------------\n* Initial release\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/tk0miya/testing.common.database", "keywords": "", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "testing.common.database", "package_url": "https://pypi.org/project/testing.common.database/", "platform": "", "project_url": "https://pypi.org/project/testing.common.database/", "project_urls": { "Homepage": "https://github.com/tk0miya/testing.common.database" }, "release_url": "https://pypi.org/project/testing.common.database/2.0.3/", "requires_dist": null, "requires_python": "", "summary": "utilities for testing.* packages", "version": "2.0.3" }, "last_serial": 3272338, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "0c838b4d2ef507595bba22f3f4369540", "sha256": "13db45bd8b1e6e1918908408291e98de35ba3c82ae339062812c362e1e111e2e" }, "downloads": -1, "filename": "testing.common.database-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0c838b4d2ef507595bba22f3f4369540", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8928, "upload_time": "2016-02-01T10:59:56", "url": "https://files.pythonhosted.org/packages/e7/ff/9808cc0acecbfa72578e1bfcf5f9bf1cad73bf60c1467d59ee1fa51feff8/testing.common.database-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b2644a7a9d1d8442c64c33fea98549d", "sha256": "f563c4e1b3c319eaa3fd8b0e64abbaeb3024eee4f489142b2906f2ae4d3d485a" }, "downloads": -1, "filename": "testing.common.database-1.0.0.tar.gz", "has_sig": false, "md5_digest": "3b2644a7a9d1d8442c64c33fea98549d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10305, "upload_time": "2016-02-01T10:59:49", "url": "https://files.pythonhosted.org/packages/00/1c/b80bf5a989120f90a8a9b32304ef5fbb2df0db298cae0f8bc4e699f7a57b/testing.common.database-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "bd4dcaa16328c0061261194ae4986727", "sha256": "d96ecbf98b497efaf0fe8b8cd43f4e98205e05e3c4519ce4ff56a6346c6812f3" }, "downloads": -1, "filename": "testing.common.database-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bd4dcaa16328c0061261194ae4986727", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9286, "upload_time": "2016-02-05T11:31:43", "url": "https://files.pythonhosted.org/packages/41/e8/ed2d7ee79d1b653531161096411f228fb483011b447505b68b0ee951a407/testing.common.database-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "200a309a350833c17d3958d74eb5e6ec", "sha256": "a9b2c5a27a77c03d5571d4bfa01c740f81ee97f0fba604301327871cbc5a553f" }, "downloads": -1, "filename": "testing.common.database-1.1.0.tar.gz", "has_sig": false, "md5_digest": "200a309a350833c17d3958d74eb5e6ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10656, "upload_time": "2016-02-05T11:31:37", "url": "https://files.pythonhosted.org/packages/21/4d/faa815485651575f72978ce13ddfbfb7db1bdeb2f306d11522762fd846f9/testing.common.database-1.1.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "7518b5d3b218d92fecd816e8680c624d", "sha256": "8ecb30eb8cf0c7d913524d58f5a8092c289dcd94c53f0ff9b4ad611144b0a880" }, "downloads": -1, "filename": "testing.common.database-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7518b5d3b218d92fecd816e8680c624d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9851, "upload_time": "2016-08-20T06:52:53", "url": "https://files.pythonhosted.org/packages/f2/1a/9e8c47f8ecabed6f8f2517bcdaa3bf464742775005c6c889e48f14e9abd9/testing.common.database-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84862c53fe5468c063010aeb7f8aa6e0", "sha256": "031fbb5c016bb0c63c416915ec4f258e3d34023a168daef272c1df7339d123cc" }, "downloads": -1, "filename": "testing.common.database-2.0.0.tar.gz", "has_sig": false, "md5_digest": "84862c53fe5468c063010aeb7f8aa6e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11114, "upload_time": "2016-08-20T06:52:50", "url": "https://files.pythonhosted.org/packages/42/88/73423947ddeadcfba806d68971bbdc4ff5d0e3ea83ade570fbc922edd46e/testing.common.database-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "8a34cfbe2aececd8d35013bbf3473400", "sha256": "6e731a81837ea9d02183afe622e03a0501e45c3806afbd18ef6962da15b253df" }, "downloads": -1, "filename": "testing.common.database-2.0.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "8a34cfbe2aececd8d35013bbf3473400", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10330, "upload_time": "2017-07-15T07:05:14", "url": "https://files.pythonhosted.org/packages/29/49/e3cd24f647895b9fd5002c67f32a9b190b715d0c51fb1e667139689f4a40/testing.common.database-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7374448619af69f55ca6f80c6bb14629", "sha256": "e1f3520d9bf20e2634738554217af3321b4d574f7fd94e8f01fe086667e88cb1" }, "downloads": -1, "filename": "testing.common.database-2.0.1.tar.gz", "has_sig": true, "md5_digest": "7374448619af69f55ca6f80c6bb14629", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11387, "upload_time": "2017-07-15T07:05:12", "url": "https://files.pythonhosted.org/packages/65/6c/5e19017609753da6d64eafa5ce2b44d180e8a6fb1f250f08affea6a2fd3c/testing.common.database-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "506c12f4b1210d5511ddb69e2907de83", "sha256": "d811c08a113a35c59a5d89e60d9302e90e07fb33a5a0050a1e1bc8c75925dbe4" }, "downloads": -1, "filename": "testing.common.database-2.0.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "506c12f4b1210d5511ddb69e2907de83", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10454, "upload_time": "2017-10-08T04:09:51", "url": "https://files.pythonhosted.org/packages/d3/6d/7f6e8b5012ebf66f3f640f8093a304805a11187d7e79df891e37a42e66ce/testing.common.database-2.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "abf7b46a3c79ca880feaab5a1a6b965b", "sha256": "1d4bef15158810e44549cdd2c0a597bf6bc805003652e80b16b9c2e943e002df" }, "downloads": -1, "filename": "testing.common.database-2.0.2.tar.gz", "has_sig": true, "md5_digest": "abf7b46a3c79ca880feaab5a1a6b965b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11474, "upload_time": "2017-10-08T04:09:48", "url": "https://files.pythonhosted.org/packages/ec/56/e8b8b76f5d3dfe6039050fcb38dd4167626ff99555a085593c424f446141/testing.common.database-2.0.2.tar.gz" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "81f09a9fdb422aaf8337580bf99e8ab8", "sha256": "e3ed492bf480a87f271f74c53b262caf5d85c8bc09989a8f534fa2283ec52492" }, "downloads": -1, "filename": "testing.common.database-2.0.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "81f09a9fdb422aaf8337580bf99e8ab8", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10500, "upload_time": "2017-10-23T15:02:40", "url": "https://files.pythonhosted.org/packages/a7/1a/ca1c39544ed92fa8ea121ff3bf05bb4838520c498942054235ebc4a83b36/testing.common.database-2.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "55e7b7fdf84adcaa4cf0c61115feb1d3", "sha256": "965d80b2985315325dc358c3061b174a712f4d4d5bf6a80b58b11f9a1dd86d73" }, "downloads": -1, "filename": "testing.common.database-2.0.3.tar.gz", "has_sig": true, "md5_digest": "55e7b7fdf84adcaa4cf0c61115feb1d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11535, "upload_time": "2017-10-23T15:02:37", "url": "https://files.pythonhosted.org/packages/25/3c/5f7eef6ce8a16314a39f2b905ebd5cd2bfdcbaabafb7fd71dc10c3f32c4d/testing.common.database-2.0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "81f09a9fdb422aaf8337580bf99e8ab8", "sha256": "e3ed492bf480a87f271f74c53b262caf5d85c8bc09989a8f534fa2283ec52492" }, "downloads": -1, "filename": "testing.common.database-2.0.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "81f09a9fdb422aaf8337580bf99e8ab8", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10500, "upload_time": "2017-10-23T15:02:40", "url": "https://files.pythonhosted.org/packages/a7/1a/ca1c39544ed92fa8ea121ff3bf05bb4838520c498942054235ebc4a83b36/testing.common.database-2.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "55e7b7fdf84adcaa4cf0c61115feb1d3", "sha256": "965d80b2985315325dc358c3061b174a712f4d4d5bf6a80b58b11f9a1dd86d73" }, "downloads": -1, "filename": "testing.common.database-2.0.3.tar.gz", "has_sig": true, "md5_digest": "55e7b7fdf84adcaa4cf0c61115feb1d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11535, "upload_time": "2017-10-23T15:02:37", "url": "https://files.pythonhosted.org/packages/25/3c/5f7eef6ce8a16314a39f2b905ebd5cd2bfdcbaabafb7fd71dc10c3f32c4d/testing.common.database-2.0.3.tar.gz" } ] }