Metadata-Version: 2.1
Name: pytest_object_getter
Version: 1.0.0
Summary: Import any object from a 3rd party module while mocking its namespace on demand.
Home-page: https://github.com/boromir674/pytest-object-getter
Download-URL: https://github.com/boromir674/pytest-object-getter/archive/v1.0.0.tar.gz
Author: Konstantinos Lampridis
Author-email: k.lampridis@hotmail.com
Maintainer: Konstantinos Lampridis
Maintainer-email: k.lampridis@hotmail.com
License: AGPLv3
Project-URL: Documentation, https://pytest-object-getter.readthedocs.io/
Project-URL: Bug Tracker, https://github.com//pytest-object-getter/issues
Project-URL: Source Code, https://github.com/boromir674/pytest-object-getter
Keywords: python library
Platform: All
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: End Users/Desktop
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Natural Language :: English
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Software Distribution
Classifier: Typing :: Typed
Requires-Python: >3.6
Description-Content-Type: text/x-rst
Provides-Extra: docs
Provides-Extra: test
Provides-Extra: typing
License-File: LICENSE

PYTEST OBJECT GETTER

Project entirely generated using Generator https://github.com/boromir674/cookiecutter-python-package/

.. start-badges

| |build| |docs| |coverage| |maintainability| |better_code_hub| |tech-debt|
| |release_version| |wheel| |supported_versions| |gh-lic| |commits_since_specific_tag_on_master| |commits_since_latest_github_release|

|
| **Code:** https://github.com/boromir674/pytest-object-getter
| **Docs:** https://pytest-object-getter.readthedocs.io/en/master/
| **PyPI:** https://pypi.org/project/pytest-object-getter/
| **CI:** https://github.com/boromir674/pytest-object-getter/actions/


Features
========

1. **pytest_object_getter** `python package`

   a. Dynamically import an object from a module
   b. Optionally mock any object that is present in the module's namespace
   c. Construct the mock object at runtime
2. Tested against multiple `platforms` and `python` versions


Development
-----------
Here are some useful notes related to doing development on this project.

1. **Test Suite**, using `pytest`_, located in `tests` dir
2. **Parallel Execution** of Unit Tests, on multiple cpu's
3. **Documentation Pages**, hosted on `readthedocs` server, located in `docs` dir
4. **Automation**, using `tox`_, driven by single `tox.ini` file

   a. **Code Coverage** measuring
   b. **Build Command**, using the `build`_ python package
   c. **Pypi Deploy Command**, supporting upload to both `pypi.org`_ and `test.pypi.org`_ servers
   d. **Type Check Command**, using `mypy`_
   e. **Lint** *Check* and `Apply` commands, using `isort`_ and `black`_
5. **CI Pipeline**, running on `Github Actions`_, defined in `.github/`

   a. **Job Matrix**, spanning different `platform`'s and `python version`'s

      1. Platforms: `ubuntu-latest`, `macos-latest`
      2. Python Interpreters: `3.6`, `3.7`, `3.8`, `3.9`, `3.10`
   b. **Parallel Job** execution, generated from the `matrix`, that runs the `Test Suite`


Prerequisites
=============

You need to have `Python` installed.

Quickstart
==========

Using `pip` is the approved way for installing `pytest_object_getter`.

.. code-block:: sh

    python3 -m pip install pytest_object_getter

Let's see how to write a test and use the 'get_object' fixture to mock
the `requests.get` method to avoid actual network communication:

.. code-block:: shell

    python3 -m pip install ask-pypi

.. code-block:: python

    import pytest

    @pytest.fixture
    def mock_response():
        def init(self, package_name: str):
            self.status_code = 200 if package_name == 'existing-package' else 404
        return type('MockResponse', (), {
            '__init__': init
        })

    @pytest.fixture
    def create_mock_requests(mock_response):
        def _create_mock_requests():
            def mock_get(*args, **kwargs):
                package_name = args[0].split('/')[-1]
                return mock_response(package_name)
            return type('MockRequests', (), {
                'get': mock_get,
            })
        return _create_mock_requests

    def test_fixture(get_object, create_mock_requests):

        from ask_pypi import is_pypi_project

        assert is_pypi_project('numpy') == True
        assert is_pypi_project('pandas') == True
        assert is_pypi_project('existing-package') == False

        get_object('is_project', 'ask_pypi.pypi_project',
            overrides={'requests': lambda: create_mock_requests()})

        assert is_pypi_project('existing-package') == True

        assert is_pypi_project('numpy') == False
        assert is_pypi_project('pandas') == False
        assert is_pypi_project('so-magic') == False


