File: test_KGML_nographics.py

package info (click to toggle)
python-biopython 1.78%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 65,756 kB
  • sloc: python: 221,141; xml: 178,777; ansic: 13,369; sql: 1,208; makefile: 131; sh: 70
file content (134 lines) | stat: -rw-r--r-- 4,930 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#
# Copyright 2013 by Leighton Pritchard.  All rights reserved.
# This code is part of the Biopython distribution and governed by its
# license.  Please see the LICENSE file that should have been included
# as part of this package.

"""Tests for general functionality of the KGML parser and pathway model."""

# Builtins
import os
import unittest
import tempfile

# Biopython Bio.KEGG.KGML (?)
from Bio.KEGG.KGML.KGML_parser import read


class PathwayData:
    """Convenience structure for testing pathway data."""

    def __init__(
        self,
        infilename,
        outfilename,
        element_counts,
        pathway_image,
        show_pathway_image=False,
    ):
        """Initialize."""
        self.infilename = infilename
        self.outfilename = outfilename
        self.element_counts = element_counts
        self.pathway_image = pathway_image
        self.show_pathway_image = show_pathway_image


class KGMLPathwayTest(unittest.TestCase):
    """KGML checks using ko01100 metabolic map.

    Import the ko01100 metabolic map from a local .xml KGML file, and from
    the KEGG site, and write valid KGML output for each
    """

    def setUp(self):
        # Does our output director exist?  If not, create it
        if not os.path.isdir("KEGG"):
            os.mkdir("KEGG")
        # Define some data to work with as a list of tuples:
        # (infilename, outfilename, (entry_count, ortholog_count,
        # compound_count, map_counts), pathway_image,
        # show_image_map)
        self.data = [
            PathwayData(
                os.path.join("KEGG", "ko01100.xml"),
                tempfile.gettempprefix() + ".ko01100.kgml",
                (3628, 1726, 1746, 149),
                os.path.join("KEGG", "map01100.png"),
            ),
            PathwayData(
                os.path.join("KEGG", "ko03070.xml"),
                tempfile.gettempprefix() + ".ko03070.kgml",
                (81, 72, 8, 1),
                os.path.join("KEGG", "map03070.png"),
                True,
            ),
        ]
        # A list of KO IDs that we're going to use to modify pathway
        # appearance. These are KO IDs for reactions that take part in ko00020,
        # the TCA cycle
        # Turn black code style off
        # fmt: off
        self.ko_ids = {
            "ko:K00239", "ko:K00240", "ko:K00241", "ko:K00242", "ko:K00244",
            "ko:K00245", "ko:K00246", "ko:K00247", "ko:K00174", "ko:K00175",
            "ko:K00177", "ko:K00176", "ko:K00382", "ko:K00164", "ko:K00164",
            "ko:K00658", "ko:K01902", "ko:K01903", "ko:K01899", "ko:K01900",
            "ko:K01899", "ko:K01900", "ko:K00031", "ko:K00030", "ko:K00031",
            "ko:K01648", "ko:K00234", "ko:K00235", "ko:K00236", "ko:K00237",
            "ko:K01676", "ko:K01677", "ko:K01678", "ko:K01679", "ko:K01681",
            "ko:K01682", "ko:K01681", "ko:K01682", "ko:K01647", "ko:K00025",
            "ko:K00026", "ko:K00024", "ko:K01958", "ko:K01959", "ko:K01960",
            "ko:K00163", "ko:K00161", "ko:K00162", "ko:K00163", "ko:K00161",
            "ko:K00162", "ko:K00382", "ko:K00627", "ko:K00169", "ko:K00170",
            "ko:K00172", "ko:K00171", "ko:K01643", "ko:K01644", "ko:K01646",
            "ko:K01610", "ko:K01596"
        }
        # Turn black code style on
        # fmt: on

    def tearDown(self):
        for p in self.data:
            if os.path.isfile(p.outfilename):
                os.remove(p.outfilename)

    def test_read_and_write_KGML_files(self):
        """Read KGML from, and write KGML to, local files.

        Check we read/write the correct number of elements.
        """
        for p in self.data:
            # Test opening file
            with open(p.infilename) as f:
                pathway = read(f)
                # Do we have the correct number of elements of each type
                self.assertEqual(
                    (
                        len(pathway.entries),
                        len(pathway.orthologs),
                        len(pathway.compounds),
                        len(pathway.maps),
                    ),
                    p.element_counts,
                )
            # Test writing file
            with open(p.outfilename, "w") as f:
                f.write(pathway.get_KGML())
            # Can we read the file we wrote?
            with open(p.outfilename) as f:
                pathway = read(f)
                # Do we have the correct number of elements of each type
                self.assertEqual(
                    (
                        len(pathway.entries),
                        len(pathway.orthologs),
                        len(pathway.compounds),
                        len(pathway.maps),
                    ),
                    p.element_counts,
                )


if __name__ == "__main__":
    runner = unittest.TextTestRunner(verbosity=2)
    unittest.main(testRunner=runner)