Mercurial > gemma
comparison pkg/imports/wg.go @ 1812:4910bcfab319
Waterway gauge import: Work around the expected (but nonetheless silly) namespace issues with the SOAP interface.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 16 Jan 2019 00:51:51 +0100 |
parents | 7ee9bdaac336 |
children | b4b9089c2d79 |
comparison
equal
deleted
inserted
replaced
1811:c21f72775f6b | 1812:4910bcfab319 |
---|---|
16 import ( | 16 import ( |
17 "context" | 17 "context" |
18 "database/sql" | 18 "database/sql" |
19 "errors" | 19 "errors" |
20 "log" | 20 "log" |
21 "strings" | |
21 | 22 |
22 "gemma.intevation.de/gemma/pkg/common" | 23 "gemma.intevation.de/gemma/pkg/common" |
23 "gemma.intevation.de/gemma/pkg/soap" | 24 "gemma.intevation.de/gemma/pkg/soap" |
24 "gemma.intevation.de/gemma/pkg/soap/erdms" | 25 "gemma.intevation.de/gemma/pkg/soap/erdms" |
25 ) | 26 ) |
71 return nil | 72 return nil |
72 } | 73 } |
73 | 74 |
74 func (*WaterwayGauge) CleanUp() error { return nil } | 75 func (*WaterwayGauge) CleanUp() error { return nil } |
75 | 76 |
77 const ( | |
78 selectCurrentUserCountrySQL = `SELECT users.current_user_country()` | |
79 ) | |
80 | |
76 func (wg *WaterwayGauge) Do( | 81 func (wg *WaterwayGauge) Do( |
77 ctx context.Context, | 82 ctx context.Context, |
78 importID int64, | 83 importID int64, |
79 conn *sql.Conn, | 84 conn *sql.Conn, |
80 feedback Feedback, | 85 feedback Feedback, |
81 ) (interface{}, error) { | 86 ) (interface{}, error) { |
87 | |
88 tx, err := conn.BeginTx(ctx, nil) | |
89 if err != nil { | |
90 return nil, err | |
91 } | |
92 defer tx.Rollback() | |
93 | |
94 var country string | |
95 err = tx.QueryRowContext(ctx, selectCurrentUserCountrySQL).Scan(&country) | |
96 switch { | |
97 case err == sql.ErrNoRows: | |
98 return nil, errors.New("Cannot figure out user country") | |
99 case err != nil: | |
100 return nil, err | |
101 } | |
102 | |
103 country = strings.ToUpper(country) | |
104 feedback.Info("Using country '%s'.", country) | |
82 | 105 |
83 var auth *soap.BasicAuth | 106 var auth *soap.BasicAuth |
84 if wg.Username != "" { | 107 if wg.Username != "" { |
85 auth = &soap.BasicAuth{ | 108 auth = &soap.BasicAuth{ |
86 Login: wg.Username, | 109 Login: wg.Username, |
90 | 113 |
91 client := erdms.NewRefService(wg.URL, wg.Insecure, auth) | 114 client := erdms.NewRefService(wg.URL, wg.Insecure, auth) |
92 | 115 |
93 request := &erdms.GetRisDataXML{ | 116 request := &erdms.GetRisDataXML{ |
94 GetRisDataXMLType: &erdms.GetRisDataXMLType{ | 117 GetRisDataXMLType: &erdms.GetRisDataXMLType{ |
95 Subcode: "AT%", | 118 Subcode: erdms.NoNS{Text: country + "%"}, |
96 Funcode: "wtwgag", | 119 Funcode: erdms.NoNS{Text: "wtwgag"}, |
97 }, | 120 }, |
98 } | 121 } |
99 | |
100 log.Printf("user: %s password: %s\n", wg.Username, wg.Password) | |
101 | 122 |
102 data, err := client.GetRisDataXML(request) | 123 data, err := client.GetRisDataXML(request) |
103 | 124 |
104 if err != nil { | 125 if err != nil { |
105 log.Printf("error: %v\n", err) | 126 log.Printf("error: %v\n", err) |
106 return nil, err | 127 return nil, err |
107 } | 128 } |
108 | 129 |
109 _ = data | 130 for _, dr := range data.RisdataReturn { |
131 if dr.RisidxCode == nil { | |
132 log.Printf("warn: RisidxCode == nil") | |
133 continue | |
134 } | |
135 if dr.Objname.Loc == nil { | |
136 log.Printf("warn: Objname == nil") | |
137 continue | |
138 } | |
139 log.Printf("RisidxCode: %s\n", *dr.RisidxCode) | |
140 log.Printf("\tObjname: %s\n", *dr.Objname.Loc) | |
141 } | |
110 | 142 |
111 // TODO: Implement me! | 143 // TODO: Implement me! |
112 return nil, errors.New("Not implemented, yet!") | 144 return nil, errors.New("Not implemented, yet!") |
113 } | 145 } |