~libecbufr-dev/libecbufr/trunk

« back to all changes in this revision

Viewing changes to Bindings/python/examples/test-python3.py

  • Committer: vanh.souvanlasy at canada
  • Date: 2019-11-05 21:50:59 UTC
  • Revision ID: vanh.souvanlasy@canada.ca-20191105215059-0a0yolehj3jcmm67
add python bindings

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python3
 
2
 
 
3
import sys
 
4
 
 
5
from ecbufr.template import BUFR_Template as BT
 
6
from ecbufr.template import BufrDescValue
 
7
from ecbufr.tables import BUFR_Tables as Tables
 
8
from ecbufr.tables import EntryTableB as TB
 
9
from ecbufr.message import BUFR_Message as BM
 
10
from ecbufr.message import BUFR_File as BF
 
11
from ecbufr.dataset import BUFR_Dataset
 
12
from ecbufr.section1 import BufrSection1
 
13
from ecbufr.meta import BufrRTMD
 
14
from ecbufr.value import BufrValue
 
15
 
 
16
import ecbufr
 
17
 
 
18
ecbufr.__doc__
 
19
 
 
20
if len(sys.argv)!=2:
 
21
   print ("Usage:",sys.argv[0]," input_bufr_file")
 
22
   in_bufr=""
 
23
else:
 
24
   in_bufr=str(sys.argv[1])
 
25
 
 
26
print ("Input BUFR:", in_bufr)
 
27
 
 
28
def choose_bufrtable(tlist,version):
 
29
   nb=len(tlist)
 
30
   for i in range(nb):
 
31
      t=tlist[i]
 
32
      tmv=t.get_master_version()
 
33
      if tmv==version:
 
34
         print ("Using Table version:",tmv)
 
35
         return t
 
36
   print ("Using Default Table version:",tlist[0].get_master_version())
 
37
   return tlist[0]
 
38
 
 
39
def try_bufrtable(t):
 
40
   b=t.fetch_tableB( 10001 )
 
41
   print (b.descriptor,b.description)
 
42
   del b
 
43
   d=t.fetch_tableD( 301025 )
 
44
   print (d.descriptor,d.description)
 
45
   print (d.get_descriptors())
 
46
   del d
 
47
 
 
48
 
 
49
t_13=Tables()
 
50
t_13.load_TableB ( "../Tables/table_b_bufr-13", 0 )
 
51
t_13.load_TableD ( "../Tables/table_d_bufr-13", 0 )
 
52
print ("Loaded Table master version:", t_13.get_master_version())
 
53
 
 
54
t_cmc=Tables()
 
55
t_cmc.load_cmc_tables()
 
56
print ("Loaded CMC Table master version:", t_cmc.get_master_version())
 
57
 
 
58
try_bufrtable(t_cmc)
 
59
 
 
60
tables_list = []
 
61
tables_list.append ( t_cmc )
 
62
tables_list.append ( t_13 )
 
63
 
 
64
bdv=BufrDescValue(2)
 
65
bdv.set_desc( 0, 8034 )
 
66
bdv.set_desc( 1, 10034 )
 
67
 
 
68
bdv2=BufrDescValue(2)
 
69
bdv2.set_desc( 0, 8033 )
 
70
bdv2.set_desc( 1, 10034 )
 
71
 
 
72
print (bdv.get_desc(0))
 
73
print (bdv.get_desc(1))
 
74
print  (len(bdv))
 
75
bt=BT()
 
76
bt.allocate(bdv,t_cmc,4)
 
77
 
 
78
bdv0=BufrDescValue(0)
 
79
bt2=BT()
 
80
bt2.allocate(bdv0,t_cmc,4)
 
81
bt2.add( bdv2, t_cmc )
 
82
bt2.finalize()
 
83
print ("Template compare:", bt.compare( bt2 ))
 
84
 
 
85
bt2.save( "t2.template" )
 
86
 
 
87
try:
 
88
   bf=BF()
 
89
   print (bf.open.__doc__)
 
90
   print (bf.read.__doc__)
 
91
   bf.open( in_bufr, "rb" )
 
92
except Exception as inst:
 
93
   print ("Cannot open file:",type(inst))
 
94
else:
 
95
   msg=bf.read()
 
96
   while isinstance(msg,BM):
 
97
      s1=msg.get_section1()
 
98
      msg_version=s1.master_table_version
 
99
      print ("Message Table version:",msg_version)
 
100
      print ("Message edition:",msg.edition)
 
101
      print ("Orig Center:",s1.orig_centre)
 
102
      print ("bufr_master_table:",s1.bufr_master_table)
 
103
      table=choose_bufrtable(tables_list,msg_version)
 
104
      dts=table.decode(msg)
 
105
      print ("Subsets count:", dts.size())
 
106
      for i in range(len(dts)):
 
107
         print ("subset:", i)
 
108
         dss=dts.get_subset(i)
 
109
         print ("Descriptors count:", dss.size())
 
110
         pos = dss.find( 4024, 0 )
 
111
         print ("found 4024 at ", pos)
 
112
         for j in range(len(dss)):
 
113
            dsc=dss.get_descriptor(j)
 
114
            print ("descriptor:",j,end='')
 
115
            meta=dsc.get_rtmd()
 
116
            if isinstance(meta,BufrRTMD):
 
117
               print (" {",end='')
 
118
               nb=meta.len_nesting()
 
119
               for n in range(nb):
 
120
                  print (meta.get_nesting(n),end='')
 
121
               print ("}",end='')
 
122
            del meta
 
123
            if dsc.is_missing():
 
124
               print (" ", dsc.descriptor, "MISSING")
 
125
            else:
 
126
               bv=dsc.BufrValue()
 
127
               print (" ", dsc.descriptor, " ", bv.get_value())
 
128
            bv=dsc.BufrValue()
 
129
            if isinstance(bv,BufrValue):
 
130
               if bv.is_missing():
 
131
                  print (" ", dsc.descriptor, "MISSING")
 
132
               else:
 
133
                  print (" ", dsc.descriptor, " ", bv.get_value())
 
134
               del bv
 
135
            else:
 
136
               print (" ", dsc.descriptor)
 
137
# shorter but incomplete way
 
138
#            if dsc.is_missing():
 
139
#               print (" ", dsc.descriptor, "MISSING")
 
140
#            else:
 
141
#               print (" ", dsc.descriptor, " ", dsc.get_value())
 
142
 
 
143
      del dts
 
144
      del msg
 
145
      msg=bf.read()
 
146
   bf.close()
 
147
   del bf