def visit_Assign(self, node):
        """Looking for 'p1 = self.config.get("param1", "default1")'

        This is the canonical form of getting test case parameters in a test
        implementation. This ends up with an AST looking like:

            Assign(targets=[Name(id='p1', ctx=Store())],
            value=Call(func=Attribute(value=Attribute(value=Name(id='self',
            ctx=Load()), attr='config', ctx=Load()), attr='get', ctx=Load()),
            args=[Str(s='param1'), Str(s='default1')], keywords=[], starargs=None, kwargs=None))
        """
        if isinstance(node.value, ast.Call) and isinstance(node.value.func, ast.Attribute):
            try:
                if (node.value.func.value.value.id == "self" and
                        node.value.func.value.attr == "config" and
                        node.value.func.attr == "get"):
                    lhs = node.targets[0].id
                    param = node.value.args[0].s
                    default = node.value.args[1].s
                    if self._currentclass is not None:
                        self._classes.setdefault(self._currentclass, []).append( (lhs, param, default) )
                    else:
                        raise ValueError("Didn't see class before config get")
            except __HOLE__:
                return
dataset/ETHPy150Open kdart/pycopia/QA/pycopia/QA/testinspector.py/TestmoduleVisitor.visit_Assign