[Biopython-dev] [Bug 2777] [Solution is one line change!] Entity sorting altered by detach_child() calls

bugzilla-daemon at portal.open-bio.org bugzilla-daemon at portal.open-bio.org
Wed Mar 4 09:37:34 EST 2009


http://bugzilla.open-bio.org/show_bug.cgi?id=2777





------- Comment #4 from biopython-bugzilla at maubp.freeserve.co.uk  2009-03-04 09:37 EST -------
Created an attachment (id=1254)
 --> (http://bugzilla.open-bio.org/attachment.cgi?id=1254&action=view)
Patch for Bio/PDB/Entity.py based on Klaus Kopec's suggestion

I've attached a patch which makes the suggested change.  I'm hoping to get
Thomas (the original author) to comment but otherwise I see no reason not to
commit this fix soon.

The old code did this:

    def detach_child(self, id):
        "Remove a child."
        child=self.child_dict[id] 
        child.detach_parent()
        del self.child_dict[id]
        self.child_list=self.child_dict.values()
        self.child_list.sort(self._sort)

It used a sort which should have preserved the order - but that only works if
the child_list is always kept sorted.  Looking at the add method, this isn't
true:

    def add(self, entity):
        "Add a child to the Entity."
        entity_id=entity.get_id()
        if self.has_id(entity_id):
            raise PDBConstructionException( \
                "%s defined twice" % str(entity_id))
        entity.set_parent(self)
        self.child_list.append(entity)
        #self.child_list.sort(self._sort)
        self.child_dict[entity_id]=entity

Interestingly the sort was commented out in the original version first
committed to Biopython's CVS, so this change predates the integration into
Biopython.

I haven't checked to see if there are any other ways the child_list could
become unsorted - that doesn't really matter.


-- 
Configure bugmail: http://bugzilla.open-bio.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.


More information about the Biopython-dev mailing list