File: test-db.py

package info (click to toggle)
dballe 6.8-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 9,728 kB
  • sloc: cpp: 47,650; sh: 11,499; python: 5,668; f90: 1,112; makefile: 682; perl: 602
file content (136 lines) | stat: -rwxr-xr-x 4,654 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
135
136
#!/usr/bin/python

import dballe
import datetime as dt
import unittest

class DballeTest(unittest.TestCase):
    def setUp(self):
        self.db = dballe.DB.connect_test()
        self.db.connect_test();
        self.db.reset()

        data = dballe.Record(
                lat=12.34560, lon=76.54320,
                mobile=0,
                date=dt.datetime(1945, 4, 25, 8, 0, 0),
                level=(10, 11, 15, 22),
                trange=(20,111,222),
                rep_memo="synop",
                B01011="Hey Hey!!",
                B01012=500)
        self.db.insert(data, False, True)

        data.clear()
        data["B33007"] = 50
        data["B33036"] = 75
        self.db.attr_insert("B01011", data)

        for rec in self.db.query_data(dballe.Record(var="B01011")):
            self.attr_ref = rec["context_id"]

    def tearDown(self):
        self.db = None

    def testQueryAna(self):
        query = dballe.Record()
        cur = self.db.query_stations(query)
        self.assertEqual(cur.remaining, 1)
        count = 0
        for result in cur:
                self.assertEqual(result["lat"], 12.34560)
                self.assertEqual(result["lon"], 76.54320)
                self.assert_("B01011" not in result)
                count = count + 1
        self.assertEqual(count, 1)
    def testQueryData(self):
        expected = {}
        expected["B01011"] = "Hey Hey!!";
        expected["B01012"] = 500;

        query = dballe.Record()
        query["latmin"] = 10.0
        cur = self.db.query_data(query)
        self.assertEqual(cur.remaining, 2)
        count = 0
        for result in cur:
            self.assertEqual(cur.remaining, 2-count-1)
            var = result.var()
            assert var.code in expected
            self.assertEqual(var.enq(), expected[var.code])
            del expected[var.code]
            count += 1
    def testQueryAttrs(self):
        data = self.db.query_attrs("B01011", self.attr_ref)
        self.assertEqual(len(data), 2)

        expected = {}
        expected["B33007"] = 50
        expected["B33036"] = 75

        count = 0
        for code in data:
            self.assertIn(code, expected)
            self.assertEqual(data[code], expected[code])
            del expected[code]
            count += 1
        self.assertEqual(count, 2)

    def testQuerySomeAttrs(self):
        # Try limiting the set of wanted attributes
        data = self.db.query_attrs("B01011", self.attr_ref, ("B33036",))
        self.assertEqual(len(data), 1)
        self.assertEqual(data.vars(), (dballe.var("B33036", 75),))

    def testQueryCursorAttrs(self):
        # Query a variable
        query = dballe.Record(var="B01011")
        cur = self.db.query_data(query);
        data = cur.next()
        self.failUnless(data)

        attrs = cur.query_attrs()

        expected = {}
        expected["B33007"] = 50
        expected["B33036"] = 75

        count = 0
        for code in attrs:
                var = attrs.var(code)
                assert var.code in expected
                self.assertEqual(var.enq(), expected[var.code])
                del expected[var.code]
                count = count + 1
        self.assertEqual(count, 2)

        # Try limiting the set of wanted attributes
        attrs = cur.query_attrs(["B33036"])
        for code in attrs:
            var = attrs.var(code)
            self.assertEqual(var.code, "B33036")
            self.assertEqual(var.enqi(), 75)

    def testQuerySummary(self):
        query = dballe.Record()
        cur = self.db.query_summary(query)
        res = dict()
        for result in cur:
            res[(result["ana_id"], result["rep_memo"], result["level"], result["trange"], result["var"])] = (
                result["datemin"], result["datemax"], result["limit"])
        self.assertEqual(res[(1, "synop", (10, 11, 15, 22), (20, 111, 222), 'B01011')], (dt.datetime(1945, 4, 25, 8, 0), dt.datetime(1945, 4, 25, 8, 0), 1))
        self.assertEqual(res[(1, "synop", (10, 11, 15, 22), (20, 111, 222), 'B01012')], (dt.datetime(1945, 4, 25, 8, 0), dt.datetime(1945, 4, 25, 8, 0), 1))

    def testQueryExport(self):
        query = dballe.Record()
        self.db.export_to_file(query, "BUFR", "/dev/null")
        self.db.export_to_file(query, "CREX", "/dev/null")
        self.db.export_to_file(query, "BUFR", "/dev/null", generic=True)
        self.db.export_to_file(query, "CREX", "/dev/null", generic=True)

    def testAttrRemove(self):
        #db.attrRemove(1, "B01011", [ "B33007" ])
        self.db.attr_remove("B01011", self.attr_ref, ("B33007",))

if __name__ == "__main__":
        unittest.main()