misc/persolijn

test.py in master
Repositories | Summary | Log | Files

test.py (14066B) download


  1relationxml = '''
  2<osm>
  3  <relation id="21855" version="7" timestamp="2012-03-21T21:37:54Z" uid="14020" user="Nick Austin" changeset="11057350">
  4    <member type="way" ref="156255508" role=""/>
  5    <member type="way" ref="156255507" role=""/>
  6    <tag k="name" v="Hatfield Tunnel"/>
  7    <tag k="type" v="tunnel"/>
  8  </relation>
  9  <relation id="31640" version="81" timestamp="2012-05-19T09:17:44Z" uid="24119" user="Mauls" changeset="11640673">
 10    <member type="way" ref="24541150" role=""/>
 11    <member type="way" ref="25896432" role="forward"/>
 12    <member type="way" ref="25896435" role="forward"/>
 13    <member type="way" ref="136990875" role="forward"/>
 14    <member type="way" ref="25896366" role="forward"/>
 15    <member type="way" ref="25896438" role="forward"/>
 16    <member type="way" ref="136990877" role="forward"/>
 17    <member type="way" ref="22329168" role="forward"/>
 18    <member type="way" ref="136990870" role=""/>
 19    <member type="way" ref="136990880" role=""/>
 20    <member type="way" ref="136990882" role=""/>
 21    <member type="way" ref="3220127" role=""/>
 22    <member type="way" ref="136990873" role=""/>
 23    <member type="way" ref="136990872" role=""/>
 24    <member type="way" ref="121267851" role=""/>
 25    <member type="way" ref="121267847" role=""/>
 26    <member type="way" ref="4515378" role=""/>
 27    <member type="way" ref="8145197" role=""/>
 28    <member type="way" ref="19745207" role=""/>
 29    <member type="way" ref="19745206" role=""/>
 30    <member type="way" ref="4518667" role=""/>
 31    <member type="way" ref="113946003" role=""/>
 32    <member type="way" ref="136990884" role=""/>
 33    <member type="way" ref="8126872" role=""/>
 34    <member type="way" ref="1019866" role=""/>
 35    <member type="way" ref="1935841" role=""/>
 36    <member type="way" ref="1935842" role=""/>
 37    <member type="way" ref="2837807" role=""/>
 38    <member type="way" ref="3617718" role=""/>
 39    <member type="way" ref="3617750" role=""/>
 40    <member type="way" ref="157868716" role=""/>
 41    <member type="way" ref="157868712" role=""/>
 42    <member type="way" ref="4232426" role=""/>
 43    <member type="way" ref="4232450" role=""/>
 44    <member type="way" ref="4232523" role=""/>
 45    <member type="way" ref="4234302" role=""/>
 46    <member type="way" ref="4234304" role=""/>
 47    <member type="way" ref="140969196" role=""/>
 48    <member type="way" ref="4274177" role=""/>
 49    <member type="way" ref="4288798" role=""/>
 50    <member type="way" ref="4288804" role=""/>
 51    <member type="way" ref="4288817" role=""/>
 52    <member type="way" ref="115708422" role=""/>
 53    <member type="way" ref="4290564" role=""/>
 54    <member type="way" ref="4290566" role=""/>
 55    <member type="way" ref="146405866" role=""/>
 56    <member type="way" ref="4290567" role=""/>
 57    <member type="way" ref="4290569" role=""/>
 58    <member type="way" ref="104494931" role=""/>
 59    <member type="way" ref="37726893" role=""/>
 60    <member type="way" ref="4300013" role=""/>
 61    <member type="way" ref="4327072" role=""/>
 62    <member type="way" ref="4385337" role=""/>
 63    <member type="way" ref="4515181" role=""/>
 64    <member type="way" ref="4719529" role=""/>
 65    <member type="way" ref="4719530" role=""/>
 66    <member type="way" ref="5924137" role="forward"/>
 67    <member type="way" ref="136990881" role=""/>
 68    <member type="way" ref="135775543" role=""/>
 69    <member type="way" ref="135775531" role=""/>
 70    <member type="way" ref="6006524" role=""/>
 71    <member type="way" ref="9227120" role=""/>
 72    <member type="way" ref="9228211" role=""/>
 73    <member type="way" ref="9228215" role=""/>
 74    <member type="way" ref="9228221" role=""/>
 75    <member type="way" ref="9228224" role=""/>
 76    <member type="way" ref="9265930" role=""/>
 77    <member type="way" ref="9362548" role=""/>
 78    <member type="way" ref="10943268" role=""/>
 79    <member type="way" ref="10943269" role=""/>
 80    <member type="way" ref="10944242" role=""/>
 81    <member type="way" ref="10989591" role=""/>
 82    <member type="way" ref="10991833" role=""/>
 83    <member type="way" ref="10996488" role=""/>
 84    <member type="way" ref="11070521" role=""/>
 85    <member type="way" ref="11071125" role=""/>
 86    <member type="way" ref="71403686" role=""/>
 87    <member type="way" ref="11071127" role=""/>
 88    <member type="way" ref="11071128" role=""/>
 89    <member type="way" ref="11071130" role=""/>
 90    <member type="way" ref="11071828" role=""/>
 91    <member type="way" ref="11071937" role=""/>
 92    <member type="way" ref="11071938" role=""/>
 93    <member type="way" ref="11071941" role=""/>
 94    <member type="way" ref="11072077" role=""/>
 95    <member type="way" ref="11072080" role=""/>
 96    <member type="way" ref="15091285" role=""/>
 97    <member type="way" ref="15091286" role=""/>
 98    <member type="way" ref="15091321" role=""/>
 99    <member type="way" ref="15091324" role=""/>
100    <member type="way" ref="15091328" role=""/>
101    <member type="way" ref="15091364" role=""/>
102    <member type="way" ref="15091378" role=""/>
103    <member type="way" ref="73271466" role=""/>
104    <member type="way" ref="73271488" role=""/>
105    <member type="way" ref="58718382" role=""/>
106    <member type="way" ref="15091546" role=""/>
107    <member type="way" ref="15091557" role=""/>
108    <member type="way" ref="15091559" role=""/>
109    <member type="way" ref="15091596" role=""/>
110    <member type="way" ref="15091603" role=""/>
111    <member type="way" ref="15091606" role=""/>
112    <member type="way" ref="48827325" role=""/>
113    <member type="way" ref="15091609" role=""/>
114    <member type="way" ref="164157963" role=""/>
115    <member type="way" ref="15091656" role=""/>
116    <member type="way" ref="43026009" role=""/>
117    <member type="way" ref="43026010" role=""/>
118    <member type="way" ref="15091678" role=""/>
119    <member type="way" ref="19826860" role=""/>
120    <member type="way" ref="19826861" role=""/>
121    <member type="way" ref="164157965" role=""/>
122    <member type="way" ref="19973630" role=""/>
123    <member type="way" ref="22277500" role=""/>
124    <member type="way" ref="22277501" role=""/>
125    <member type="way" ref="22277790" role=""/>
126    <member type="way" ref="22277845" role=""/>
127    <member type="way" ref="22277849" role=""/>
128    <member type="way" ref="22278089" role=""/>
129    <member type="way" ref="22278090" role=""/>
130    <member type="way" ref="22278109" role=""/>
131    <member type="way" ref="22278111" role=""/>
132    <member type="way" ref="22278116" role=""/>
133    <member type="way" ref="22278120" role=""/>
134    <member type="way" ref="22278128" role=""/>
135    <member type="way" ref="22278626" role=""/>
136    <member type="way" ref="22328765" role=""/>
137    <member type="way" ref="22328772" role=""/>
138    <member type="way" ref="22328778" role=""/>
139    <member type="way" ref="22328779" role=""/>
140    <member type="way" ref="22330396" role=""/>
141    <member type="way" ref="22679421" role=""/>
142    <member type="way" ref="23040738" role=""/>
143    <member type="way" ref="23040842" role=""/>
144    <member type="way" ref="23040846" role=""/>
145    <member type="way" ref="23040858" role=""/>
146    <member type="way" ref="23117246" role=""/>
147    <member type="way" ref="23294746" role=""/>
148    <member type="way" ref="23506818" role=""/>
149    <member type="way" ref="23506829" role=""/>
150    <member type="way" ref="23517268" role=""/>
151    <member type="way" ref="23517271" role=""/>
152    <member type="way" ref="157868707" role=""/>
153    <member type="way" ref="23598320" role=""/>
154    <member type="way" ref="23598322" role=""/>
155    <member type="way" ref="23598454" role=""/>
156    <member type="way" ref="23737552" role=""/>
157    <member type="way" ref="23737553" role=""/>
158    <member type="way" ref="23737667" role=""/>
159    <member type="way" ref="145738805" role=""/>
160    <member type="way" ref="24541552" role=""/>
161    <member type="way" ref="24541863" role=""/>
162    <member type="way" ref="24541865" role=""/>
163    <member type="way" ref="25681100" role=""/>
164    <member type="way" ref="25681103" role=""/>
165    <member type="way" ref="25681278" role=""/>
166    <member type="way" ref="25681279" role=""/>
167    <member type="way" ref="25681280" role=""/>
168    <member type="way" ref="25681403" role=""/>
169    <member type="way" ref="25681444" role=""/>
170    <member type="way" ref="25681445" role=""/>
171    <member type="way" ref="25690338" role=""/>
172    <member type="way" ref="25690339" role=""/>
173    <member type="way" ref="25690340" role=""/>
174    <member type="way" ref="25690749" role=""/>
175    <member type="way" ref="43023896" role=""/>
176    <member type="way" ref="43023897" role=""/>
177    <member type="way" ref="25690753" role=""/>
178    <member type="way" ref="25690754" role=""/>
179    <member type="way" ref="25690755" role=""/>
180    <member type="way" ref="25690809" role=""/>
181    <member type="way" ref="25690810" role=""/>
182    <member type="way" ref="38328051" role=""/>
183    <member type="way" ref="38328052" role=""/>
184    <member type="way" ref="25691524" role=""/>
185    <member type="way" ref="101712789" role=""/>
186    <member type="way" ref="101712803" role=""/>
187    <member type="way" ref="25692910" role=""/>
188    <member type="way" ref="25698340" role=""/>
189    <member type="way" ref="25698341" role=""/>
190    <member type="way" ref="25698342" role=""/>
191    <member type="way" ref="25698343" role=""/>
192    <member type="way" ref="25698344" role=""/>
193    <member type="way" ref="25698346" role=""/>
194    <member type="way" ref="25698348" role=""/>
195    <member type="way" ref="25698352" role=""/>
196    <member type="way" ref="25698353" role=""/>
197    <member type="way" ref="25698354" role=""/>
198    <member type="way" ref="25698355" role=""/>
199    <member type="way" ref="26263982" role=""/>
200    <member type="way" ref="26955717" role=""/>
201    <member type="way" ref="28366733" role=""/>
202    <member type="way" ref="33971858" role=""/>
203    <member type="way" ref="33971859" role=""/>
204    <member type="way" ref="145738820" role=""/>
205    <member type="way" ref="33995569" role=""/>
206    <member type="way" ref="23737666" role=""/>
207    <member type="way" ref="41093668" role=""/>
208    <member type="way" ref="44051303" role=""/>
209    <member type="way" ref="44131233" role=""/>
210    <member type="way" ref="44131234" role=""/>
211    <member type="way" ref="25690748" role=""/>
212    <member type="way" ref="25690752" role=""/>
213    <member type="way" ref="44033101" role=""/>
214    <member type="way" ref="44202299" role=""/>
215    <member type="way" ref="44317183" role=""/>
216    <member type="way" ref="44317184" role=""/>
217    <member type="way" ref="44834939" role=""/>
218    <member type="way" ref="45317529" role=""/>
219    <member type="way" ref="45675161" role=""/>
220    <member type="way" ref="4275500" role=""/>
221    <member type="way" ref="53574779" role=""/>
222    <member type="way" ref="55041560" role=""/>
223    <member type="way" ref="62941752" role=""/>
224    <member type="way" ref="70914841" role=""/>
225    <member type="way" ref="100443831" role=""/>
226    <member type="way" ref="103058540" role=""/>
227    <member type="way" ref="103058539" role=""/>
228    <member type="way" ref="25691035" role=""/>
229    <member type="way" ref="145809031" role=""/>
230    <member type="way" ref="140969180" role=""/>
231    <member type="way" ref="140969209" role=""/>
232    <member type="way" ref="10989259" role=""/>
233    <member type="way" ref="141570176" role=""/>
234    <member type="way" ref="157621618" role=""/>
235    <member type="way" ref="157868715" role=""/>
236    <member type="way" ref="157868706" role=""/>
237    <member type="way" ref="157868717" role=""/>
238    <member type="way" ref="157868710" role=""/>
239    <member type="way" ref="157868709" role=""/>
240    <member type="way" ref="157868714" role=""/>
241    <member type="way" ref="157868705" role=""/>
242    <member type="way" ref="157868718" role=""/>
243    <member type="way" ref="157868711" role=""/>
244    <tag k="name" v="NCN National Route 61"/>
245    <tag k="network" v="ncn"/>
246    <tag k="ref" v="61"/>
247    <tag k="route" v="bicycle"/>
248    <tag k="type" v="route"/>
249  </relation>
250  <relation id="267403" version="2" timestamp="2010-02-16T13:21:24Z" uid="91657" user="Pink Duck" changeset="3891683">
251    <member type="node" ref="502550970" role=""/>
252    <member type="node" ref="502552090" role=""/>
253    <tag k="name" v="Oaktree Close"/>
254    <tag k="naptan:StopAreaCode" v="210G896"/>
255    <tag k="naptan:StopAreaType" v="GPBS"/>
256    <tag k="naptan:verified" v="no"/>
257    <tag k="site" v="stop_area"/>
258    <tag k="source" v="naptan_import"/>
259    <tag k="type" v="site"/>
260  </relation>
261  <relation id="267404" version="2" timestamp="2010-02-16T13:21:22Z" uid="91657" user="Pink Duck" changeset="3891683">
262    <member type="node" ref="502550921" role=""/>
263    <member type="node" ref="502552074" role=""/>
264    <tag k="name" v="Burfield Close"/>
265    <tag k="naptan:StopAreaCode" v="210G897"/>
266    <tag k="naptan:StopAreaType" v="GPBS"/>
267    <tag k="naptan:verified" v="no"/>
268    <tag k="site" v="stop_area"/>
269    <tag k="source" v="naptan_import"/>
270    <tag k="type" v="site"/>
271  </relation>
272  <relation id="267400" version="2" timestamp="2010-02-16T13:21:23Z" uid="91657" user="Pink Duck" changeset="3891683">
273    <member type="node" ref="502550963" role=""/>
274    <member type="node" ref="502552081" role=""/>
275    <tag k="name" v="Jasmine Gardens"/>
276    <tag k="naptan:StopAreaCode" v="210G895"/>
277    <tag k="naptan:StopAreaType" v="GPBS"/>
278    <tag k="naptan:verified" v="no"/>
279    <tag k="site" v="stop_area"/>
280    <tag k="source" v="naptan_import"/>
281    <tag k="type" v="site"/>
282  </relation>
283</osm>
284'''
285
286from xml.etree import ElementTree 
287from functools import reduce
288
289types = {
290    "way": "Way.class",
291    "node": "Node.class"
292}
293
294tree = ElementTree.fromstring(relationxml)
295for rel in tree.findall('relation'):
296    
297    memberTypes = [ types[m.get('type')] for m in rel.findall('member') ]
298    
299    memberIDs = [ m.get('ref') for m in rel.findall('member') ]
300    tags = [ [ '"'+m.get('k')+'"', '"'+m.get('v')+'"' ] for m in rel.findall('tag') ]
301    tags = reduce(list.__add__, tags)
302
303    print(f'ExpectedRelation({rel.get("id")}, List.of({", ".join(memberTypes)}), List.of({"l, ".join(memberIDs)}l), List.of({", ".join(tags)})),')