[Mpuls-commits] r113 - in waska/trunk: . waskaweb/controllers waskaweb/lib

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Tue Sep 2 12:21:12 CEST 2008


Author: teichmann
Date: 2008-09-02 12:21:11 +0200 (Tue, 02 Sep 2008)
New Revision: 113

Added:
   waska/trunk/waskaweb/lib/exportselection.py
Modified:
   waska/trunk/ChangeLog.txt
   waska/trunk/waskaweb/controllers/agency_overview.py
   waska/trunk/waskaweb/controllers/case_overview.py
   waska/trunk/waskaweb/lib/xmlexport.py
Log:
Export: out-factorized selection of case parts.


Modified: waska/trunk/ChangeLog.txt
===================================================================
--- waska/trunk/ChangeLog.txt	2008-09-02 09:41:35 UTC (rev 112)
+++ waska/trunk/ChangeLog.txt	2008-09-02 10:21:11 UTC (rev 113)
@@ -1,5 +1,14 @@
 2008-09-02  Sascha L. Teichmann <sascha.teichmann at intevation.de>
 
+	* waskaweb/lib/exportselection.py: New. out-factorized selection of case parts.
+
+	* waskaweb/lib/xmlexport.py: Uses new lib now.
+
+	* waskaweb/controllers/agency_overview.py,
+	  waskaweb/controllers/case_overview.py: Adjusted imports.
+
+2008-09-02  Sascha L. Teichmann <sascha.teichmann at intevation.de>
+
 	* waskaweb/model/case.py:  phase is now stored in the master_tbl
 
 2008-09-02  Sascha L. Teichmann <sascha.teichmann at intevation.de>

Modified: waska/trunk/waskaweb/controllers/agency_overview.py
===================================================================
--- waska/trunk/waskaweb/controllers/agency_overview.py	2008-09-02 09:41:35 UTC (rev 112)
+++ waska/trunk/waskaweb/controllers/agency_overview.py	2008-09-02 10:21:11 UTC (rev 113)
@@ -48,7 +48,7 @@
                                                EXPORT_SUCCESS_XML_EXPLAINATION, \
                                                parseSearchOptions
 
-from waskaweb.lib.xmlexport import CasePartsSelection
+from waskaweb.lib.exportselection import CasePartsSelection
 
 
 FORM_DEFAULTS = {}

Modified: waska/trunk/waskaweb/controllers/case_overview.py
===================================================================
--- waska/trunk/waskaweb/controllers/case_overview.py	2008-09-02 09:41:35 UTC (rev 112)
+++ waska/trunk/waskaweb/controllers/case_overview.py	2008-09-02 10:21:11 UTC (rev 113)
@@ -42,7 +42,7 @@
 from waskaweb.model.user           import UserListObject, UserObject, UserGroupList
 from waskaweb.controllers.CaseBase import CasebaseController
 
-from waskaweb.lib.xmlexport        import CasePartsSelection
+from waskaweb.lib.exportselection  import CasePartsSelection
 
 from datetime import datetime
 

