def _get_default_var(self, node, args): if "default" in args.namedargs and "default_factory" in args.namedargs: # The pyi signatures should prevent this; check left in for safety. raise function.DuplicateKeyword(self.signatures[0].signature, args, self.vm, "default") elif "default" in args.namedargs: default_var = args.namedargs["default"] elif "default_factory" in args.namedargs: factory_var = args.namedargs["default_factory"] factory, = factory_var.data f_args = function.Args(posargs=()) node, default_var = factory.call(node, factory_var.bindings[0], f_args) else: default_var = None return node, default_var
def _get_default_var(self, node, args): if "default" in args.namedargs and "factory" in args.namedargs: # attr.ib(factory=x) is syntactic sugar for attr.ib(default=Factory(x)). raise function.DuplicateKeyword(self.signatures[0].signature, args, self.vm, "default") elif "default" in args.namedargs: default_var = args.namedargs["default"] elif "factory" in args.namedargs: mod = self.vm.import_module("attr", "attr", 0) node, attr = self.vm.attribute_handler.get_attribute(node, mod, "Factory") # We know there is only one value because Factory is in the overlay. factory, = attr.data factory_args = function.Args(posargs=(args.namedargs["factory"],)) node, default_var = factory.call(node, attr.bindings[0], factory_args) else: default_var = None return node, default_var