[Pywps-commits] r867 - in trunk: . pywps/Parser pywps/Process pywps/Wps
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Fri Nov 6 17:44:53 CET 2009
Author: jachym
Date: 2009-11-06 17:44:41 +0100 (Fri, 06 Nov 2009)
New Revision: 867
Modified:
trunk/pywps/Parser/Execute.py
trunk/pywps/Process/InAndOutputs.py
trunk/pywps/Process/Process.py
trunk/pywps/Wps/Execute.py
trunk/wps.py
Log:
better debuging and base64 encoding fixes
Modified: trunk/pywps/Parser/Execute.py
===================================================================
--- trunk/pywps/Parser/Execute.py 2009-11-06 14:08:17 UTC (rev 866)
+++ trunk/pywps/Parser/Execute.py 2009-11-06 16:44:41 UTC (rev 867)
@@ -90,15 +90,18 @@
self.wps.inputs["responseform"] = self.parseResponseForm(
responseFormNode)
except IndexError:
- self.wps.inputs["responseform"] = None
+ self.wps.inputs["responseform"] = {}
# OGC 05-007r7 page 36, Table 49
# Either responseDocument or rawDataOutput should be specified, not both
- if not self.wps.inputs.has_key('responseform') or\
- (not self.wps.inputs["responseform"].has_key("rawdataoutput") and \
- not self.wps.inputs["responseform"].has_key("responsedocument")):
+ if self.wps.inputs.has_key('responseform') and \
+ (self.wps.inputs["responseform"].has_key("rawdataoutput") and \
+ self.wps.inputs["responseform"].has_key("responsedocument")):
raise self.wps.exceptions.InvalidParameterValue(
"Either responseDocument or rawDataOutput should be specified, but not both")
+ else:
+ self.wps.inputs["responseform"]["responsedocument"] = {}
+ self.wps.inputs["responseform"]["rawdataoutput"] = {}
def parseResponseForm(self,responseFormNode):
""" Parse requested response form node """
@@ -197,7 +200,6 @@
parsedDataInputs = []
- import sys
for inputNode in inputsNode.getElementsByTagNameNS(self.nameSpace,
"Input"):
# input Identifier
@@ -212,7 +214,6 @@
# Title and Abstract are only mandatory and not necessary:
# skipping, not supported yet
-
# formchoice
try:
dataTypeNode = inputNode.getElementsByTagNameNS(
@@ -351,13 +352,13 @@
"*","encoding")
attributes["schema"] = complexDataNode.getAttributeNS(
"*","schema")
+ attributes["value"] = None
+
for complexDataChildNode in complexDataNode.childNodes:
# CDATA or text and the input value is empty and the Text or
# CDATA is not empty
- if (complexDataChildNode.nodeType == \
- xml.dom.minidom.Text.nodeType or \
- complexDataChildNode.nodeType == \
- xml.dom.minidom.CDATASection.nodeType) and\
+ if (complexDataChildNode.nodeType == xml.dom.minidom.Text.nodeType or \
+ complexDataChildNode.nodeType == xml.dom.minidom.CDATASection.nodeType) and\
complexDataChildNode.nodeValue and not attributes["value"]:
attributes["value"] = complexDataChildNode.nodeValue
# xml input
Modified: trunk/pywps/Process/InAndOutputs.py
===================================================================
--- trunk/pywps/Process/InAndOutputs.py 2009-11-06 14:08:17 UTC (rev 866)
+++ trunk/pywps/Process/InAndOutputs.py 2009-11-06 16:44:41 UTC (rev 867)
@@ -31,7 +31,9 @@
maxOccurs = None
type = None
value = None
+ ms = None # magic mimeTypes
+
def __init__(self,identifier,title,abstract=None,
metadata=[],minOccurs=1,maxOccurs=1,type=None):
"""Input initialization
@@ -62,6 +64,7 @@
self.maxOccurs = maxOccurs
self.type = type
self.value = None
+
return
def setValue(self,input):
@@ -294,6 +297,10 @@
self.formats = formats
self.format = self.formats[0]
+
+ self.ms = magic.open(magic.MAGIC_MIME)
+ self.ms.load()
+
return
def setValue(self, input):
@@ -320,9 +327,10 @@
data {String} the data, which should be stored
"""
import tempfile
- from os import curdir
+ from os import curdir, rename
outputName = tempfile.mktemp(prefix="pywpsInput",dir=curdir)
+ fout = None
try:
fout=open(outputName,'wb')
except IOError, what:
@@ -333,16 +341,13 @@
fout.write(data)
fout.close()
- # load the mimetypes
- ms = magic.open(magic.MAGIC_MIME)
- ms.load()
# check, if the file is binary or not
if self.format["mimeType"].find("text") == -1:
# it *should* be binary, is the file really binary?
# if so, convert it to binary using base64
- if ms.open(fout.name).find("text") > -1:
- sys.rename(fout.name,fout.name+".base64")
+ if self.ms.file(fout.name).find("text") > -1:
+ rename(fout.name,fout.name+".base64")
try:
base64.decode(open(fout.name+".base64"),
open(fout.name,"w"))
@@ -353,7 +358,7 @@
# check the mimeType again
- self.checkMimeType(ms.open(fout.name))
+ self.checkMimeType(fout.name,self.ms.file(fout.name))
resp = self._setValueWithOccurence(self.value, outputName)
if resp:
@@ -392,6 +397,7 @@
outputName = tempfile.mktemp(prefix="pywpsInput",dir=curdir)
+ fout = None
try:
fout=open(outputName,'wb')
except IOError, what:
@@ -422,9 +428,7 @@
fout.close()
# check the mimetypes
- ms = magic.open(magic.MAGIC_MIME)
- ms.load()
- self.checkMimeType(ms.open(fout.name))
+ self.checkMimeType(fout.name,self.ms.open(fout.name))
resp = self._setValueWithOccurence(self.value, outputName)
if resp:
@@ -440,21 +444,22 @@
"""
pass
- def checkMimeType(self,mimeType):
+ def checkMimeType(self,fileName,mimeType):
"""Check, if the given mimetype is in self.formats
Parameters:
+ fileName {String}
mimeType {String}
"""
mimeTypes = "";
for format in self.formats:
mimeTypes += format["mimeType"] + " ";
- if ms.file(fout.name()) in format["mimeType"]:
+ if self.ms.file(fileName) in format["mimeType"]:
self.format = format
return
if self.format == None:
self.onProblem("InvalidParameterValue",
- "Files mimeType ["+ ms.file(fout.name()) +
+ "Files mimeType ["+ self.ms.file(fileName) +
" does not correspond with allowed mimeType values, which can be on from ["+ mimeTypes+"]")
@@ -558,6 +563,7 @@
type = None
asReference = None
value = None
+ ms = None # magic mimeTypes
def __init__(self,identifier,title,abstract=None,
metadata=[],type=None, asReference=False):
@@ -679,6 +685,10 @@
self.formats = formats
self.format = formats[0]
+
+ self.ms = magic.open(magic.MAGIC_MIME)
+ self.ms.load()
+
return
def setValue(self, value):
Modified: trunk/pywps/Process/Process.py
===================================================================
--- trunk/pywps/Process/Process.py 2009-11-06 14:08:17 UTC (rev 866)
+++ trunk/pywps/Process/Process.py 2009-11-06 16:44:41 UTC (rev 867)
@@ -25,6 +25,7 @@
import time
import types
import sys,os
+import traceback
class Status:
"""
@@ -461,6 +462,7 @@
stdin=subprocessstdin, stdout=subprocessstdout,
stderr=subprocessstderr)
except Exception,e :
+ traceback.print_exc(file=sys.stderr)
self.failed = True
raise Exception("Could not perform command [%s]: %s" % (cmd,e))
Modified: trunk/pywps/Wps/Execute.py
===================================================================
--- trunk/pywps/Wps/Execute.py 2009-11-06 14:08:17 UTC (rev 866)
+++ trunk/pywps/Wps/Execute.py 2009-11-06 16:44:41 UTC (rev 867)
@@ -25,7 +25,7 @@
from Response import Response
from htmltmpl import TemplateError
-import time,os,sys,tempfile,re,types, ConfigParser, base64
+import time,os,sys,tempfile,re,types, ConfigParser, base64, traceback
from shutil import copyfile as COPY
from shutil import rmtree as RMTREE
@@ -88,6 +88,7 @@
try:
self.template = self.templateManager.prepare(self.templateFile)
except TemplateError,e:
+ traceback.print_exc(file=sys.stderr)
self.cleanEnv()
raise self.wps.exceptions.NoApplicableCode(e.__str__())
@@ -121,6 +122,7 @@
try:
self.statusFiles.append(open(self.statusFileName,"w"))
except Exception, e:
+ traceback.print_exc(file=sys.stderr)
self.cleanEnv()
raise self.wps.exceptions.NoApplicableCode(e.__str__())
self.storeRequired = True
@@ -202,6 +204,7 @@
pass
except OSError, e:
+ traceback.print_exc(file=sys.stderr)
raise self.wps.exceptions.NoApplicableCode("Fork failed: %d (%s)\n" % (e.errno, e.strerror) )
# this is child process, parent is already gone away
@@ -232,9 +235,10 @@
statusMessage=e.value,
exceptioncode=e.code,
locator=e.locator)
+ except Exception,e:
- except Exception,e:
# set status to failed
+ traceback.print_exc(file=sys.stderr)
self.promoteStatus(self.failed,
statusMessage=str(e),
exceptioncode="NoApplicableCode")
@@ -278,6 +282,7 @@
except Exception,e:
# set status to failed
+ traceback.print_exc(file=sys.stderr)
self.promoteStatus(self.failed,
statusMessage=str(e),
exceptioncode="NoApplicableCode")
@@ -307,6 +312,7 @@
except Exception, e:
self.cleanEnv()
+ traceback.print_exc(file=sys.stderr)
raise self.wps.exceptions.NoApplicableCode(
"Could not import process [%s]: %s" %\
(self.wps.inputs["identifier"], e))
@@ -436,6 +442,7 @@
# execute
processError = self.process.execute()
if processError:
+ traceback.print_exc(file=sys.stderr)
raise self.wps.exceptions.NoApplicableCode(
"Failed to execute WPS process [%s]: %s" %\
(self.process.identifier,processError))
@@ -450,6 +457,7 @@
raise e
except Exception,e:
+ traceback.print_exc(file=sys.stderr)
raise self.wps.exceptions.NoApplicableCode(
"Failed to execute WPS process [%s]: %s" %\
(self.process.identifier,e))
@@ -729,6 +737,7 @@
templateOutputs.append(templateOutput);
except Exception,e:
self.cleanEnv()
+ traceback.print_exc(file=sys.stderr)
raise self.wps.exceptions.NoApplicableCode(
"Process executed. Failed to build final response for output [%s]: %s" % (identifier,e))
self.templateProcessor.set("Outputs",templateOutputs)
@@ -906,6 +915,7 @@
raise Exception("Location [%s] does not exist" % self.process.grassLocation)
except Exception,e:
self.cleanEnv()
+ traceback.print_exc(file=sys.stderr)
raise self.wps.exceptions.NoApplicableCode("Could not init GRASS: %s" % e)
return
@@ -976,8 +986,10 @@
except ConfigParser.NoOptionError,e:
pass
except IOError,e:
+ traceback.print_exc(file=sys.stderr)
raise self.wps.exceptions.NoApplicableCode("Logfile IOError: %s" % e.__str__())
except Exception, e:
+ traceback.print_exc(file=sys.stderr)
raise self.wps.exceptions.NoApplicableCode("Logfile error: %s" % e.__str__())
Modified: trunk/wps.py
===================================================================
--- trunk/wps.py 2009-11-06 14:08:17 UTC (rev 866)
+++ trunk/wps.py 2009-11-06 16:44:41 UTC (rev 867)
@@ -263,7 +263,10 @@
dbg = self.getConfigValue("server","debug")
if dbg == True or (type(dbg) == type("") and \
dbg.lower() == "true") or int(dbg) != 0:
- print >>sys.stderr, "PyWPS Debug: %s" % debug.__str__()
+ print >>sys.stderr, "PyWPS Debug: %s" % debug.__str__()[0:160],
+ if len(debug.__str__()) > 160:
+ print >>sys.stderr, "...",
+ print >>sys.stderr, "\n"
if __name__ == "__main__":
wps = WPS()
More information about the Pywps-commits
mailing list