|
1 | 1 | import sys
|
| 2 | +from abc import ABC |
2 | 3 | from datetime import datetime
|
3 | 4 | from pathlib import Path
|
| 5 | +from unittest.mock import MagicMock, patch |
4 | 6 |
|
5 | 7 |
|
6 | 8 | try:
|
|
9 | 11 | from importlib_metadata import metadata
|
10 | 12 |
|
11 | 13 |
|
| 14 | +def mock_rpy2(): |
| 15 | + # Can’t use autodoc_mock_imports as we import anndata2ri |
| 16 | + patch('rpy2.situation.get_r_home', lambda: None).start() |
| 17 | + sys.modules['rpy2.rinterface_lib'] = MagicMock() |
| 18 | + submods = ['embedded', 'conversion', 'memorymanagement', 'sexp', 'bufferprotocol', 'callbacks', '_rinterface_capi'] |
| 19 | + sys.modules.update({f'rpy2.rinterface_lib.{sub}': MagicMock() for sub in submods}) |
| 20 | + sexp = sys.modules['rpy2.rinterface_lib'].sexp = sys.modules['rpy2.rinterface_lib.sexp'] |
| 21 | + sexp.Sexp = type('Sexp', (MagicMock, ABC), dict(__module__='rpy2.rinterface_lib.sexp')) |
| 22 | + sexp.SexpEnvironment = type('SexpEnvironment', (sexp.Sexp,), dict(__module__='rpy2.rinterface_lib.sexp')) |
| 23 | + sexp.SexpVector = sexp.StrSexpVector = MagicMock |
| 24 | + sexp.SexpVector.from_iterable = MagicMock() |
| 25 | + |
| 26 | + import rpy2.rinterface |
| 27 | + import rpy2.rinterface_lib.sexp |
| 28 | + |
| 29 | + rpy2.rinterface_lib = sys.modules['rpy2.rinterface_lib'] |
| 30 | + rpy2.rinterface._MissingArgType = object |
| 31 | + rpy2.rinterface.initr_simple = lambda *_, **__: None |
| 32 | + |
| 33 | + assert rpy2.rinterface_lib.sexp is sexp |
| 34 | + |
| 35 | + |
12 | 36 | HERE = Path(__file__).parent
|
13 | 37 |
|
| 38 | +mock_rpy2() |
| 39 | + |
| 40 | +# now we can anndata2ri and our extensions |
14 | 41 | sys.path[:0] = [str(HERE.parent), str(HERE / 'ext')]
|
15 | 42 |
|
16 | 43 |
|
|
0 commit comments