def test_injector_delayed_del(): # interesting case -- if we still have an instance of injector hanging around # and then create a new one, activate it but then finally delete/gc old one # it would (currently) reset import back (because atm defined as class var) # which would ruin operation of the new injector orig__import__ = __builtin__.__import__ try: due = DueCreditCollector() inj = DueCreditInjector(collector=due) inj.activate(retrospect=False) assert __builtin__.__import__ is not orig__import__ assert inj._orig_import is not None inj.deactivate() assert __builtin__.__import__ is orig__import__ assert inj._orig_import is None # create 2nd one inj2 = DueCreditInjector(collector=due) inj2.activate(retrospect=False) assert __builtin__.__import__ is not orig__import__ assert inj2._orig_import is not None del inj inj = None gc.collect() # To cause __del__ assert __builtin__.__import__ is not orig__import__ # would fail if del had side-effect assert inj2._orig_import is not None inj2.deactivate() assert __builtin__.__import__ is orig__import__ import abc # and new imports work just fine finally: __builtin__.__import__ = orig__import__
def setup(self): lgr.log(5, "Setting up for a TestActiveInjector test") self._cleanup_modules() self.due = DueCreditCollector() self.injector = DueCreditInjector(collector=self.due) self.injector.activate( retrospect=False) # numpy might be already loaded...
def setup(self): """Not an EPA File, Skipping Doc.""" lgr.log(5, "Setting up for a TestActiveInjector test") self._cleanup_modules() self.due = DueCreditCollector() self.injector = DueCreditInjector(collector=self.due) self.injector.activate(retrospect=False)
def test_cover_our_injections(): """This one tests only import/syntax/api for the injections.""" due = DueCreditCollector() inj = DueCreditInjector(collector=due) for modname in get_modules_for_injection(): mod = __import__('duecredit.injections.' + modname, fromlist=["duecredit.injections"]) mod.inject(inj)
def test_no_double_activation(): orig__import__ = __builtin__.__import__ try: due = DueCreditCollector() injector = DueCreditInjector(collector=due) injector.activate() assert __builtin__.__import__ is not orig__import__ duecredited__import__ = __builtin__.__import__ # TODO: catch/analyze/swallow warning injector.activate() assert __builtin__.__import__ is duecredited__import__ # we didn't decorate again finally: injector.deactivate() __builtin__.__import__ = orig__import__
def test_no_double_activation(): """Not an EPA File, Skipping Doc.""" orig__import__ = __builtin__.__import__ try: due = DueCreditCollector() injector = DueCreditInjector(collector=due) injector.activate() assert __builtin__.__import__ is not orig__import__ duecredited__import__ = __builtin__.__import__ # TODO: catch/analyze/swallow warning injector.activate() assert __builtin__.__import__ is duecredited__import__ # We did not decorate again. finally: injector.deactivate() __builtin__.__import__ = orig__import__
def test_injector_del(): orig__import__ = __builtin__.__import__ try: due = DueCreditCollector() inj = DueCreditInjector(collector=due) del inj # delete inactive assert __builtin__.__import__ is orig__import__ inj = DueCreditInjector(collector=due) inj.activate(retrospect=False) assert __builtin__.__import__ is not orig__import__ assert inj._orig_import is not None del inj # delete active but not used inj = None __builtin__.__import__ = None # We need to do that since otherwise gc will not pick up inj gc.collect() # To cause __del__ assert __builtin__.__import__ is orig__import__ import abc # and new imports work just fine finally: __builtin__.__import__ = orig__import__
def _get_active_due(): from .config import CACHE_DIR, DUECREDIT_FILE from duecredit.collector import CollectorSummary, DueCreditCollector from .io import load_due # TODO: this needs to move to atexit handling, that we load previous # one and them merge with new ones. Informative bits could be -- how # many new citations we got if os.path.exists(DUECREDIT_FILE): try: due_ = load_due(DUECREDIT_FILE) except Exception as e: lgr.warning("Failed to load previously collected %s. " "DueCredit will not be active for this session." % DUECREDIT_FILE) return _get_inactive_due() else: due_ = DueCreditCollector() return due_
def test_api(): yield _test_api, DueCreditCollector() yield _test_api, InactiveDueCreditCollector()
def setup(self): self._cleanup_modules() self.due = DueCreditCollector() self.injector = DueCreditInjector(collector=self.due) self.injector.activate( retrospect=False) # numpy might be already loaded...