License
=======

|gh-lic|

* `GNU Affero General Public License v3.0`_


License
=======

* Free software: GNU Affero General Public License v3.0



.. LINKS

.. _tox: https://tox.wiki/en/latest/

.. _pytest: https://docs.pytest.org/en/7.1.x/

.. _build: https://github.com/pypa/build

.. _pypi.org: https://pypi.org/

.. _test.pypi.org: https://test.pypi.org/

.. _mypy: https://mypy.readthedocs.io/en/stable/

.. _isort: https://pycqa.github.io/isort/

.. _black: https://black.readthedocs.io/en/stable/

.. _Github Actions: https://github.com/boromir674/pytest-object-getter/actions

.. _GNU Affero General Public License v3.0: https://github.com/boromir674/pytest-object-getter/blob/master/LICENSE


.. BADGE ALIASES

.. Build Status
.. Github Actions: Test Workflow Status for specific branch <branch>

.. |build| image:: https://img.shields.io/github/workflow/status/boromir674/pytest-object-getter/Test%20Python%20Package/master?label=build&logo=github-actions&logoColor=%233392FF
    :alt: GitHub Workflow Status (branch)
    :target: https://github.com/boromir674/pytest-object-getter/actions/workflows/test.yaml?query=branch%3Amaster


.. Documentation

.. |docs| image:: https://img.shields.io/readthedocs/pytest-object-getter/master?logo=readthedocs&logoColor=lightblue
    :alt: Read the Docs (version)
    :target: https://pytest-object-getter.readthedocs.io/en/master/

.. Code Coverage

.. |coverage| image:: https://img.shields.io/codecov/c/github/boromir674/pytest-object-getter/master?logo=codecov
    :alt: Codecov
    :target: https://app.codecov.io/gh/boromir674/pytest-object-getter

.. PyPI

.. |release_version| image:: https://img.shields.io/pypi/v/pytest_object_getter
    :alt: Production Version
    :target: https://pypi.org/project/pytest_object_getter/

.. |wheel| image:: https://img.shields.io/pypi/wheel/pytest-object-getter?color=green&label=wheel
    :alt: PyPI - Wheel
    :target: https://pypi.org/project/pytest_object_getter

.. |supported_versions| image:: https://img.shields.io/pypi/pyversions/pytest-object-getter?color=blue&label=python&logo=python&logoColor=%23ccccff
    :alt: Supported Python versions
    :target: https://pypi.org/project/pytest_object_getter

.. Github Releases & Tags

.. |commits_since_specific_tag_on_master| image:: https://img.shields.io/github/commits-since/boromir674/pytest-object-getter/v1.0.0/master?color=blue&logo=github
    :alt: GitHub commits since tagged version (branch)
    :target: https://github.com/boromir674/pytest-object-getter/compare/v1.0.0..master

.. |commits_since_latest_github_release| image:: https://img.shields.io/github/commits-since/boromir674/pytest-object-getter/latest?color=blue&logo=semver&sort=semver
    :alt: GitHub commits since latest release (by SemVer)

.. LICENSE (eg AGPL, MIT)
.. Github License

.. |gh-lic| image:: https://img.shields.io/github/license/boromir674/pytest-object-getter
    :alt: GitHub
    :target: https://github.com/boromir674/pytest-object-getter/blob/master/LICENSE


.. CODE QUALITY

.. Better Code Hub
.. Software Design Patterns

.. |better_code_hub| image:: https://bettercodehub.com/edge/badge/boromir674/pytest-object-getter?branch=master
    :alt: Better Code Hub
    :target: https://bettercodehub.com/


.. Code Climate CI
.. Code maintainability & Technical Debt

.. |maintainability| image:: https://img.shields.io/codeclimate/maintainability/boromir674/pytest-object-getter
    :alt: Code Climate Maintainability
    :target: https://codeclimate.com/github/boromir674/pytest-object-getter/maintainability

.. |tech-debt| image:: https://img.shields.io/codeclimate/tech-debt/boromir674/pytest-object-getter
    :alt: Technical Debt
    :target: https://codeclimate.com/github/boromir674/pytest-object-getter/maintainability
