Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

member_checks.py 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. # pylint: disable=print-statement,missing-docstring,no-self-use,too-few-public-methods,bare-except,broad-except
  2. # pylint: disable=using-constant-test,expression-not-assigned, assigning-non-slot, unused-variable,pointless-statement
  3. from __future__ import print_function
  4. import six
  5. class Provider(object):
  6. """provide some attributes and method"""
  7. cattr = 4
  8. def __init__(self):
  9. self.attr = 4
  10. def method(self, val):
  11. """impressive method"""
  12. return self.attr * val
  13. def hophop(self):
  14. """hop method"""
  15. print('hop hop hop', self)
  16. class Client(object):
  17. """use provider class"""
  18. def __init__(self):
  19. self._prov = Provider()
  20. self._prov_attr = Provider.cattr
  21. self._prov_attr2 = Provider.cattribute # [no-member]
  22. self.set_later = 0
  23. def set_set_later(self, value):
  24. """set set_later attribute (introduce an inference ambiguity)"""
  25. self.set_later = value
  26. def use_method(self):
  27. """use provider's method"""
  28. self._prov.hophop()
  29. self._prov.hophophop() # [no-member]
  30. def use_attr(self):
  31. """use provider's attr"""
  32. print(self._prov.attr)
  33. print(self._prov.attribute) # [no-member]
  34. def debug(self):
  35. """print debug information"""
  36. print(self.__class__.__name__)
  37. print(self.__doc__)
  38. print(self.__dict__)
  39. print(self.__module__)
  40. def test_bt_types(self):
  41. """test access to unexistant member of builtin types"""
  42. lis = []
  43. lis.apppend(self) # [no-member]
  44. dic = {}
  45. dic.set(self) # [no-member]
  46. tup = ()
  47. tup.append(self) # [no-member]
  48. string = 'toto'
  49. print(string.loower()) # [no-member]
  50. integer = 1
  51. print(integer.whatever) # [no-member]
  52. def test_no_false_positives(self):
  53. none = None
  54. print(none.whatever)
  55. # No misssing in the parents.
  56. super(Client, self).misssing() # [no-member]
  57. class Mixin(object):
  58. """No no-member should be emitted for mixins."""
  59. class Getattr(object):
  60. """no-member shouldn't be emitted for classes with dunder getattr."""
  61. def __getattr__(self, attr):
  62. return self.__dict__[attr]
  63. class Getattribute(object):
  64. """no-member shouldn't be emitted for classes with dunder getattribute."""
  65. def __getattribute__(self, attr):
  66. return 42
  67. print(object.__init__)
  68. print(property.__init__)
  69. print(Client().set_later.lower())
  70. print(Mixin().nanana())
  71. print(Getattr().nananan())
  72. print(Getattribute().batman())
  73. try:
  74. Client().missing_method()
  75. except AttributeError:
  76. pass
  77. try:
  78. Client().indeed() # [no-member]
  79. except ImportError:
  80. pass
  81. try:
  82. Client.missing()
  83. except AttributeError:
  84. Client.missing() # [no-member]
  85. try:
  86. Client.missing()
  87. except AttributeError:
  88. try:
  89. Client.missing() # [no-member]
  90. except ValueError:
  91. pass
  92. try:
  93. if Client:
  94. Client().missing()
  95. except AttributeError:
  96. pass
  97. try:
  98. Client().indeed()
  99. except AttributeError:
  100. try:
  101. Client.missing() # [no-member]
  102. except Exception:
  103. pass
  104. class SuperChecks(str, str): # pylint: disable=duplicate-bases
  105. """Don't fail when the MRO is invalid."""
  106. def test(self):
  107. super(SuperChecks, self).lalala()
  108. type(Client()).ala # [no-member]
  109. type({}).bala # [no-member]
  110. type('').portocala # [no-member]
  111. def socket_false_positive():
  112. """Test a regression
  113. Version used:
  114. - Pylint 0.10.0
  115. - Logilab common 0.15.0
  116. - Logilab astroid 0.15.1
  117. False E1101 positive, line 23:
  118. Instance of '_socketobject' has no 'connect' member
  119. """
  120. import socket
  121. sckt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  122. sckt.connect(('127.0.0.1', 80))
  123. sckt.close()
  124. def no_conjugate_member(magic_flag):
  125. """should not raise E1101 on something.conjugate"""
  126. if magic_flag:
  127. something = 1.0
  128. else:
  129. something = 1.0j
  130. if isinstance(something, float):
  131. return something
  132. return something.conjugate()
  133. class NoDunderNameInInstance(object):
  134. """Emit a warning when accessing __name__ from an instance."""
  135. def __init__(self):
  136. self.var = self.__name__ # [no-member]
  137. class InvalidAccessBySlots(object):
  138. __slots__ = ('a', )
  139. def __init__(self):
  140. var = self.teta # [no-member]
  141. self.teta = 24
  142. class MetaWithDynamicGetattr(type):
  143. def __getattr__(cls, attr):
  144. return attr
  145. @six.add_metaclass(MetaWithDynamicGetattr)
  146. class SomeClass(object):
  147. pass
  148. SomeClass.does_not_exist