/[formed]/trunk/tools/anonym/xmlimport.py
ViewVC logotype

Annotation of /trunk/tools/anonym/xmlimport.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 234 - (hide annotations)
Mon Feb 25 11:41:32 2008 UTC (17 years ago) by teichmann
File MIME type: text/x-python
File size: 22143 byte(s)
Added generation of SQL update statements.

1 teichmann 233 #!/usr/bin/env python
2     # -*- coding: utf-8 -*-
3     # (c) 2008 by Intevation GmbH
4     # author: Sascha L. Teichmann
5     #
6     from datetime import date
7    
8     from xml.sax.saxutils import DefaultHandler
9     from xml.sax import parse
10    
11     import sys
12    
13     def _int_converter(s):
14     return int(s)
15    
16     def _bool_converter(s):
17     return int(s)
18    
19     def _date_converter(s):
20     return date(*s.split("-"))
21    
22     def _choice_converter(s):
23     return int(s)
24    
25     def _radio_converter(s):
26     return int(s)
27    
28     def _text_converter(s):
29     return s
30    
31     RELATIONS = {
32     'master': {
33     "einverstaendniserklaerung": _bool_converter,
34     "fkz": _text_converter,
35     "name_kompetenzagentur": _text_converter,
36     "vorname": _text_converter,
37     "name": _text_converter,
38     "erstgespraech": _date_converter,
39     "zugang_kompetenzagentur": _choice_converter,
40     "kundennummer": _text_converter,
41     "schulpflichtig": _bool_converter,
42     "noch_schueler": _bool_converter,
43     "bei_eintritt_ist_der_jugendliche": _choice_converter,
44     "rechtlicher_kontext": _choice_converter,
45     "schnittstelle_zu": _choice_converter,
46     "kontaktdaten_arge": _text_converter,
47     "kundennummer_arge": _text_converter,
48     "kontaktdaten_agentur_fuer_arbeit": _text_converter,
49     "kundennummer_agentur_fuer_arbeit": _text_converter,
50     "kundennummer_jugendamt": _text_converter,
51     "kontaktdaten_jugendamt": _text_converter,
52     "kontaktdaten_schule": _text_converter,
53     "schulname": _text_converter,
54     "kontaktdaten_gerichtshilfe": _text_converter,
55     "kundennummer_gerichtshilfe": _text_converter,
56     "kontaktdaten_weitere_institutionen": _text_converter,
57     "vorname_1": _text_converter,
58     "name_1": _text_converter,
59     "geschlecht": _choice_converter,
60     "geburtsdatum": _date_converter,
61     "familienstand": _choice_converter,
62     "strasse": _text_converter,
63     "plz": _text_converter,
64     "wohnort": _text_converter,
65     "groesse_wohnort": _choice_converter,
66     "vorwahl": _text_converter,
67     "telefon_1": _text_converter,
68     "mobiltelefon": _text_converter,
69     "email": _text_converter,
70     "telefon_sonstige": _text_converter,
71     "zweiter_wohnort": _text_converter,
72     "geburtsland": _choice_converter,
73     "geburtsland_sonstige_nennung": _text_converter,
74     "muttersprache": _choice_converter,
75     "muttersprache_sonstige_nennung": _text_converter,
76     "staatsangehoerigkeit": _choice_converter,
77     "staatsangehoerigkeit_sonstige_nennung": _text_converter,
78     "aufenthaltsstatus": _choice_converter,
79     "aufenthaltsdauer": _int_converter,
80     "vater": _choice_converter,
81     "mutter": _choice_converter,
82     "familiaere_situation_1": _choice_converter,
83     "vorname_2": _text_converter,
84     "name_2": _text_converter,
85     "vorwahl_1": _text_converter,
86     "telefon_1_1": _text_converter,
87     "mobiltelefon_1": _text_converter,
88     "email_1": _text_converter,
89     "geschwister": _int_converter,
90     "anzahl_kinder": _int_converter,
91     "haushalt_jugendlicher": _int_converter,
92     "alleinerziehend": _choice_converter,
93     "familie_selbststaendig": _bool_converter,
94     "familie_staatliche_unterstuetzung": _bool_converter,
95     "jugendlicher_selbststaendig": _bool_converter,
96     "jugendlicher_staatliche_unterstuetzung": _bool_converter,
97     "jugendlicher_unterstuetzung_soziales_umfeld": _bool_converter,
98     "wohnaufenthalt": _choice_converter,
99     "arzt_gutachten_physisch": _bool_converter,
100     "physische_beeintraechtigungen": _choice_converter,
101     "physische_beeintraechtigungen_text": _text_converter,
102     "arzt_gutachten_psychisch": _bool_converter,
103     "psychische_beeintraechtigungen": _choice_converter,
104     "psychische_beeintraechtigungen_text": _text_converter,
105     "mutter_2": _bool_converter,
106     "vater_2": _bool_converter,
107     "grosseltern": _bool_converter,
108     "geschwister_2": _bool_converter,
109     "pflegefamilie_1": _bool_converter,
110     "stiefmutter": _bool_converter,
111     "stiefvater": _bool_converter,
112     "verwandte_1": _bool_converter,
113     "partner": _bool_converter,
114     "heimbetreuerin": _bool_converter,
115     "betreuerin": _bool_converter,
116     "lehrerin": _bool_converter,
117     "mitbewohner": _bool_converter,
118     "partner_mutter": _bool_converter,
119     "partner_vater": _bool_converter,
120     "freund": _bool_converter,
121     "keine_bezugsperson": _bool_converter,
122     "hobbies_1": _choice_converter,
123     "hobbies_text": _text_converter,
124     "mitarbeit_organisationen": _choice_converter,
125     "organisationen_vereine_text": _text_converter,
126     "sonstiges_1": _choice_converter,
127     "sonstiges_text": _text_converter,
128     "clique": _bool_converter,
129     "freundin": _bool_converter,
130     "parterin": _bool_converter,
131     "schule_2": _choice_converter,
132     "klassenstufe": _int_converter,
133     "klassenwiederholung": _choice_converter,
134     "abgang": _int_converter,
135     "nicht_anwesende_tage": _int_converter,
136     "unentschuldigte_tage": _int_converter,
137     "schulabschluss_1": _choice_converter,
138     "schulabschlusserwerbsland": _choice_converter,
139     "schulabschlusserwerbsland_sonstige_nennung": _text_converter,
140     "abschluss_betriebliche_ausbildung": _choice_converter,
141     "abschluss_im_ausbildungsberuf": _text_converter,
142     "ausbildungsdauer": _int_converter,
143     "wann_abgeschlossen": _date_converter,
144     "weitere_ausbildungen": _int_converter,
145     "weitere_ausbildungen_text": _text_converter,
146     "dauer_weitere_ausbildungen": _int_converter,
147     "abgebrochene_ausbildungen": _int_converter,
148     "abgebrochene_ausbildungen_text": _text_converter,
149     "abschluss_ausserbetriebliche_ausbildung": _choice_converter,
150     "abschluss_im_ausbildungsberuf_1": _text_converter,
151     "ausbildungsdauer_1": _int_converter,
152     "wann_abgeschlossen_1": _date_converter,
153     "weitere_ausbildungen_1": _int_converter,
154     "weitere_ausbildungen_text_1": _text_converter,
155     "dauer_weitere_ausbildungen_1": _int_converter,
156     "abgebrochene_ausbildungen_1": _int_converter,
157     "abgebrochene_ausbildungen_text_1": _text_converter,
158     "massnahmeteilnahme": _choice_converter,
159     "letzte_massnahme": _text_converter,
160     "finanzierung": _text_converter,
161     "austrittsdatum": _date_converter,
162     "dauer": _int_converter,
163     "weitere_massnahmen": _choice_converter,
164     "massnahme_1": _text_converter,
165     "massnahme1_finanzierung": _text_converter,
166     "massnahme_2": _text_converter,
167     "massnahme2_finanzierung": _text_converter,
168     "massnahme_3": _text_converter,
169     "massnahme3_finanzierung": _text_converter,
170     "abgebrochene_massnahmen": _int_converter,
171     "erwerbstaetigkeit_job": _choice_converter,
172     "letzte_taetigkeit": _text_converter,
173     "dauer_1": _int_converter,
174     "austrittsdatum_1": _date_converter,
175     "weitere_taetigkeiten": _int_converter,
176     "weitere_jobs_text": _text_converter,
177     "dauer_weitere_taetigkeiten": _int_converter,
178     "arbeitslosigkeit_1": _choice_converter,
179     "anzahl_arbeitslosigkeit": _int_converter,
180     "dauer_nach_letzter_beschaeftigung": _int_converter,
181     "dauer_insgesamt": _int_converter,
182     "wehrpflicht_zivildienst_freiwilligenjahr_1": _choice_converter,
183     "art_des_dienstes": _choice_converter,
184     "dauer_2": _int_converter,
185     "mutterschutz_erziehungsurlaub": _choice_converter,
186     "anzahl": _int_converter,
187     "dauer_letzter_erziehungsurlaub": _int_converter,
188     "dauer_insgesamt_1": _int_converter,
189     "kompetenzfeststellung": _choice_converter,
190     "zielsetzung": _choice_converter,
191     "begleitung": _choice_converter,
192     "welche_vermittlung_nennung": _text_converter,
193     "freie_dokumentation": _text_converter,
194     "bildender_bereich": _bool_converter,
195     "bereich_berufliche_qualifizierung": _bool_converter,
196     "bereich_berufsvorbereitung": _bool_converter,
197     "bereich_lebensbewaeltigung": _bool_converter,
198     "sonstiger_foerderbedarf": _bool_converter,
199     "sonstiger_foerderbedarf_nennung": _text_converter,
200     "foerderzeitraum_start": _date_converter,
201     "foerderzeitraum_ende": _date_converter,
202     "dokumentation_zum_foerderplan": _text_converter,
203     "anzahl_kontakte_termine": _int_converter,
204     "anzahl_der_stunden": _int_converter,
205     "zeitraum_fallmanagement": _int_converter,
206     "beendigung_5": _date_converter,
207     "art_beendigung": _choice_converter,
208     "abbruch_durch": _choice_converter,
209     "gruende_abbruch": _choice_converter,
210     "gruende_sonstiges_nennung_4": _text_converter,
211     "vermittlung": _choice_converter,
212     "vermittlung_nennung": _text_converter,
213     "veraenderungen_rechtskreis": _choice_converter,
214     "allgemein_bildender_schulabschluss": _choice_converter,
215     "allgemein_bildender_schulabschluss_sonstiges_nennung": _text_converter,
216     "massnahmeabschluss": _choice_converter,
217     "schulart": _choice_converter,
218     "schule_sonstiges_nennung": _text_converter,
219     "klassenstufe_1": _int_converter,
220     "ausbildung": _choice_converter,
221     "ausbildung_sonstiges_nennung": _text_converter,
222     "umschulung": _choice_converter,
223     "umschulung_nennung": _text_converter,
224     "arbeitstaetigkeit": _text_converter,
225     "erwerbstatus": _choice_converter,
226     "erwerbsstatus_sonstiges_nennung": _text_converter,
227     "beschaeftigungsumfang": _choice_converter,
228     "kategorien_nichterwerbsarbeit_nichtausbildung": _choice_converter,
229     "kategorien_sonstiges_nennung": _text_converter,
230     "zeitraum_nachbetreuung": _choice_converter,
231     "verbleib_nachbetreuung": _choice_converter,
232     "mitgliedschaft_organisationen_vereinen": _choice_converter,
233     "intensitaet_mitgliedschaft": _choice_converter,
234     "nutzung_kulturangeboten": _choice_converter,
235     "haeufigkeit": _choice_converter,
236     "soziales_engagement": _text_converter,
237     "unternehmungen_freunden": _choice_converter,
238     "unternehmungen_familie": _choice_converter,
239     "peergroup": _choice_converter,
240     "familie_1": _choice_converter,
241     "beziehung": _choice_converter,
242     "arbeit_schule": _choice_converter,
243     "bester_freund_freundin": _choice_converter,
244     "einschaetzung_zielerreichung": _choice_converter,
245     "erreichte_qualifikation": _choice_converter,
246     "integration_ist_nachhaltig": _choice_converter,
247     "selbststaendige_berufswegplanung": _choice_converter,
248     "eigenstaendige_lebensgestaltung": _choice_converter,
249     "soziale_bezugssysteme": _choice_converter,
250     "teilnahme_gesellschaftliches_leben": _choice_converter,
251     "freie_dokumentation_abschlussbewertung": _text_converter
252     },
253     'kompetenzfestellung': {
254     "verfahren_kompetenzfeststellung": _choice_converter,
255     "externeranbieter": _text_converter,
256     "assessment_center": _bool_converter,
257     "interview": _bool_converter,
258     "biografieorientierte_methoden": _bool_converter,
259     "selbsttest_selbstbeurteilung": _bool_converter,
260     "sonstiges_2": _bool_converter,
261     "artdesverfahrens_nennung_sonstiges": _text_converter,
262     "testverfahren": _bool_converter,
263     "intelligenztest": _bool_converter,
264     "intelligenztest_nennung": _text_converter,
265     "schultest": _bool_converter,
266     "schultest_nennung": _text_converter,
267     "leistungstest": _bool_converter,
268     "leistungstest_nennung": _text_converter,
269     "persoenlichkeitstest": _bool_converter,
270     "persoenlichkeitstest_nennung": _text_converter,
271     "einstellungs_interessentest": _bool_converter,
272     "einstellungs_interessentest_nennung": _text_converter,
273     "dauer_des_verfahrens": _choice_converter,
274     "rechenfaehigkeit": _choice_converter,
275     "raeumliches_vorstellungsvermoegen": _choice_converter,
276     "grundverstaendnis_naturwissenschaftlicher_zusammenhaenge": _choice_converter,
277     "logisches_denken": _choice_converter,
278     "wirtschaftliche_grundkenntnisse": _choice_converter,
279     "allgemeine_pc_kenntnisse": _choice_converter,
280     "spezielle_pc_kenntnisse_grafikbearbeitung_musikbearbeitung": _choice_converter,
281     "internet_anwendungen_und_e_mail_kenntnisse": _choice_converter,
282     "andere_medien": _choice_converter,
283     "hand_fingergeschick": _choice_converter,
284     "formauffassung": _choice_converter,
285     "umgang_maschinen_werkzeugen": _choice_converter,
286     "gestalterische_fantasie": _choice_converter,
287     "methoden_der_informationsgewinnung": _choice_converter,
288     "methoden_der_informationsverarbeitung": _choice_converter,
289     "einsatz_lern_und_arbeitstechniken": _choice_converter,
290     "problemloesungsorientierung": _choice_converter,
291     "texte_lesen_und_verstehen": _choice_converter,
292     "texte_schreiben_und_formulieren": _choice_converter,
293     "deutsche_sprache": _choice_converter,
294     "sprache1": _choice_converter,
295     "sprache1_sonstige_nennung": _text_converter,
296     "beherrschung_sprache1": _choice_converter,
297     "sprache2": _choice_converter,
298     "sprache2_sonstige_nennung": _text_converter,
299     "beherrschung_sprache2": _choice_converter,
300     "sprache3": _choice_converter,
301     "sprache3_sonstige_nennung": _text_converter,
302     "beherrschung_sprache3": _choice_converter,
303     "kommunikationsfaehigkeit": _choice_converter,
304     "kritikfaehigkeit": _choice_converter,
305     "konfliktfaehigkeit": _choice_converter,
306     "kreativitaet": _choice_converter,
307     "team_und_kooperationsfaehigkeit": _choice_converter,
308     "solidarisches_verhalten": _choice_converter,
309     "selbstaendiges_lernen_arbeiten": _choice_converter,
310     "selbstreflexion_selbsteinschaetzung": _choice_converter,
311     "verantwortungsuebernahme": _choice_converter,
312     "zielorientierung": _choice_converter,
313     "zuverlaessigkeit": _choice_converter,
314     "altersgerechter_entwicklungsstand": _choice_converter,
315     "gesundheitliche_voraussetzungen": _choice_converter,
316     "konzentration": _choice_converter,
317     "ausdauer": _choice_converter,
318     "durchhaltevermoegen": _choice_converter,
319     "merkfaehigkeit": _choice_converter,
320     "bearbeitungsgeschwindigkeit": _choice_converter,
321     "befaehigung_zu_daueraufmerksamkeit": _choice_converter,
322     "leistungsbereitschaft": _choice_converter,
323     "sorgfalt": _choice_converter,
324     "umgangsformen": _choice_converter,
325     "dokumentation_kompetenzfeststellung": _text_converter
326     },
327     'angebote_bildenden_bereich': {
328     "angebotsform": _choice_converter,
329     "art_der_unterstuetzung": _text_converter,
330     "durchfuehrende_institution": _text_converter,
331     "unterstuetzung_start": _date_converter,
332     "unterstuetzung_ende": _date_converter,
333     "zeitlicher_umfang_unterstuetzung": _int_converter,
334     "beendigung_1": _choice_converter,
335     "beendigung_durch": _choice_converter,
336     "gruende_vorzeitige_beendigung": _choice_converter,
337     "gruende_sonstiges_nennung": _text_converter,
338     "nachweis_bescheinigung": _choice_converter,
339     "sonstiges_nachweis_bescheinigung": _text_converter
340     },
341     'angebote_berufsvorbereitung': {
342     "angebotsform_1": _choice_converter,
343     "art_der_unterstuetzung_1": _choice_converter,
344     "unterstuetzung_sonstiges_nennung": _text_converter,
345     "durchfuehrende_institution_1": _text_converter,
346     "unterstuetzung_start_1": _date_converter,
347     "unterstuetzung_ende_1": _date_converter,
348     "zeitlicher_umfang_unterstuetzung_1": _int_converter,
349     "beendigung_2": _choice_converter,
350     "beendigung_durch_1": _choice_converter,
351     "gruende_vorzeitige_beendigung_1": _choice_converter,
352     "gruende_sonstiges_nennung_1": _text_converter,
353     "nachweis_bescheinigung_1": _choice_converter,
354     "sonstiges_nachweis_bescheinigung_1": _text_converter
355     },
356     'angebote_berufliche_qualifizierung': {
357     "angebotsform_2": _choice_converter,
358     "angebote_im_bereich": _choice_converter,
359     "unterstuetzung_sonstiges_nennung_1": _text_converter,
360     "durchfuehrende_institution_2": _text_converter,
361     "unterstuetzung_start_2": _date_converter,
362     "unterstuetzung_ende_2": _date_converter,
363     "zeitlicher_umfang_unterstuetzung_2": _int_converter,
364     "beendigung_3": _choice_converter,
365     "beendigung_durch_2": _choice_converter,
366     "gruende_vorzeitige_beendigung_2": _choice_converter,
367     "gruende_sonstiges_nennung_2": _text_converter,
368     "nachweis_bescheinigung_2": _choice_converter,
369     "sonstiges_nachweis_bescheinigung_2": _text_converter
370     },
371     'angebote_lebensbewaeltigung': {
372     "angebotsform_3": _choice_converter,
373     "unterstuetzung_angebotsform_sonstiges_nennung": _text_converter,
374     "art_der_unterstuetzung_2": _choice_converter,
375     "unterstuetzung_sonstiges_nennung_2": _text_converter,
376     "durchfuehrende_institution_3": _text_converter,
377     "unterstuetzung_start_3": _date_converter,
378     "unterstuetzung_ende_3": _date_converter,
379     "zeitlicher_umfang_unterstuetzung_3": _int_converter,
380     "beendigung_4": _choice_converter,
381     "beendigung_durch_3": _choice_converter,
382     "gruende_vorzeitige_beendigung_3": _choice_converter,
383     "gruende_sonstiges_nennung_3": _text_converter,
384     "nachweis_bescheinigung_3": _choice_converter,
385     "sonstiges_nachweis_bescheinigung_3": _text_converter
386     }
387     }
388    
389     EXPECT_CASES = 0
390     EXPECT_CASE = 1
391     EXPECT_RELATION = 2
392     EXPECT_FIELD = 3
393     EXPECT_CHARS = 4
394    
395 teichmann 234 SQL_UPATE = """UPDATE %s_tbl_view SET %s WHERE uuid_id = %%(uuid_id)s"""
396    
397 teichmann 233 class Case:
398     def __init__(self):
399     self.relations = []
400    
401     def append(self, relation):
402     self.relations.append(relation)
403    
404 teichmann 234
405 teichmann 233 class Relation:
406    
407     def __init__(self, name, items):
408     self.name = name
409     self.items = items
410     self.uuid = None
411     self.fields = []
412    
413     def append(self, field):
414     self.fields.append(field)
415    
416 teichmann 234 def update(self):
417     sets = []
418     values = {}
419     for k, v in self.fields:
420     sets.append("%s = %%(%s)s" % (k, k))
421     values[k] = v
422    
423     values['uuid_id'] = self.uuid
424    
425     sql = SQL_UPATE % (self.name, ", ".join(sets))
426    
427     print >> sys.stderr, sql
428    
429 teichmann 233 class XMLHandler(DefaultHandler):
430    
431     def __init__(self, case_store):
432     DefaultHandler.__init__(self)
433     self.mode = EXPECT_CASES
434     self.ignore = 0
435     self.relation = None
436     self.chars = None
437     self.case_store = case_store
438     self.case = None
439    
440     def startElement(self, name, attrs):
441     if self.mode == EXPECT_CASES:
442     if name != "cases":
443     print >> sys.stderr, "ignore %s" % name
444     self.ignore += 1
445     else:
446     self.mode = EXPECT_CASE
447    
448     elif self.mode == EXPECT_CASE:
449     if name != "case":
450     print >> sys.stderr, "ignore %s" % name
451     self.ignore += 1
452     else:
453     self.case = Case()
454     self.mode = EXPECT_RELATION
455    
456     elif self.mode == EXPECT_RELATION:
457     rel = RELATIONS.get(name)
458     if rel is None:
459     print >> sys.stderr, "relation '%s' not found" % name
460     self.ignore += 1
461     else:
462     #print >> sys.stderr, "relation '%s' found" % name
463     self.relation = Relation(name, rel)
464     self.mode = EXPECT_FIELD
465    
466     elif self.mode == EXPECT_FIELD:
467     self.mode = EXPECT_CHARS
468     self.chars = ""
469    
470     elif self.mode == EXPECT_CHARS:
471     self.ignore += 1
472    
473     def endElement(self, name):
474     if self.ignore > 0:
475     self.ignore -= 1
476     return
477    
478     if self.mode == EXPECT_CHARS:
479     if name != "uuid_id":
480     converter = self.relation.items.get(name)
481     if converter is None:
482     print >> sys.stderr, "missing converter for %s" % name
483     else:
484     if not self.chars:
485     self.relation.append((name, None))
486     else:
487     #print >> sys.stderr, "convert %s" % name
488     self.relation.append((name, converter(self.chars)))
489     else:
490     self.relation.uuid = self.chars.strip()
491     #print >> sys.stderr, "uuid: %s" % self.relation.uuid
492    
493     self.mode = EXPECT_FIELD
494     self.chars = None
495    
496     if self.mode == EXPECT_FIELD:
497     if self.relation and self.relation.name == name:
498     self.case.append(self.relation)
499     self.relation = None
500     self.mode = EXPECT_RELATION
501     else:
502     pass
503    
504     elif self.mode == EXPECT_RELATION:
505     if name == "case":
506     self.case_store.store(self.case)
507     self.case = None
508     self.mode = EXPECT_CASE
509    
510     elif self.mode == EXPECT_CASE:
511     if name == "cases":
512     self.mode = EXPECT_CASES
513    
514     def characters(self, content):
515     if self.mode == EXPECT_CHARS:
516     self.chars += content
517    
518     class CaseStore:
519    
520     def __init__(self):
521     pass
522    
523     def store(self, case):
524 teichmann 234 for rel in case.relations:
525     rel.update()
526 teichmann 233
527     def main():
528     case_store = CaseStore()
529     handler = XMLHandler(case_store)
530     parse(sys.stdin, handler)
531    
532     if __name__ == '__main__':
533     main()
534    
535     # vim:set ts=4 sw=4 si et sta sts=4:
536    

Properties

Name Value
svn:executable *

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26