Show More
@@ -184,8 +184,10 b" def getsource(obj, oname='') -> Union[str,None]:" | |||||
184 | # its class definition instead. |
|
184 | # its class definition instead. | |
185 | try: |
|
185 | try: | |
186 | src = inspect.getsource(obj.__class__) |
|
186 | src = inspect.getsource(obj.__class__) | |
187 | except TypeError: |
|
187 | except (OSError, TypeError): | |
188 | return None |
|
188 | return None | |
|
189 | except OSError: | |||
|
190 | return None | |||
189 |
|
191 | |||
190 | return src |
|
192 | return src | |
191 |
|
193 | |||
@@ -315,8 +317,9 b' def find_file(obj) -> str:' | |||||
315 | except (OSError, TypeError): |
|
317 | except (OSError, TypeError): | |
316 | # Can happen for builtins |
|
318 | # Can happen for builtins | |
317 | pass |
|
319 | pass | |
318 | except: |
|
320 | except OSError: | |
319 | pass |
|
321 | pass | |
|
322 | ||||
320 | return cast_unicode(fname) |
|
323 | return cast_unicode(fname) | |
321 |
|
324 | |||
322 |
|
325 | |||
@@ -339,12 +342,14 b' def find_source_lines(obj):' | |||||
339 | obj = _get_wrapped(obj) |
|
342 | obj = _get_wrapped(obj) | |
340 |
|
343 | |||
341 | try: |
|
344 | try: | |
|
345 | lineno = inspect.getsourcelines(obj)[1] | |||
|
346 | except TypeError: | |||
|
347 | # For instances, try the class object like getsource() does | |||
342 | try: |
|
348 | try: | |
343 | lineno = inspect.getsourcelines(obj)[1] |
|
|||
344 | except TypeError: |
|
|||
345 | # For instances, try the class object like getsource() does |
|
|||
346 | lineno = inspect.getsourcelines(obj.__class__)[1] |
|
349 | lineno = inspect.getsourcelines(obj.__class__)[1] | |
347 | except: |
|
350 | except (OSError, TypeError): | |
|
351 | return None | |||
|
352 | except OSError: | |||
348 | return None |
|
353 | return None | |
349 |
|
354 | |||
350 | return lineno |
|
355 | return lineno |
@@ -6,8 +6,11 b'' | |||||
6 |
|
6 | |||
7 |
|
7 | |||
8 | from inspect import signature, Signature, Parameter |
|
8 | from inspect import signature, Signature, Parameter | |
|
9 | import inspect | |||
9 | import os |
|
10 | import os | |
|
11 | import pytest | |||
10 | import re |
|
12 | import re | |
|
13 | import sys | |||
11 |
|
14 | |||
12 | from .. import oinspect |
|
15 | from .. import oinspect | |
13 |
|
16 | |||
@@ -28,6 +31,10 b' def setup_module():' | |||||
28 | inspector = oinspect.Inspector() |
|
31 | inspector = oinspect.Inspector() | |
29 |
|
32 | |||
30 |
|
33 | |||
|
34 | class SourceModuleMainTest: | |||
|
35 | __module__ = "__main__" | |||
|
36 | ||||
|
37 | ||||
31 | #----------------------------------------------------------------------------- |
|
38 | #----------------------------------------------------------------------------- | |
32 | # Local utilities |
|
39 | # Local utilities | |
33 | #----------------------------------------------------------------------------- |
|
40 | #----------------------------------------------------------------------------- | |
@@ -36,15 +43,28 b' def setup_module():' | |||||
36 | # defined, if any code is inserted above, the following line will need to be |
|
43 | # defined, if any code is inserted above, the following line will need to be | |
37 | # updated. Do NOT insert any whitespace between the next line and the function |
|
44 | # updated. Do NOT insert any whitespace between the next line and the function | |
38 | # definition below. |
|
45 | # definition below. | |
39 |
THIS_LINE_NUMBER = |
|
46 | THIS_LINE_NUMBER = 46 # Put here the actual number of this line | |
|
47 | ||||
|
48 | ||||
|
49 | def test_find_source_lines(): | |||
|
50 | assert oinspect.find_source_lines(test_find_source_lines) == THIS_LINE_NUMBER + 3 | |||
|
51 | assert oinspect.find_source_lines(type) is None | |||
|
52 | assert oinspect.find_source_lines(SourceModuleMainTest) is None | |||
|
53 | assert oinspect.find_source_lines(SourceModuleMainTest()) is None | |||
|
54 | ||||
40 |
|
55 | |||
41 | from unittest import TestCase |
|
56 | def test_getsource(): | |
|
57 | assert oinspect.getsource(type) is None | |||
|
58 | assert oinspect.getsource(SourceModuleMainTest) is None | |||
|
59 | assert oinspect.getsource(SourceModuleMainTest()) is None | |||
42 |
|
60 | |||
43 | class Test(TestCase): |
|
|||
44 |
|
61 | |||
45 | def test_find_source_lines(self): |
|
62 | def test_inspect_getfile_raises_exception(): | |
46 | self.assertEqual(oinspect.find_source_lines(Test.test_find_source_lines), |
|
63 | """Check oinspect.find_file/getsource/find_source_lines expectations""" | |
47 | THIS_LINE_NUMBER+6) |
|
64 | with pytest.raises(TypeError): | |
|
65 | inspect.getfile(type) | |||
|
66 | with pytest.raises(OSError if sys.version_info >= (3, 10) else TypeError): | |||
|
67 | inspect.getfile(SourceModuleMainTest) | |||
48 |
|
68 | |||
49 |
|
69 | |||
50 | # A couple of utilities to ensure these tests work the same from a source or a |
|
70 | # A couple of utilities to ensure these tests work the same from a source or a | |
@@ -59,6 +79,9 b' def match_pyfiles(f1, f2):' | |||||
59 |
|
79 | |||
60 | def test_find_file(): |
|
80 | def test_find_file(): | |
61 | match_pyfiles(oinspect.find_file(test_find_file), os.path.abspath(__file__)) |
|
81 | match_pyfiles(oinspect.find_file(test_find_file), os.path.abspath(__file__)) | |
|
82 | assert oinspect.find_file(type) is None | |||
|
83 | assert oinspect.find_file(SourceModuleMainTest) is None | |||
|
84 | assert oinspect.find_file(SourceModuleMainTest()) is None | |||
62 |
|
85 | |||
63 |
|
86 | |||
64 | def test_find_file_decorated1(): |
|
87 | def test_find_file_decorated1(): |
General Comments 0
You need to be logged in to leave comments.
Login now