Added: waska/trunk/waskaweb/lib/exportselection.py
===================================================================
--- waska/trunk/waskaweb/lib/exportselection.py	2008-09-02 09:41:35 UTC (rev 112)
+++ waska/trunk/waskaweb/lib/exportselection.py	2008-09-02 10:21:11 UTC (rev 113)
@@ -0,0 +1,199 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright 2007, 2008 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 re
+import sys
+
+from pylons import g
+
+FORM_SECTION_RE = re.compile(r"^form_section_(\d+)$")
+
+RG_UNTERSTUETZUNG = (
+    "angebote_bildenden_bereich",
+    "angebote_berufsvorbereitung",
+    "angebote_berufliche_qualifizierung",
+    "angebote_lebensbewaeltigung")
+
+SECTION_MAP = {
+    'form_section_666': 'page_einverstaendnis', # Einverständniserklärung, Phase
+    'form_section_0'  : 'page_0',  # Zuständigkeiten, Eingangsdaten
+    'form_section_1'  : 'page_25', # Externe Ansprechpartner
+    'form_section_2'  : 'page_1',  # Persönliche Angaben
+    'form_section_3'  : 'page_2',  # Familiäre Situation 
+    'form_section_4'  : 'page_3',  # Gesundheitliche Situation
+    'form_section_5'  : 'page_4',  # Soziale Lage
+    'form_section_6'  : 'page_5',  # Schule
+    'form_section_7'  : 'page_6',  # Ausbildung und Arbeit
+    'form_section_8'  : 'page_7',  # Weiterer Verlauf
+    'form_section_9'  : 'rg_kompetenzfestellung', # Kompetenzfeststellung
+    'form_section_10' : 'page_10', # Förderplanung
+    'form_section_11' : 'rg_unterstuetzungsangebote', # Unterstützungsangebote
+    'form_section_12' : 'page_15', # Freie Dokumentation
+    'form_section_13' : 'page_16', # Angaben zum Verlauf und Beendigung des CM
+    'form_section_14' : 'page_17', # Berufliche Integration
+    'form_section_15' : 'page_18', # Soziale Integration
+    'form_section_16' : 'page_19', # Einschätzung des Case-Managers, 
+    'form_section_17' : 'page_20'  # Freie Dokumentation
+}
+
+def form_section_sort(a, b):
+    am = FORM_SECTION_RE.match(a)
+    bm = FORM_SECTION_RE.match(b)
+    if not am and not bm:
+        return cmp(a, b)
+    if not am: return +1
+    if not bm: return -1
+    return cmp(int(am.group(1)), int(bm.group(1)))
+
+class CasePartsSelection:
+
+    def __init__(self):
+        # Remember to change the formular validator if you change this
+        # dictionary
+        #'appointments'   : 1, 
+        self.selections = {
+            'documents'      : 0, # keine Dokumente
+            'logbook'        : 0, # kein Tagebuch
+            'form_section_0' : 1, 
+            'form_section_1' : 1, 
+            'form_section_2' : 1, 
+            'form_section_3' : 1, 
+            'form_section_4' : 1, 
+            'form_section_5' : 1, 
+            'form_section_6' : 1, 
+            'form_section_7' : 1, 
+            'form_section_8' : 1, 
+            'form_section_9' : 1, 
+            'form_section_10': 1, 
+            'form_section_11': 1, 
+            'form_section_12': 1, 
+            'form_section_13': 1, 
+            'form_section_14': 1, 
+            'form_section_15': 1, 
+            'form_section_16': 1, 
+            'form_section_17': 1 }
+
+    def numItems(self):
+        return len(self.selections)
+
+    def isChecked(self, item):
+        return self.selections.get(item) == 1
+
+    def setChecked(self, item, value):
+        self.selections[item] = value
+
+    def isAllSelected(self):
+        for v in self.selections.itervalues():
+            if v < 1: return False
+        return True
+
+    def allSelectedSections(self):
+        s = [kv[0] for kv in self.selections.iteritems() if kv[1] > 0]
+        # order form_section_XX to top, XX as int, rest to bottom by alpha 
+        s.sort(form_section_sort)
+        return s
+
+    def __str__(self):
+        return ", ".join([str(i) for i in self.selections])
+
+class Selector:
+
+    def __init__(self, anonymize=False):
+        self.views = {}
+        self.exportDocuments = False
+        self.exportLogbook   = False
+        self.anonymize       = anonymize
+
+    def getSelectStatement(self, view):
+        return self.views.get(view)
+
+    def addRepeatGroup(self, name):
+        relname = (self.anonymize and "rg_%s_tbl_anonym_view"  or "rg_%s_tbl_view") % name
+        self.views['rg_%s_tbl_view' % name] = \
+            "SELECT * FROM %s WHERE master_id = %%(id)s" % relname
+
+    def addMasterTable(self, projection):
+        relname = self.anonymize and "master_tbl_anonym_view" or "master_tbl_view"
+        self.views['master_tbl_view'] = "SELECT %s FROM %s WHERE id = %%(id)s" % (
+            ", ".join(projection),
+            relname)
+
+class SelectorFactory:
+
+    def __init__(self, case_parts, anonymize=False):
+        self.case_parts = case_parts
+        self.anonymize  = anonymize
+
+    def createSelector(self):
+        selector = Selector(self.anonymize)
+        selected_sections = self.case_parts.allSelectedSections()
+        # always export einverstaendiserklaerung and phase
+        selected_sections.insert(0, 'form_section_666')
+
+        master_tbl_items = ['id']
+
+        if not self.anonymize:
+            master_tbl_items.append('uuid_id')
+
+        for part in selected_sections:
+            try:
+                page = SECTION_MAP[part]
+            except:
+                if not self.anonymize:
+                    if part == "documents":
+                        selector.exportDocuments = True
+                    elif part == "logbook":
+                        selector.exportLogbook = True
+                    else:
+                        print >> sys.stderr, "missing %s" % part
+                continue
+
+            if page.startswith("rg_"):
+                if page == 'rg_kompetenzfestellung':
+                    selector.addRepeatGroup('kompetenzfestellung')
+                elif page == 'rg_unterstuetzungsangebote':
+                    for rg in RG_UNTERSTUETZUNG:
+                        selector.addRepeatGroup(rg)
+                else:
+                    print >> sys.stderr, "ignoring repeat group %s" % page
+                continue
+
+            nc = g.formedTree.findByName(page)
+            if nc is None:
+                print >> sys.stderr, "missing page '%s'" % page
+                continue
+
+            master_tbl_items.extend([n.getName() for n in nc.allWidgets()])
+
+        selector.addMasterTable(master_tbl_items)
+
+        return selector
+
+# vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:

