[Mpuls-commits] r317 - in wasko/trunk: . waskaweb/controllers waskaweb/lib waskaweb/model waskaweb/templates
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Tue Mar 3 12:31:44 CET 2009
Author: teichmann
Date: 2009-03-03 12:31:22 +0100 (Tue, 03 Mar 2009)
New Revision: 317
Added:
wasko/trunk/waskaweb/lib/uuid.py
wasko/trunk/waskaweb/lib/xmlhelper.py
wasko/trunk/waskaweb/model/casexml.py
Modified:
wasko/trunk/ChangeLog.txt
wasko/trunk/waskaweb/controllers/case.py
wasko/trunk/waskaweb/lib/xmlimport.py
wasko/trunk/waskaweb/templates/main.mako
Log:
Initial code to import XML documents.
Modified: wasko/trunk/ChangeLog.txt
===================================================================
--- wasko/trunk/ChangeLog.txt 2009-02-27 11:28:47 UTC (rev 316)
+++ wasko/trunk/ChangeLog.txt 2009-03-03 11:31:22 UTC (rev 317)
@@ -1,3 +1,24 @@
+2009-03-03 Sascha L. Teichmann <teichmann at intevation.de>
+
+ Initial code to import XML documents. Parses the documents
+ correctly but does not write it to the database. TODO:
+ Apply rules to loaded cases to check for inconsistencies.
+
+ * waskaweb/model/casexml.py: New. Parses incoming XML files.
+
+ * waskaweb/controllers/case.py: Use new XML import model.
+
+ * waskaweb/lib/xmlimport.py: Removed WASKA dictionaries.
+ !!!This module is deprecated now!!!
+
+ * waskaweb/lib/xmlhelper.py: New. From Offline Client.
+ Various functions to make parsing the XML documents easier.
+
+ * waskaweb/lib/uuid.py: New. Fake UUID lib because Python 2.4
+ lacks that library.
+
+ * waskaweb/templates/main.mako: Enable XML import again.
+
2009-02-27 Sascha L. Teichmann <teichmann at intevation.de>
* waskaweb/i18n/de/LC_MESSAGES/waskaweb.po: Tagged as '0.2-preview'
Modified: wasko/trunk/waskaweb/controllers/case.py
===================================================================
--- wasko/trunk/waskaweb/controllers/case.py 2009-02-27 11:28:47 UTC (rev 316)
+++ wasko/trunk/waskaweb/controllers/case.py 2009-03-03 11:31:22 UTC (rev 317)
@@ -74,8 +74,10 @@
from waskaweb.model.phase_transition import symbol_phase, phase_neighbors
from waskaweb.lib.db import db
-from waskaweb.lib.xmlimport import importFromXML
+#from waskaweb.lib.xmlimport import importFromXML
+from waskaweb.model.casexml import import_xml
+
from waskaweb.controllers.appointment import DELETE_APPOINT_NOTIFICATION_SUCCESS, \
DELETE_APPOINT_NOTIFICATION_FAILED, \
DELETE_APPOINT_NOTIFICATION_TEXT_SUCCESS, \
@@ -448,11 +450,11 @@
def importXMLAction(self):
factory = CaseFactory()
try:
- xml = request.POST['xmlfile']
+ xml = request.POST['xmlfile']
conn = None
try:
conn = db.getConnection()
- importFromXML(xml.file, conn)
+ import_xml(xml.file, g.formedTree)
finally:
db.recycleConnection(conn)
@@ -462,6 +464,8 @@
c.url_ok = h.url_for(controller="/case_overview")
return render('/casemanagement/dialogs/success_xml_import.mako')
except:
+ import traceback, sys
+ traceback.print_exc(file = sys.stderr)
c.failed_for = IMPORTS_FAILED
c.failed_text = IMPORTS_FAILED_TEXT
c.url_ok = "/case/importCase"
Added: wasko/trunk/waskaweb/lib/uuid.py
===================================================================
--- wasko/trunk/waskaweb/lib/uuid.py 2009-02-27 11:28:47 UTC (rev 316)
+++ wasko/trunk/waskaweb/lib/uuid.py 2009-03-03 11:31:22 UTC (rev 317)
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright 2007, 2008, 2009 Intevation GmbH, Germany, <info at intevation.de>
+#
+# This file is part of mpuls WASKA (CoMPUter-based case fiLeS -
+# Web-Anwendungs-Server fuer Kompetenzagenturen).
+#
+# mpuls WASKA is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Affero General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# mpuls WASKA is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+# License for more details.
+#
+# You should have received a copy of the GNU Affero General Public
+# License along with mpuls WASKA. If not, see <http://www.gnu.org/licenses/>.
+#
+# mpuls WASKA has been developed on behalf of the
+# Projekttraeger im Deutschen Zentrum fuer Luft- und Raumfahrt e.V. (PT-DLR)
+# within the programme Kompetenzagenturen (Durchfuehrungsphase) funded by
+# the Bundesministerium fuer Familie, Senioren, Frauen und Jugend and
+# European Social Fund resources.
+#
+# Authors:
+# Sascha L. Teichmann <teichmann at intevation.de>
+#
+
+import os
+
+class UUID(object):
+
+ def __init__(self, bytes):
+
+ if len(bytes) != 16:
+ raise ValueError('bytes is not a 16-char string')
+
+ self.int = long(('%02x'*16) % tuple(map(ord, bytes)), 16)
+
+ def __str__(self):
+ hex = '%032x' % self.int
+ return '%s-%s-%s-%s-%s' % (
+ hex[:8], hex[8:12], hex[12:16], hex[16:20], hex[20:])
+
+def uuid4():
+ try:
+ return UUID(bytes=os.urandom(16), version=4)
+ except:
+ import random
+ bytes = [chr(random.randrange(256)) for i in range(16)]
+ return UUID(bytes=bytes, version=4)
+
+# vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 enc=utf-8 :
Added: wasko/trunk/waskaweb/lib/xmlhelper.py
===================================================================
--- wasko/trunk/waskaweb/lib/xmlhelper.py 2009-02-27 11:28:47 UTC (rev 316)
+++ wasko/trunk/waskaweb/lib/xmlhelper.py 2009-03-03 11:31:22 UTC (rev 317)
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+#
+# (c) 2008 by Intevation GmbH
+# This is Free software under the GPLv3.
+# See LICENSE comming with the source of 'mpuls offline'
+# for details.
+#
+# author: Sascha L. Teichmann <sascha.teichmann at intevation.de>
+#
+
+from xml.sax.handler import ContentHandler
+
+from datetime import datetime, date
+
+import re
+
+NO_NUMBER = re.compile("[^0-9\-]")
+INT_NUMBER = re.compile("(-?[0-9]+)")
+DATE = re.compile("([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2})")
+
+def iso_time_string(d):
+ ''' datetime.strftime() dislikes years before 1900. '''
+ return "%04d-%02d-%02dT%02d:%02d:%02d" % (
+ d.year, d.month, d.day, d.hour, d.minute, d.second)
+
+def string_iso_time(s):
+ return datetime.datetime.strptime(s.replace("-", ""), "%Y%m%dT%H:%M:%S")
+
+
+def decode_int(s):
+ s = NO_NUMBER.sub("", s)
+ m = INT_NUMBER.match(s)
+ if not m: return None
+ return int(m.group(1))
+
+def decode_date(s):
+ s = NO_NUMBER.sub("", s)
+ m = DATE.match(s)
+ if not m: return None
+ return date(int(m.group(1)), int(m.group(2)), int(m.group(3)))
+
+def decode_iso_datetime(s):
+ if not s: return None
+ try:
+ return string_iso_time(s)
+ except:
+ return None
+
+def iso_datetime_string(d):
+ return iso_time_string(d)
+
+class StackedLoader(ContentHandler):
+
+ def __init__(self):
+ ContentHandler.__init__(self)
+ self.factories = {}
+ self.current = None
+ self.depth = 0
+ self.entry_levels = None
+ self.stack = None
+
+ def add_factories(self, tag, factories, default):
+ self.factories[tag] = (factories, default)
+
+ def activate_factories(self, tag):
+ self.current = self.factories.get(tag)
+
+ def startElement(self, name, attrs):
+ new_factories = self.factories.get(name)
+
+ if new_factories:
+ self.entry_levels.append(self.depth)
+ self.current = new_factories
+
+ if self.current:
+ start, end = self.current[0].get(name, self.current[1])
+ start(name, attrs)
+ else:
+ end = None
+
+ self.stack.append((end, attrs, []))
+
+ self.depth += 1
+
+ def endElement(self, name):
+
+ t = self.stack.pop()
+
+ if t[0]: t[0](name, t[1], u"".join(t[2]))
+
+ self.depth -= 1
+ if self.entry_levels and self.entry_levels[-1] == self.depth:
+ self.entry_levels.pop()
+
+ def activate_factories(self, tag):
+ try:
+ self.current = self.factories[tag]
+ except KeyError:
+ pass
+
+ def characters(self, chars):
+ self.stack[-1][2].append(chars)
+
+ def startDocument(self):
+ self.depth = 0
+ self.entry_levels = []
+ self.stack = []
+
+# vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
Modified: wasko/trunk/waskaweb/lib/xmlimport.py
===================================================================
--- wasko/trunk/waskaweb/lib/xmlimport.py 2009-02-27 11:28:47 UTC (rev 316)
+++ wasko/trunk/waskaweb/lib/xmlimport.py 2009-03-03 11:31:22 UTC (rev 317)
@@ -56,421 +56,6 @@
UUID_RE = re.compile(r"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
RELATIONS = {
- 'master': {
- "einverstaendniserklaerung": _bool_converter,
- "phase": _choice_converter,
- "fkz": _text_converter,
- "name_kompetenzagentur": _text_converter,
- "vorname": _text_converter,
- "name": _text_converter,
- "erstgespraech": _date_converter,
- "war_cm_kunde": _bool_converter,
- "war_sw_kunde": _bool_converter,
- "zugang_kompetenzagentur": _choice_converter,
- "kundennummer": _text_converter,
- "schulpflichtig": _bool_converter,
- "noch_schueler": _bool_converter,
- "bei_eintritt_ist_der_jugendliche": _choice_converter,
- "rechtlicher_kontext": _choice_converter,
- "schnittstelle_zu": _choice_converter,
- "kontaktdaten_arge": _text_converter,
- "kundennummer_arge": _text_converter,
- "kontaktdaten_agentur_fuer_arbeit": _text_converter,
- "kundennummer_agentur_fuer_arbeit": _text_converter,
- "kundennummer_jugendamt": _text_converter,
- "kontaktdaten_jugendamt": _text_converter,
- "kontaktdaten_schule": _text_converter,
- "schulname": _text_converter,
- "kontaktdaten_gerichtshilfe": _text_converter,
- "kundennummer_gerichtshilfe": _text_converter,
- "kontaktdaten_weitere_institutionen": _text_converter,
- "vorname_1": _text_converter,
- "name_1": _text_converter,
- "geschlecht": _choice_converter,
- "geburtsdatum": _date_converter,
- "familienstand": _choice_converter,
- "strasse": _text_converter,
- "plz": _text_converter,
- "wohnort": _text_converter,
- "groesse_wohnort": _choice_converter,
- "vorwahl": _text_converter,
- "telefon_1": _text_converter,
- "mobiltelefon": _text_converter,
- "email": _text_converter,
- "telefon_sonstige": _text_converter,
- "zweiter_wohnort": _text_converter,
- "geburtsland": _choice_converter,
- "geburtsland_sonstige_nennung": _text_converter,
- "muttersprache": _choice_converter,
- "muttersprache_sonstige_nennung": _text_converter,
- "staatsangehoerigkeit": _choice_converter,
- "staatsangehoerigkeit_sonstige_nennung": _text_converter,
- "aufenthaltsstatus": _choice_converter,
- "aufenthaltsdauer": _int_converter,
- "vater": _choice_converter,
- "mutter": _choice_converter,
- "familiaere_situation_1": _choice_converter,
- "vorname_2": _text_converter,
- "name_2": _text_converter,
- "vorwahl_1": _text_converter,
- "telefon_1_1": _text_converter,
- "mobiltelefon_1": _text_converter,
- "email_1": _text_converter,
- "geschwister": _int_converter,
- "anzahl_kinder": _int_converter,
- "haushalt_jugendlicher": _int_converter,
- "alleinerziehend": _choice_converter,
- "familie_selbststaendig": _bool_converter,
- "familie_staatliche_unterstuetzung": _bool_converter,
- "jugendlicher_selbststaendig": _bool_converter,
- "jugendlicher_staatliche_unterstuetzung": _bool_converter,
- "jugendlicher_unterstuetzung_soziales_umfeld": _bool_converter,
- "wohnaufenthalt": _choice_converter,
- "arzt_gutachten_physisch": _bool_converter,
- "physische_beeintraechtigungen": _choice_converter,
- "physische_beeintraechtigungen_text": _text_converter,
- "arzt_gutachten_psychisch": _bool_converter,
- "psychische_beeintraechtigungen": _choice_converter,
- "psychische_beeintraechtigungen_text": _text_converter,
- "anerkannte_behinderung": _choice_converter,
- "mutter_2": _bool_converter,
- "vater_2": _bool_converter,
- "grosseltern": _bool_converter,
- "geschwister_2": _bool_converter,
- "pflegefamilie_1": _bool_converter,
- "stiefmutter": _bool_converter,
- "stiefvater": _bool_converter,
- "verwandte_1": _bool_converter,
- "partner": _bool_converter,
- "heimbetreuerin": _bool_converter,
- "betreuerin": _bool_converter,
- "lehrerin": _bool_converter,
- "mitbewohner": _bool_converter,
- "partner_mutter": _bool_converter,
- "partner_vater": _bool_converter,
- "freund": _bool_converter,
- "keine_bezugsperson": _bool_converter,
- "hobbies_1": _choice_converter,
- "hobbies_text": _text_converter,
- "mitarbeit_organisationen": _choice_converter,
- "organisationen_vereine_text": _text_converter,
- "sonstiges_1": _choice_converter,
- "sonstiges_text": _text_converter,
- "clique": _bool_converter,
- "freundin": _bool_converter,
- "parterin": _bool_converter,
- "schule_2": _choice_converter,
- "klassenstufe": _int_converter,
- "klassenwiederholung": _choice_converter,
- "abgang": _int_converter,
- "nicht_anwesende_tage": _int_converter,
- "unentschuldigte_tage": _int_converter,
- "schulabschluss_1": _choice_converter,
- "schulabschlusserwerbsland": _choice_converter,
- "schulabschlusserwerbsland_sonstige_nennung": _text_converter,
- "abschluss_betriebliche_ausbildung": _choice_converter,
- "abschluss_im_ausbildungsberuf": _text_converter,
- "ausbildungsdauer": _int_converter,
- "wann_abgeschlossen": _date_converter,
- "weitere_ausbildungen": _int_converter,
- "weitere_ausbildungen_text": _text_converter,
- "dauer_weitere_ausbildungen": _int_converter,
- "abgebrochene_ausbildungen": _int_converter,
- "abgebrochene_ausbildungen_text": _text_converter,
- "abschluss_ausserbetriebliche_ausbildung": _choice_converter,
- "abschluss_im_ausbildungsberuf_1": _text_converter,
- "ausbildungsdauer_1": _int_converter,
- "wann_abgeschlossen_1": _date_converter,
- "weitere_ausbildungen_1": _int_converter,
- "weitere_ausbildungen_text_1": _text_converter,
- "dauer_weitere_ausbildungen_1": _int_converter,
- "abgebrochene_ausbildungen_1": _int_converter,
- "abgebrochene_ausbildungen_text_1": _text_converter,
- "massnahmeteilnahme": _choice_converter,
- "letzte_massnahme": _text_converter,
- "finanzierung": _text_converter,
- "austrittsdatum": _date_converter,
- "dauer": _int_converter,
- "weitere_massnahmen": _choice_converter,
- "massnahme_1": _text_converter,
- "massnahme1_finanzierung": _text_converter,
- "massnahme_2": _text_converter,
- "massnahme2_finanzierung": _text_converter,
- "massnahme_3": _text_converter,
- "massnahme3_finanzierung": _text_converter,
- "abgebrochene_massnahmen": _int_converter,
- "erwerbstaetigkeit_job": _choice_converter,
- "letzte_taetigkeit": _text_converter,
- "dauer_1": _int_converter,
- "austrittsdatum_1": _date_converter,
- "weitere_taetigkeiten": _int_converter,
- "weitere_jobs_text": _text_converter,
- "dauer_weitere_taetigkeiten": _int_converter,
- "arbeitslosigkeit_1": _choice_converter,
- "anzahl_arbeitslosigkeit": _int_converter,
- "dauer_nach_letzter_beschaeftigung": _int_converter,
- "dauer_insgesamt": _int_converter,
- "bezug_alg1": _choice_converter,
- "bezug_alg2": _choice_converter,
- "wehrpflicht_zivildienst_freiwilligenjahr_1": _choice_converter,
- "art_des_dienstes": _choice_converter,
- "dauer_2": _int_converter,
- "mutterschutz_erziehungsurlaub": _choice_converter,
- "anzahl": _int_converter,
- "dauer_letzter_erziehungsurlaub": _int_converter,
- "dauer_insgesamt_1": _int_converter,
- "kompetenzfeststellung": _choice_converter,
- "datum_feststellung": _date_converter,
- "zielsetzung": _choice_converter,
- "begleitung": _choice_converter,
- "welche_vermittlung_nennung": _text_converter,
- "beratungsfortsetzung": _text_converter,
- "datum_ende_beratung": _date_converter,
- "freie_dokumentation": _text_converter,
- "vereinbarung_foerderplan": _date_converter,
- "bildender_bereich": _bool_converter,
- "bereich_berufliche_qualifizierung": _bool_converter,
- "bereich_berufsvorbereitung": _bool_converter,
- "bereich_lebensbewaeltigung": _bool_converter,
- "sonstiger_foerderbedarf": _bool_converter,
- "sonstiger_foerderbedarf_nennung": _text_converter,
- "foerderzeitraum_start": _date_converter,
- "foerderzeitraum_ende": _date_converter,
- "dokumentation_zum_foerderplan": _text_converter,
- "anzahl_kontakte_termine": _int_converter,
- "anzahl_der_stunden": _int_converter,
- "zeitraum_fallmanagement": _int_converter,
- "beendigung_5": _date_converter,
- "art_beendigung": _choice_converter,
- "abbruch_durch": _choice_converter,
- "gruende_abbruch": _choice_converter,
- "gruende_sonstiges_nennung_4": _text_converter,
- "vermittlung": _choice_converter,
- "vermittlung_nennung": _text_converter,
- "veraenderungen_rechtskreis": _choice_converter,
- "allgemein_bildender_schulabschluss": _choice_converter,
- "allgemein_bildender_schulabschluss_sonstiges_nennung": _text_converter,
- "massnahmeabschluss": _choice_converter,
- "schulart": _choice_converter,
- "schule_sonstiges_nennung": _text_converter,
- "klassenstufe_1": _int_converter,
- "ausbildung": _choice_converter,
- "ausbildung_sonstiges_nennung": _text_converter,
- "umschulung": _choice_converter,
- "umschulung_nennung": _text_converter,
- "arbeitstaetigkeit": _text_converter,
- "erwerbstatus": _choice_converter,
- "erwerbsstatus_sonstiges_nennung": _text_converter,
- "beschaeftigungsumfang": _choice_converter,
- "kategorien_nichterwerbsarbeit_nichtausbildung": _choice_converter,
- "kategorien_sonstiges_nennung": _text_converter,
- "beendigung_nachbetreuung": _date_converter,
- "zeitraum_nachbetreuung": _choice_converter,
- "verbleib_nachbetreuung": _choice_converter,
- "mitgliedschaft_organisationen_vereinen": _choice_converter,
- "intensitaet_mitgliedschaft": _choice_converter,
- "nutzung_kulturangeboten": _choice_converter,
- "haeufigkeit": _choice_converter,
- "soziales_engagement": _text_converter,
- "unternehmungen_freunden": _choice_converter,
- "unternehmungen_familie": _choice_converter,
- "peergroup": _choice_converter,
- "familie_1": _choice_converter,
- "beziehung": _choice_converter,
- "arbeit_schule": _choice_converter,
- "bester_freund_freundin": _choice_converter,
- "einhaltungtermine": _choice_converter,
- "eigenstaendigeamtsgaenge": _choice_converter,
- "entwurflebensplaene": _choice_converter,
- "umgangmitproblemen": _choice_converter,
- "einschaetzung_zielerreichung": _choice_converter,
- "erreichte_qualifikation": _choice_converter,
- "integration_ist_nachhaltig": _choice_converter,
- "selbststaendige_berufswegplanung": _choice_converter,
- "eigenstaendige_lebensgestaltung": _choice_converter,
- "soziale_bezugssysteme": _choice_converter,
- "teilnahme_gesellschaftliches_leben": _choice_converter,
- "freie_dokumentation_abschlussbewertung": _text_converter
- },
- 'kompetenzfestellung': {
- "verfahren_kompetenzfeststellung": _choice_converter,
- "externeranbieter": _text_converter,
- "assessment_center": _bool_converter,
- "interview": _bool_converter,
- "biografieorientierte_methoden": _bool_converter,
- "selbsttest_selbstbeurteilung": _bool_converter,
- "sonstiges_2": _bool_converter,
- "artdesverfahrens_nennung_sonstiges": _text_converter,
- "testverfahren": _bool_converter,
- "intelligenztest": _bool_converter,
- "intelligenztest_nennung": _text_converter,
- "schultest": _bool_converter,
- "schultest_nennung": _text_converter,
- "leistungstest": _bool_converter,
- "leistungstest_nennung": _text_converter,
- "persoenlichkeitstest": _bool_converter,
- "persoenlichkeitstest_nennung": _text_converter,
- "einstellungs_interessentest": _bool_converter,
- "einstellungs_interessentest_nennung": _text_converter,
- "beginn_des_verfahrens": _date_converter,
- "dauer_des_verfahrens": _choice_converter,
- "rechenfaehigkeit": _choice_converter,
- "raeumliches_vorstellungsvermoegen": _choice_converter,
- "grundverstaendnis_naturwissenschaftlicher_zusammenhaenge": _choice_converter,
- "logisches_denken": _choice_converter,
- "wirtschaftliche_grundkenntnisse": _choice_converter,
- "allgemeine_pc_kenntnisse": _choice_converter,
- "spezielle_pc_kenntnisse_grafikbearbeitung_musikbearbeitung": _choice_converter,
- "internet_anwendungen_und_e_mail_kenntnisse": _choice_converter,
- "andere_medien": _choice_converter,
- "hand_fingergeschick": _choice_converter,
- "formauffassung": _choice_converter,
- "umgang_maschinen_werkzeugen": _choice_converter,
- "gestalterische_fantasie": _choice_converter,
- "methoden_der_informationsgewinnung": _choice_converter,
- "methoden_der_informationsverarbeitung": _choice_converter,
- "einsatz_lern_und_arbeitstechniken": _choice_converter,
- "problemloesungsorientierung": _choice_converter,
- "texte_lesen_und_verstehen": _choice_converter,
- "texte_schreiben_und_formulieren": _choice_converter,
- "deutsche_sprache": _choice_converter,
- "sprache1": _choice_converter,
- "sprache1_sonstige_nennung": _text_converter,
- "beherrschung_sprache1": _choice_converter,
- "sprache2": _choice_converter,
- "sprache2_sonstige_nennung": _text_converter,
- "beherrschung_sprache2": _choice_converter,
- "sprache3": _choice_converter,
- "sprache3_sonstige_nennung": _text_converter,
- "beherrschung_sprache3": _choice_converter,
- "kommunikationsfaehigkeit": _choice_converter,
- "kritikfaehigkeit": _choice_converter,
- "konfliktfaehigkeit": _choice_converter,
- "kreativitaet": _choice_converter,
- "team_und_kooperationsfaehigkeit": _choice_converter,
- "solidarisches_verhalten": _choice_converter,
- "selbstaendiges_lernen_arbeiten": _choice_converter,
- "selbstreflexion_selbsteinschaetzung": _choice_converter,
- "verantwortungsuebernahme": _choice_converter,
- "zielorientierung": _choice_converter,
- "zuverlaessigkeit": _choice_converter,
- "altersgerechter_entwicklungsstand": _choice_converter,
- "gesundheitliche_voraussetzungen": _choice_converter,
- "konzentration": _choice_converter,
- "ausdauer": _choice_converter,
- "durchhaltevermoegen": _choice_converter,
- "merkfaehigkeit": _choice_converter,
- "bearbeitungsgeschwindigkeit": _choice_converter,
- "befaehigung_zu_daueraufmerksamkeit": _choice_converter,
- "leistungsbereitschaft": _choice_converter,
- "sorgfalt": _choice_converter,
- "umgangsformen": _choice_converter,
- "dokumentation_kompetenzfeststellung": _text_converter
- },
- 'angebote_bildenden_bereich': {
- "angebotsform": _choice_converter,
- "art_der_unterstuetzung": _text_converter,
- "durchfuehrende_institution": _text_converter,
- "zielsetzungangebot": _text_converter,
- "indikator_1": _text_converter,
- "bewertung_manager_1": _choice_converter,
- "bewertung_jugendlicher_1": _choice_converter,
- "indikator_2": _text_converter,
- "bewertung_manager_2": _choice_converter,
- "bewertung_jugendlicher_2": _choice_converter,
- "indikator_3": _text_converter,
- "bewertung_manager_3": _choice_converter,
- "bewertung_jugendlicher_3": _choice_converter,
- "zielerreichung": _text_converter,
- "unterstuetzung_start": _date_converter,
- "unterstuetzung_ende": _date_converter,
- "zeitlicher_umfang_unterstuetzung": _int_converter,
- "beendigung_1": _choice_converter,
- "beendigung_durch": _choice_converter,
- "gruende_vorzeitige_beendigung": _choice_converter,
- "gruende_sonstiges_nennung": _text_converter,
- "nachweis_bescheinigung": _choice_converter,
- "sonstiges_nachweis_bescheinigung": _text_converter
- },
- 'angebote_berufsvorbereitung': {
- "angebotsform_1": _choice_converter,
- "art_der_unterstuetzung_1": _choice_converter,
- "unterstuetzung_sonstiges_nennung": _text_converter,
- "durchfuehrende_institution_1": _text_converter,
- "zielsetzungangebot": _text_converter,
- "indikator_1": _text_converter,
- "bewertung_manager_1": _choice_converter,
- "bewertung_jugendlicher_1": _choice_converter,
- "indikator_2": _text_converter,
- "bewertung_manager_2": _choice_converter,
- "bewertung_jugendlicher_2": _choice_converter,
- "indikator_3": _text_converter,
- "bewertung_manager_3": _choice_converter,
- "bewertung_jugendlicher_3": _choice_converter,
- "zielerreichung": _text_converter,
- "unterstuetzung_start_1": _date_converter,
- "unterstuetzung_ende_1": _date_converter,
- "zeitlicher_umfang_unterstuetzung_1": _int_converter,
- "beendigung_2": _choice_converter,
- "beendigung_durch_1": _choice_converter,
- "gruende_vorzeitige_beendigung_1": _choice_converter,
- "gruende_sonstiges_nennung_1": _text_converter,
- "nachweis_bescheinigung_1": _choice_converter,
- "sonstiges_nachweis_bescheinigung_1": _text_converter
- },
- 'angebote_berufliche_qualifizierung': {
- "angebotsform_2": _choice_converter,
- "angebote_im_bereich": _choice_converter,
- "unterstuetzung_sonstiges_nennung_1": _text_converter,
- "durchfuehrende_institution_2": _text_converter,
- "zielsetzungangebot": _text_converter,
- "indikator_1": _text_converter,
- "bewertung_manager_1": _choice_converter,
- "bewertung_jugendlicher_1": _choice_converter,
- "indikator_2": _text_converter,
- "bewertung_manager_2": _choice_converter,
- "bewertung_jugendlicher_2": _choice_converter,
- "indikator_3": _text_converter,
- "bewertung_manager_3": _choice_converter,
- "bewertung_jugendlicher_3": _choice_converter,
- "zielerreichung": _text_converter,
- "unterstuetzung_start_2": _date_converter,
- "unterstuetzung_ende_2": _date_converter,
- "zeitlicher_umfang_unterstuetzung_2": _int_converter,
- "beendigung_3": _choice_converter,
- "beendigung_durch_2": _choice_converter,
- "gruende_vorzeitige_beendigung_2": _choice_converter,
- "gruende_sonstiges_nennung_2": _text_converter,
- "nachweis_bescheinigung_2": _choice_converter,
- "sonstiges_nachweis_bescheinigung_2": _text_converter
- },
- 'angebote_lebensbewaeltigung': {
- "angebotsform_3": _choice_converter,
- "unterstuetzung_angebotsform_sonstiges_nennung": _text_converter,
- "art_der_unterstuetzung_2": _choice_converter,
- "unterstuetzung_sonstiges_nennung_2": _text_converter,
- "durchfuehrende_institution_3": _text_converter,
- "zielsetzungangebot": _text_converter,
- "indikator_1": _text_converter,
- "bewertung_manager_1": _choice_converter,
- "bewertung_jugendlicher_1": _choice_converter,
- "indikator_2": _text_converter,
- "bewertung_manager_2": _choice_converter,
- "bewertung_jugendlicher_2": _choice_converter,
- "indikator_3": _text_converter,
- "bewertung_manager_3": _choice_converter,
- "bewertung_jugendlicher_3": _choice_converter,
- "zielerreichung": _text_converter,
- "unterstuetzung_start_3": _date_converter,
- "unterstuetzung_ende_3": _date_converter,
- "zeitlicher_umfang_unterstuetzung_3": _int_converter,
- "beendigung_4": _choice_converter,
- "beendigung_durch_3": _choice_converter,
- "gruende_vorzeitige_beendigung_3": _choice_converter,
- "gruende_sonstiges_nennung_3": _text_converter,
- "nachweis_bescheinigung_3": _choice_converter,
- "sonstiges_nachweis_bescheinigung_3": _text_converter
- }
}
CREATE_FUNCTIONS = {
Added: wasko/trunk/waskaweb/model/casexml.py
===================================================================
--- wasko/trunk/waskaweb/model/casexml.py 2009-02-27 11:28:47 UTC (rev 316)
+++ wasko/trunk/waskaweb/model/casexml.py 2009-03-03 11:31:22 UTC (rev 317)
@@ -0,0 +1,289 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright 2007, 2008, 2009 Intevation GmbH, Germany, <info at intevation.de>
+#
+# This file is part of mpuls WASKA (CoMPUter-based case fiLeS -
+# Web-Anwendungs-Server fuer Kompetenzagenturen).
+#
+# mpuls WASKA is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Affero General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# mpuls WASKA is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+# License for more details.
+#
+# You should have received a copy of the GNU Affero General Public
+# License along with mpuls WASKA. If not, see <http://www.gnu.org/licenses/>.
+#
+# mpuls WASKA has been developed on behalf of the
+# Projekttraeger im Deutschen Zentrum fuer Luft- und Raumfahrt e.V. (PT-DLR)
+# within the programme Kompetenzagenturen (Durchfuehrungsphase) funded by
+# the Bundesministerium fuer Familie, Senioren, Frauen und Jugend and
+# European Social Fund resources.
+#
+# Authors:
+# Sascha L. Teichmann <teichmann at intevation.de>
+#
+
+from waskaweb.lib.uuid import uuid4
+
+from waskaweb.lib.xmlhelper import \
+ decode_int, \
+ decode_date, \
+ decode_iso_datetime, \
+ StackedLoader
+
+import waskaweb.model.data as data
+
+from xml.sax import make_parser
+from xml.sax.saxutils import escape
+
+import sys
+
+VERSION = 2
+
+DECODERS = {
+ data.RadioNode: decode_int,
+ data.TextAreaLeaf: lambda s: s,
+ data.TextLeaf: lambda s: s,
+ data.ChoiceNode: decode_int,
+ data.IntLeaf: decode_int,
+ data.DateLeaf: decode_date
+}
+
+class LogbookEntry(object):
+
+ def __init__(self, uuid = None):
+ self.uuid = uuid
+ self.datum = None
+ self.art = None
+ self.bearbeiter = None
+ self.kurz_notiz = None
+ self.notiz = None
+ self.dauer = None
+
+ def getUUID(self):
+ if not self.uuid:
+ self.uuid = str(uuid4())
+ return self.uuid
+
+ def setUUID(self, uuid):
+ self.uuid = uuid
+
+ def setDate(self, datum):
+ self.datum = datum
+
+ def getDate(self):
+ return dd_mm_YYYY(self.datum)
+
+ def getTime(self):
+ return HH_MM(self.datum)
+
+ def setEditor(self, editor):
+ self.bearbeiter = editor
+
+ def getEditor(self):
+ if self.bearbeiter is None: return u""
+ return self.bearbeiter
+
+ def getType(self):
+ return self.art
+
+ def setType(self, art):
+ self.art = art
+
+ def getDuration(self):
+ if self.dauer is None: return u""
+ return "%d" % self.dauer
+
+ def setDuration(self, duration):
+ self.dauer = duration
+
+ def getShortNotice(self):
+ if self.kurz_notiz is None: return u""
+ return self.kurz_notiz
+
+ def setShortNotice(self, short_notice):
+ self.kurz_notiz = short_notice
+
+ def getNotice(self):
+ if self.notiz is None: return u""
+ return self.notiz
+
+ def setNotice(self, notice):
+ self.notiz = notice
+
+ def to_xml(self, out):
+ out.append(u'<tagebuch-eintrag>')
+
+ if not self.uuid is None:
+ out.append(u'<uuid_id>%s</uuid_id>' % self.uuid)
+
+ if not self.datum is None:
+ out.append(u'<tagebuch-datum>%s</tagebuch-datum>' % \
+ iso_datetime_string(self.datum))
+
+ if not self.bearbeiter is None:
+ out.append(u'<tagebuch-bearbeiter>%s</tagebuch-bearbeiter>' % \
+ escape(self.bearbeiter))
+
+ if not self.art is None:
+ out.append(u'<tagebuch-art>%d</tagebuch-art>' % \
+ self.art)
+
+ if not self.kurz_notiz is None:
+ out.append(u'<tagebuch-sonstiges>%s</tagebuch-sonstiges>' % \
+ escape(self.kurz_notiz))
+
+ if not self.notiz is None:
+ out.append(u'<tagebuch-notiz>%s</tagebuch-notiz>' % \
+ escape(self.notiz))
+
+ if not self.dauer is None:
+ out.append(u'<tagebuch-dauer>%d</tagebuch-dauer>' % self.dauer)
+
+ out.append(u'</tagebuch-eintrag>')
+
+class Logbook(object):
+
+ def __init__(self):
+ self.entries = []
+
+ def to_xml(self):
+ if not self.entries: return u""
+ out = [u"<tagebuch>"]
+ for entry in self.entries:
+ entry.to_xml(out)
+ out.append(u"</tagebuch>")
+ return u"".join(out)
+
+ def add_entry(self, entry):
+ self.entries.append(entry)
+
+class LogbookLoader(object):
+
+ def __init__(self):
+ self.logbook = Logbook()
+ self.entry = None
+
+ def register_loader(self, loader):
+
+ factories = {
+ u"tagebuch": (self.default_start, self.default_end),
+ u"tagebuch-eintrag": (self.eintrag_start, self.eintrag_end),
+ u"uuid_id": (self.default_start, self.uuid_end),
+ u'tagebuch-datum': (self.default_start, self.datum_end),
+ u'tagebuch-art': (self.default_start, self.art_end),
+ u'tagebuch-sonstiges': (self.default_start, self.kurz_end),
+ u'tagebuch-bearbeiter': (self.default_start, self.bearbeiter_end),
+ u'tagebuch-notiz': (self.default_start, self.notiz_end),
+ u'tagebuch-dauer': (self.default_start, self.dauer_end),
+ }
+
+ loader.add_factories(
+ u"tagebuch",
+ factories,
+ (self.default_start, self.default_end))
+
+ def art_end(self, name, attrs, value):
+ if self.entry:
+ value = decode_int(value)
+ if not value is None: self.entry.setType(value)
+
+ def dauer_end(self, name, attrs, value):
+ if self.entry: self.entry.dauer = decode_int(value)
+
+ def bearbeiter_end(self, name, attrs, value):
+ if self.entry: self.entry.bearbeiter = value
+
+ def notiz_end(self, name, attrs, value):
+ if self.entry: self.entry.notiz = value
+
+ def kurz_end(self, name, attrs, value):
+ if self.entry: self.entry.kurz_notiz = value
+
+ def datum_end(self, name, attrs, value):
+ if self.entry:
+ self.entry.datum = decode_iso_datetime(value.strip())
+
+ def eintrag_start(self, name, attrs):
+ self.entry = LogbookEntry()
+
+ def eintrag_end(self, name, attrs, value):
+ if not self.entry.uuid:
+ self.entry.uuid = str(uuid4())
+ self.logbook.entries.append(self.entry)
+ self.entry = None
+
+ def uuid_end(self, name, attrs, value):
+ if self.entry: self.entry.uuid = value.strip()
+
+ def default_start(self, name, attrs):
+ pass
+
+ def default_end(self, name, attrs, value):
+ pass
+
+
+class MasterHandler(object):
+
+ def __init__(self, formed):
+ self.formed = formed
+ self.version = 1
+ self.uuid = None
+ self.data = []
+
+ def element_start(self, name, attrs):
+ if name == u"cases":
+ try:
+ self.version = int(attrs[u'version'])
+ except (KeyError, ValueError):
+ pass
+
+ if self.version > VERSION:
+ raise Exception(
+ "Cannot load files of version %d." % version)
+
+ def element_end(self, name, attrs, value):
+ print >> sys.stderr, "looking for '%s'" % repr(name)
+
+ try:
+ widget = self.formed.widgets[name]
+ except KeyError:
+ if name == u'uuid_id':
+ self.uuid = value
+ return
+
+ self.data.append((name, DECODERS.get(widget.__class__, lambda s: s)(value)))
+
+def import_xml(f, formed):
+
+ master_handler = MasterHandler(formed)
+
+ loader = StackedLoader()
+
+ loader.add_factories(
+ 'master',
+ {},
+ (master_handler.element_start, master_handler.element_end))
+ loader.activate_factories('master') # for backwards compat
+
+ logbook_loader = LogbookLoader()
+
+ logbook_loader.register_loader(loader)
+
+ parser = make_parser()
+ parser.setContentHandler(loader)
+ parser.parse(f)
+
+ #print >> sys.stderr, repr(master_handler.data)
+
+ logbook = logbook_loader.logbook
+
+ #print >> sys.stderr, repr(logbook.to_xml())
+
+
+# vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 enc=utf-8 :
Modified: wasko/trunk/waskaweb/templates/main.mako
===================================================================
--- wasko/trunk/waskaweb/templates/main.mako 2009-02-27 11:28:47 UTC (rev 316)
+++ wasko/trunk/waskaweb/templates/main.mako 2009-03-03 11:31:22 UTC (rev 317)
@@ -68,7 +68,7 @@
<li><a href="${h.url_for(controller='/case_overview', action='overview', reset=1)}"> ${_('menu_cm_link_overview')}</a> </li>
% if h.hasRole(['cm_ka']):
<li><a href="${h.url_for(controller='/case', action='new')}"> ${_('menu_cm_link_new')}</a> </li>
- ##<li><a href="${h.url_for(controller='/case', action='importCase')}"> ${_('menu_cm_link_import')}</a> </li>
+ <li><a href="${h.url_for(controller='/case', action='importCase')}"> ${_('menu_cm_link_import')}</a> </li>
% endif
<li><a href="${h.url_for(controller='/evaluate', action='evaluateAdele')}">Zwischenbericht</a></li>
##<li><a href="${h.url_for(controller='/evaluate', action='evaluate', id=1, reset=1)}"> ${_('cm_actions_link_evaluate')}</a></li>
More information about the Mpuls-commits
mailing list