diff options
| author | Claudiu Popa <pcmanticore@gmail.com> | 2019-01-18 18:30:53 +0100 |
|---|---|---|
| committer | Claudiu Popa <pcmanticore@gmail.com> | 2019-01-18 18:30:53 +0100 |
| commit | f6dc0f45045b70b1487f94c5cc8beba22e31695f (patch) | |
| tree | 9bdc075de07fd634e871314220c7ace07651b8c5 /astroid/interpreter | |
| parent | 7eaf1bee72d9181b32a198085b41e8317d33b9eb (diff) | |
| download | astroid-git-f6dc0f45045b70b1487f94c5cc8beba22e31695f.tar.gz | |
Use a different prefix for the object model methods
`py` is a bit confusing, instead a new constant is used.
Diffstat (limited to 'astroid/interpreter')
| -rw-r--r-- | astroid/interpreter/objectmodel.py | 176 |
1 files changed, 87 insertions, 89 deletions
diff --git a/astroid/interpreter/objectmodel.py b/astroid/interpreter/objectmodel.py index 746f6ba6..918cb06d 100644 --- a/astroid/interpreter/objectmodel.py +++ b/astroid/interpreter/objectmodel.py @@ -38,6 +38,9 @@ from astroid import exceptions from astroid import node_classes +IMPL_PREFIX = "attr_" + + def _dunder_dict(instance, attributes): obj = node_classes.Dict(parent=instance) @@ -98,7 +101,9 @@ class ObjectModel: @lru_cache(maxsize=None) def attributes(self): """Get the attributes which are exported by this object model.""" - return [obj[2:] for obj in dir(self) if obj.startswith("py")] + return [ + obj[len(IMPL_PREFIX) :] for obj in dir(self) if obj.startswith(IMPL_PREFIX) + ] def lookup(self, name): """Look up the given *name* in the current model @@ -108,7 +113,7 @@ class ObjectModel: """ if name in self.attributes(): - return getattr(self, "py" + name) + return getattr(self, IMPL_PREFIX + name) raise exceptions.AttributeInferenceError(target=self._instance, attribute=name) @@ -118,16 +123,11 @@ class ModuleModel(ObjectModel): return builtins_ast_module.special_attributes.lookup("__dict__") @property - def pybuiltins(self): + def attr_builtins(self): return self._builtins() - # __path__ is a standard attribute on *packages* not - # non-package modules. The only mention of it in the - # official 2.7 documentation I can find is in the - # tutorial. - @property - def py__path__(self): + def attr___path__(self): if not self._instance.package: raise exceptions.AttributeInferenceError( target=self._instance, attribute="__path__" @@ -149,25 +149,23 @@ class ModuleModel(ObjectModel): return container @property - def py__name__(self): + def attr___name__(self): return node_classes.Const(value=self._instance.name, parent=self._instance) @property - def py__doc__(self): + def attr___doc__(self): return node_classes.Const(value=self._instance.doc, parent=self._instance) @property - def py__file__(self): + def attr___file__(self): return node_classes.Const(value=self._instance.file, parent=self._instance) @property - def py__dict__(self): + def attr___dict__(self): return _dunder_dict(self._instance, self._instance.globals) - # __package__ isn't mentioned anywhere outside a PEP: - # https://www.python.org/dev/peps/pep-0366/ @property - def py__package__(self): + def attr___package__(self): if not self._instance.package: value = "" else: @@ -180,36 +178,36 @@ class ModuleModel(ObjectModel): # https://docs.python.org/3/reference/import.html#import-related-module-attributes @property - def py__spec__(self): + def attr___spec__(self): # No handling for now. return node_classes.Unknown() @property - def py__loader__(self): + def attr___loader__(self): # No handling for now. return node_classes.Unknown() @property - def py__cached__(self): + def attr___cached__(self): # No handling for now. return node_classes.Unknown() class FunctionModel(ObjectModel): @property - def py__name__(self): + def attr___name__(self): return node_classes.Const(value=self._instance.name, parent=self._instance) @property - def py__doc__(self): + def attr___doc__(self): return node_classes.Const(value=self._instance.doc, parent=self._instance) @property - def py__qualname__(self): + def attr___qualname__(self): return node_classes.Const(value=self._instance.qname(), parent=self._instance) @property - def py__defaults__(self): + def attr___defaults__(self): func = self._instance if not func.args.defaults: return node_classes.Const(value=None, parent=func) @@ -219,7 +217,7 @@ class FunctionModel(ObjectModel): return defaults_obj @property - def py__annotations__(self): + def attr___annotations__(self): obj = node_classes.Dict(parent=self._instance) if not self._instance.returns: @@ -252,13 +250,13 @@ class FunctionModel(ObjectModel): return obj @property - def py__dict__(self): + def attr___dict__(self): return node_classes.Dict(parent=self._instance) - py__globals__ = py__dict__ + attr___globals__ = attr___dict__ @property - def py__kwdefaults__(self): + def attr___kwdefaults__(self): def _default_args(args, parent): for arg in args.kwonlyargs: try: @@ -277,11 +275,11 @@ class FunctionModel(ObjectModel): return obj @property - def py__module__(self): + def attr___module__(self): return node_classes.Const(self._instance.root().qname()) @property - def py__get__(self): + def attr___get__(self): from astroid import bases func = self._instance @@ -361,51 +359,51 @@ class FunctionModel(ObjectModel): # These are here just for completion. @property - def py__ne__(self): + def attr___ne__(self): return node_classes.Unknown() - py__subclasshook__ = py__ne__ - py__str__ = py__ne__ - py__sizeof__ = py__ne__ - py__setattr__ = py__ne__ - py__repr__ = py__ne__ - py__reduce__ = py__ne__ - py__reduce_ex__ = py__ne__ - py__new__ = py__ne__ - py__lt__ = py__ne__ - py__eq__ = py__ne__ - py__gt__ = py__ne__ - py__format__ = py__ne__ - py__delattr__ = py__ne__ - py__getattribute__ = py__ne__ - py__hash__ = py__ne__ - py__init__ = py__ne__ - py__dir__ = py__ne__ - py__call__ = py__ne__ - py__class__ = py__ne__ - py__closure__ = py__ne__ - py__code__ = py__ne__ + attr___subclasshook__ = attr___ne__ + attr___str__ = attr___ne__ + attr___sizeof__ = attr___ne__ + attr___setattr___ = attr___ne__ + attr___repr__ = attr___ne__ + attr___reduce__ = attr___ne__ + attr___reduce_ex__ = attr___ne__ + attr___new__ = attr___ne__ + attr___lt__ = attr___ne__ + attr___eq__ = attr___ne__ + attr___gt__ = attr___ne__ + attr___format__ = attr___ne__ + attr___delattr___ = attr___ne__ + attr___getattribute__ = attr___ne__ + attr___hash__ = attr___ne__ + attr___init__ = attr___ne__ + attr___dir__ = attr___ne__ + attr___call__ = attr___ne__ + attr___class__ = attr___ne__ + attr___closure__ = attr___ne__ + attr___code__ = attr___ne__ class ClassModel(ObjectModel): @property - def py__module__(self): + def attr___module__(self): return node_classes.Const(self._instance.root().qname()) @property - def py__name__(self): + def attr___name__(self): return node_classes.Const(self._instance.name) @property - def py__qualname__(self): + def attr___qualname__(self): return node_classes.Const(self._instance.qname()) @property - def py__doc__(self): + def attr___doc__(self): return node_classes.Const(self._instance.doc) @property - def py__mro__(self): + def attr___mro__(self): if not self._instance.newstyle: raise exceptions.AttributeInferenceError( target=self._instance, attribute="__mro__" @@ -417,7 +415,7 @@ class ClassModel(ObjectModel): return obj @property - def pymro(self): + def attr_mro(self): if not self._instance.newstyle: raise exceptions.AttributeInferenceError( target=self._instance, attribute="mro" @@ -431,14 +429,14 @@ class ClassModel(ObjectModel): # The method we're returning is capable of inferring the underlying MRO though. class MroBoundMethod(bases.BoundMethod): def infer_call_result(self, caller, context=None): - yield other_self.py__mro__ + yield other_self.attr___mro__ implicit_metaclass = self._instance.implicit_metaclass() mro_method = implicit_metaclass.locals["mro"][0] return MroBoundMethod(proxy=mro_method, bound=implicit_metaclass) @property - def py__bases__(self): + def attr___bases__(self): obj = node_classes.Tuple() context = contextmod.InferenceContext() elts = list(self._instance._inferred_bases(context)) @@ -446,13 +444,13 @@ class ClassModel(ObjectModel): return obj @property - def py__class__(self): + def attr___class__(self): from astroid import helpers return helpers.object_type(self._instance) @property - def py__subclasses__(self): + def attr___subclasses__(self): """Get the subclasses of the underlying class This looks only in the current module for retrieving the subclasses, @@ -486,55 +484,55 @@ class ClassModel(ObjectModel): return SubclassesBoundMethod(proxy=subclasses_method, bound=implicit_metaclass) @property - def py__dict__(self): + def attr___dict__(self): return node_classes.Dict(parent=self._instance) class SuperModel(ObjectModel): @property - def py__thisclass__(self): + def attr___thisclass__(self): return self._instance.mro_pointer @property - def py__self_class__(self): + def attr___self_class__(self): return self._instance._self_class @property - def py__self__(self): + def attr___self__(self): return self._instance.type @property - def py__class__(self): + def attr___class__(self): return self._instance._proxied class UnboundMethodModel(ObjectModel): @property - def py__class__(self): + def attr___class__(self): from astroid import helpers return helpers.object_type(self._instance) @property - def py__func__(self): + def attr___func__(self): return self._instance._proxied @property - def py__self__(self): + def attr___self__(self): return node_classes.Const(value=None, parent=self._instance) - pyim_func = py__func__ - pyim_class = py__class__ - pyim_self = py__self__ + attr_im_func = attr___func__ + attr_im_class = attr___class__ + attr_im_self = attr___self__ class BoundMethodModel(FunctionModel): @property - def py__func__(self): + def attr___func__(self): return self._instance._proxied._proxied @property - def py__self__(self): + def attr___self__(self): return self._instance.bound @@ -547,18 +545,18 @@ class GeneratorModel(FunctionModel): method = values[0] patched = lambda cls, meth=method: meth - setattr(type(ret), "py" + name, property(patched)) + setattr(type(ret), IMPL_PREFIX + name, property(patched)) return ret @property - def py__name__(self): + def attr___name__(self): return node_classes.Const( value=self._instance.parent.name, parent=self._instance ) @property - def py__doc__(self): + def attr___doc__(self): return node_classes.Const( value=self._instance.parent.doc, parent=self._instance ) @@ -578,26 +576,26 @@ class AsyncGeneratorModel(GeneratorModel): method = values[0] patched = lambda cls, meth=method: meth - setattr(type(ret), "py" + name, property(patched)) + setattr(type(ret), IMPL_PREFIX + name, property(patched)) return ret class InstanceModel(ObjectModel): @property - def py__class__(self): + def attr___class__(self): return self._instance._proxied @property - def py__module__(self): + def attr___module__(self): return node_classes.Const(self._instance.root().qname()) @property - def py__doc__(self): + def attr___doc__(self): return node_classes.Const(self._instance.doc) @property - def py__dict__(self): + def attr___dict__(self): return _dunder_dict(self._instance, self._instance.instance_attrs) @@ -606,14 +604,14 @@ class InstanceModel(ObjectModel): class ExceptionInstanceModel(InstanceModel): @property - def pyargs(self): + def attr_args(self): message = node_classes.Const("") args = node_classes.Tuple(parent=self._instance) args.postinit((message,)) return args @property - def py__traceback__(self): + def attr___traceback__(self): builtins_ast_module = astroid.MANAGER.astroid_cache[builtins.__name__] traceback_type = builtins_ast_module[types.TracebackType.__name__] return traceback_type.instantiate_class() @@ -621,7 +619,7 @@ class ExceptionInstanceModel(InstanceModel): class SyntaxErrorInstanceModel(ExceptionInstanceModel): @property - def pytext(self): + def attr_text(self): return node_classes.Const("") @@ -630,7 +628,7 @@ BUILTIN_EXCEPTIONS = {"builtins.SyntaxError": SyntaxErrorInstanceModel} class DictModel(ObjectModel): @property - def py__class__(self): + def attr___class__(self): return self._instance._proxied def _generic_dict_attribute(self, obj, name): @@ -644,7 +642,7 @@ class DictModel(ObjectModel): return DictMethodBoundMethod(proxy=meth, bound=self._instance) @property - def pyitems(self): + def attr_items(self): elems = [] obj = node_classes.List(parent=self._instance) for key, value in self._instance.items: @@ -660,7 +658,7 @@ class DictModel(ObjectModel): return self._generic_dict_attribute(obj, "items") @property - def pykeys(self): + def attr_keys(self): keys = [key for (key, _) in self._instance.items] obj = node_classes.List(parent=self._instance) obj.postinit(elts=keys) @@ -672,7 +670,7 @@ class DictModel(ObjectModel): return self._generic_dict_attribute(obj, "keys") @property - def pyvalues(self): + def attr_values(self): values = [value for (_, value) in self._instance.items] obj = node_classes.List(parent=self._instance) |
