Details
-
Bug
-
Status: Closed
-
Major - P3
-
Resolution: Fixed
-
None
-
None
-
None
-
Not environment dependent
-
Minor Change
Description
I hit an issue recently when using pymongo inside Abstract Base Class. For example the test.py file raise an exception when executed:
Traceback (most recent call last):
|
File "test.py", line 8, in <module>
|
a = A()
|
TypeError: Can't instantiate abstract class A with abstract methods col
|
It's because ABCMeta try to get attribute __isabstractmethod__ on Collection (https://github.com/python-git/python/blob/master/Lib/abc.py#L80) and Collection return a sub-collection in __getattr__ (https://github.com/mongodb/mongo-python-driver/blob/master/pymongo/collection.py#L130).
A simple fix could be to not return a sub-collection if name begins with "__".
I can write a workaround for this issue but adding "col.__isabstractmethod__ = False" is not very clean.
I hope the issue is clear enough.
Attachments
Issue Links
- is duplicated by
-
PYTHON-645 Add some checks for Collection.__getattr__
-
- Closed
-
- related to
-
MOTOR-104 Can't use Motor object as property of class that inherits from ABC
-
- Closed
-