Modified: waska/trunk/waskaweb/lib/xmlexport.py
===================================================================
--- waska/trunk/waskaweb/lib/xmlexport.py	2008-09-02 09:41:35 UTC (rev 112)
+++ waska/trunk/waskaweb/lib/xmlexport.py	2008-09-02 10:21:11 UTC (rev 113)
@@ -40,27 +40,7 @@
 
 import waskaweb.lib.helpers as h
 
-SECTION_MAP = {
-    'form_section_e' : 'page_einverstaendnis', # Einverständniserklärung, Phase
-    'form_section_0' : 'page_0',  # Zuständigkeiten, Eingangsdaten
-    'form_section_1' : 'page_25', # Externe Ansprechpartner
-    'form_section_2' : 'page_1',  # Persönliche Angaben
-    'form_section_3' : 'page_2',  # Familiäre Situation 
-    'form_section_4' : 'page_3',  # Gesundheitliche Situation
-    'form_section_5' : 'page_4',  # Soziale Lage
-    'form_section_6' : 'page_5',  # Schule
-    'form_section_7' : 'page_6',  # Ausbildung und Arbeit
-    'form_section_8' : 'page_7',  # Weiterer Verlauf
-    'form_section_9' : 'rg_kompetenzfestellung', # Kompetenzfeststellung
-    'form_section_10': 'page_10', # Förderplanung
-    'form_section_11': 'rg_unterstuetzungsangebote', # Unterstützungsangebote
-    'form_section_12': 'page_15', # Freie Dokumentation
-    'form_section_13': 'page_16', # Angaben zum Verlauf und Beendigung des CM
-    'form_section_14': 'page_17', # Berufliche Integration
-    'form_section_15': 'page_18', # Soziale Integration
-    'form_section_16': 'page_19', # Einschätzung des Case-Managers, 
-    'form_section_17': 'page_20'  # Freie Dokumentation
-    }
+from exportselection import RG_UNTERSTUETZUNG, SelectorFactory, CasePartsSelection
 
 FETCH_ALL_IDS = \
 """SELECT id FROM master_tbl_view"""
@@ -79,12 +59,6 @@
 WHERE master_id = %(id)s
 """
 
-RG_UNTERSTUETZUNG = (
-    "angebote_bildenden_bereich",
-    "angebote_berufsvorbereitung",
-    "angebote_berufliche_qualifizierung",
-    "angebote_lebensbewaeltigung")
-
 RG_VIEWS = ["kompetenzfestellung"]
 RG_VIEWS.extend(RG_UNTERSTUETZUNG)
 RG_VIEWS = tuple(RG_VIEWS)
@@ -93,146 +67,10 @@
 
 USER_LOGIN = re.compile(r"(?:[^_]*)_(?:[^_]*)_(.+)")
 
-FORM_SECTION_RE = re.compile(r"^form_section_(\d+)$")
-
-
-def form_section_sort(a, b):
-    am = FORM_SECTION_RE.match(a)
-    bm = FORM_SECTION_RE.match(b)
-    if not am and not bm:
-        return cmp(a, b)
-    if not am: return +1
-    if not bm: return -1
-    return cmp(int(am.group(1)), int(bm.group(1)))
-
 def login(a):
     b = USER_LOGIN.findall(a)
     return b and b[0] or a
 
-class CasePartsSelection:
-
-    def __init__(self):
-        # Remember to change the formular validator if you change this
-        # dictionary
-        #'appointments'   : 1, 
-        self.selections = {
-            'documents'      : 0, # keine Dokumente
-            'logbook'        : 0, # kein Tagebuch
-            'form_section_0' : 1, 
-            'form_section_1' : 1, 
-            'form_section_2' : 1, 
-            'form_section_3' : 1, 
-            'form_section_4' : 1, 
-            'form_section_5' : 1, 
-            'form_section_6' : 1, 
-            'form_section_7' : 1, 
-            'form_section_8' : 1, 
-            'form_section_9' : 1, 
-            'form_section_10': 1, 
-            'form_section_11': 1, 
-            'form_section_12': 1, 
-            'form_section_13': 1, 
-            'form_section_14': 1, 
-            'form_section_15': 1, 
-            'form_section_16': 1, 
-            'form_section_17': 1 }
-
-    def numItems(self):
-        return len(self.selections)
-
-    def isChecked(self, item):
-        return self.selections.get(item) == 1
-
-    def setChecked(self, item, value):
-        self.selections[item] = value
-
-    def isAllSelected(self):
-        for v in self.selections.itervalues():
-            if v < 1: return False
-        return True
-
-    def allSelectedSections(self):
-        s = [kv[0] for kv in self.selections.iteritems() if kv[1] > 0]
-        # order form_section_XX to top, XX as int, rest to bottom by alpha 
-        s.sort(form_section_sort)
-        return s
-
-    def __str__(self):
-        return ", ".join([str(i) for i in self.selections])
-
-class Selector:
-
-    def __init__(self, anonymize=False):
-        self.views = {}
-        self.exportDocuments = False
-        self.exportLogbook   = False
-        self.anonymize       = anonymize
-
-    def getSelectStatement(self, view):
-        return self.views.get(view)
-
-    def addRepeatGroup(self, name):
-        relname = (self.anonymize and "rg_%s_tbl_anonym_view"  or "rg_%s_tbl_view") % name
-        self.views['rg_%s_tbl_view' % name] = \
-            "SELECT * FROM %s WHERE master_id = %%(id)s" % relname
-
-    def addMasterTable(self, projection):
-        relname = self.anonymize and "master_tbl_anonym_view" or "master_tbl_view"
-        self.views['master_tbl_view'] = "SELECT %s FROM %s WHERE id = %%(id)s" % (
-            ", ".join(projection),
-            relname)
-
-class SelectorFactory:
-
-    def __init__(self, case_parts, anonymize=False):
-        self.case_parts = case_parts
-        self.anonymize  = anonymize
-
-    def createSelector(self):
-        selector = Selector(self.anonymize)
-        selected_sections = self.case_parts.allSelectedSections()
-        # always export einverstaendiserklaerung and phase
-        selected_sections.insert(0, 'form_section_e')
-
-        master_tbl_items = ['id']
-
-        if not self.anonymize:
-            master_tbl_items.append('uuid_id')
-
-        for part in selected_sections:
-            try:
-                page = SECTION_MAP[part]
-            except:
-                if not self.anonymize:
-                    if part == "documents":
-                        selector.exportDocuments = True
-                    elif part == "logbook":
-                        selector.exportLogbook = True
-                    else:
-                        print >> sys.stderr, "missing %s" % part
-                continue
-
-            if page.startswith("rg_"):
-                if page == 'rg_kompetenzfestellung':
-                    selector.addRepeatGroup('kompetenzfestellung')
-                elif page == 'rg_unterstuetzungsangebote':
-                    for rg in RG_UNTERSTUETZUNG:
-                        selector.addRepeatGroup(rg)
-                else:
-                    print >> sys.stderr, "ignoring repeat group %s" % page
-                continue
-
-            nc = g.formedTree.findByName(page)
-            if nc is None:
-                print >> sys.stderr, "missing page '%s'" % page
-                continue
-
-            master_tbl_items.extend([n.getName() for n in nc.allWidgets()])
-
-        selector.addMasterTable(master_tbl_items)
-
-        return selector
-
 def cdataWrap(value):
     return u"<![CDATA[%s]]>" % value.replace(u"]]>", u"]]><!CDATA[]]]]><![CDATA[>]]><[!CDATA[")
 



More information about the Mpuls-commits mailing list