[Biopython-dev] Bio.PDB on Python 3

Eric Talevich eric.talevich at gmail.com
Tue Oct 19 22:52:27 EDT 2010


On Tue, Oct 19, 2010 at 10:01 PM, Eric Talevich <eric.talevich at gmail.com> wrote:
> On Mon, Aug 16, 2010 at 9:47 AM, Peter <biopython at maubp.freeserve.co.uk> wrote:
>> Hi all,
>>
>> A while back I installed NumPy from their svn under Python 3, so that I
>> could test more of Biopython. I hadn't really looked at Bio.PDB until
>> recently because test_PDB.py depended on Bio.KDTree which needs
>> some C code to be compiled (which we haven't tried yet).
>>
> [...]
>>
>> This has revealed there are at least two issues with Bio.PDB to be
>> addressed (see below).
>>
> [...]
>>
>> ======================================================================
>> ERROR: test_ExposureCN (__main__.Exposure)
>> HSExposureCN.
>> ----------------------------------------------------------------------
>> Traceback (most recent call last):
>>  File "test_PDB.py", line 612, in setUp
>>    structure=PDBParser(PERMISSIVE=True).get_structure('X', pdb_filename)
>>  File "/home/xxx/lib/python3.1/site-packages/Bio/PDB/PDBParser.py",
>> line 64, in get_structure
>>    self._parse(file.readlines())
>>  File "/home/xxx/lib/python3.1/site-packages/Bio/PDB/PDBParser.py",
>> line 84, in _parse
>>    self.trailer=self._parse_coordinates(coords_trailer)
>>  File "/home/xxx/lib/python3.1/site-packages/Bio/PDB/PDBParser.py",
>> line 200, in _parse_coordinates
>>    fullname, serial_number, element)
>>  File "/home/xxx/lib/python3.1/site-packages/Bio/PDB/StructureBuilder.py",
>> line 185, in init_atom
>>    duplicate_atom=residue[name]
>> TypeError: 'DisorderedResidue' object is not subscriptable
>>
>
[...]
>
> So here's what I'm doing:
>  - In DisorderedEntityWrapper, implement __getitem__(self, id) such
> that self.selected_child[id] is returned instead. This fixes most of
> the errors but produces/uncovers three new ones. These new errors also
> seem to indicate that magic methods on DisorderedEntityWrapper aren't
> being handled through __getattr__ in Python 3.
>  - Fix the new errors.
>
>
> I'll post the patch here before pushing it upstream once I get it working.


As if we didn't have a better mechanism for this... here's a patch
that seems to work on both Pythons.
-Eric

diff --git a/Bio/PDB/Entity.py b/Bio/PDB/Entity.py
index ed17308..af2fcc7 100644
--- a/Bio/PDB/Entity.py
+++ b/Bio/PDB/Entity.py
@@ -165,10 +165,27 @@ class DisorderedEntityWrapper:
             raise AttributeError
         return getattr(self.selected_child, method)

+    def __getitem__(self, id):
+        "Return the child with the given id."
+        return self.selected_child[id]
+
     def __setitem__(self, id, child):
         "Add a child, associated with a certain id."
         self.child_dict[id]=child

+    def __iter__(self):
+        "Return the number of children."
+        return iter(self.selected_child)
+
+    def __len__(self):
+        "Return the number of children."
+        return len(self.selected_child)
+
+    def __sub__(self, other):
+        """Subtraction with another object."""
+        return self.selected_child - other
+
+
     # Public methods

     def get_id(self):



More information about the Biopython-dev mailing list