@@ -144,38 +144,81 @@ def gen_contact(cfg: dict) -> dict:
144144 :returns: `dict` of OpenAPI contact object
145145 """
146146
147+ has_addresses = False
148+ has_phones = False
149+
147150 contact = {
148- 'name' : cfg ['metadata' ]['provider' ]['name' ],
149- 'url' : cfg ['metadata' ]['provider' ]['url' ],
150- 'email' : cfg ['metadata' ]['contact' ]['email' ]
151+ 'name' : cfg ['metadata' ]['provider' ]['name' ]
151152 }
152153
154+ for key in ['url' , 'email' ]:
155+ if key in cfg ['metadata' ]['provider' ]:
156+ contact [key ] = cfg ['metadata' ]['provider' ][key ]
157+
153158 contact ['x-ogc-serviceContact' ] = {
154159 'name' : cfg ['metadata' ]['contact' ]['name' ],
155- 'position' : cfg ['metadata' ]['contact' ]['position' ],
156- 'addresses' : [{
157- 'deliveryPoint' : [cfg ['metadata' ]['contact' ]['address' ]],
158- 'city' : cfg ['metadata' ]['contact' ]['city' ],
159- 'administrativeArea' : cfg ['metadata' ]['contact' ]['stateorprovince' ], # noqa
160- 'postalCode' : cfg ['metadata' ]['contact' ]['postalcode' ],
161- 'country' : cfg ['metadata' ]['contact' ]['country' ]
162- }],
163- 'phones' : [{
164- 'type' : 'main' , 'value' : cfg ['metadata' ]['contact' ]['phone' ]
165- }, {
166- 'type' : 'fax' , 'value' : cfg ['metadata' ]['contact' ]['fax' ]
167- }],
168- 'emails' : [{
160+ 'addresses' : []
161+ }
162+
163+ if 'position' in cfg ['metadata' ]['contact' ]:
164+ contact ['x-ogc-serviceContact' ]['position' ] = cfg ['metadata' ]['contact' ]['position' ] # noqa
165+
166+ if any (address in ['address' , 'city' , 'stateorprovince' , 'postalcode' , 'country' ] for address in cfg ['metadata' ]['contact' ]): # noqa
167+ has_addresses = True
168+
169+ if has_addresses :
170+ address = {}
171+ if 'address' in cfg ['metadata' ]['contact' ]:
172+ address ['deliveryPoint' ] = [cfg ['metadata' ]['contact' ]['address' ]]
173+
174+ if 'city' in cfg ['metadata' ]['contact' ]:
175+ address ['city' ] = cfg ['metadata' ]['contact' ]['city' ]
176+
177+ if 'stateorprovince' in cfg ['metadata' ]['contact' ]:
178+ address ['administrativeArea' ] = cfg ['metadata' ]['contact' ]['stateorprovince' ] # noqa
179+
180+ if 'postalCode' in cfg ['metadata' ]['contact' ]:
181+ address ['administrativeArea' ] = cfg ['metadata' ]['contact' ]['postalCode' ] # noqa
182+
183+ if 'country' in cfg ['metadata' ]['contact' ]:
184+ address ['administrativeArea' ] = cfg ['metadata' ]['contact' ]['country' ] # noqa
185+
186+ contact ['x-ogc-serviceContact' ]['addresses' ].append (address )
187+
188+ if any (phone in ['phone' , 'fax' ] for phone in cfg ['metadata' ]['contact' ]):
189+ has_phones = True
190+ contact ['x-ogc-serviceContact' ]['phones' ] = []
191+
192+ if has_phones :
193+ if 'phone' in cfg ['metadata' ]['contact' ]:
194+ contact ['x-ogc-serviceContact' ]['phones' ].append ({
195+ 'type' : 'main' , 'value' : cfg ['metadata' ]['contact' ]['phone' ]
196+ })
197+
198+ if 'fax' in cfg ['metadata' ]['contact' ]:
199+ contact ['x-ogc-serviceContact' ]['phones' ].append ({
200+ 'type' : 'fax' , 'value' : cfg ['metadata' ]['contact' ]['fax' ]
201+ })
202+
203+ if 'email' in cfg ['metadata' ]['contact' ]:
204+ contact ['x-ogc-serviceContact' ]['emails' ] = [{
169205 'value' : cfg ['metadata' ]['contact' ]['email' ]
170- }],
171- 'contactInstructions' : cfg ['metadata' ]['contact' ]['instructions' ],
172- 'links' : [{
206+ }]
207+
208+ if 'url' in cfg ['metadata' ]['contact' ]:
209+ contact ['x-ogc-serviceContact' ]['links' ] = [{
173210 'type' : 'text/html' ,
174211 'href' : cfg ['metadata' ]['contact' ]['url' ]
175- }],
176- 'hoursOfService' : cfg ['metadata' ]['contact' ]['hours' ],
177- 'roles' : [cfg ['metadata' ]['contact' ]['role' ]]
178- }
212+ }]
213+
214+ if 'instructions' in cfg ['metadata' ]['contact' ]:
215+ contact ['x-ogc-serviceContact' ]['contactInstructions' ] = cfg ['metadata' ]['contact' ]['instructions' ] # noqa
216+
217+ if 'hours' in cfg ['metadata' ]['contact' ]:
218+ contact ['x-ogc-serviceContact' ]['hoursOfService' ] = cfg ['metadata' ]['contact' ]['hours' ] # noqa
219+
220+ if 'role' in cfg ['metadata' ]['contact' ]:
221+ contact ['x-ogc-serviceContact' ]['hoursOfService' ] = cfg ['metadata' ]['contact' ]['role' ] # noqa
179222
180223 return contact
181224
0 commit comments