avocado.core.safeloader package¶
Submodules¶
avocado.core.safeloader.core module¶
- exception avocado.core.safeloader.core.ClassNotSuitable¶
Bases:
Exception
Exception raised when examination of a class should not proceed.
- avocado.core.safeloader.core.find_avocado_tests(path)¶
- avocado.core.safeloader.core.find_python_tests(target_module, target_class, determine_match, path)¶
Attempts to find Python tests from source files
A Python test in this context is a method within a specific type of class (or that inherits from a specific class).
- Parameters
target_module (str) – the name of the module from which a class should have come from. When attempting to find a Python unittest, the target_module will most probably be “unittest”, as per the standard library module name. When attempting to find Avocado tests, the target_module will most probably be “avocado”.
target_class (str) – the name of the class that is considered to contain test methods. When attempting to find Python unittests, the target_class will most probably be “TestCase”. When attempting to find Avocado tests, the target_class will most probably be “Test”.
path (str) – path to a Python source code file
- Returns
tuple where first item is dict with class name and additional info such as method names and tags; the second item is set of class names which look like Python tests but have been forcefully disabled.
- Return type
- avocado.core.safeloader.core.find_python_unittests(path)¶
- avocado.core.safeloader.core.get_methods_info(statement_body, class_tags, class_dependencies)¶
Returns information on test methods.
- Parameters
statement_body – the body of a “class” statement
class_tags – the tags at the class level, to be combined with the tags at the method level.
class_dependencies – the dependencies at the class level, to be combined with the dependencies at the method level.
avocado.core.safeloader.docstring module¶
- avocado.core.safeloader.docstring.DOCSTRING_DIRECTIVE_RE_RAW = '\\s*:avocado:[ \\t]+(([a-zA-Z0-9]+?[a-zA-Z0-9_:,\\=\\-\\.]*)|(dependency={.*}))\\s*$'¶
Gets the docstring directive value from a string. Used to tweak test behavior in various ways
- avocado.core.safeloader.docstring.check_docstring_directive(docstring, directive)¶
Checks if there’s a given directive in a given docstring
- Return type
- avocado.core.safeloader.docstring.get_docstring_directives(docstring)¶
Returns the values of the avocado docstring directives
- Parameters
docstring (str) – the complete text used as documentation
- Return type
builtin.list
- avocado.core.safeloader.docstring.get_docstring_directives_dependencies(docstring)¶
Returns the test dependencies from docstring patterns like :avocado: dependencies={}.
- Return type
avocado.core.safeloader.imported module¶
- class avocado.core.safeloader.imported.ImportedSymbol(module_path, symbol='', importer_fs_path=None, module_alias='', symbol_alias='')¶
Bases:
object
A representation of an importable symbol.
Attributes:
module_path : str symbol : str importer_fs_path: str or None
- classmethod from_statement(statement, importer_fs_path=None, index=0)¶
- get_importable_spec(symbol_is_module=False)¶
Returns the specification of an actual importable module.
This is a check based on the limitations that we do not actually perform an import, and assumes a directory structure with modules.
- Parameters
symbol_is_module (bool) – if it’s known that the symbol is also a module, include it in the search for an importable spec
- static get_module_path_from_statement(statement)¶
- get_parent_fs_path()¶
- get_relative_module_fs_path()¶
Returns the module base dir, based on its relative path
The base dir for the module is the directory where one is expected to find the first module of the module path. For a module path of “..foo.bar”, and its importer being at “/abs/path/test.py”, the base dir where “foo” is supposed to be found would be “/abs”. And as a consequence, “bar” would be found at “/abs/foo/bar”.
This assumes that the module path is indeed related to the location of its importer. This may not be true if the namespaces match, but are distributed across different filesystem paths.
- static get_symbol_from_statement(statement)¶
- static get_symbol_module_path_from_statement(statement, name_index=0)¶
- importer_fs_path¶
The full, absolute filesystem path of the module importing this symbol. This is used for relative path calculations, but it’s limited to relative modules that also share the filesystem location. An example is “/path/to/mytest.py”, that can contain:
from .base import BaseTestClass
And thus will have a symbol of “BaseTestClass” and the module as “.base”. The relative filesystem path of the module (which should contain the symbol) will be “/path/to”.
And if “/path/to/common/test.py” contains:
from ..base import BaseTestClass
The relative filesystem path of the module (which should contain the symbol) will be “/path/to”.
- is_importable(symbol_is_module=False)¶
Checks whether this imported symbol seems to be importable.
This is a check based on the limitations that we do not actually perform an import, and assumes a directory structure with modules.
- Parameters
symbol_is_module (bool) – if it’s known that the symbol is also a module, include it in the search for an importable spec
- is_relative()¶
Returns whether the imported symbol is on a relative path.
- module_alias¶
An optional alias for the module, such as when a “import os as operating_system” statement is given.
- property module_name¶
The final name of the module from its importer perspective.
If a alias exists, it will be the alias name. If not, it will be the original name.
- module_path¶
Path from where the symbol was imported. On a statement such as “import os”, module_path is “os” and there’s no symbol. On a statement such as from unittest.mock import mock_open”, the module_path is “unittest.mock”. On a statement such as “from ..foo import bar”, module_path is “..foo” (relative).
- symbol¶
The name of the imported symbol. On a statement such as “import os”, there’s no symbol. On a statement such as “from unittest import mock””, the symbol is “mock” (even though it may actually also be a module, but it’s impossible to know for sure). On a statement such as “from unittest.mock import mock_open”, symbol is “mock_open”.
- symbol_alias¶
An optional alias the symbol, such as when a “from os import path as os_path” is given
- property symbol_name¶
The final name of the symbol from its importer perspective.
If a alias exists, it will be the alias name. If not, it will be the original name.
- to_str()¶
Returns a string representation of the plausible statement used.
avocado.core.safeloader.module module¶
- class avocado.core.safeloader.module.PythonModule(path, module='avocado', klass='Test')¶
Bases:
object
Representation of a Python module that might contain interesting classes
By default, it uses module and class names that matches Avocado instrumented tests, but it’s supposed to be agnostic enough to be used for, say, Python unittests.
Instantiates a new PythonModule representation
- Parameters
- add_imported_symbol(statement)¶
Keeps track of symbol names and importable entities
- imported_symbols¶
- interesting_klass_found¶
- is_matching_klass(klass)¶
Detect whether given class directly defines itself as <module>.<klass>
It can either be a <klass> that inherits from a test “symbol”, like:
`class FooTest(Test)`
Or from an <module>.<klass> symbol, like in:
`class FooTest(avocado.Test)`
- Return type
- iter_classes(interesting_klass=None)¶
Iterate through classes and keep track of imported avocado statements
- klass¶
- klass_imports¶
- mod¶
- mod_imports¶
- module¶
- path¶
avocado.core.safeloader.utils module¶
- avocado.core.safeloader.utils.get_statement_import_as(statement)¶
Returns a mapping of imported module names whether using aliases or not
- Parameters
statement (ast.Import) – an AST import statement
- Returns
a mapping of names {<realname>: <alias>} of modules imported
- Return type
Module contents¶
Safe (AST based) test loader module utilities
- avocado.core.safeloader.find_avocado_tests(path)¶
- avocado.core.safeloader.find_python_unittests(path)¶