-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathEU_TED_XML_Parser.py
2023 lines (1962 loc) · 221 KB
/
EU_TED_XML_Parser.py
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
import xmltodict
import pandas as pd
import os
from tqdm import tqdm
from datetime import datetime as dt
# the CODED_DATA & TRANSLATION_SECTION
def coded_and_translation_data(doc, EN_POS):
d = dict()
# DOC_ID
d['DOC_ID'] = doc['@DOC_ID']
# EDITION
d['EDITION'] = doc['@EDITION']
# CODED_DATA_SECTION - REF_OJS
d['COLL_OJ'] = doc['CODED_DATA_SECTION']['REF_OJS']['COLL_OJ']
d['No_OJ'] = doc['CODED_DATA_SECTION']['REF_OJS']['NO_OJ']
d['DATE_PUB'] = doc['CODED_DATA_SECTION']['REF_OJS']['DATE_PUB']
# CODED_DATA_SECTION - NOTICE_DATA
d['NO_DOC_OJS'] = doc['CODED_DATA_SECTION']['NOTICE_DATA']['NO_DOC_OJS']
try:
d['URL'] = doc['CODED_DATA_SECTION']['NOTICE_DATA']['URI_LIST']['URI_DOC'][EN_POS]['#text']
except:
d['URL'] = doc['CODED_DATA_SECTION']['NOTICE_DATA']['URI_LIST']['URI_DOC']['#text']
d['LG_ORIG'] = ','.join(doc['CODED_DATA_SECTION']['NOTICE_DATA']['LG_ORIG']) if isinstance(doc['CODED_DATA_SECTION']['NOTICE_DATA']['LG_ORIG'], list) else doc['CODED_DATA_SECTION']['NOTICE_DATA']['LG_ORIG']
d['ISO_COUNTRY'] = doc['CODED_DATA_SECTION']['NOTICE_DATA']['ISO_COUNTRY']['@VALUE']
d['ORIGINAL_CPV_CODE'] = ';'.join(cpv['@CODE'] for cpv in doc['CODED_DATA_SECTION']['NOTICE_DATA']['ORIGINAL_CPV']) if isinstance(doc['CODED_DATA_SECTION']['NOTICE_DATA']['ORIGINAL_CPV'], list) else doc['CODED_DATA_SECTION']['NOTICE_DATA']['ORIGINAL_CPV']['@CODE']
d['ORIGINAL_CPV'] = ';'.join(cpv['#text'] for cpv in doc['CODED_DATA_SECTION']['NOTICE_DATA']['ORIGINAL_CPV']) if isinstance(doc['CODED_DATA_SECTION']['NOTICE_DATA']['ORIGINAL_CPV'], list) else doc['CODED_DATA_SECTION']['NOTICE_DATA']['ORIGINAL_CPV']['#text']
if 'n2016:PERFORMANCE_NUTS' in doc['CODED_DATA_SECTION']['NOTICE_DATA'].keys():
if isinstance(doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:PERFORMANCE_NUTS'], dict):
d['n2016-PERFORMANCE_NUTS_CODE'] = doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:PERFORMANCE_NUTS']['@CODE']
d['n2016-PERFORMANCE_NUTS'] = doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:PERFORMANCE_NUTS']['#text']
else:
d['n2016-PERFORMANCE_NUTS_CODE'] = ','.join([item['@CODE'] for item in doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:PERFORMANCE_NUTS']])
d['n2016-PERFORMANCE_NUTS'] = ','.join([item['#text'] for item in doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:PERFORMANCE_NUTS']])
if 'n2016:CA_CE_NUTS' in doc['CODED_DATA_SECTION']['NOTICE_DATA'].keys():
if isinstance(doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:CA_CE_NUTS'], dict):
d['n2016-CA_CE_NUTS_CODE'] = doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:CA_CE_NUTS']['@CODE']
d['n2016-CA_CE_NUTS'] = doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:CA_CE_NUTS']['#text']
elif isinstance(doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:CA_CE_NUTS'], list):
d['n2016-CA_CE_NUTS_CODE'] = ','.join(item['@CODE'] for item in doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:CA_CE_NUTS'])
d['n2016-CA_CE_NUTS'] = ','.join(item['#text'] for item in doc['CODED_DATA_SECTION']['NOTICE_DATA']['n2016:CA_CE_NUTS'])
# CODED_DATA_SECTION - CODIF_DATA
d['INITIATOR'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['INITIATOR'] if 'INITIATOR' in doc['CODED_DATA_SECTION']['CODIF_DATA'].keys() else ''
d['DS_DATE_DISPATCH'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['DS_DATE_DISPATCH'] if 'DS_DATE_DISPATCH' in doc['CODED_DATA_SECTION']['CODIF_DATA'].keys() else ''
d['DT_DATE_FOR_SUBMISSION'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['DT_DATE_FOR_SUBMISSION'] if 'DT_DATE_FOR_SUBMISSION' in doc['CODED_DATA_SECTION']['CODIF_DATA'].keys() else ''
d['AA_AUTHORITY_TYPE'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['AA_AUTHORITY_TYPE']['#text']
d['AA_AUTHORITY_TYPE_CODE'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['AA_AUTHORITY_TYPE']['@CODE']
d['TD_DOCUMENT_TYPE'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['TD_DOCUMENT_TYPE']['#text']
d['NC_CONTRACT_NATURE'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['NC_CONTRACT_NATURE']['#text']
d['PR_PROC'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['PR_PROC']['#text'] if 'PR_PROC' in doc['CODED_DATA_SECTION']['CODIF_DATA'].keys() else ''
d['RP_REGULATION'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['RP_REGULATION']['#text'] if 'RP_REGULATION' in doc['CODED_DATA_SECTION']['CODIF_DATA'].keys() else ''
d['RP_REGULATION_CODE'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['RP_REGULATION']['@CODE'] if 'RP_REGULATION' in doc['CODED_DATA_SECTION']['CODIF_DATA'].keys() else ''
d['TY_TYPE_BID'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['TY_TYPE_BID']['#text'] if 'TY_TYPE_BID' in doc['CODED_DATA_SECTION']['CODIF_DATA'].keys() else ''
d['AC_AWARD_CRIT'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['AC_AWARD_CRIT']['#text'] if 'AC_AWARD_CRIT' in doc['CODED_DATA_SECTION']['CODIF_DATA'].keys() else ''
if 'MA_MAIN_ACTIVITIES' in doc['CODED_DATA_SECTION']['CODIF_DATA'].keys():
if isinstance(doc['CODED_DATA_SECTION']['CODIF_DATA']['MA_MAIN_ACTIVITIES'], dict):
d['MA_MAIN_ACTIVITIES'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['MA_MAIN_ACTIVITIES']['#text']
else:
d['MA_MAIN_ACTIVITIES'] = ','.join(item['#text'] for item in doc['CODED_DATA_SECTION']['CODIF_DATA']['MA_MAIN_ACTIVITIES'])
d['HEADING'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['HEADING']
d['INITIATOR'] = doc['CODED_DATA_SECTION']['CODIF_DATA']['INITIATOR'] if 'INITIATOR' in doc['CODED_DATA_SECTION']['CODIF_DATA'].keys() else ''
# TRANSLATION_SECTION - ML_TITLES
d['TITLE'] = doc['TRANSLATION_SECTION']['ML_TITLES']['ML_TI_DOC'][EN_POS]['TI_TEXT']['P']
d['CITY'] = doc['TRANSLATION_SECTION']['ML_TITLES']['ML_TI_DOC'][EN_POS]['TI_CY']
d['TOWN'] = doc['TRANSLATION_SECTION']['ML_TITLES']['ML_TI_DOC'][EN_POS]['TI_TOWN']
# TRANSLATION_SECTION - ML_AA_NAMES
try:
d['AWARDING AUTHORITY'] = doc['TRANSLATION_SECTION']['ML_AA_NAMES']['AA_NAME'][EN_POS]['#text']
except:
d['AWARDING AUTHORITY'] = doc['TRANSLATION_SECTION']['ML_AA_NAMES']['AA_NAME']['#text']
return d
def R209_CAN(doc, EN_POS):
d = dict()
if '@VERSION' in doc.keys():
d['VERSION'] = doc['@VERSION']
else:
if isinstance(doc['FORM_SECTION'][list(doc['FORM_SECTION'].keys())[0]], dict):
d['VERSION'] = doc['FORM_SECTION'][list(doc['FORM_SECTION'].keys())[0]]['@VERSION']
else:
d['VERSION'] = doc['FORM_SECTION'][list(doc['FORM_SECTION'].keys())[0]][0]['@VERSION']
if isinstance(doc['FORM_SECTION']['F03_2014'], list):
d['FORM'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['@FORM']
if 'LEGAL_BASIS' in doc['FORM_SECTION']['F03_2014'][EN_POS].keys():
d['LEGAL_BASIS'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['LEGAL_BASIS']['@VALUE']
elif 'LEGAL_BASIS_OTHER' in doc['FORM_SECTION']['F03_2014'][EN_POS].keys():
d['LEGAL_BASIS'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['LEGAL_BASIS_OTHER']['P']
d['CONTRACTING_BODY'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['OFFICIALNAME']
d['CONTRACTING_BODY_ADDRESS'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['ADDRESS'] if 'ADDRESS' in doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_TOWN'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['TOWN'] if 'TOWN' in doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_POSTAL_CODE'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['POSTAL_CODE'] if 'POSTAL_CODE' in doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_COUNTRY'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['COUNTRY']['@VALUE'] if 'COUNTRY' in doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['n2016-NUTS'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['n2016:NUTS']['@CODE']
d['CA_TYPE'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['CA_TYPE']['@VALUE'] if 'CA_TYPE' in doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CA_TYPE_OTHER'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['CA_TYPE_OTHER'] if 'CA_TYPE_OTHER' in doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CA_ACTIVITY'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['CA_ACTIVITY']['@VALUE'] if 'CA_ACTIVITY' in doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CA_ACTIVITY_OTHER'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY']['CA_ACTIVITY_OTHER'] if 'CA_ACTIVITY_OTHER' in doc['FORM_SECTION']['F03_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CONTRACT_TITLE'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['TITLE']['P']
d['REFERENCE_NUMBER'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['REFERENCE_NUMBER'] if 'REFERENCE_NUMBER' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT'].keys() else ''
d['CPV_MAIN'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['CPV_MAIN']['CPV_CODE']['@CODE']
d['TYPE_CONTRACT'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['TYPE_CONTRACT']['@CTYPE']
d['TOTAL_VAL_CURR'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['VAL_TOTAL']['@CURRENCY'] if 'VAL_TOTAL' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT'].keys() else ''
d['TOTAL_VAL'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['VAL_TOTAL']['#text'] if 'VAL_TOTAL' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT'].keys() else ''
shrt_dsc = []
if isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P'], list):
for each in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P']:
if isinstance(each, dict):
shrt_dsc.append(each['#text'])
else:
shrt_dsc.append(each)
elif isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P'], dict):
shrt_dsc.append(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P']['#text'])
else:
shrt_dsc.append(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P'])
d['SHORT_DESCR'] = ','.join([str(x) for x in shrt_dsc])
if 'NO_LOT_DIVISION' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT'].keys():
d['NO_LOT_DIVISION'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['NO_LOT_DIVISION']
if 'LOT_DIVISION' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT'].keys():
if doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'] is not None:
d['MAX_LOT_DIVISION'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_MAX_NUMBER'] if 'LOT_MAX_NUMBER' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
d['MAX_LOT_PER_TENDERER'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_MAX_ONE_TENDERER'] if 'LOT_MAX_ONE_TENDERER' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
d['LOT_ALL'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_ALL'] if 'LOT_ALL' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
if isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'], dict):
if 'MAIN_SITE' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P'], list):
main_site = []
for item in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']:
if isinstance(item, dict):
main_site.append(item['#text'])
elif isinstance(item, str):
main_site.append(item)
else:
main_site.append(str(item))
d['MAIN_SITE'] = ', '.join(main_site)
elif isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P'], dict):
d['MAIN_SITE'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']['#text']
else:
d['MAIN_SITE'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']
if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL'], dict):
d['OBJECT_DESCR_CPV_ADDITIONAL'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']['CPV_CODE']['@CODE'] if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys() else ''
else:
d['OBJECT_DESCR_CPV_ADDITIONAL'] = ','.join([item['CPV_CODE']['@CODE'] for item in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']])
if isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'], dict):
d['OBJECT_DESCR_n2016-NUTS'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS']['@CODE']
else:
d['OBJECT_DESCR_n2016-NUTS'] = ','.join(item['@CODE'] for item in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'])
d['OBJECT_DESCR_SHORT_DESCR'] = ''.join([s['#text'] if isinstance(s, dict) else s for s in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['SHORT_DESCR']['P']])
if 'DURATION' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
d['OBJECT_DESCR_DURATION'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['#text'] + ' ' + doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['@TYPE']
elif isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'], list):
if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL'], dict):
d['OBJECT_DESCR_CPV_ADDITIONAL'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'][EN_POS]['CPV_ADDITIONAL']['CPV_CODE']['@CODE'] if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'][EN_POS].keys() else ''
else:
d['OBJECT_DESCR_CPV_ADDITIONAL'] = ','.join([item['CPV_CODE']['@CODE'] for item in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'][EN_POS]['CPV_ADDITIONAL']])
if isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'], dict):
d['OBJECT_DESCR_n2016-NUTS'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS']['@CODE']
else:
d['OBJECT_DESCR_n2016-NUTS'] = ','.join(item['@CODE'] for item in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'])
d['OBJECT_DESCR_SHORT_DESCR'] = ''.join([s['#text'] if isinstance(s, dict) else s for s in doc['FORM_SECTION'][EN_POS]['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'][EN_POS]['SHORT_DESCR']['P']])
if 'DURATION' in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'][EN_POS].keys():
d['OBJECT_DESCR_DURATION'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'][EN_POS]['DURATION']['#text'] + ' ' + doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'][EN_POS]['DURATION']['@TYPE']
elif isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'], list):
lot_title, cpv_additional, lot_no, n2016_nuts, short_descr, main_site = [],[],[],[],[],[]
for item in doc['FORM_SECTION']['F03_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']:
if 'MAIN_SITE' in item.keys():
if isinstance(item['MAIN_SITE']['P'], list):
for ii in item['MAIN_SITE']['P']:
if isinstance(ii, dict):
main_site.append(ii['#text'])
elif isinstance(ii, str):
main_site.append(ii)
else:
main_site.append(str(ii))
elif isinstance(item['MAIN_SITE']['P'], dict):
main_site.append(item['MAIN_SITE']['P']['#text'])
else:
main_site.append(item['MAIN_SITE']['P'])
if 'LOT_NO' in item.keys():
if isinstance(item['LOT_NO'], dict):
lot_no.append(item['LOT_NO'])
else:
lot_no.append(item['LOT_NO'][0])
if 'TITLE' in item.keys():
if isinstance(item['TITLE'], dict):
if isinstance(item['TITLE']['P'], dict):
lot_title.append(item['TITLE']['P']['#text'])
else:
lot_title.append(item['TITLE']['P'])
else:
lot_title.append(', '.join([i['P'] for i in item['TITLE']]))
if 'CPV_ADDITIONAL' in item.keys():
if isinstance(item['CPV_ADDITIONAL'], dict):
cpv_additional.append(item['CPV_ADDITIONAL']['CPV_CODE']['@CODE'])
else:
cpv_additional.append(', '.join([i['CPV_CODE']['@CODE'] for i in item['CPV_ADDITIONAL']]))
if 'n2016:NUTS' in item.keys():
if isinstance(item['n2016:NUTS'], dict):
n2016_nuts.append(item['n2016:NUTS']['@CODE'])
else:
n2016_nuts.append(', '.join([i['@CODE'] for i in item['n2016:NUTS']]))
if 'SHORT_DESCR' in item.keys():
if isinstance(item['SHORT_DESCR'], dict):
if isinstance(item['SHORT_DESCR']['P'], str):
short_descr.append(item['SHORT_DESCR']['P'])
elif isinstance(item['SHORT_DESCR']['P'], list):
for each in item['SHORT_DESCR']['P']:
short_descr.append(each)
else:
short_descr.append(item['SHORT_DESCR']['P']['#text'])
else:
short_descr.append(', '.join([i['P'] for i in item['SHORT_DESCR']]))
d['MAIN_SITE'] = '; '.join([str(x) if x is None else x for x in main_site])
d['LOT_NO'] = '; '.join(lot_no)
d['LOT_TITLES'] = '; '.join([str(x) if x is None else x for x in lot_title])
d['OBJECT_DESCR_CPV_ADDITIONAL'] = '; '.join(cpv_additional)
d['OBJECT_DESCR_n2016-NUTS'] = '; '.join(n2016_nuts)
d['OBJECT_DESCR_SHORT_DESCR'] = ','.join([','.join(i) for i in short_descr if isinstance(i, list)])
if isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT'], list):
awarded_contract_lots, awarded_contract_titles, num_of_awarded_contract, contractors, awarded_est_val, awarded_tot_val = [],[],[],[],[],[]
for each in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']:
awarded_contract_lots.append(each['LOT_NO']) if 'LOT_NO' in each.keys() else ''
if 'TITLE' in each.keys():
if isinstance(each['TITLE']['P'], str):
awarded_contract_titles.append(each['TITLE']['P'])
else:
awarded_contract_titles.append(each['TITLE']['P']['#text'])
if 'AWARDED_CONTRACT' in each.keys():
if 'CONTRACTORS' in each['AWARDED_CONTRACT'].keys():
if isinstance(each['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR'], dict):
contractors.append(each['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR']['ADDRESS_CONTRACTOR']['OFFICIALNAME'])
else:
for item in each['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR']:
if 'ADDRESS_CONTRACTORS' in item.keys():
if 'OFFICIALNAME' in item['ADDRESS_CONTRACT'].keys():
contractors.append(item['ADDRESS_CONTRACT']['OFFICIALNAME'])
if 'VALUES' in each['AWARDED_CONTRACT'].keys():
if 'VAL_ESTIMATED_TOTAL' in each['AWARDED_CONTRACT']['VALUES'].keys():
awarded_est_val.append(each['AWARDED_CONTRACT']['VALUES']['VAL_ESTIMATED_TOTAL']['#text']+' '+each['AWARDED_CONTRACT']['VALUES']['VAL_ESTIMATED_TOTAL']['@CURRENCY'])
if 'VAL_TOTAL' in each['AWARDED_CONTRACT']['VALUES'].keys():
awarded_tot_val.append(each['AWARDED_CONTRACT']['VALUES']['VAL_TOTAL']['#text']+' '+each['AWARDED_CONTRACT']['VALUES']['VAL_TOTAL']['@CURRENCY'])
if 'NO_AWARDED_CONTRACT' in each.keys():
if 'PROCUREMENT_UNSUCCESSFUL' in each['NO_AWARDED_CONTRACT'].keys():
num_of_awarded_contract.append(each['NO_AWARDED_CONTRACT']['PROCUREMENT_UNSUCCESSFUL'])
d['AWARDED_CONTRACT_LOTS'] = '; '.join(awarded_contract_lots)
d['AWARDED_CONTRACT_TITLES'] = '; '.join(awarded_contract_titles)
d['AWARDED_CONTRACT_CONTRACTORS'] = '; '.join(contractors)
d['AWARDED_CONTRACT_EST_TOTAL_VAL'] = '; '.join(awarded_est_val)
d['AWARDED_CONTRACT_TOTAL_VAL'] = '; '.join(awarded_tot_val)
d['AWARDED_CONTRACT_PROCUREMENT_UNSUCCESSFUL'] = '; '.join([str(num) for num in num_of_awarded_contract])
else:
d['AWARDED_CONTRACT_LOTS'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['LOT_NO'] if 'LOT_NO' in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT'].keys() else ''
d['AWARDED_CONTRACT_TITLES'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['TITLE']['P'] if 'TITLE' in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT'].keys() else ''
if 'AWARDED_CONTRACT' in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT'].keys():
if 'CONTRACTORS' in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT'].keys():
if isinstance(doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR'], dict):
d['AWARDED_CONTRACT_CONTRACTORS'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR']['ADDRESS_CONTRACTOR']['OFFICIALNAME']
else:
contractors = []
for each in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR']:
if 'ADDRESS_CONTRACTORS' in each.keys():
if 'OFFICIALNAME' in each['ADDRESS_CONTRACTORS'].keys():
contractors.append(each['ADDRESS_CONTRACTORS']['OFFICIALNAME'])
d['AWARDED_CONTRACT_CONTRACTORS'] = '; '.join(contractors)
if 'VALUES' in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT'].keys():
if 'VAL_ESTIMATED_TOTAL' in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES'].keys():
d['AWARDED_CONTRACT_EST_TOTAL_VAL'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES']['VAL_ESTIMATED_TOTAL']['#text']+' '+doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES']['VAL_ESTIMATED_TOTAL']['@CURRENCY']
if 'VAL_TOTAL' in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES'].keys():
d['AWARDED_CONTRACT_TOTAL_VAL'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES']['VAL_TOTAL']['#text']+' '+doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES']['VAL_TOTAL']['@CURRENCY']
if 'NO_AWARDED_CONTRACT' in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT'].keys():
if 'PROCUREMENT_UNSUCCESSFUL' in doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['NO_AWARDED_CONTRACT'].keys():
d['AWARDED_CONTRACT_PROCUREMENT_UNSUCCESSFUL'] = doc['FORM_SECTION']['F03_2014'][EN_POS]['AWARD_CONTRACT']['NO_AWARDED_CONTRACT']['PROCUREMENT_UNSUCCESSFUL']
elif isinstance(doc['FORM_SECTION']['F03_2014'], dict):
d['FORM'] = doc['FORM_SECTION']['F03_2014']['@FORM']
if 'LEGAL_BASIS' in doc['FORM_SECTION']['F03_2014'].keys():
d['LEGAL_BASIS'] = doc['FORM_SECTION']['F03_2014']['LEGAL_BASIS']['@VALUE']
elif 'LEGAL_BASIS_OTHER' in doc['FORM_SECTION']['F03_2014'].keys():
d['LEGAL_BASIS'] = doc['FORM_SECTION']['F03_2014']['LEGAL_BASIS_OTHER']['P']
d['CONTRACTING_BODY'] = doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['OFFICIALNAME']
d['CONTRACTING_BODY_ADDRESS'] = doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['ADDRESS'] if 'ADDRESS' in doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_TOWN'] = doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['TOWN'] if 'TOWN' in doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_POSTAL_CODE'] = doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['POSTAL_CODE'] if 'POSTAL_CODE' in doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_COUNTRY'] = doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['COUNTRY']['@VALUE'] if 'COUNTRY' in doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['n2016-NUTS'] = doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['n2016:NUTS']['@CODE']
d['CA_TYPE'] = doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['CA_TYPE']['@VALUE'] if 'CA_TYPE' in doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY'].keys() else ''
d['CA_TYPE_OTHER'] = doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['CA_TYPE_OTHER'] if 'CA_TYPE_OTHER' in doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY'].keys() else ''
d['CA_ACTIVITY'] = doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['CA_ACTIVITY']['@VALUE'] if 'CA_ACTIVITY' in doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY'].keys() else ''
d['CA_ACTIVITY_OTHER'] = doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY']['CA_ACTIVITY_OTHER'] if 'CA_ACTIVITY_OTHER' in doc['FORM_SECTION']['F03_2014']['CONTRACTING_BODY'].keys() else ''
d['CONTRACT_TITLE'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['TITLE']['P']
d['REFERENCE_NUMBER'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['REFERENCE_NUMBER'] if 'REFERENCE_NUMBER' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT'].keys() else ''
d['CPV_MAIN'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['CPV_MAIN']['CPV_CODE']['@CODE']
d['TYPE_CONTRACT'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['TYPE_CONTRACT']['@CTYPE']
d['TOTAL_VAL_CURR'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['VAL_TOTAL']['@CURRENCY'] if 'VAL_TOTAL' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT'].keys() else ''
d['TOTAL_VAL'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['VAL_TOTAL']['#text'] if 'VAL_TOTAL' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT'].keys() else ''
shrt_dsc = []
if isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['SHORT_DESCR']['P'], list):
for each in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['SHORT_DESCR']['P']:
if isinstance(each, dict):
shrt_dsc.append(each['#text'])
else:
shrt_dsc.append(each)
elif isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['SHORT_DESCR']['P'], dict):
shrt_dsc.append(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['SHORT_DESCR']['P']['#text'])
else:
shrt_dsc.append(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['SHORT_DESCR']['P'])
d['SHORT_DESCR'] = ','.join([str(x) for x in shrt_dsc])
if 'NO_LOT_DIVISION' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT'].keys():
d['NO_LOT_DIVISION'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['NO_LOT_DIVISION']
if 'LOT_DIVISION' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT'].keys():
if doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['LOT_DIVISION'] is not None:
d['MAX_LOT_DIVISION'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_MAX_NUMBER'] if 'LOT_MAX_NUMBER' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
d['MAX_LOT_PER_TENDERER'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_MAX_ONE_TENDERER'] if 'LOT_MAX_ONE_TENDERER' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
d['LOT_ALL'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_ALL'] if 'LOT_ALL' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
if isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'], dict):
if 'MAIN_SITE' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P'], list):
main_site = []
for item in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']:
if isinstance(item, dict):
main_site.append(item['#text'])
elif isinstance(item, str):
main_site.append(item)
else:
main_site.append(str(item))
d['MAIN_SITE'] = ','.join(main_site)
elif isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P'], dict):
d['MAIN_SITE'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']['#text']
else:
d['MAIN_SITE'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']
if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL'], dict):
d['OBJECT_DESCR_CPV_ADDITIONAL'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']['CPV_CODE']['@CODE'] if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'].keys() else ''
else:
d['OBJECT_DESCR_CPV_ADDITIONAL'] = ','.join([item['CPV_CODE']['@CODE'] for item in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']])
if isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'], dict):
d['OBJECT_DESCR_n2016-NUTS'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS']['@CODE']
else:
d['OBJECT_DESCR_n2016-NUTS'] = ','.join(item['@CODE'] for item in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'])
d['OBJECT_DESCR_SHORT_DESCR'] = ''.join([s['#text'] if isinstance(s, dict) else str(s) for s in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['SHORT_DESCR']['P']])
if 'DURATION' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
d['OBJECT_DESCR_DURATION'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['#text'] + ' ' + doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['@TYPE']
elif isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'], list):
if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL'], dict):
d['OBJECT_DESCR_CPV_ADDITIONAL'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']['CPV_CODE']['@CODE'] if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'].keys() else ''
else:
d['OBJECT_DESCR_CPV_ADDITIONAL'] = ','.join([item['CPV_CODE']['@CODE'] for item in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']])
if isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'], dict):
d['OBJECT_DESCR_n2016-NUTS'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS']['@CODE']
else:
d['OBJECT_DESCR_n2016-NUTS'] = ','.join(item['@CODE'] for item in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'])
d['OBJECT_DESCR_SHORT_DESCR'] = ''.join([s['#text'] if isinstance(s, dict) else s for s in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['SHORT_DESCR']['P']])
if 'DURATION' in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
d['OBJECT_DESCR_DURATION'] = doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['#text'] + ' ' + doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['@TYPE']
elif isinstance(doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'], list):
lot_title, cpv_additional, lot_no, n2016_nuts, short_descr, main_site = [],[],[],[],[],[]
for item in doc['FORM_SECTION']['F03_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']:
if 'MAIN_SITE' in item.keys():
if isinstance(item['MAIN_SITE']['P'], list):
for ii in item['MAIN_SITE']['P']:
if isinstance(ii, dict):
main_site.append(ii['#text'])
elif isinstance(ii, str):
main_site.append(ii)
else:
main_site.append(str(ii))
main_site.append(','.join(main_site))
elif isinstance(item['MAIN_SITE']['P'], dict):
main_site.append(item['MAIN_SITE']['P']['#text'])
else:
main_site.append(item['MAIN_SITE']['P'])
if 'LOT_NO' in item.keys():
if isinstance(item['LOT_NO'], dict):
lot_no.append(item['LOT_NO'])
else:
lot_no.append(item['LOT_NO'][0])
if 'TITLE' in item.keys():
if isinstance(item['TITLE'], dict):
if isinstance(item['TITLE']['P'], dict):
lot_title.append(item['TITLE']['P']['#text'])
else:
lot_title.append(item['TITLE']['P'])
else:
lot_title.append(', '.join([i['P'] for i in item['TITLE']]))
if 'CPV_ADDITIONAL' in item.keys():
if isinstance(item['CPV_ADDITIONAL'], dict):
cpv_additional.append(item['CPV_ADDITIONAL']['CPV_CODE']['@CODE'])
else:
cpv_additional.append(', '.join([i['CPV_CODE']['@CODE'] for i in item['CPV_ADDITIONAL']]))
if 'n2016:NUTS' in item.keys():
if isinstance(item['n2016:NUTS'], dict):
n2016_nuts.append(item['n2016:NUTS']['@CODE'])
else:
n2016_nuts.append(', '.join([i['@CODE'] for i in item['n2016:NUTS']]))
if 'SHORT_DESCR' in item.keys():
if isinstance(item['SHORT_DESCR'], dict):
if isinstance(item['SHORT_DESCR']['P'], str):
short_descr.append(item['SHORT_DESCR']['P'])
elif isinstance(item['SHORT_DESCR']['P'], list):
for each in item['SHORT_DESCR']['P']:
short_descr.append(each)
else:
if item['SHORT_DESCR']['P'] is not None:
short_descr.append(item['SHORT_DESCR']['P']['#text'])
else:
short_descr.append('None')
else:
short_descr.append(', '.join([i['P'] for i in item['SHORT_DESCR']]))
d['MAIN_SITE'] = '; '.join([str(x) if x is None else x for x in main_site])
d['LOT_NO'] = '; '.join(lot_no)
d['LOT_TITLES'] = '; '.join([str(x) if x is None else x for x in lot_title])
d['OBJECT_DESCR_CPV_ADDITIONAL'] = '; '.join(cpv_additional)
d['OBJECT_DESCR_n2016-NUTS'] = '; '.join(n2016_nuts)
d['OBJECT_DESCR_SHORT_DESCR'] = ','.join([','.join(i) for i in short_descr if isinstance(i, list)])
if isinstance(doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT'], list):
awarded_contract_lots, awarded_contract_titles, num_of_awarded_contract, contractors, awarded_est_val, awarded_tot_val, awarded_cont_num = [],[],[],[],[],[],[]
for each in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']:
awarded_contract_lots.append(each['LOT_NO']) if 'LOT_NO' in each.keys() else ''
if 'CONTRACT_NO' in each.keys():
awarded_cont_num.append(each['CONTRACT_NO'])
if 'TITLE' in each.keys():
if isinstance(each['TITLE']['P'], str):
awarded_contract_titles.append(each['TITLE']['P'])
else:
awarded_contract_titles.append(each['TITLE']['P']['#text'])
if 'AWARDED_CONTRACT' in each.keys():
if 'CONTRACTORS' in each['AWARDED_CONTRACT'].keys():
if isinstance(each['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR'], dict):
contractors.append(each['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR']['ADDRESS_CONTRACTOR']['OFFICIALNAME'])
else:
for item in each['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR']:
if 'ADDRESS_CONTRACTORS' in item.keys():
if 'OFFICIALNAME' in item['ADDRESS_CONTRACT'].keys():
contractors.append(item['ADDRESS_CONTRACT']['OFFICIALNAME'])
if 'VALUES' in each['AWARDED_CONTRACT'].keys():
if 'VAL_ESTIMATED_TOTAL' in each['AWARDED_CONTRACT']['VALUES'].keys():
awarded_est_val.append(each['AWARDED_CONTRACT']['VALUES']['VAL_ESTIMATED_TOTAL']['#text']+' '+each['AWARDED_CONTRACT']['VALUES']['VAL_ESTIMATED_TOTAL']['@CURRENCY'])
if 'VAL_TOTAL' in each['AWARDED_CONTRACT']['VALUES'].keys():
awarded_tot_val.append(each['AWARDED_CONTRACT']['VALUES']['VAL_TOTAL']['#text']+' '+each['AWARDED_CONTRACT']['VALUES']['VAL_TOTAL']['@CURRENCY'])
if 'NO_AWARDED_CONTRACT' in each.keys():
if 'PROCUREMENT_UNSUCCESSFUL' in each['NO_AWARDED_CONTRACT'].keys():
num_of_awarded_contract.append(each['NO_AWARDED_CONTRACT']['PROCUREMENT_UNSUCCESSFUL'])
d['AWARDED_CONTRACT_LOTS'] = '; '.join(awarded_contract_lots)
d['AWARDED_CONTRACT_NO'] = '; '.join(awarded_cont_num)
d['AWARDED_CONTRACT_TITLES'] = '; '.join(awarded_contract_titles)
d['AWARDED_CONTRACT_CONTRACTORS'] = '; '.join(contractors)
d['AWARDED_CONTRACT_EST_TOTAL_VAL'] = '; '.join(awarded_est_val)
d['AWARDED_CONTRACT_TOTAL_VAL'] = '; '.join(awarded_tot_val)
d['AWARDED_CONTRACT_PROCUREMENT_UNSUCCESSFUL'] = '; '.join([str(num) for num in num_of_awarded_contract])
else:
d['AWARDED_CONTRACT_LOTS'] = doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['LOT_NO'] if 'LOT_NO' in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT'].keys() else ''
d['AWARDED_CONTRACT_NO'] = doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['CONTRACT_NO'] if 'CONTRACT_NO' in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT'].keys() else ''
d['AWARDED_CONTRACT_TITLES'] = doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['TITLE']['P'] if 'TITLE' in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT'].keys() else ''
if 'AWARDED_CONTRACT' in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT'].keys():
if 'CONTRACTORS' in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT'].keys():
if isinstance(doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR'], dict):
d['AWARDED_CONTRACT_CONTRACTORS'] = doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR']['ADDRESS_CONTRACTOR']['OFFICIALNAME']
else:
contractors = []
for each in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT']['CONTRACTORS']['CONTRACTOR']:
if 'ADDRESS_CONTRACTORS' in each.keys():
if 'OFFICIALNAME' in each['ADDRESS_CONTRACTORS'].keys():
contractors.append(each['ADDRESS_CONTRACTORS']['OFFICIALNAME'])
d['AWARDED_CONTRACT_CONTRACTORS'] = '; '.join(contractors)
if 'VALUES' in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT'].keys():
if 'VAL_ESTIMATED_TOTAL' in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES'].keys():
d['AWARDED_CONTRACT_EST_TOTAL_VAL'] = doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES']['VAL_ESTIMATED_TOTAL']['#text']+' '+doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES']['VAL_ESTIMATED_TOTAL']['@CURRENCY']
if 'VAL_TOTAL' in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES'].keys():
d['AWARDED_CONTRACT_TOTAL_VAL'] = doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES']['VAL_TOTAL']['#text']+' '+doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['AWARDED_CONTRACT']['VALUES']['VAL_TOTAL']['@CURRENCY']
if 'NO_AWARDED_CONTRACT' in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT'].keys():
if 'PROCUREMENT_UNSUCCESSFUL' in doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['NO_AWARDED_CONTRACT'].keys():
d['AWARDED_CONTRACT_PROCUREMENT_UNSUCCESSFUL'] = doc['FORM_SECTION']['F03_2014']['AWARD_CONTRACT']['NO_AWARDED_CONTRACT']['PROCUREMENT_UNSUCCESSFUL']
return d
def R209_CN(doc, EN_POS):
d = dict()
if '@VERSION' in doc.keys():
d['VERSION'] = doc['@VERSION']
else:
if isinstance(doc['FORM_SECTION'][list(doc['FORM_SECTION'].keys())[0]], dict):
d['VERSION'] = doc['FORM_SECTION'][list(doc['FORM_SECTION'].keys())[0]]['@VERSION']
else:
d['VERSION'] = doc['FORM_SECTION'][list(doc['FORM_SECTION'].keys())[0]][0]['@VERSION']
if isinstance(doc['FORM_SECTION']['F02_2014'], list):
d['FORM'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['@FORM']
if 'LEGAL_BASIS' in doc['FORM_SECTION']['F02_2014'][EN_POS].keys():
d['LEGAL_BASIS'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['LEGAL_BASIS']['@VALUE']
elif 'LEGAL_BASIS_OTHER' in doc['FORM_SECTION']['F02_2014'][EN_POS].keys():
d['LEGAL_BASIS'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['LEGAL_BASIS_OTHER']['P']
d['CONTRACTING_BODY'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['OFFICIALNAME']
d['CONTRACTING_BODY_ADDRESS'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['ADDRESS'] if 'ADDRESS' in doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_TOWN'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['TOWN'] if 'TOWN' in doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_POSTAL_CODE'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['POSTAL_CODE'] if 'POSTAL_CODE' in doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_COUNTRY'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['COUNTRY']['@VALUE'] if 'COUNTRY' in doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['n2016-NUTS'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['n2016:NUTS']['@CODE']
d['CA_TYPE'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['CA_TYPE']['@VALUE'] if 'CA_TYPE' in doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CA_TYPE_OTHER'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['CA_TYPE_OTHER'] if 'CA_TYPE_OTHER' in doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CA_ACTIVITY'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['CA_ACTIVITY']['@VALUE'] if 'CA_ACTIVITY' in doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CA_ACTIVITY_OTHER'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY']['CA_ACTIVITY_OTHER'] if 'CA_ACTIVITY_OTHER' in doc['FORM_SECTION']['F02_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CONTRACT_TITLE'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['TITLE']['P']
d['REFERENCE_NUMBER'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['REFERENCE_NUMBER'] if 'REFERENCE_NUMBER' in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT'].keys() else ''
d['CPV_MAIN'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['CPV_MAIN']['CPV_CODE']['@CODE']
d['TYPE_CONTRACT'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['TYPE_CONTRACT']['@CTYPE']
shrt_dsc = []
if isinstance(doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P'], list):
for each in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P']:
if isinstance(each, dict):
shrt_dsc.append(each['#text'])
else:
shrt_dsc.append(each)
elif isinstance(doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P'], dict):
shrt_dsc.append(doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P']['#text'])
else:
shrt_dsc.append(doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P'])
d['SHORT_DESCR'] = ','.join([str(x) for x in shrt_dsc])
if 'NO_LOT_DIVISION' in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT'].keys():
d['NO_LOT_DIVISION'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['NO_LOT_DIVISION']
if 'LOT_DIVISION' in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT'].keys():
d['MAX_LOT_DIVISION'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_MAX_NUMBER'] if 'LOT_MAX_NUMBER' in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
d['MAX_LOT_PER_TENDERER'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_MAX_ONE_TENDERER'] if 'LOT_MAX_ONE_TENDERER' in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
d['LOT_ALL'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_ALL'] if 'LOT_ALL' in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
if isinstance(doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'], dict):
if 'MAIN_SITE' in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P'], list):
main_site = []
for item in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']:
if isinstance(item, dict):
main_site.append(item['#text'])
elif isinstance(item, str):
main_site.append(item)
else:
main_site.append(str(item))
d['MAIN_SITE'] = ', '.join(main_site)
elif isinstance(doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P'], dict):
d['MAIN_SITE'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']['#text']
else:
d['MAIN_SITE'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']
if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL'], dict):
d['OBJECT_DESCR_CPV_ADDITIONAL'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']['CPV_CODE']['@CODE'] if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys() else ''
else:
d['OBJECT_DESCR_CPV_ADDITIONAL'] = ','.join([item['CPV_CODE']['@CODE'] for item in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']])
if isinstance(doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'], dict):
d['OBJECT_DESCR_n2016-NUTS'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS']['@CODE']
else:
d['OBJECT_DESCR_n2016-NUTS'] = ','.join(item['@CODE'] for item in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'])
d['OBJECT_DESCR_SHORT_DESCR'] = ''.join([str(s['#text']) if isinstance(s, dict) else str(s) for s in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['SHORT_DESCR']['P']])
if 'DURATION' in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
d['OBJECT_DESCR_DURATION'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['#text'] + ' ' + doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['@TYPE']
elif isinstance(doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'], list):
cpv_add, n2016_nuts, descr, short_descr, duration, main_site = [], [], [], [], [], []
for each in doc['FORM_SECTION']['F02_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']:
if 'MAIN_SITE' in each.keys():
if isinstance(each['MAIN_SITE']['P'], list):
for item in each['MAIN_SITE']['P']:
if isinstance(item, dict):
main_site.append(item['#text'])
elif isinstance(item, str):
main_site.append(item)
else:
main_site.append(str(item))
elif isinstance(each['MAIN_SITE']['P'], dict):
main_site.append(each['MAIN_SITE']['P']['#text'])
else:
main_site.append(each['MAIN_SITE']['P'])
if 'CPV_ADDITIONAL' in each.keys():
if isinstance(each['CPV_ADDITIONAL'], dict):
cpv_add.append(each['CPV_ADDITIONAL']['CPV_CODE']['@CODE'])
else:
for item in each['CPV_ADDITIONAL']:
cpv_add.append(item['CPV_CODE']['@CODE'])
if 'n2016:NUTS' in each.keys():
if isinstance(each['n2016:NUTS'], dict):
n2016_nuts.append(each['n2016:NUTS']['@CODE'])
else:
n2016_nuts.append(','.join(item['@CODE'] for item in each['n2016:NUTS']))
if 'SHORT_DESCR' in each.keys():
if isinstance(each['SHORT_DESCR'], dict):
if isinstance(each['SHORT_DESCR']['P'], dict):
short_descr.append(each['SHORT_DESCR']['P']['#text'])
else:
if each['SHORT_DESCR']['P'] is not None:
short_descr.append(each['SHORT_DESCR']['P'])
if 'DURATION' in each.keys():
if isinstance(each['DURATION'], dict):
duration.append(each['DURATION']['#text']+each['DURATION']['@TYPE'])
else:
for item in each['DURATION']:
duration.append(item['#text']+item['@TYPE'])
for desc in short_descr:
if isinstance(desc, list):
for txt in desc:
descr.append(txt)
else:
descr.append(desc)
d['MAIN_SITE'] = ';'.join([str(x) if x is None else x for x in main_site])
d['OBJECT_DESCR_CPV_ADDITIONAL'] = ';'.join(cpv_add)
d['OBJECT_DESCR_n2016-NUTS'] = ';'.join(n2016_nuts)
d['OBJECT_DESCR_SHORT_DESCR'] = ';'.join([str(i) for i in descr])
d['OBJECT_DESCR_DURATION'] = ';'.join(duration)
d['PROCEDURE_DATE_RECEIPT_TENDERS'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE']['DATE_RECEIPT_TENDERS'] if 'DATE_RECEIPT_TENDERS' in doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE'].keys() else ''
d['PROCEDURE_TIME_RECEIPT_TENDERS'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE']['TIME_RECEIPT_TENDERS'] if 'TIME_RECEIPT_TENDERS' in doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE'].keys() else ''
d['PROCEDURE_DURATION_TENDER_VALID'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE']['DURATION_TENDER_VALID']['#text'] + ' ' + doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE']['DURATION_TENDER_VALID']['@TYPE'] if 'DURATION_TENDER_VALID' in doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE'].keys() else ''
if 'OPENING_CONDITION' in doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE'].keys():
d['PROCEDURE_DATE_OPENING_TENDERS'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE']['OPENING_CONDITION']['DATE_OPENING_TENDERS'] if 'DATE_OPENING_TENDERS' in doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE']['OPENING_CONDITION'].keys() else ''
d['PROCEDURE_TIME_OPENING_TENDERS'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE']['OPENING_CONDITION']['TIME_OPENING_TENDERS'] if 'TIME_OPENING_TENDERS' in doc['FORM_SECTION']['F02_2014'][EN_POS]['PROCEDURE']['OPENING_CONDITION'].keys() else ''
d['DATE_DISPATCH_NOTICE'] = doc['FORM_SECTION']['F02_2014'][EN_POS]['COMPLEMENTARY_INFO']['DATE_DISPATCH_NOTICE'] if 'DATE_DISPATCH_NOTICE' in doc['FORM_SECTION']['F02_2014'][EN_POS]['COMPLEMENTARY_INFO'].keys() else ''
elif isinstance(doc['FORM_SECTION']['F02_2014'], dict):
d['FORM'] = doc['FORM_SECTION']['F02_2014']['@FORM']
if 'LEGAL_BASIS' in doc['FORM_SECTION']['F02_2014'].keys():
d['LEGAL_BASIS'] = doc['FORM_SECTION']['F02_2014']['LEGAL_BASIS']['@VALUE']
elif 'LEGAL_BASIS_OTHER' in doc['FORM_SECTION']['F02_2014'].keys():
d['LEGAL_BASIS'] = doc['FORM_SECTION']['F02_2014']['LEGAL_BASIS_OTHER']['P']
d['CONTRACTING_BODY'] = doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['OFFICIALNAME']
d['CONTRACTING_BODY_ADDRESS'] = doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['ADDRESS'] if 'ADDRESS' in doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_TOWN'] = doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['TOWN'] if 'TOWN' in doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_POSTAL_CODE'] = doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['POSTAL_CODE'] if 'POSTAL_CODE' in doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_COUNTRY'] = doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['COUNTRY']['@VALUE'] if 'COUNTRY' in doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['n2016-NUTS'] = doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['n2016:NUTS']['@CODE']
d['CA_TYPE'] = doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['CA_TYPE']['@VALUE'] if 'CA_TYPE' in doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY'].keys() else ''
d['CA_TYPE_OTHER'] = doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['CA_TYPE_OTHER'] if 'CA_TYPE_OTHER' in doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY'].keys() else ''
d['CA_ACTIVITY'] = doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['CA_ACTIVITY']['@VALUE'] if 'CA_ACTIVITY' in doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY'].keys() else ''
d['CA_ACTIVITY_OTHER'] = doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY']['CA_ACTIVITY_OTHER'] if 'CA_ACTIVITY_OTHER' in doc['FORM_SECTION']['F02_2014']['CONTRACTING_BODY'].keys() else ''
d['CONTRACT_TITLE'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['TITLE']['P']
d['REFERENCE_NUMBER'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['REFERENCE_NUMBER'] if 'REFERENCE_NUMBER' in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT'].keys() else ''
d['CPV_MAIN'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['CPV_MAIN']['CPV_CODE']['@CODE']
d['TYPE_CONTRACT'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['TYPE_CONTRACT']['@CTYPE']
shrt_dsc = []
if isinstance(doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['SHORT_DESCR']['P'], list):
for each in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['SHORT_DESCR']['P']:
if isinstance(each, dict):
shrt_dsc.append(each['#text'])
else:
shrt_dsc.append(each)
elif isinstance(doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['SHORT_DESCR']['P'], dict):
shrt_dsc.append(doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['SHORT_DESCR']['P']['#text'])
else:
shrt_dsc.append(doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['SHORT_DESCR']['P'])
d['SHORT_DESCR'] = ','.join([str(x) for x in shrt_dsc])
if 'NO_LOT_DIVISION' in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT'].keys():
d['NO_LOT_DIVISION'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['NO_LOT_DIVISION']
if 'LOT_DIVISION' in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT'].keys():
d['MAX_LOT_DIVISION'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_MAX_NUMBER'] if 'LOT_MAX_NUMBER' in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
d['MAX_LOT_PER_TENDERER'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_MAX_ONE_TENDERER'] if 'LOT_MAX_ONE_TENDERER' in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
d['LOT_ALL'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_ALL'] if 'LOT_ALL' in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
if isinstance(doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'], dict):
if 'MAIN_SITE' in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P'], list):
main_site = []
for item in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']:
if isinstance(item, dict):
main_site.append(item['#text'])
elif isinstance(item, str):
main_site.append(item)
else:
main_site.append(str(item))
d['MAIN_SITE'] = ', '.join(main_site)
elif isinstance(doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P'], dict):
d['MAIN_SITE'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']['#text']
else:
d['MAIN_SITE'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']
if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL'], dict):
d['OBJECT_DESCR_CPV_ADDITIONAL'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']['CPV_CODE']['@CODE']
else:
d['OBJECT_DESCR_CPV_ADDITIONAL'] = ','.join([item['CPV_CODE']['@CODE'] for item in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']])
if isinstance(doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'], dict):
d['OBJECT_DESCR_n2016-NUTS'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS']['@CODE']
else:
d['OBJECT_DESCR_n2016-NUTS'] = ','.join(item['@CODE'] for item in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'])
obj_shrt_dsc = []
if doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['SHORT_DESCR']['P'] is not None:
for item in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['SHORT_DESCR']['P']:
if isinstance(item, dict):
obj_shrt_dsc.append(item['#text'])
d['OBJECT_DESCR_SHORT_DESCR'] = ','.join(obj_shrt_dsc)
if 'DURATION' in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
d['OBJECT_DESCR_DURATION'] = doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['#text'] + ' ' + doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['@TYPE']
elif isinstance(doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR'], list):
cpv_add, n2016_nuts, descr, short_descr, duration, main_site = [], [], [], [], [], []
for each in doc['FORM_SECTION']['F02_2014']['OBJECT_CONTRACT']['OBJECT_DESCR']:
if 'MAIN_SITE' in each.keys():
if isinstance(each['MAIN_SITE']['P'], list):
for item in each['MAIN_SITE']['P']:
if isinstance(item, dict):
main_site.append(item['#text'])
elif isinstance(item, str):
main_site.append(item)
else:
main_site.append(str(item))
elif isinstance(each['MAIN_SITE']['P'], dict):
main_site.append(each['MAIN_SITE']['P']['#text'])
else:
main_site.append(each['MAIN_SITE']['P'])
if 'CPV_ADDITIONAL' in each.keys():
if isinstance(each['CPV_ADDITIONAL'], dict):
cpv_add.append(each['CPV_ADDITIONAL']['CPV_CODE']['@CODE'])
else:
for item in each['CPV_ADDITIONAL']:
cpv_add.append(item['CPV_CODE']['@CODE'])
if 'n2016:NUTS' in each.keys():
if isinstance(each['n2016:NUTS'], dict):
n2016_nuts.append(each['n2016:NUTS']['@CODE'])
else:
n2016_nuts.append(','.join(item['@CODE'] for item in each['n2016:NUTS']))
if 'SHORT_DESCR' in each.keys():
if isinstance(each['SHORT_DESCR'], dict):
if isinstance(each['SHORT_DESCR']['P'], dict):
short_descr.append(each['SHORT_DESCR']['P']['#text'])
else:
if each['SHORT_DESCR']['P'] is not None:
short_descr.append(each['SHORT_DESCR']['P'])
if 'DURATION' in each.keys():
if isinstance(each['DURATION'], dict):
duration.append(each['DURATION']['#text']+each['DURATION']['@TYPE'])
else:
for item in each['DURATION']:
duration.append(item['#text']+item['@TYPE'])
for desc in short_descr:
if isinstance(desc, list):
for txt in desc:
descr.append(txt)
else:
descr.append(desc)
d['MAIN_SITE'] = ';'.join([str(x) if x is None else x for x in main_site])
d['OBJECT_DESCR_CPV_ADDITIONAL'] = ';'.join(cpv_add)
d['OBJECT_DESCR_n2016-NUTS'] = ';'.join(n2016_nuts)
d['OBJECT_DESCR_SHORT_DESCR'] = ';'.join([str(i) for i in descr])
d['OBJECT_DESCR_DURATION'] = ';'.join(duration)
d['PROCEDURE_DATE_RECEIPT_TENDERS'] = doc['FORM_SECTION']['F02_2014']['PROCEDURE']['DATE_RECEIPT_TENDERS'] if 'DATE_RECEIPT_TENDERS' in doc['FORM_SECTION']['F02_2014']['PROCEDURE'].keys() else ''
d['PROCEDURE_TIME_RECEIPT_TENDERS'] = doc['FORM_SECTION']['F02_2014']['PROCEDURE']['TIME_RECEIPT_TENDERS'] if 'TIME_RECEIPT_TENDERS' in doc['FORM_SECTION']['F02_2014']['PROCEDURE'].keys() else ''
d['PROCEDURE_DURATION_TENDER_VALID'] = doc['FORM_SECTION']['F02_2014']['PROCEDURE']['DURATION_TENDER_VALID']['#text'] + ' ' + doc['FORM_SECTION']['F02_2014']['PROCEDURE']['DURATION_TENDER_VALID']['@TYPE'] if 'DURATION_TENDER_VALID' in doc['FORM_SECTION']['F02_2014']['PROCEDURE'].keys() else ''
if 'OPENING_CONDITION' in doc['FORM_SECTION']['F02_2014']['PROCEDURE'].keys():
d['PROCEDURE_DATE_OPENING_TENDERS'] = doc['FORM_SECTION']['F02_2014']['PROCEDURE']['OPENING_CONDITION']['DATE_OPENING_TENDERS'] if 'DATE_OPENING_TENDERS' in doc['FORM_SECTION']['F02_2014']['PROCEDURE']['OPENING_CONDITION'].keys() else ''
d['PROCEDURE_TIME_OPENING_TENDERS'] = doc['FORM_SECTION']['F02_2014']['PROCEDURE']['OPENING_CONDITION']['TIME_OPENING_TENDERS'] if 'TIME_OPENING_TENDERS' in doc['FORM_SECTION']['F02_2014']['PROCEDURE']['OPENING_CONDITION'].keys() else ''
d['DATE_DISPATCH_NOTICE'] = doc['FORM_SECTION']['F02_2014']['COMPLEMENTARY_INFO']['DATE_DISPATCH_NOTICE'] if 'DATE_DISPATCH_NOTICE' in doc['FORM_SECTION']['F02_2014']['COMPLEMENTARY_INFO'].keys() else ''
return d
def R209_PIN(doc, EN_POS):
d = dict()
if '@VERSION' in doc.keys():
d['VERSION'] = doc['@VERSION']
else:
if isinstance(doc['FORM_SECTION'][list(doc['FORM_SECTION'].keys())[0]], dict):
d['VERSION'] = doc['FORM_SECTION'][list(doc['FORM_SECTION'].keys())[0]]['@VERSION']
else:
d['VERSION'] = doc['FORM_SECTION'][list(doc['FORM_SECTION'].keys())[0]][0]['@VERSION']
if isinstance(doc['FORM_SECTION']['F01_2014'], list):
d['FORM'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['@FORM']
if 'LEGAL_BASIS' in doc['FORM_SECTION']['F01_2014'][EN_POS].keys():
d['LEGAL_BASIS'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['LEGAL_BASIS']['@VALUE']
elif 'LEGAL_BASIS_OTHER' in doc['FORM_SECTION']['F01_2014'][EN_POS].keys():
d['LEGAL_BASIS'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['LEGAL_BASIS_OTHER']['P']
d['CONTRACTING_BODY'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['OFFICIALNAME']
d['CONTRACTING_BODY_ADDRESS'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['ADDRESS'] if 'ADDRESS' in doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_TOWN'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['TOWN'] if 'TOWN' in doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_POSTAL_CODE'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['POSTAL_CODE'] if 'POSTAL_CODE' in doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['CONTRACTING_BODY_COUNTRY'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['COUNTRY']['@VALUE'] if 'COUNTRY' in doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY'].keys() else ''
d['n2016-NUTS'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['ADDRESS_CONTRACTING_BODY']['n2016:NUTS']['@CODE']
d['CA_TYPE'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['CA_TYPE']['@VALUE'] if 'CA_TYPE' in doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CA_TYPE_OTHER'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['CA_TYPE_OTHER'] if 'CA_TYPE_OTHER' in doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CA_ACTIVITY'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['CA_ACTIVITY']['@VALUE'] if 'CA_ACTIVITY' in doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CA_ACTIVITY_OTHER'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY']['CA_ACTIVITY_OTHER'] if 'CA_ACTIVITY_OTHER' in doc['FORM_SECTION']['F01_2014'][EN_POS]['CONTRACTING_BODY'].keys() else ''
d['CONTRACT_COVERED_GPA'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['PROCEDURE']['CONTRACT_COVERED_GPA'] if 'CONTRACT_COVERED_GPA' in doc['FORM_SECTION']['F01_2014'][EN_POS]['PROCEDURE'].keys() else ''
d['DATE_DISPATCH_NOTICE'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['COMPLEMENTARY_INFO']['DATE_DISPATCH_NOTICE'] if 'DATE_DISPATCH_NOTICE' in doc['FORM_SECTION']['F01_2014'][EN_POS]['COMPLEMENTARY_INFO'].keys() else ''
if isinstance(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT'], dict):
d['TITLE'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['TITLE']['P']
d['REFERENCE_NUMBER'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['REFERENCE_NUMBER'] if 'REFERENCE_NUMBER' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT'].keys() else ''
d['CPV_MAIN'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['CPV_MAIN']['CPV_CODE']['@CODE']
d['TYPE_CONTRACT'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['TYPE_CONTRACT']['@CTYPE']
d['TOTAL_VAL_CURR'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['VAL_TOTAL']['@CURRENCY'] if 'VAL_TOTAL' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT'].keys() else ''
d['TOTAL_VAL'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['VAL_TOTAL']['#text'] if 'VAL_TOTAL' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT'].keys() else ''
shrt_dsc = []
if isinstance(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P'], list):
for each in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P']:
if isinstance(each, dict):
shrt_dsc.append(each['#text'])
else:
shrt_dsc.append(each)
elif isinstance(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P'], dict):
shrt_dsc.append(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P']['#text'])
else:
shrt_dsc.append(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['SHORT_DESCR']['P'])
d['SHORT_DESCR'] = ','.join([str(x) for x in shrt_dsc])
if 'NO_LOT_DIVISION' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT'].keys():
d['NO_LOT_DIVISION'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['NO_LOT_DIVISION']
if 'LOT_DIVISION' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT'].keys():
if doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'] is not None:
d['MAX_LOT_DIVISION'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_MAX_NUMBER'] if 'LOT_MAX_NUMBER' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
d['MAX_LOT_PER_TENDERER'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_MAX_ONE_TENDERER'] if 'LOT_MAX_ONE_TENDERER' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
d['LOT_ALL'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION']['LOT_ALL'] if 'LOT_ALL' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['LOT_DIVISION'].keys() else ''
if isinstance(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'], dict):
if 'MAIN_SITE' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P'], list):
main_site = []
for item in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']:
if isinstance(item, dict):
main_site.append(item['#text'])
elif isinstance(item, str):
main_site.append(item)
else:
main_site.append(str(item))
d['MAIN_SITE'] = ','.join(main_site)
elif isinstance(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P'], dict):
d['MAIN_SITE'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']['#text']
else:
d['MAIN_SITE'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['MAIN_SITE']['P']
if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
if isinstance(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL'], dict):
d['OBJECT_DESCR_CPV_ADDITIONAL'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']['CPV_CODE']['@CODE'] if 'CPV_ADDITIONAL' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys() else ''
else:
d['OBJECT_DESCR_CPV_ADDITIONAL'] = ','.join([item['CPV_CODE']['@CODE'] for item in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['CPV_ADDITIONAL']])
if isinstance(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'], dict):
d['OBJECT_DESCR_n2016-NUTS'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS']['@CODE']
else:
d['OBJECT_DESCR_n2016-NUTS'] = ','.join(item['@CODE'] for item in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['n2016:NUTS'])
d['OBJECT_DESCR_SHORT_DESCR'] = ''.join([s['#text'] if isinstance(s, dict) else s for s in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['SHORT_DESCR']['P']])
if 'DURATION' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'].keys():
d['OBJECT_DESCR_DURATION'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['#text'] + ' ' + doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']['DURATION']['@TYPE']
elif isinstance(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR'], list):
cpv_add_lst, n2016_nuts_lst, short_dsc_lst, durr_lst, main_site_lst = [],[],[],[],[]
for each in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['OBJECT_DESCR']:
if 'MAIN_SITE' in each.keys():
if isinstance(each['MAIN_SITE']['P'], list):
for item in each['MAIN_SITE']['P']:
if isinstance(item, dict):
main_site_lst.append(item['#text'])
elif isinstance(item, str):
main_site_lst.append(item)
else:
main_site_lst.append(str(item))
elif isinstance(each['MAIN_SITE']['P'], dict):
main_site_lst.append(each['MAIN_SITE']['P']['#text'])
else:
main_site_lst.append(each['MAIN_SITE']['P'])
if 'CPV_ADDITIONAL' in each.keys():
if isinstance(each['CPV_ADDITIONAL'], dict):
cpv_add_lst.append(each['CPV_ADDITIONAL']['CPV_CODE']['@CODE'])
else:
cpv_add_lst.append(','.join([item['CPV_CODE']['@CODE'] for item in each['CPV_ADDITIONAL']]))
if isinstance(each['n2016:NUTS'], dict):
n2016_nuts_lst.append(each['n2016:NUTS']['@CODE'])
else:
n2016_nuts_lst.append(','.join([item['@CODE'] for item in each['n2016:NUTS']]))
if isinstance(each['SHORT_DESCR']['P'], list):
for item in each['SHORT_DESCR']['P']:
if isinstance(item, dict):
short_dsc_lst.append(item['#text'])
else:
short_dsc_lst.append(item)
else:
short_dsc_lst.append(each['SHORT_DESCR']['P'])
if 'DURATION' in each.keys():
durr_lst.append(each['DURATION']['#text']+' '+each['DURATION']['@TYPE'])
d['MAIN_SITE'] = '; '.join([str(x) if x is None else x for x in main_site_lst])
d['OBJECT_DESCR_CPV_ADDITIONAL'] = '; '.join(cpv_add_lst)
d['OBJECT_DESCR_n2016-NUTS'] = '; '.join(n2016_nuts_lst)
d['OBJECT_DESCR_SHORT_DESCR'] = '; '.join(short_dsc_lst)
d['OBJECT_DESCR_DURATION'] = '; '.join(durr_lst)
d['DATE_PUBLICATION_NOTICE'] = doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']['DATE_PUBLICATION_NOTICE'] if 'DATE_PUBLICATION_NOTICE' in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT'].keys() else ''
elif isinstance(doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT'], list):
titles, cpv_mains, cnt_types, shrt_dsc, val_est_tot_cur, val_est_tot = [],[],[],[],[],[]
tot_val_cur, tot_val, no_lot_div, max_lot, max_lot_tend, lot_all = [],[],[],[],[],[]
cpv_add, n2016_nuts, obj_dsc, durations, pub_not_date, main_site = [],[],[],[],[],[]
for each in doc['FORM_SECTION']['F01_2014'][EN_POS]['OBJECT_CONTRACT']:
if 'TITLE' in each.keys():
titles.append(each['TITLE']['P'])
if 'CPV_MAIN' in each.keys():
cpv_mains.append(each['CPV_MAIN']['CPV_CODE']['@CODE'])
if 'TYPE_CONTRACT' in each.keys():
cnt_types.append(each['TYPE_CONTRACT']['@CTYPE'])
if 'SHORT_DESCR' in each.keys():
if isinstance(each['SHORT_DESCR'], dict):
if isinstance(each['SHORT_DESCR']['P'], dict):
shrt_dsc.append(each['SHORT_DESCR']['P']['#text'])
else:
if isinstance(each['SHORT_DESCR']['P'], str):
shrt_dsc.append(each['SHORT_DESCR']['P'])
elif isinstance(each['SHORT_DESCR']['P'], list):
for s in each['SHORT_DESCR']['P']:
if isinstance(s, str):
shrt_dsc.append(s)
else:
shrt_dsc.append(s['#text'])
else:
for item in each['SHORT_DESCR']['P']:
if isinstance(item, str):
shrt_dsc.append(item)
if 'VAL_ESTIMATED_TOTAL' in each.keys():
val_est_tot_cur.append(each['VAL_ESTIMATED_TOTAL']['@CURRENCY'])
val_est_tot.append(each['VAL_ESTIMATED_TOTAL']['#text'])
if 'VAL_TOTAL' in each.keys():
tot_val_cur.append(each['VAL_TOTAL']['@CURRENCY'])
tot_val.append(each['VAL_TOTAL']['#text'])
if 'NO_LOT_DIVISION' in each.keys():
no_lot_div.append(each['NO_LOT_DIVISION'])
if 'LOT_DIVISION' in each.keys():
if each['LOT_DIVISION'] is not None:
if 'LOT_MAX_NUMBER' in each['LOT_DIVISION'].keys():
max_lot.append(each['LOT_DIVISION']['LOT_MAX_NUMBER'])
if 'LOT_MAX_ONE_TENDERER' in each['LOT_DIVISION'].keys():
max_lot_tend.append(each['LOT_DIVISION']['LOT_MAX_ONE_TENDERER'])
if 'LOT_ALL' in each['LOT_DIVISION'].keys():
lot_all.append(each['LOT_DIVISION']['LOT_ALL'])
if 'OBJECT_DESCR' in each.keys():
if isinstance(each['OBJECT_DESCR'], dict):
if 'MAIN_SITE' in each['OBJECT_DESCR'].keys():
if isinstance(each['OBJECT_DESCR']['MAIN_SITE']['P'], list):
for item in each['OBJECT_DESCR']['MAIN_SITE']['P']:
if isinstance(item, dict):
main_site.append(item['#text'])
elif isinstance(item, str):
main_site.append(item)
else:
main_site.append(str(item))
elif isinstance(each['OBJECT_DESCR']['MAIN_SITE']['P'], dict):
main_site.append(each['OBJECT_DESCR']['MAIN_SITE']['P']['#text'])
else:
main_site.append(each['OBJECT_DESCR']['MAIN_SITE']['P'])
if 'CPV_ADDITIONAL' in each['OBJECT_DESCR'].keys():
if isinstance(each['OBJECT_DESCR']['CPV_ADDITIONAL'], dict):
cpv_add.append(each['OBJECT_DESCR']['CPV_ADDITIONAL']['CPV_CODE']['@CODE'])
else:
cpv_add.append(','.join([item['CPV_CODE']['@CODE'] for item in each['OBJECT_DESCR']['CPV_ADDITIONAL']]))
if 'n2016:NUTS' in each['OBJECT_DESCR'].keys():
if isinstance(each['OBJECT_DESCR']['n2016:NUTS'], dict):
n2016_nuts.append(each['OBJECT_DESCR']['n2016:NUTS']['@CODE'])
else:
n2016_nuts.append(','.join([item['@CODE'] for item in each['OBJECT_DESCR']['n2016:NUTS']]))
if 'SHORT_DESCR' in each['OBJECT_DESCR'].keys():
if isinstance(each['OBJECT_DESCR']['SHORT_DESCR'], dict):
if isinstance(each['OBJECT_DESCR']['SHORT_DESCR']['P'], dict):
obj_dsc.append(each['OBJECT_DESCR']['SHORT_DESCR']['P']['#text'])
else:
if isinstance(each['OBJECT_DESCR']['SHORT_DESCR']['P'], str):
obj_dsc.append(each['OBJECT_DESCR']['SHORT_DESCR']['P'])
elif isinstance(each['OBJECT_DESCR']['SHORT_DESCR']['P'], list):
for s in each['OBJECT_DESCR']['SHORT_DESCR']['P']:
if isinstance(s, str):
obj_dsc.append(s)
else:
obj_dsc.append(s['#text'])
else:
obj_dsc.append(''.join([item for item in each['OBJECT_DESCR']['SHORT_DESCR']['P']]))
if 'DURATION' in each['OBJECT_DESCR'].keys():
durations.append(each['OBJECT_DESCR']['DURATION']['#text']+' '+each['OBJECT_DESCR']['DURATION']['@TYPE'])
elif isinstance(each['OBJECT_DESCR'], list):
for item in each['OBJECT_DESCR']:
if 'MAIN_SITE' in item.keys():
if isinstance(item['MAIN_SITE']['P'], list):
for ii in item['MAIN_SITE']['P']:
if isinstance(ii, dict):
main_site.append(ii['#text'])
elif isinstance(ii, str):
main_site.append(ii)
else:
main_site.append(str(ii))
elif isinstance(item['MAIN_SITE']['P'], dict):
main_site.append(item['MAIN_SITE']['P']['#text'])
else:
main_site.append(item['MAIN_SITE']['P'])
if 'CPV_ADDITIONAL' in item.keys():
if isinstance(item['CPV_ADDITIONAL'], dict):
cpv_add.append(item['CPV_ADDITIONAL']['CPV_CODE']['@CODE'])
else:
cpv_add.append(','.join([ii['CPV_CODE']['@CODE'] for ii in item['CPV_ADDITIONAL']]))
if 'n2016:NUTS' in item.keys():
if isinstance(item['n2016:NUTS'], dict):
n2016_nuts.append(item['n2016:NUTS']['@CODE'])
else:
n2016_nuts.append(','.join([item['@CODE'] for item in item['n2016:NUTS']]))
if 'SHORT_DESCR' in item.keys():
if isinstance(item['SHORT_DESCR'], dict):
if isinstance(item['SHORT_DESCR']['P'], dict):
obj_dsc.append(item['SHORT_DESCR']['P']['#text'])
else:
if isinstance(item['SHORT_DESCR']['P'], str):
obj_dsc.append(item['SHORT_DESCR']['P'])
elif isinstance(item['SHORT_DESCR']['P'], list):
for s in item['SHORT_DESCR']['P']: