WEB/Praktikum3/bt/app/application.py
darthsandmann 2f677551bb fishished
2017-01-19 17:28:35 +01:00

136 lines
4.6 KiB
Python
Executable File

# coding: utf-8
import json
import cherrypy
from .projekt import Projekt_cl, ProjektKomponenten_cl, Komponente_cl
from .staff import QsMitarbeiter_cl, SwEntwickler_cl
from .error import KatFehler_cl, KatUrsache_cl, Fehler_cl
from .eval import ProList_cl, KatList_cl
from .database import KatfehlerDatabase_cl, KatursacheDatabase_cl, FehlerDatabase_cl, KomponenteDatabase_cl, QsMitarbeiterDatabase_cl, SwEntwicklerDatabase_cl, ProjektDatabase_cl
#----------------------------------------------------------
class Application_cl(object):
#----------------------------------------------------------
exposed = True # gilt für alle Methoden
#-------------------------------------------------------
def __init__(self):
#-------------------------------------------------------
self.database_o = {
'projekt': ProjektDatabase_cl(),
'komponente': KomponenteDatabase_cl(),
'qsmitarbeiter': QsMitarbeiterDatabase_cl(),
'swentwickler': SwEntwicklerDatabase_cl(),
'katfehler': KatfehlerDatabase_cl(),
'katursache': KatursacheDatabase_cl(),
'fehler': FehlerDatabase_cl()
}
self.handler_o = {
'projekt': Projekt_cl(self.database_o),
'projektkomponenten': ProjektKomponenten_cl(self.database_o),
'komponente': Komponente_cl(self.database_o),
'qsmitarbeiter': QsMitarbeiter_cl(self.database_o),
'swentwickler': SwEntwickler_cl(self.database_o),
'katfehler': KatFehler_cl(self.database_o),
'katursache': KatUrsache_cl(self.database_o),
'fehler': Fehler_cl(self.database_o),
'prolist': ProList_cl(self.database_o),
'katlist': KatList_cl(self.database_o)
}
# es wird keine index-Methode vorgesehen, weil stattdessen
# die Webseite index.html ausgeliefert wird (siehe Konfiguration)
#-------------------------------------------------------
def GET(self, path_spl = 'projekt', id=None, **data_opl):
#-------------------------------------------------------
retVal_o = {
'data': None
}
if path_spl in self.handler_o:
if path_spl == 'fehler':
retVal_o = self.handler_o[path_spl].GET(id, **data_opl)
else:
retVal_o = self.handler_o[path_spl].GET(id)
if retVal_o['data'] == None:
cherrypy.response.status = 404
return json.dumps(retVal_o)
#-------------------------------------------------------
def POST(self, path_spl = 'projekt', **data_opl):
#-------------------------------------------------------
retVal_o = {
'id': None
}
# data_opl: Dictionary mit den gelieferten key-value-Paaren
# hier müsste man prüfen, ob die Daten korrekt vorliegen!
if path_spl in self.handler_o:
retVal_o = self.handler_o[path_spl].POST(data_opl)
if retVal_o['id'] == None:
cherrypy.response.status = 409
return json.dumps(retVal_o)
#-------------------------------------------------------
def PUT(self, path_spl = 'projekt', **data_opl):
#-------------------------------------------------------
# Sichern der Daten: jetzt wird keine vollständige Seite
# zurückgeliefert, sondern nur noch die Information, ob das
# Speichern erfolgreich war
retVal_o = {
'id': None
}
# data_opl: Dictionary mit den gelieferten key-value-Paaren
# hier müsste man prüfen, ob die Daten korrekt vorliegen!
if path_spl in self.handler_o:
retVal_o = self.handler_o[path_spl].PUT(data_opl)
if retVal_o['id'] == None:
cherrypy.response.status = 404
return json.dumps(retVal_o)
#-------------------------------------------------------
def DELETE(self, path_spl = 'projekt', id=None):
#-------------------------------------------------------
# Eintrag löschen, nur noch Rückmeldung liefern
retVal_o = {
'id': id
}
if path_spl in self.handler_o:
retVal_o = self.handler_o[path_spl].DELETE(id)
if retVal_o['id'] == None:
cherrypy.response.status = 404
return json.dumps(retVal_o)
#-------------------------------------------------------
def default(self, *arguments, **kwargs):
#-------------------------------------------------------
msg_s = "unbekannte Anforderung: " + \
str(arguments) + \
' ' + \
str(kwargs)
raise cherrypy.HTTPError(404, msg_s)
# EOF