Find object accesses A parser which inherits from the FunctionParser to find object accesses.
| 406 | |
| 407 | |
| 408 | class ObjectAccessParser(FunctionParser): |
| 409 | """Find object accesses |
| 410 | |
| 411 | A parser which inherits from the FunctionParser to find object accesses. |
| 412 | """ |
| 413 | |
| 414 | def __init__(self): |
| 415 | super().__init__() |
| 416 | self.out = [] |
| 417 | |
| 418 | def visit_Call(self, node): |
| 419 | for arg in node.args: |
| 420 | self.visit(arg) |
| 421 | |
| 422 | for key in node.keywords: |
| 423 | self.visit(key.value) |
| 424 | |
| 425 | def visit_List(self, node): |
| 426 | for el in node.elts: |
| 427 | self.visit(el) |
| 428 | |
| 429 | def visit_Tuple(self, node): |
| 430 | for el in node.elts: |
| 431 | self.visit(el) |
| 432 | |
| 433 | def visit_Attribute(self, node): |
| 434 | # if already a chain, prepend, else initialize self.current |
| 435 | self.gen_name = node.attr + "." + self.gen_name if self.gen_name else node.attr |
| 436 | self.raw_name = node.attr + "." + self.raw_name if self.raw_name else node.attr |
| 437 | self.visit(node.value) |
| 438 | |
| 439 | def visit_Name(self, node): |
| 440 | # if name refers to an import, replace |
| 441 | prefix = self.mappings.get(node.id) or node.id |
| 442 | |
| 443 | self.gen_name = prefix + "." + self.gen_name if self.gen_name else prefix |
| 444 | self.raw_name = node.id + "." + self.raw_name if self.raw_name else node.id |
| 445 | |
| 446 | self.out.append(self.gen_name) |
| 447 | self.gen_name = self.raw_name = "" |
| 448 | |
| 449 | |
| 450 | class ObjectAssignmentParser(Parser): |
no outgoing calls