def ProcessRequest(fullPathList, queryParams, response): addresswebservices.console.clear() addresswebservices.console.addInfo(u"SERVICES_WEB_PATH: " + SERVICES_WEB_PATH) addresswebservices.console.addInfo(u"HTMLDATA_URL: " + HTMLDATA_URL) if addresswebservices.console.debugMode: import shared import config as configModule addresswebservices.console.addInfo(u"configModule.getHTMLDataURL(): " + configModule.getHTMLDataURL()) addresswebservices.console.addInfo(u"shared.isCGIApplication(): " + str(shared.isCGIApplication)) addresswebservices.console.addInfo(u"configModule.HTMLDATA_URL: " + configModule.HTMLDATA_URL) addresswebservices.console.addInfo(u"configModule.SERVER_HTTP: " + configModule.SERVER_HTTP) addresswebservices.console.addInfo( u"configModule.getPortSpecification(): " + configModule.getPortSpecification()) pageBuilder = addresswebservices.ServicesHTMLPageBuilder() if fullPathList in [["/"], []]: response.htmlData = pageBuilder.getServicesHTMLPage(__file__, "", {}) response.handled = True else: if fullPathList == []: servicePathInfo = "/" else: servicePathInfo = "/" + fullPathList[0] # první rest parametr if DATA_ALIASES.has_key(servicePathInfo.lower()): fileName = DATA_ALIASES[servicePathInfo.lower()]() + "/".join( fullPathList[1:]) response.htmlData = getFileContent(fileName) mimeFormat = fileNameToMimeFormat(fileName) if mimeFormat != None: response.mimeFormat = mimeFormat if mimeFormat == "text/plain": response.htmlData = response.htmlData.replace("\r\n", "\n") response.handled = True elif servicePathInfo.lower().startswith(AUTOCOMPLETES_PATH): import jqueryautocomplete response = jqueryautocomplete.processRequest( "/".join(fullPathList[1:]), "", "", queryParams, response) elif servicePathInfo.lower().startswith(DATABASE_DETAILS_PATH): RUIANConnection._getDBDetails(fullPathList[1:], queryParams, response) else: pathInfos = fullPathList[1:] # ostatní for service in addresswebservices.services: if (service.pathName == servicePathInfo) and ( service.processHandler != None): #TODO Tohle by si asi měla dělat service sama i = 0 for pathValue in pathInfos: if i < len(service.restPathParams): queryParams[service.restPathParams[i].pathName[ 1:]] = pathValue #přidání do slovníku, přepíše hodnotu se stejným klíčem else: # Too many parameters addresswebservices.console.addMsg( u"Nadbytečný REST parametr č." + str(i) + "-" + pathValue) i = i + 1 service.processHandler(queryParams, response) break if not response.handled: if pathInfos != []: addresswebservices.console.addMsg(u"Neznámá služba: " + servicePathInfo) response.htmlData = pageBuilder.getServicesHTMLPage( __file__, servicePathInfo, queryParams) response.handled = True return response
def getServicesHTMLPage(self, scriptName, pathInfo, queryParams): scriptName = os.path.basename(scriptName) self.dataListHTML = "" result = getPageTemplate().replace("#PAGETITLE#", u"Webové služby RÚIAN") servicesURL = "http://" + SERVER_HTTP + getPortSpecification( ) + "/" + SERVICES_WEB_PATH result = result.replace("<#SERVICES_URL>", servicesURL) result = result.replace("#HTMLDATA_URL#", configmodule.getHTMLDataURL()) result = result.replace("#VERSIONNUMBER#", configmodule.config.issueNumber) result = result.replace("#SERVICES_URL_PATH#", configmodule.getServicesPath()) if configmodule.config.ruianVersionDate == "": versionDate = RUIANConnection.getRUIANVersionDate() configmodule.config.databaseIsOK = not versionDate.upper( ).startswith("ERROR:") if versionDate.upper().startswith("ERROR:"): versionDate = u"Nepřipojeno" ruianVersionCode = u"<b>!!! Data RÚIAN nejsou připojena !!!</b>" console.addMsg( u"Data RÚIAN nejsou připojena, obraťte se na správce webového serveru." ) else: ruianVersionCode = '<a href="%s/downloaded/Import.html">%s</a>' % ( servicesURL, versionDate) configmodule.config.ruianVersionDate = versionDate configmodule.config.ruianVersionCode = ruianVersionCode result = result.replace("#RUIANVERSIONDATE#", configmodule.config.ruianVersionCode) queryParams = self.normalizeQueryParams(queryParams) tabCaptions = "" tabDivs = "" i = 1 tabIndex = 0 for service in services: tabCaptions += '<li><a href="#tabs-' + str( i) + '">' + service.caption + '</a></li>\n' tabDivs += '<div id="tabs-' + str( i) + '"> <h2>' + service.shortDesc + '</h2>\n' tabDivs += service.htmlDesc tabDivs += u'<p class = "enhancedGUI">Adresa služby:' + service.pathName + '</p>\n' formName = "form_" + str(i) urlSpanName = formName + "_urlSpan" onChangeProcCode = 'onChangeProc(' + formName + ', true)' displayResultProcCode = "runOrHookDisplayResult('" + formName + "', '" + service.pathName + "')" if service.pathName == pathInfo: tabIndex = i restPyURL = "http://" + SERVER_HTTP + getPortSpecification( ) + "/" + SERVICES_WEB_PATH + "/" tabDivs += u'<span name="' + urlSpanName + '" class = "enhancedGUI" id="' + urlSpanName + '" >' + "http://" + SERVER_HTTP + getPortSpecification( ) + "/" + SERVICES_WEB_PATH + "/" + service.pathName[ 1:] + "</span>\n" #service.getServicePath() + "</span>\n" hasAddressTabs = service.pathName == "/CompileAddress" or service.pathName == "/Geocode" if hasAddressTabs: updateServiceSpanCode = ' onclick="updateServiceSpan(\'%s\')"' % formName tabDivs += u""" <br><br> <input type="radio" name= "radio%s" value="adresa" id="%s_AddressRB" checked %s>Adresa <input type="radio" name= "radio%s" value="vstup" id="%s_AddressItemsRB" %s>Prvky adresy <input type="radio" name= "radio%s" value="id" id="%s_RuianIdRB" %s>Identifikátor RÚIAN """ % (service.pathName, formName, updateServiceSpanCode, service.pathName, formName, updateServiceSpanCode, service.pathName, formName, updateServiceSpanCode) tabDivs += "<br><br>" tabDivs += "<table><tr valign=\"top\"><td>" tabDivs += '<form id="' + formName + '" name="' + formName + '" action="' + SERVICES_PATH + service.pathName + '" method="get" SearchForAddress="false">\n' # Parameters list tabDivs += '<div class="warning">\n' tabDivs += '<table id="' + formName + '_ParamsTable">\n' for param in service.restPathParams: tabDivs += self.tablePropertyRow(param, formName, u"REST", queryParams, onChangeProcCode, hasAddressTabs) for param in service.queryParams: tabDivs += self.tablePropertyRow(param, formName, u"Query", queryParams, onChangeProcCode, hasAddressTabs) tabDivs += '</table>\n' tabDivs += '</div>\n' tabDivs += '<br>' tabDivs += '<input style="float: right;" type="button" value="Nové zadání" onclick="clearInputs(\'%s\')">\n' % formName tabDivs += '<input style="float: right;" type="button" value="%s" onclick="%s">\n' % ( service.sendButtonCaption, displayResultProcCode) tabDivs += '</form>\n' tabDivs += "</td>" tabDivs += '<td>' tabDivs += '<div id="%s_addressesDiv" class="AddressesDiv" title="Vyber adresu" isvisible="false" tabname="vstup"></div>' % formName tabDivs += getNoAddressAvailableHTML(formName) tabDivs += '<div id="%s_addressDiv" class="AddressDiv" isvisible="false" tabname="vstup"></div>' % formName tabDivs += '<textarea id=' + formName + '_textArea rows ="12" cols="50" class="RESULTTEXTAREA"></textarea></td>' tabDivs += "</tr></table>" tabDivs += "<a class = 'enhancedGUI' href='" + restPyURL + "testing" + service.pathName + ".html'>Výsledky testů</a>" url = configmodule.getHTMLDataURL() + service.pathName[1:] + ".png" tabDivs += '<p>\n<center><img width="80%" class="enhancedGUI" src="' + url + '"></center></p>\n' tabDivs += '</div>\n' i = i + 1 if configmodule.config.databaseIsOK: separateStr = "" inStr = "" else: separateStr = "{ disabled: [1, 2, 3, 4, 5, 6] }" inStr = ", disabled: [1, 2, 3, 4, 5, 6]" if tabIndex == 0: newStr = separateStr else: newStr = '{ active: %s %s }' % (str(tabIndex), inStr) result = result.replace("#TABSOPTIONS#", newStr) result = result.replace( "#CONSOLELINES#", console.consoleLines + "\n" + console.infoLines) result = result.replace("#ISSUELINES#", getIssueHTML() + "\n") result = result.replace("<#TABCAPTIONS#/>", tabCaptions) result = result.replace("<#TABCAPTIONS#/>", tabCaptions) result = result.replace("<#TABDIVS#/>", tabDivs) result = result.replace("#USE_DATA_LISTS#", str(USE_DATA_LISTS).lower()) result = result.replace("#SCRIPT_NAME#", scriptName) result = result.replace( "#DISABLEGUISWITCH#", str(configmodule.config.disableGUISwitch).lower()) result = result.replace("</body>", self.dataListHTML + "</body>") return result
def ProcessRequest(fullPathList, queryParams, response): addresswebservices.console.clear() addresswebservices.console.addInfo(u"SERVICES_WEB_PATH: " + SERVICES_WEB_PATH) addresswebservices.console.addInfo(u"HTMLDATA_URL: " + HTMLDATA_URL) if addresswebservices.console.debugMode: import shared import config as configModule addresswebservices.console.addInfo(u"configModule.getHTMLDataURL(): " + configModule.getHTMLDataURL()) addresswebservices.console.addInfo(u"shared.isCGIApplication(): " + str(shared.isCGIApplication)) addresswebservices.console.addInfo(u"configModule.HTMLDATA_URL: " + configModule.HTMLDATA_URL) addresswebservices.console.addInfo(u"configModule.SERVER_HTTP: " + configModule.SERVER_HTTP) addresswebservices.console.addInfo(u"configModule.getPortSpecification(): " + configModule.getPortSpecification()) pageBuilder = addresswebservices.ServicesHTMLPageBuilder() if fullPathList in [["/"], []]: response.htmlData = pageBuilder.getServicesHTMLPage(__file__,"", {}) response.handled = True else: if fullPathList == []: servicePathInfo = "/" else: servicePathInfo = "/" + fullPathList[0] # první rest parametr if DATA_ALIASES.has_key(servicePathInfo.lower()): fileName = DATA_ALIASES[servicePathInfo.lower()]() + "/".join(fullPathList[1:]) response.htmlData = getFileContent(fileName) mimeFormat = fileNameToMimeFormat(fileName) if mimeFormat != None: response.mimeFormat = mimeFormat if mimeFormat == "text/plain": response.htmlData = response.htmlData.replace("\r\n", "\n") response.handled = True elif servicePathInfo.lower().startswith(AUTOCOMPLETES_PATH): import jqueryautocomplete response = jqueryautocomplete.processRequest("/".join(fullPathList[1:]), "", "", queryParams, response) elif servicePathInfo.lower().startswith(DATABASE_DETAILS_PATH): RUIANConnection._getDBDetails(fullPathList[1:], queryParams, response) else: pathInfos = fullPathList[1:] # ostatní for service in addresswebservices.services: if (service.pathName == servicePathInfo) and (service.processHandler != None): #TODO Tohle by si asi měla dělat service sama i = 0 for pathValue in pathInfos: if i < len(service.restPathParams): queryParams[service.restPathParams[i].pathName[1:]] = pathValue #přidání do slovníku, přepíše hodnotu se stejným klíčem else: # Too many parameters addresswebservices.console.addMsg(u"Nadbytečný REST parametr č." + str(i) + "-" + pathValue) i = i + 1 service.processHandler(queryParams, response) break if not response.handled: if pathInfos != []: addresswebservices.console.addMsg(u"Neznámá služba: " + servicePathInfo) response.htmlData = pageBuilder.getServicesHTMLPage(__file__, servicePathInfo, queryParams) response.handled = True return response
def getServicesHTMLPage(self, scriptName, pathInfo, queryParams): scriptName = os.path.basename(scriptName) self.dataListHTML = "" result = getPageTemplate().replace("#PAGETITLE#", u"Webové služby RÚIAN") servicesURL = "http://" + SERVER_HTTP + getPortSpecification() + "/" + SERVICES_WEB_PATH result = result.replace("<#SERVICES_URL>", servicesURL) result = result.replace("#HTMLDATA_URL#", configmodule.getHTMLDataURL()) result = result.replace("#VERSIONNUMBER#", configmodule.config.issueNumber) result = result.replace("#SERVICES_URL_PATH#", configmodule.getServicesPath()) if configmodule.config.ruianVersionDate == "": versionDate = RUIANConnection.getRUIANVersionDate() configmodule.config.databaseIsOK = not versionDate.upper().startswith("ERROR:") if versionDate.upper().startswith("ERROR:"): versionDate = u"Nepřipojeno" ruianVersionCode = u"<b>!!! Data RÚIAN nejsou připojena !!!</b>" console.addMsg(u"Data RÚIAN nejsou připojena, obraťte se na správce webového serveru.") else: ruianVersionCode = '<a href="%s/downloaded/Import.html">%s</a>' % (servicesURL, versionDate) configmodule.config.ruianVersionDate = versionDate configmodule.config.ruianVersionCode = ruianVersionCode result = result.replace("#RUIANVERSIONDATE#", configmodule.config.ruianVersionCode) queryParams = self.normalizeQueryParams(queryParams) tabCaptions = "" tabDivs = "" i = 1 tabIndex = 0 for service in services: tabCaptions += '<li><a href="#tabs-' + str(i) + '">' + service.caption + '</a></li>\n' tabDivs += '<div id="tabs-' + str(i) + '"> <h2>' + service.shortDesc + '</h2>\n' tabDivs += service.htmlDesc tabDivs += u'<p class = "enhancedGUI">Adresa služby:' + service.pathName + '</p>\n' formName = "form_" + str(i) urlSpanName = formName + "_urlSpan" onChangeProcCode = 'onChangeProc(' + formName + ', true)' displayResultProcCode = "runOrHookDisplayResult('" + formName + "', '" + service.pathName + "')" if service.pathName == pathInfo: tabIndex = i restPyURL = "http://" + SERVER_HTTP + getPortSpecification() + "/" + SERVICES_WEB_PATH + "/" tabDivs += u'<span name="' + urlSpanName + '" class = "enhancedGUI" id="' + urlSpanName + '" >' + "http://" + SERVER_HTTP + getPortSpecification() + "/" + SERVICES_WEB_PATH + "/" + service.pathName[1:] + "</span>\n" #service.getServicePath() + "</span>\n" hasAddressTabs = service.pathName == "/CompileAddress" or service.pathName == "/Geocode" if hasAddressTabs: updateServiceSpanCode = ' onclick="updateServiceSpan(\'%s\')"' % formName tabDivs += u""" <br><br> <input type="radio" name= "radio%s" value="adresa" id="%s_AddressRB" checked %s>Adresa <input type="radio" name= "radio%s" value="vstup" id="%s_AddressItemsRB" %s>Prvky adresy <input type="radio" name= "radio%s" value="id" id="%s_RuianIdRB" %s>Identifikátor RÚIAN """ % (service.pathName, formName, updateServiceSpanCode, service.pathName, formName, updateServiceSpanCode, service.pathName, formName, updateServiceSpanCode) tabDivs += "<br><br>" tabDivs += "<table><tr valign=\"top\"><td>" tabDivs += '<form id="' + formName + '" name="' + formName + '" action="' + SERVICES_PATH + service.pathName + '" method="get" SearchForAddress="false">\n' # Parameters list tabDivs += '<div class="warning">\n' tabDivs += '<table id="' + formName + '_ParamsTable">\n' for param in service.restPathParams: tabDivs += self.tablePropertyRow(param, formName, u"REST", queryParams, onChangeProcCode, hasAddressTabs) for param in service.queryParams: tabDivs += self.tablePropertyRow(param, formName, u"Query", queryParams, onChangeProcCode, hasAddressTabs) tabDivs += '</table>\n' tabDivs += '</div>\n' tabDivs += '<br>' tabDivs += '<input style="float: right;" type="button" value="Nové zadání" onclick="clearInputs(\'%s\')">\n' % formName tabDivs += '<input style="float: right;" type="button" value="%s" onclick="%s">\n' % (service.sendButtonCaption, displayResultProcCode) tabDivs += '</form>\n' tabDivs += "</td>" tabDivs += '<td>' tabDivs += '<div id="%s_addressesDiv" class="AddressesDiv" title="Vyber adresu" isvisible="false" tabname="vstup"></div>' % formName tabDivs += getNoAddressAvailableHTML(formName) tabDivs += '<div id="%s_addressDiv" class="AddressDiv" isvisible="false" tabname="vstup"></div>' % formName tabDivs += '<textarea id=' + formName + '_textArea rows ="12" cols="50" class="RESULTTEXTAREA"></textarea></td>' tabDivs += "</tr></table>" tabDivs += "<a class = 'enhancedGUI' href='" + restPyURL + "testing" + service.pathName + ".html'>Výsledky testů</a>" url = configmodule.getHTMLDataURL() + service.pathName[1:] + ".png" tabDivs += '<p>\n<center><img width="80%" class="enhancedGUI" src="' + url + '"></center></p>\n' tabDivs += '</div>\n' i = i + 1 if configmodule.config.databaseIsOK: separateStr = "" inStr = "" else: separateStr = "{ disabled: [1, 2, 3, 4, 5, 6] }" inStr = ", disabled: [1, 2, 3, 4, 5, 6]" if tabIndex == 0: newStr = separateStr else: newStr = '{ active: %s %s }' % (str(tabIndex), inStr) result = result.replace("#TABSOPTIONS#", newStr) result = result.replace("#CONSOLELINES#", console.consoleLines + "\n" + console.infoLines) result = result.replace("#ISSUELINES#", getIssueHTML() + "\n") result = result.replace("<#TABCAPTIONS#/>", tabCaptions) result = result.replace("<#TABCAPTIONS#/>", tabCaptions) result = result.replace("<#TABDIVS#/>", tabDivs) result = result.replace("#USE_DATA_LISTS#", str(USE_DATA_LISTS).lower()) result = result.replace("#SCRIPT_NAME#", scriptName) result = result.replace("#DISABLEGUISWITCH#", str(configmodule.config.disableGUISwitch).lower()) result = result.replace("</body>", self.dataListHTML + "</body>") return result