{ "info": { "author": "Pawel", "author_email": "inne.poczta@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development :: Libraries" ], "description": "Open File Mock\n==============\n\nDescription\n-----------\n\nThis library contains object, which can be used during mocking files in\ntests. Features:\n\n- You can register different actions (provide different objects) for\n different paths\n- You can add text, which will be returned on read\n- You can select behavior for paths, which are not registered.\n Supported behaviors:\n\n - Raise FileNotFoundError exception (default behavior)\n - Return original file from filesystem\n - Return mock object\n\nInstall\n-------\n\nIt can be installed with following command:\n\n``pip install open-mock-file``\n\nUsage:\n------\n\nExamples\n~~~~~~~~\n\nMock open first file with custom object, second one with string data and\nraise FileNotFoundError for not registered path:\n\n.. code:: python\n\n from unittest.mock import patch\n from open_file_mock import MockOpen\n\n\n class FileObject:\n def __init__(self, data):\n self.data = data\n\n def read(self, *args, **kwargs):\n return self.data\n\n def write(self, data, *args, **kwargs):\n self.data = data\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_val, exc_tb):\n pass\n\n\n with patch('builtins.open', new_callable=MockOpen) as open_mock:\n open_mock.register_object_for_path(path='/tmp/f1', obj=FileObject('Some data'))\n open_mock.set_read_data_for(path='/tmp/f2', data='file2 data')\n with open('/tmp/f1') as f1:\n print(f1.read())\n f1.write('Other data')\n print(f1.read())\n print('----------------------')\n\n with open('/tmp/f2') as f2:\n print(f2.read())\n print('----------------------')\n\n open('/etc/hostname')\n\n**output:**\n\n::\n\n Some data\n Other data\n ----------------------\n file2 data\n ----------------------\n Traceback (most recent call last):\n ...\n FileNotFoundError: File /etc/hostname not found in mock function\n\nSet default behavior (for not registered paths) to return original file:\n\n.. code:: python\n\n from unittest.mock import patch, MagicMock\n from open_file_mock import MockOpen, DEFAULTS_ORIGINAL\n\n with patch('builtins.open', new_callable=MockOpen) as open_mock:\n open_mock.default_behavior = DEFAULTS_ORIGINAL\n open_mock.register_object_for_path(path='/tmp/f1', obj=MagicMock())\n with open('/tmp/f1') as f1:\n print(f1.read())\n print('----------------------')\n\n with open('/etc/hostname') as f2:\n print(f2.read())\n print('----------------------')\n\n**output:**\n\n::\n\n \n ----------------------\n myhost\n\n ----------------------\n\nSet default behavior to return new mock:\n\n.. code:: python\n\n from unittest.mock import patch\n from open_file_mock import MockOpen, DEFAULTS_MOCK\n\n with patch('builtins.open', new_callable=MockOpen) as open_mock:\n open_mock.default_behavior = DEFAULTS_MOCK\n open_mock.set_read_data_for('/tmp/f1', 'QWERTY')\n with open('/tmp/f1') as f1:\n print(f1.read())\n print('----------------------')\n\n with open('/etc/hostname') as f2:\n print(f2.read())\n print('----------------------')\n\n**output:**\n\n::\n\n QWERTY\n ----------------------\n \n ----------------------\n\nYoy can get registered object with *get\\_object\\_for\\_path* method:\n\n.. code:: python\n\n from unittest.mock import patch\n from open_file_mock import MockOpen\n\n\n class FileObject:\n def __init__(self, data):\n self.data = data\n\n def read(self, *args, **kwargs):\n return self.data\n\n def write(self, data, *args, **kwargs):\n self.data = data\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_val, exc_tb):\n pass\n\n\n with patch('builtins.open', new_callable=MockOpen) as open_mock:\n open_mock.register_object_for_path(path='/tmp/f1', obj=FileObject('Some data'))\n open_mock.set_read_data_for(path='/tmp/f2', data='file2 data')\n with open('/tmp/f1') as f1:\n print(f1.read())\n print('----------------------')\n\n print(open_mock.get_object_for_path('/tmp/f1'))\n\n**output:**\n\n::\n\n Some data\n ----------------------\n <__main__.FileObject object at ...>\n\nObject methods:\n~~~~~~~~~~~~~~~\n\n- **register\\_object\\_for\\_path(path, obj)** - allow to register new\n object for provided path. Can be used once for particular path\n- **update\\_object\\_for\\_path(path, obj)** - update registered path or\n create new mapping if not exists\n- **unregister\\_path(path)** - remove path mapping\n- **set\\_read\\_data\\_for(path, data)** - set data which will be\n returned of file read\n- **get\\_object\\_for\\_path(path)** - returns object registered for\n path. If mapping not exists, raises KeyError\n\n\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/PawelJ-PL/open-file-mock", "keywords": "Python mock open file", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "open-mock-file", "package_url": "https://pypi.org/project/open-mock-file/", "platform": "", "project_url": "https://pypi.org/project/open-mock-file/", "project_urls": { "Homepage": "https://github.com/PawelJ-PL/open-file-mock" }, "release_url": "https://pypi.org/project/open-mock-file/1.0.2/", "requires_dist": [ "coverage; extra == 'test'", "nose; extra == 'test'", "flake8; extra == 'test'" ], "requires_python": ">=3", "summary": "Smart object for mocking open file calls, depends on file path", "version": "1.0.2" }, "last_serial": 3529076, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "19bc9d15435a34258a368507c484fc52", "sha256": "a2efc19f94929e402239bae9225de9143b88638a6676a2ff353be2d8816e73eb" }, "downloads": -1, "filename": "open_mock_file-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "19bc9d15435a34258a368507c484fc52", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 7452, "upload_time": "2017-09-25T18:20:55", "url": "https://files.pythonhosted.org/packages/b0/00/285a18ba7619c7b6047d84fb26b169bfa1a43f3a432d3173133eac4ce8b6/open_mock_file-1.0.0-py3-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "60dafbdbaea90b2d9b695213e8a5680b", "sha256": "3e83fb294587085ae61b56c6cce97e2a964c7639eff066768bf6612e741095fe" }, "downloads": -1, "filename": "open_mock_file-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "60dafbdbaea90b2d9b695213e8a5680b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 7454, "upload_time": "2017-09-25T18:24:32", "url": "https://files.pythonhosted.org/packages/69/f8/301f3a94cb7b5bd97ea14a9fd602ee452ab230a0220b5dd7466382618710/open_mock_file-1.0.1-py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "b783f1bc2aae5af8bd90e4e389ab9ff0", "sha256": "a4a93afed8edc28a538a71d5f3576ca9c3a8eabe8692a50a68da7aa5749a0a99" }, "downloads": -1, "filename": "open_mock_file-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b783f1bc2aae5af8bd90e4e389ab9ff0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 7724, "upload_time": "2018-01-28T14:32:41", "url": "https://files.pythonhosted.org/packages/e2/37/8cd868aa067ee2a85fa092f3dd6d46d215f7b24e7f4709c94829ef361802/open_mock_file-1.0.2-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b783f1bc2aae5af8bd90e4e389ab9ff0", "sha256": "a4a93afed8edc28a538a71d5f3576ca9c3a8eabe8692a50a68da7aa5749a0a99" }, "downloads": -1, "filename": "open_mock_file-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b783f1bc2aae5af8bd90e4e389ab9ff0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 7724, "upload_time": "2018-01-28T14:32:41", "url": "https://files.pythonhosted.org/packages/e2/37/8cd868aa067ee2a85fa092f3dd6d46d215f7b24e7f4709c94829ef361802/open_mock_file-1.0.2-py3-none-any.whl" } ] }