Skip to content

Commit

Permalink
Define request body of a service.
Browse files Browse the repository at this point in the history
  • Loading branch information
pneff committed Jun 5, 2008
1 parent 2bcea99 commit bde097d
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 10 deletions.
14 changes: 10 additions & 4 deletions generator/CodeTemplator.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ def __processFiles(self, path, files):
print "Processing template %s" % sourcepath
for req in self.process.getRequests():
print " - Request: %s" % req['name']
self.render(sourcepath, targetpath, req=req)
self.render(sourcepath, targetpath.replace("_request_", req['name']),
req=req)
elif is_template:
print "Processing template %s" % sourcepath
self.render(sourcepath, targetpath)
Expand All @@ -62,15 +63,20 @@ def render(self, template, targetpath, **data):
f = open(targetpath, "w")
f.write(out)
f.close()

def getValue(self, value):
"""Returns the value in the target language."""
type = value['type']
val = value['value']
if type == 'string':
if type == 'string' or type == 'LITERAL_STRING':
return '"' + val + '"'
elif type == 'VARREF':
return val
elif type == 'LITERAL_REGEXP':
return 're.compile(\'^' + val[1:-1] + '$\')'
else:
return value
print "Unhandled type in getValue: %s" % type
return val

def __fileSubstitute(self, path):
return path.replace("_servicename_", self.__serviceName)
6 changes: 6 additions & 0 deletions generator/Process.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,12 @@ def walk_REQUEST_PATH(self, tree):
def walk_REQUEST_NAME(self, tree):
self.__currentVar['name'] = tree.getChild(0).getText()

def walk_REQUEST_BODY(self, tree):
self.__currentVar['statements'] = []
children = tree.getChildCount()
for i in range(children):
self.__currentVar['statements'].append(tree.getChild(i))

def walk_STATEMENT_OUTPUT(self, tree):
self.__stack.append(self.__currentVar)
self.__currentVar = {'docs': {'params': {}}}
Expand Down
29 changes: 23 additions & 6 deletions templates/python-webpy/_servicename_/_request_.py.tmpl
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<%
from tools.Service import DumpTree
import re
# Get requests by path
my_requests = {}
Expand All @@ -20,14 +21,30 @@ req_path_params = ", ".join(map(lambda param: param[1:-1], req_path_params))
my_requests = my_requests[req_path]
methods = [request for request in my_requests]

def getStmValue(stm):
return getValue({
'value': stm.getChild(0).getText(),
'type': stm.getText()})

def function_params(statement):
params = [getStmValue(statement.getChild(i))
for i in range(1, statement.getChildCount())]
return ', '.join(params)

def statement_to_python(stm):
if stm.getText() == 'FUNCTION_CALL':
return stm.getChild(0).getText() + '(' + function_params(stm) + ')'
elif stm.getText() == 'VARIABLE':
return stm.getChild(1).getText() + ' = ' + getStmValue(stm.getChild(2))
else:
DumpTree(stm)
return 'Unhandled statement: ' + stm.getText()

%>class ${req['name']}:
% for method in methods:
<% method_name, method_req = method %>
def ${method_name}(${req_path_params}):
% for varname, var in method_req['vars'].iteritems():
# ${var['type']}
${var['name']} = ${getValue(var['value'])}
% endfor

% endfor
%for stm in req['statements']:
${statement_to_python(stm)}
%endfor
% endfor

0 comments on commit bde097d

Please sign in to comment.