[Biopython-dev] Deprecating Bio.ParserSupport, Bio.Blast.NCBIStandalone

Peter Cock p.j.a.cock at googlemail.com
Fri Feb 1 07:14:49 EST 2013


>Wibowo Arindrarto <w.arindrarto at gmail.com> wrote:
>> Just to be clear, we are:
>>
>> * changing all module's doctest file path to use relative
>> paths (with
>> respect to the module's location),
>> * replacing the run_doctest() import with a simpler doctest
>> import and
>> `doctest.testmod()` in each module having this doctest
>> * resorting to setUp and tearDown in the DocTestSuite in
>> `run_tests.py` so that each module / submodule can find
>> their test
>> files
>> * and refactoring all string functions in Bio._utils to
>> Bio.Phylo and
>> Bio.SearchIO, so that we can remove Bio._utils,
>>
>> right?
>>
>> I'd be happy to give this a shot if everyone feels the same
>> :).
>>

On Fri, Feb 1, 2013 at 11:23 AM, Michiel de Hoon <mjldehoon at yahoo.com> wrote:
> Hi Bow,
>
> Yes, that is correct.
> Responding to Peter's email: Peter, do you agree with this approach?
>
> Best,
> -Michiel.

No. I think we have misunderstood each other on the doctest
discussion :(

If we keep the test files under Tests/ (and I think that is best)
then for example look at this doctest in Bio/SeqRecord.py

        >>> from Bio import SeqIO
        >>> record = SeqIO.read(open("Fasta/sweetpea.nu"),"fasta")
        >>> len(record)
        309

That is currently written to assume it is run from the Tests/
folder. If we write this assuming is it in the Bio/ folder where
the Python file SeqRecord.py lives, it becomes:

        >>> from Bio import SeqIO
        >>> record = SeqIO.read(open("../Tests/Fasta/sweetpea.nu"),"fasta")
        >>> len(record)
        309

I think a beginner would find that more confusing. It is also longer
and we already have trouble with some lines exceeding 80 chars.

Ideally there would be a nice way for doctests to specify the folder,
and then we could use a simple filename like "sweetpea.nu" with
no directories at all. But I don't think that is possible without us
making the testing infrastructure even more complicated.

--

If we want to get rid of Bio._utils.run_doctest() (and the whole of
the file Bio/_utils.py) then I would prefer reverting to the old situation
prior to adding the Bio._utils.run_doctest() helper function.

If the repetitive code snippets to run the doctests of a module are a
problem it can be shortened to something less flexible, for example
in Bio/SeqRecord.py could use something very short like this:

if __name__ == "__main__":
    assert os.path.isfile("Fasta/sweetpea.nu"), "Run from Tests/ folder"
    import doctest
    doctest.testmod(verbose=2)

Or, as I suggested before, we can remove these development
convenience hooks completely?

--

On the subject of the string functions in Bio/_utils.py, I have no
objection to moving them back under Bio.SearchIO and/or
Bio.Phylo - which has advantages in terms of modularity (a
good thing for preventing accidental side effects).

Regards,

Peter


More information about the Biopython-dev mailing list