1.1 --- a/importer.py Thu Oct 13 23:27:17 2016 +0200
1.2 +++ b/importer.py Fri Oct 14 18:34:14 2016 +0200
1.3 @@ -249,6 +249,35 @@
1.4 else:
1.5 return None
1.6
1.7 + # Convenience methods for deducing which kind of object provided an
1.8 + # attribute.
1.9 +
1.10 + def get_attribute_provider(self, ref, attrname):
1.11 +
1.12 + """
1.13 + Return the kind of provider of the attribute accessed via 'ref' using
1.14 + 'attrname'.
1.15 + """
1.16 +
1.17 + kind = ref.get_kind()
1.18 +
1.19 + if kind in ["<class>", "<module>"]:
1.20 + return kind
1.21 + else:
1.22 + return self.get_instance_attribute_provider(ref.get_origin(), attrname)
1.23 +
1.24 + def get_instance_attribute_provider(self, object_type, attrname):
1.25 +
1.26 + """
1.27 + Return the kind of provider of the attribute accessed via an instance of
1.28 + 'object_type' using 'attrname'.
1.29 + """
1.30 +
1.31 + if self.get_class_attribute(object_type, attrname):
1.32 + return "<class>"
1.33 + else:
1.34 + return "<instance>"
1.35 +
1.36 # Module management.
1.37
1.38 def queue_module(self, name, accessor, required=False):