diff --git a/robottelo/hosts.py b/robottelo/hosts.py index 1a61fdf1a9a..d54cdf21386 100644 --- a/robottelo/hosts.py +++ b/robottelo/hosts.py @@ -1698,6 +1698,18 @@ def __init__(self, hostname=None, **kwargs): self._api = type('api', (), {'_configured': False}) self._cli = type('cli', (), {'_configured': False}) + def _swap_nailgun(self, new_version): + """Install a different version of nailgun from GitHub and invalidate the module cache.""" + import sys + + from pip._internal import main as pip_main + + pip_main(['uninstall', '-y', 'nailgun']) + pip_main(['install', f'https://github.com/SatelliteQE/nailgun/archive/{new_version}.zip']) + self._api = type('api', (), {'_configured': False}) + to_clear = [k for k in sys.modules.keys() if 'nailgun' in k] + [sys.modules.pop(k) for k in to_clear] + @property def api(self): """Import all nailgun entities and wrap them under self.api""" @@ -1705,7 +1717,7 @@ def api(self): self._api = type('api', (), {'_configured': False}) if self._api._configured: return self._api - + from nailgun import entities as _entities # use a private import from nailgun.config import ServerConfig from nailgun.entity_mixins import Entity @@ -1725,7 +1737,7 @@ class DecClass(cls): verify=settings.server.verify_ca, ) # add each nailgun entity to self.api, injecting our server config - for name, obj in entities.__dict__.items(): + for name, obj in _entities.__dict__.items(): try: if Entity in obj.mro(): # create a copy of the class and inject our server config into the __init__